Avoid runtime type errors in checked mode for ChunkedConverters.

R=lrn@google.com

Review URL: https://codereview.chromium.org/2035473003 .
This commit is contained in:
Florian Loitsch 2016-06-02 13:41:29 +02:00
parent c59d37032e
commit d3579131c8
9 changed files with 36 additions and 15 deletions

View file

@ -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<String, List<int>> {
class _UnicodeSubsetEncoder extends Converter<String, List<int>>
implements ChunkedConverter<String, List<int>, String, List<int>> {
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<List<int>, String> {
abstract class _UnicodeSubsetDecoder extends Converter<List<int>, String>
implements ChunkedConverter<List<int>, String, List<int>, String> {
final bool _allowInvalid;
final int _subsetMask;

View file

@ -70,7 +70,9 @@ class Base64Codec extends Codec<List<int>, String> {
*
* The results are ASCII strings using a restricted alphabet.
*/
class Base64Encoder extends Converter<List<int>, String> {
class Base64Encoder extends Converter<List<int>, String>
implements ChunkedConverter<List<int>, String, List<int>, 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<String, List<int>> {
class Base64Decoder extends Converter<String, List<int>>
implements ChunkedConverter<String, List<int>, String, List<int>> {
const Base64Decoder();

View file

@ -52,7 +52,8 @@ abstract class Converter<S, T> implements StreamTransformer/*<S, T>*/ {
*
* For a non-chunked conversion converts the input in sequence.
*/
class _FusedConverter<S, M, T> extends Converter<S, T> {
class _FusedConverter<S, M, T> extends Converter<S, T>
implements ChunkedConverter<S, T, S, T> {
final Converter<S, M> _first;
final Converter<M, T> _second;

View file

@ -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<String, String> {
class HtmlEscape extends Converter<String, String>
implements ChunkedConverter<String, String, String, String> {
/** The [HtmlEscapeMode] used by the converter. */
final HtmlEscapeMode mode;

View file

@ -159,7 +159,8 @@ class JsonCodec extends Codec<Object, String> {
/**
* This class converts JSON objects to strings.
*/
class JsonEncoder extends Converter<Object, String> {
class JsonEncoder extends Converter<Object, String>
implements ChunkedConverter<Object, String, Object, String> {
/**
* The string used for indention.
*
@ -284,7 +285,9 @@ class JsonEncoder extends Converter<Object, String> {
* a JSON string, and then UTF-8 encoding the string, but without
* creating an intermediate string.
*/
class JsonUtf8Encoder extends Converter<Object, List<int>> {
class JsonUtf8Encoder extends Converter<Object, List<int>>
implements ChunkedConverter<Object, List<int>, Object, List<int>> {
/** 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<Object> {
/**
* This class parses JSON strings and builds the corresponding objects.
*/
class JsonDecoder extends Converter<String, Object> {
class JsonDecoder extends Converter<String, Object>
implements ChunkedConverter<String, Object, String, Object> {
final _Reviver _reviver;
/**
* Constructs a new JsonDecoder.

View file

@ -19,7 +19,8 @@ const int _CR = 13;
*/
class LineSplitter
extends Converter<String, List<String>>/*=Object*/
implements Object/*=StreamTransformer<String, String>*/ {
implements ChunkedConverter<String, List<String>, String, String>
/*=StreamTransformer<String, String>*/ {
const LineSplitter();

View file

@ -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<String, List<int>> {
class Utf8Encoder extends Converter<String, List<int>>
implements ChunkedConverter<String, List<int>, String, List<int>> {
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<List<int>, String> {
class Utf8Decoder extends Converter<List<int>, String>
implements ChunkedConverter<List<int>, String, List<int>, String> {
final bool _allowMalformed;
/**

View file

@ -275,7 +275,9 @@ class GZipCodec extends Codec<List<int>, List<int>> {
* The [ZLibEncoder] encoder is used by [ZLibCodec] and [GZipCodec] to compress
* data.
*/
class ZLibEncoder extends Converter<List<int>, List<int>> {
class ZLibEncoder extends Converter<List<int>, List<int>>
implements ChunkedConverter<List<int>, List<int>, List<int>, List<int>> {
/**
* When true, `GZip` frames will be added to the compressed data.
*/

View file

@ -42,7 +42,8 @@ class SystemEncoding extends Encoding {
}
}
class _WindowsCodePageEncoder extends Converter<String, List<int>> {
class _WindowsCodePageEncoder extends Converter<String, List<int>>
implements ChunkedConverter<String, List<int>, String, List<int>> {
const _WindowsCodePageEncoder();
@ -94,7 +95,8 @@ class _WindowsCodePageEncoderSink extends StringConversionSinkBase {
}
class _WindowsCodePageDecoder extends Converter<List<int>, String> {
class _WindowsCodePageDecoder extends Converter<List<int>, String>
implements ChunkedConverter<List<int>, String, List<int>, String> {
const _WindowsCodePageDecoder();