From d3579131c80434941855ce9cf1ebaee85767a4aa Mon Sep 17 00:00:00 2001 From: Florian Loitsch Date: Thu, 2 Jun 2016 13:41:29 +0200 Subject: [PATCH] Avoid runtime type errors in checked mode for ChunkedConverters. R=lrn@google.com Review URL: https://codereview.chromium.org/2035473003 . --- sdk/lib/convert/ascii.dart | 8 ++++++-- sdk/lib/convert/base64.dart | 7 +++++-- sdk/lib/convert/converter.dart | 3 ++- sdk/lib/convert/html_escape.dart | 3 ++- sdk/lib/convert/json.dart | 10 +++++++--- sdk/lib/convert/line_splitter.dart | 3 ++- sdk/lib/convert/utf.dart | 7 +++++-- sdk/lib/io/data_transformer.dart | 4 +++- sdk/lib/io/string_transformer.dart | 6 ++++-- 9 files changed, 36 insertions(+), 15 deletions(-) diff --git a/sdk/lib/convert/ascii.dart b/sdk/lib/convert/ascii.dart index a0762107cc1..c954e643bab 100644 --- a/sdk/lib/convert/ascii.dart +++ b/sdk/lib/convert/ascii.dart @@ -69,7 +69,9 @@ class AsciiCodec extends Encoding { // Superclass for [AsciiEncoder] and [Latin1Encoder]. // Generalizes common operations that only differ by a mask; -class _UnicodeSubsetEncoder extends Converter> { +class _UnicodeSubsetEncoder extends Converter> + implements ChunkedConverter, String, List> { + final int _subsetMask; const _UnicodeSubsetEncoder(this._subsetMask); @@ -154,7 +156,9 @@ class _UnicodeSubsetEncoderSink extends StringConversionSinkBase { * This class converts Latin-1 bytes (lists of unsigned 8-bit integers) * to a string. */ -abstract class _UnicodeSubsetDecoder extends Converter, String> { +abstract class _UnicodeSubsetDecoder extends Converter, String> + implements ChunkedConverter, String, List, String> { + final bool _allowInvalid; final int _subsetMask; diff --git a/sdk/lib/convert/base64.dart b/sdk/lib/convert/base64.dart index 3fe1357fb92..0254f853dba 100644 --- a/sdk/lib/convert/base64.dart +++ b/sdk/lib/convert/base64.dart @@ -70,7 +70,9 @@ class Base64Codec extends Codec, String> { * * The results are ASCII strings using a restricted alphabet. */ -class Base64Encoder extends Converter, String> { +class Base64Encoder extends Converter, String> + implements ChunkedConverter, String, List, String> { + final bool _urlSafe; const Base64Encoder() : _urlSafe = false; @@ -340,7 +342,8 @@ class _Utf8Base64EncoderSink extends _Base64EncoderSink { * * The encoding is required to be properly padded. */ -class Base64Decoder extends Converter> { +class Base64Decoder extends Converter> + implements ChunkedConverter, String, List> { const Base64Decoder(); diff --git a/sdk/lib/convert/converter.dart b/sdk/lib/convert/converter.dart index dfcfcdf6f38..75d4cf0403a 100644 --- a/sdk/lib/convert/converter.dart +++ b/sdk/lib/convert/converter.dart @@ -52,7 +52,8 @@ abstract class Converter implements StreamTransformer/**/ { * * For a non-chunked conversion converts the input in sequence. */ -class _FusedConverter extends Converter { +class _FusedConverter extends Converter + implements ChunkedConverter { final Converter _first; final Converter _second; diff --git a/sdk/lib/convert/html_escape.dart b/sdk/lib/convert/html_escape.dart index ff74442e1c8..3a516bbeafa 100644 --- a/sdk/lib/convert/html_escape.dart +++ b/sdk/lib/convert/html_escape.dart @@ -152,7 +152,8 @@ class HtmlEscapeMode { * found to be easier to read if greater-than is also escaped whenever * less-than is. */ -class HtmlEscape extends Converter { +class HtmlEscape extends Converter + implements ChunkedConverter { /** The [HtmlEscapeMode] used by the converter. */ final HtmlEscapeMode mode; diff --git a/sdk/lib/convert/json.dart b/sdk/lib/convert/json.dart index 24931df1949..3d5ee82989b 100644 --- a/sdk/lib/convert/json.dart +++ b/sdk/lib/convert/json.dart @@ -159,7 +159,8 @@ class JsonCodec extends Codec { /** * This class converts JSON objects to strings. */ -class JsonEncoder extends Converter { +class JsonEncoder extends Converter + implements ChunkedConverter { /** * The string used for indention. * @@ -284,7 +285,9 @@ class JsonEncoder extends Converter { * a JSON string, and then UTF-8 encoding the string, but without * creating an intermediate string. */ -class JsonUtf8Encoder extends Converter> { +class JsonUtf8Encoder extends Converter> + implements ChunkedConverter, Object, List> { + /** Default buffer size used by the JSON-to-UTF-8 encoder. */ static const int DEFAULT_BUFFER_SIZE = 256; /** Indentation used in pretty-print mode, `null` if not pretty. */ @@ -470,7 +473,8 @@ class _JsonUtf8EncoderSink extends ChunkedConversionSink { /** * This class parses JSON strings and builds the corresponding objects. */ -class JsonDecoder extends Converter { +class JsonDecoder extends Converter + implements ChunkedConverter { final _Reviver _reviver; /** * Constructs a new JsonDecoder. diff --git a/sdk/lib/convert/line_splitter.dart b/sdk/lib/convert/line_splitter.dart index b728d8f2c2e..331527ecc2f 100644 --- a/sdk/lib/convert/line_splitter.dart +++ b/sdk/lib/convert/line_splitter.dart @@ -19,7 +19,8 @@ const int _CR = 13; */ class LineSplitter extends Converter>/*=Object*/ - implements Object/*=StreamTransformer*/ { + implements ChunkedConverter, String, String> + /*=StreamTransformer*/ { const LineSplitter(); diff --git a/sdk/lib/convert/utf.dart b/sdk/lib/convert/utf.dart index 69bb72cb0f9..aeee9ef8bf2 100644 --- a/sdk/lib/convert/utf.dart +++ b/sdk/lib/convert/utf.dart @@ -76,7 +76,8 @@ class Utf8Codec extends Encoding { * This class converts strings to their UTF-8 code units (a list of * unsigned 8-bit integers). */ -class Utf8Encoder extends Converter> { +class Utf8Encoder extends Converter> + implements ChunkedConverter, String, List> { const Utf8Encoder(); @@ -304,7 +305,9 @@ class _Utf8EncoderSink extends _Utf8Encoder with StringConversionSinkMixin { * This class converts UTF-8 code units (lists of unsigned 8-bit integers) * to a string. */ -class Utf8Decoder extends Converter, String> { +class Utf8Decoder extends Converter, String> + implements ChunkedConverter, String, List, String> { + final bool _allowMalformed; /** diff --git a/sdk/lib/io/data_transformer.dart b/sdk/lib/io/data_transformer.dart index 6a50af49f80..d908e674429 100644 --- a/sdk/lib/io/data_transformer.dart +++ b/sdk/lib/io/data_transformer.dart @@ -275,7 +275,9 @@ class GZipCodec extends Codec, List> { * The [ZLibEncoder] encoder is used by [ZLibCodec] and [GZipCodec] to compress * data. */ -class ZLibEncoder extends Converter, List> { +class ZLibEncoder extends Converter, List> + implements ChunkedConverter, List, List, List> { + /** * When true, `GZip` frames will be added to the compressed data. */ diff --git a/sdk/lib/io/string_transformer.dart b/sdk/lib/io/string_transformer.dart index ab17eafea12..1e540c35a23 100644 --- a/sdk/lib/io/string_transformer.dart +++ b/sdk/lib/io/string_transformer.dart @@ -42,7 +42,8 @@ class SystemEncoding extends Encoding { } } -class _WindowsCodePageEncoder extends Converter> { +class _WindowsCodePageEncoder extends Converter> + implements ChunkedConverter, String, List> { const _WindowsCodePageEncoder(); @@ -94,7 +95,8 @@ class _WindowsCodePageEncoderSink extends StringConversionSinkBase { } -class _WindowsCodePageDecoder extends Converter, String> { +class _WindowsCodePageDecoder extends Converter, String> + implements ChunkedConverter, String, List, String> { const _WindowsCodePageDecoder();