Make PbMapMixin implement Map<String, dynamic>

A more clean way to get to strong mode

R=skybrian@google.com

Review URL: https://codereview.chromium.org//2019423002 .
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7c4dcc3..72fde19 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.5.1+4
+
+* Use a more refined implementation of `Map` in `PbMapMixin`
+
 ## 0.5.1+3
 
 * Performance: eliminate some dynamic calls.
diff --git a/lib/src/protobuf/mixins/map_mixin.dart b/lib/src/protobuf/mixins/map_mixin.dart
index 0032552..0928681 100644
--- a/lib/src/protobuf/mixins/map_mixin.dart
+++ b/lib/src/protobuf/mixins/map_mixin.dart
@@ -11,7 +11,7 @@
 ///
 /// This mixin is enabled via an option in
 /// dart_options.proto in dart-protoc-plugin.
-abstract class PbMapMixin implements Map {
+abstract class PbMapMixin implements Map<String, dynamic> {
   // GeneratedMessage properties and methods used by this mixin.
 
   BuilderInfo get info_;
@@ -29,8 +29,8 @@
   }
 
   @override
-  operator []=(key, val) {
-    var tag = getTagNumber(key as String);
+  void operator []=(String key, val) {
+    var tag = getTagNumber(key);
     if (tag == null) {
       throw new ArgumentError(
           "field '${key}' not found in ${info_.messageName}");
@@ -39,13 +39,13 @@
   }
 
   @override
-  get keys => info_.byName.keys;
+  Iterable<String> get keys => info_.byName.keys;
 
   @override
   bool containsKey(Object key) => info_.byName.containsKey(key);
 
   @override
-  get length => info_.byName.length;
+  int get length => info_.byName.length;
 
   @override
   remove(key) {
diff --git a/pubspec.yaml b/pubspec.yaml
index 2e205fc..40cc6b8 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: protobuf
-version: 0.5.1+3
+version: 0.5.1+4
 author: Dart Team <misc@dartlang.org>
 description: Runtime library for protobuf support.
 homepage: https://github.com/dart-lang/dart-protobuf
diff --git a/test/map_mixin_test.dart b/test/map_mixin_test.dart
index b732a96..ce0143a 100644
--- a/test/map_mixin_test.dart
+++ b/test/map_mixin_test.dart
@@ -15,7 +15,7 @@
 import 'mock_util.dart' show MockMessage, mockInfo;
 
 // A minimal protobuf implementation compatible with PbMapMixin.
-class Rec extends MockMessage with MapMixin, PbMapMixin {
+class Rec extends MockMessage with MapMixin<String, dynamic>, PbMapMixin {
   get info_ => _info;
   static final _info = mockInfo("Rec", () => new Rec());