fix observe package to be strong mode clean

R=sigmund@google.com

Review URL: https://codereview.chromium.org//1838473002 .
diff --git a/.gitignore b/.gitignore
index e979170..f20a0d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
 .pub
 build/
 packages
+.packages
 
 # Or the files created by dart2js.
 *.dart.js
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 690c9a0..5785865 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+#### 0.13.5
+
+* Fixed strong mode errors and warnings
+
 #### 0.13.4
 
 * Fixed strong mode errors and warnings
diff --git a/lib/src/bind_property.dart b/lib/src/bind_property.dart
index 805507a..202859d 100644
--- a/lib/src/bind_property.dart
+++ b/lib/src/bind_property.dart
@@ -29,8 +29,7 @@
     Observable source, Symbol sourceName, void callback()) {
   return source.changes.listen((records) {
     for (var record in records) {
-      if (record is PropertyChangeRecord &&
-          (record as PropertyChangeRecord).name == sourceName) {
+      if (record is PropertyChangeRecord && record.name == sourceName) {
         callback();
         break;
       }
diff --git a/lib/transformer.dart b/lib/transformer.dart
index 20e8f1d..2fbbaa3 100644
--- a/lib/transformer.dart
+++ b/lib/transformer.dart
@@ -9,8 +9,8 @@
 import 'dart:async';
 
 import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/scanner.dart';
 import 'package:barback/barback.dart';
 import 'package:code_transformers/messages/build_logger.dart';
 import 'package:source_maps/refactor.dart';
@@ -27,6 +27,7 @@
   final bool releaseMode;
   final bool injectBuildLogsInOutput;
   final List<String> _files;
+
   ObservableTransformer(
       {List<String> files, bool releaseMode, bool injectBuildLogsInOutput})
       : _files = files,
@@ -34,6 +35,7 @@
         injectBuildLogsInOutput = injectBuildLogsInOutput == null
             ? releaseMode != true
             : injectBuildLogsInOutput;
+
   ObservableTransformer.asPlugin(BarbackSettings settings)
       : _files = _readFiles(settings.configuration['files']),
         releaseMode = settings.mode == BarbackMode.RELEASE,
@@ -41,10 +43,10 @@
 
   static List<String> _readFiles(value) {
     if (value == null) return null;
-    var files = [];
+    var files = <String>[];
     bool error;
     if (value is List) {
-      files = value;
+      files = new List<String>.from(value);
       error = value.any((e) => e is! String);
     } else if (value is String) {
       files = [value];
@@ -58,8 +60,8 @@
 
   // TODO(nweiz): This should just take an AssetId when barback <0.13.0 support
   // is dropped.
-  Future<bool> isPrimary(idOrAsset) {
-    var id = idOrAsset is AssetId ? idOrAsset : idOrAsset.id;
+  Future<bool> isPrimary(Object idOrAsset) {
+    var id = idOrAsset is AssetId ? idOrAsset : (idOrAsset as Asset).id;
     return new Future.value(id.extension == '.dart' &&
         (_files == null || _files.contains(id.path)));
   }
@@ -256,7 +258,7 @@
     id is PrefixedIdentifier ? id.identifier : id;
 
 bool _hasKeyword(Token token, Keyword keyword) =>
-    token is KeywordToken && token.keyword == keyword;
+    token?.type == TokenType.KEYWORD && token.lexeme == keyword.syntax;
 
 String _getOriginalCode(TextEditTransaction code, AstNode node) =>
     code.original.substring(node.offset, node.end);
@@ -282,7 +284,7 @@
   var thisInit = [];
   for (var param in ctor.parameters.parameters) {
     if (param is DefaultFormalParameter) {
-      param = param.parameter;
+      param = (param as DefaultFormalParameter).parameter;
     }
     if (param is FieldFormalParameter) {
       var name = param.identifier.name;
diff --git a/pubspec.yaml b/pubspec.yaml
index 606e414..340416a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: observe
-version: 0.13.4
+version: 0.13.5
 author: Polymer.dart Authors <web-ui-dev@dartlang.org>
 description: >
   Observable properties and objects for use in template_binding.
@@ -9,16 +9,16 @@
   user input into the DOM is immediately assigned to the model.
 homepage: https://www.dartlang.org/polymer-dart/
 dependencies:
-  analyzer: '^0.27.0'
+  analyzer: ^0.27.0
   barback: '>=0.14.2 <0.16.0'
-  func: '>=0.1.0 <0.2.0'
+  func: ^0.1.0
   logging: '>=0.9.0 <0.12.0'
   path: '>=0.9.0 <2.0.0'
   smoke: '>=0.1.0 <0.4.0'
   source_maps: '>=0.9.4 <0.11.0'
-  source_span: '>=1.0.0 <2.0.0'
-  utf: '>=0.9.0 <0.10.0'
-  code_transformers: '>=0.3.0 <0.5.0'
+  source_span: ^1.0.0
+  utf: ^0.9.0
+  code_transformers: ^0.4.2
 dev_dependencies:
   benchmark_harness: '>=1.0.0 <2.0.0'
   browser: any
@@ -26,7 +26,7 @@
   test: '^0.12.0'
   stack_trace: '>=0.9.1 <2.0.0'
 environment:
-  sdk: '>=1.8.0 <2.0.0'
+  sdk: ^1.9.0
 transformers:
 - observe:
     files:
diff --git a/test/observe_test.dart b/test/observe_test.dart
index 8c206ac..a262d7f 100644
--- a/test/observe_test.dart
+++ b/test/observe_test.dart
@@ -49,11 +49,14 @@
       var maxNumIterations = dirty_check.MAX_DIRTY_CHECK_CYCLES;
 
       var x = new WatcherModel(0);
-      var sub = x.changes.listen(expectAsync((_) {
+      int called = 0;
+      var sub = x.changes.listen((_) {
+        called++;
         x.value++;
-      }, count: maxNumIterations));
+      });
       x.value = 1;
       Observable.dirtyCheck();
+      expect(called, maxNumIterations);
       expect(x.value, maxNumIterations + 1);
       expect(messages.length, 2);
 
@@ -197,13 +200,13 @@
       expectPropertyChanges(records, 1);
       sub.cancel();
 
-      scheduleMicrotask(expectAsync(() {
+      scheduleMicrotask(() {
         subs.add(t.changes.listen(expectAsync((records) {
           expectPropertyChanges(records, 1);
         })));
         t.value = 777;
         scheduleMicrotask(Observable.dirtyCheck);
-      }));
+      });
     }));
     t.value = 42;
   });
diff --git a/test/observe_test_utils.dart b/test/observe_test_utils.dart
index 46d1b46..31f2e9d 100644
--- a/test/observe_test_utils.dart
+++ b/test/observe_test_utils.dart
@@ -42,8 +42,10 @@
 expectChanges(actual, expected, {reason}) =>
     expect('$actual', '$expected', reason: reason);
 
-List getListChangeRecords(List changes, int index) => changes
-    .where((c) => c.indexChanged(index)).toList();
+List<ListChangeRecord> getListChangeRecords(List changes, int index) =>
+    new List.from(changes.where((c) => c.indexChanged(index)));
 
-List getPropertyChangeRecords(List changes, Symbol property) => changes
-    .where((c) => c is PropertyChangeRecord && c.name == property).toList();
+List<PropertyChangeRecord> getPropertyChangeRecords(
+        List changes, Symbol property) =>
+    new List.from(
+        changes.where((c) => c is PropertyChangeRecord && c.name == property));
diff --git a/test/path_observer_test.dart b/test/path_observer_test.dart
index 6e45ac5..03c7ca2 100644
--- a/test/path_observer_test.dart
+++ b/test/path_observer_test.dart
@@ -161,7 +161,7 @@
     new PropertyPath('').setValueFrom(123, 42);
     expect(() => new PropertyPath('foo.bar.baz').setValueFrom(123, 42),
         _throwsNSM('foo'));
-    var foo = {};
+    Object foo = {};
     expect(new PathObserver(foo, '').value, foo);
 
     foo = new Object();
@@ -711,7 +711,7 @@
 }
 
 @reflectable
-class TestModel extends ChangeNotifier {
+class TestModel extends ChangeNotifier implements WatcherModel {
   var _a, _b, _c;
 
   TestModel([this._a, this._b, this._c]);
diff --git a/test/transformer_test.dart b/test/transformer_test.dart
index 7f9b9f1..1fb4bb2 100644
--- a/test/transformer_test.dart
+++ b/test/transformer_test.dart
@@ -126,21 +126,20 @@
 }
 
 /// Helper that applies the transform by creating mock assets.
-Future<String> _transform(String code) {
-  return Chain.capture(() {
+Future _transform(String code) {
+  return Chain.capture(() async {
     var id = new AssetId('foo', 'a/b/c.dart');
     var asset = new Asset.fromString(id, code);
     var transformer = new ObservableTransformer();
-    return transformer.isPrimary(asset).then((isPrimary) {
-      expect(isPrimary, isTrue);
-      var transform = new _MockTransform(asset);
-      return transformer.apply(transform).then((_) {
-        expect(transform.outs, hasLength(2));
-        expect(transform.outs[0].id, id);
-        expect(transform.outs[1].id, id.addExtension('._buildLogs.1'));
-        return transform.outs.first.readAsString();
-      });
-    });
+    bool isPrimary = await transformer.isPrimary(asset);
+    expect(isPrimary, isTrue);
+    var transform = new _MockTransform(asset);
+    await transformer.apply(transform);
+
+    expect(transform.outs, hasLength(2));
+    expect(transform.outs[0].id, id);
+    expect(transform.outs[1].id, id.addExtension('._buildLogs.1'));
+    return transform.outs.first.readAsString();
   });
 }