Fix line splitter (#62)

Replace use of LineSplitter with wrapper that correctly implements
the Converter<String, List<String>> interface.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 40a944a..d8719f5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+#### 2.3.5
+
+* Fix internal use of a cast which fails on Dart 2.0 .
+
 #### 2.3.4
 
 * Bumped maximum Dart SDK version to 2.0.0-dev.infinity
diff --git a/lib/src/backends/record_replay/codecs.dart b/lib/src/backends/record_replay/codecs.dart
index a974692..9754619 100644
--- a/lib/src/backends/record_replay/codecs.dart
+++ b/lib/src/backends/record_replay/codecs.dart
@@ -85,6 +85,32 @@
   }
 }
 
+/// A trivial conversion turning a Sink<List<String>> into a
+/// Sink<String>
+class _StringSinkWrapper implements Sink<String> {
+  final Sink<List<String>> _sink;
+  _StringSinkWrapper(this._sink);
+  @override
+  void add(String s) => _sink.add(<String>[s]);
+  @override
+  void close() => _sink.close();
+}
+
+/// An Converter version of the dart:convert LineSplitter (which in
+/// 2.0 no longer implements the Converter interface)
+class LineSplitterConverter extends Converter<String, List<String>> {
+  final LineSplitter _splitter = const LineSplitter();
+
+  /// Creates a new [LineSplitterConverter]
+  const LineSplitterConverter();
+
+  @override
+  List<String> convert(String input) => _splitter.convert(input);
+  @override
+  StringConversionSink startChunkedConversion(Sink<List<String>> sink) =>
+      _splitter.startChunkedConversion(new _StringSinkWrapper(sink));
+}
+
 /// Converter that leaves an object untouched.
 class Passthrough<T> extends Converter<T, T> {
   /// Creates a new [Passthrough].
diff --git a/lib/src/backends/record_replay/replay_file.dart b/lib/src/backends/record_replay/replay_file.dart
index 9b26a2c..869c72f 100644
--- a/lib/src/backends/record_replay/replay_file.dart
+++ b/lib/src/backends/record_replay/replay_file.dart
@@ -25,7 +25,7 @@
     Converter<String, RandomAccessFile> reviveRandomAccessFile =
         new ReviveRandomAccessFile(fileSystem);
     Converter<String, List<String>> lineSplitter =
-        const LineSplitter() as Converter<String, List<String>>;
+        const LineSplitterConverter();
     Converter<String, List<String>> blobToLines =
         blobToString.fuse(lineSplitter);
     Converter<String, Stream<List<int>>> blobToByteStream = blobToBytes
diff --git a/pubspec.yaml b/pubspec.yaml
index d5ab8bc..7484c4b 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: file
-version: 2.3.4
+version: 2.3.5
 authors:
 - Matan Lurey <matanl@google.com>
 - Yegor Jbanov <yjbanov@google.com>