update with strong_mode clean proto generation
diff --git a/.analysis_options b/.analysis_options
index f3264a6..204d2dc 100644
--- a/.analysis_options
+++ b/.analysis_options
@@ -1,5 +1,5 @@
 analyzer:
- strong-mode: false # Change to true once protobuf output is compatible.
+ strong-mode: true
 linter:
   rules:
     - always_declare_return_types
diff --git a/lib/src/worker_protocol.pb.dart b/lib/src/worker_protocol.pb.dart
index fd7a46a..ed42eb6 100644
--- a/lib/src/worker_protocol.pb.dart
+++ b/lib/src/worker_protocol.pb.dart
@@ -11,8 +11,8 @@
 
 class Input extends GeneratedMessage {
   static final BuilderInfo _i = new BuilderInfo('Input')
-    ..a(1, 'path', PbFieldType.OS)
-    ..a(2, 'digest', PbFieldType.OY)
+    ..a/*<String>*/(1, 'path', PbFieldType.OS)
+    ..a/*<List<int>>*/(2, 'digest', PbFieldType.OY)
     ..hasRequiredFields = false;
 
   Input() : super();
@@ -55,8 +55,8 @@
 
 class WorkRequest extends GeneratedMessage {
   static final BuilderInfo _i = new BuilderInfo('WorkRequest')
-    ..p(1, 'arguments', PbFieldType.PS)
-    ..pp(2, 'inputs', PbFieldType.PM, Input.$checkItem, Input.create)
+    ..p/*<String>*/(1, 'arguments', PbFieldType.PS)
+    ..pp/*<Input>*/(2, 'inputs', PbFieldType.PM, Input.$checkItem, Input.create)
     ..hasRequiredFields = false;
 
   WorkRequest() : super();
@@ -89,8 +89,8 @@
 
 class WorkResponse extends GeneratedMessage {
   static final BuilderInfo _i = new BuilderInfo('WorkResponse')
-    ..a(1, 'exitCode', PbFieldType.O3)
-    ..a(2, 'output', PbFieldType.OS)
+    ..a/*<int>*/(1, 'exitCode', PbFieldType.O3)
+    ..a/*<String>*/(2, 'output', PbFieldType.OS)
     ..hasRequiredFields = false;
 
   WorkResponse() : super();
diff --git a/lib/testing.dart b/lib/testing.dart
index 79344ae..af65ede 100644
--- a/lib/testing.dart
+++ b/lib/testing.dart
@@ -40,10 +40,12 @@
   }
 
   @override
-  StreamSubscription listen(onData(List<int> bytes),
+  StreamSubscription<List<int>> listen(onData(List<int> bytes),
       {Function onError, void onDone(), bool cancelOnError}) {
     return _controller.stream.listen(onData,
-        onError: onError, onDone: onDone, cancelOnError: cancelOnError);
+        onError: onError,
+        onDone: onDone,
+        cancelOnError: cancelOnError) as StreamSubscription<List<int>>;
   }
 
   @override
diff --git a/test/message_grouper_test.dart b/test/message_grouper_test.dart
index 60e7c33..54e08b5 100644
--- a/test/message_grouper_test.dart
+++ b/test/message_grouper_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:async';
+import 'dart:io';
 
 import 'package:test/test.dart';
 
@@ -12,15 +13,15 @@
 
 void main() {
   group('AsyncMessageGrouper', () {
-    runTests((stdinStream) => new AsyncMessageGrouper(stdinStream));
+    runTests((Stdin stdinStream) => new AsyncMessageGrouper(stdinStream));
   });
 
   group('SyncMessageGrouper', () {
-    runTests((stdinStream) => new SyncMessageGrouper(stdinStream));
+    runTests((Stdin stdinStream) => new SyncMessageGrouper(stdinStream));
   });
 }
 
-void runTests(messageGrouperFactory) {
+void runTests(messageGrouperFactory(Stdin stdinStream)) {
   // AsyncMessageGrouper or SyncMessageGrouper
   var messageGrouper;