diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3c7d38e..3f39873 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.6.2+7
+
+* Strong mode fixes.
+
 ## 0.6.2+6
 
 * Small bug fixes for https://github.com/dart-lang/web-components/issues/54.
diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..a10d4c5
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,2 @@
+analyzer:
+  strong-mode: true
diff --git a/lib/build/initializer_plugin.dart b/lib/build/initializer_plugin.dart
index cc8a7d2..1a004dd 100644
--- a/lib/build/initializer_plugin.dart
+++ b/lib/build/initializer_plugin.dart
@@ -235,7 +235,7 @@
         buffer.write(_evaluateExpression(expression, pluginData));
       } else {
         libraryPrefixes.putIfAbsent(
-          element.library, () => 'i${libraryPrefixes.length}');
+            element.library, () => 'i${libraryPrefixes.length}');
 
         buffer.write('${libraryPrefixes[element.library]}.');
         if (element is ClassElement) {
@@ -263,8 +263,7 @@
     return buffer.toString();
   }
 
-  _evaluateExpression(
-      Expression expression, InitializerPluginData pluginData) {
+  _evaluateExpression(Expression expression, InitializerPluginData pluginData) {
     var logger = pluginData.logger;
     var result = pluginData.resolver.evaluateConstant(
         pluginData.initializer.targetElement.library, expression);
diff --git a/lib/src/init_method.dart b/lib/src/init_method.dart
index ebc8f93..1ddb83c 100644
--- a/lib/src/init_method.dart
+++ b/lib/src/init_method.dart
@@ -8,6 +8,7 @@
 /// it shouldn't be used directly in annotations, instead use the `initMethod`
 /// singleton below.
 typedef dynamic _ZeroArg();
+
 class _InitMethod implements Initializer<_ZeroArg> {
   const _InitMethod();
 
diff --git a/lib/src/initializer.dart b/lib/src/initializer.dart
index bb50558..1b9f32f 100644
--- a/lib/src/initializer.dart
+++ b/lib/src/initializer.dart
@@ -42,7 +42,9 @@
   const LibraryIdentifier(this.name, this.package, this.path);
 
   bool operator ==(dynamic other) =>
-      other is LibraryIdentifier && name == other.name && package == other.package &&
+      other is LibraryIdentifier &&
+      name == other.name &&
+      package == other.package &&
       path == other.path;
 
   String toString() => '$name: $package:$path';
diff --git a/lib/src/mirror_loader.dart b/lib/src/mirror_loader.dart
index cbd2a60..95da50d 100644
--- a/lib/src/mirror_loader.dart
+++ b/lib/src/mirror_loader.dart
@@ -37,9 +37,7 @@
   /// Note: The [from] argument is only supported in the mirror_loader.dart. It
   /// is not supported statically.
   InitializationCrawler(this.typeFilter, this.customFilter, {Uri from})
-      : _rootLibrary = from == null
-          ? _root
-          : _libs[from] {
+      : _rootLibrary = from == null ? _root : _libs[from] {
     if (_rootLibrary == null) throw 'Unable to find library at $from.';
   }
 
@@ -124,10 +122,14 @@
   Iterable<DeclarationMirror> _sortedDeclarationsWithMetadata(
       LibraryMirror lib) {
     return new List()
-      ..addAll(_sortDeclarations(lib, lib.declarations.values
-          .where((d) => d is MethodMirror && d.metadata.isNotEmpty)))
-      ..addAll(_sortDeclarations(lib, lib.declarations.values
-          .where((d) => d is ClassMirror && d.metadata.isNotEmpty)));
+      ..addAll(_sortDeclarations(
+          lib,
+          lib.declarations.values
+              .where((d) => d is MethodMirror && d.metadata.isNotEmpty)))
+      ..addAll(_sortDeclarations(
+          lib,
+          lib.declarations.values
+              .where((d) => d is ClassMirror && d.metadata.isNotEmpty)));
   }
 
   List<DeclarationMirror> _sortDeclarations(
@@ -202,7 +204,8 @@
           throw _TOP_LEVEL_FUNCTIONS_ONLY;
         }
         annotatedValue = (declaration.owner as ObjectMirror)
-            .getField(declaration.simpleName).reflectee;
+            .getField(declaration.simpleName)
+            .reflectee;
       } else if (declaration is LibraryMirror) {
         var package;
         var filePath;
diff --git a/lib/transformer.dart b/lib/transformer.dart
index 25adeef..06ae76e 100644
--- a/lib/transformer.dart
+++ b/lib/transformer.dart
@@ -129,8 +129,7 @@
   // [entryPoint].
   void _replaceEntryWithBootstrap(Transform transform, dom.Document document,
       AssetId entryPoint, AssetId originalDartFile, AssetId newDartFile) {
-    var scripts = _getScripts(document)
-        .where((script) {
+    var scripts = _getScripts(document).where((script) {
       var assetId = uriToAssetId(entryPoint, _getScriptAttribute(script),
           transform.logger, script.sourceSpan);
       return assetId == originalDartFile;
@@ -258,6 +257,7 @@
               '(possibly transitive).');
         }
       }
+
       readSuperClassAnnotations(clazz.supertype);
       _readAnnotations(clazz);
     }
@@ -285,7 +285,8 @@
       if (e is PropertyAccessorElement) {
         // 'as dynamic' is because evaluationResult is a property on an impl class, e.g. one that
         // isn't supposed to be used externally.
-        return _isInitializer((e.variable as dynamic).evaluationResult.value.type);
+        return _isInitializer(
+            (e.variable as dynamic).evaluationResult.value.type);
       } else if (e is ConstructorElement) {
         return _isInitializer(e.returnType);
       }
diff --git a/pubspec.yaml b/pubspec.yaml
index 887267f..f2f354a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: initialize
-version: 0.6.2+6
+version: 0.6.2+7
 author: Polymer.dart Authors <web@dartlang.org>
 description: Generic building blocks for doing static initialization.
 homepage: https://github.com/dart-lang/initialize
diff --git a/test/deferred_library_test.dart b/test/deferred_library_test.dart
index 0bff187..e38542c 100644
--- a/test/deferred_library_test.dart
+++ b/test/deferred_library_test.dart
@@ -24,6 +24,7 @@
         expect(InitializeTracker.seen.length, 5);
       });
     });
-  }, skip: 'Should be skipped only in pub-serve mode, blocked on  '
-      'https://github.com/dart-lang/test/issues/388.');
+  },
+      skip: 'Should be skipped only in pub-serve mode, blocked on  '
+          'https://github.com/dart-lang/test/issues/388.');
 }
diff --git a/test/initializer_custom_filter_test.dart b/test/initializer_custom_filter_test.dart
index 302db1b..1911ee3 100644
--- a/test/initializer_custom_filter_test.dart
+++ b/test/initializer_custom_filter_test.dart
@@ -15,26 +15,34 @@
 main() {
   test('filter option limits which types of annotations will be ran', () {
     var originalSize;
-    return runPhase(1).then((_) {
-      // Even though Baz extends Bar, only Baz should be run.
-      expect(InitializeTracker.seen, [Baz]);
-    }).then((_) => runPhase(2)).then((_) {
-      expect(InitializeTracker.seen, [Baz, foo]);
-    }).then((_) => runPhase(3)).then((_) {
-      expect(InitializeTracker.seen, [Baz, foo, Foo]);
-    }).then((_) => runPhase(4)).then((_) {
-      expect(InitializeTracker.seen, [Baz, foo, Foo, Bar]);
-    }).then((_) {
-      originalSize = InitializeTracker.seen.length;
-    })
+    return runPhase(1)
+        .then((_) {
+          // Even though Baz extends Bar, only Baz should be run.
+          expect(InitializeTracker.seen, [Baz]);
+        })
+        .then((_) => runPhase(2))
+        .then((_) {
+          expect(InitializeTracker.seen, [Baz, foo]);
+        })
+        .then((_) => runPhase(3))
+        .then((_) {
+          expect(InitializeTracker.seen, [Baz, foo, Foo]);
+        })
+        .then((_) => runPhase(4))
+        .then((_) {
+          expect(InitializeTracker.seen, [Baz, foo, Foo, Bar]);
+        })
+        .then((_) {
+          originalSize = InitializeTracker.seen.length;
+        })
         .then((_) => runPhase(1))
         .then((_) => runPhase(2))
         .then((_) => runPhase(3))
         .then((_) => runPhase(4))
         .then((_) => run())
         .then((_) {
-      expect(InitializeTracker.seen.length, originalSize);
-    });
+          expect(InitializeTracker.seen.length, originalSize);
+        });
   });
 }
 
diff --git a/test/initializer_cycle_error_test.dart b/test/initializer_cycle_error_test.dart
index 365e64f..200a8ec 100644
--- a/test/initializer_cycle_error_test.dart
+++ b/test/initializer_cycle_error_test.dart
@@ -15,6 +15,7 @@
 main() {
   test('super class cycles are not supported', () {
     expect(run, throwsUnsupportedError);
-  }, skip: 'Should be skipped only in pub-serve mode, blocked on  '
-      'https://github.com/dart-lang/test/issues/388.');
+  },
+      skip: 'Should be skipped only in pub-serve mode, blocked on  '
+          'https://github.com/dart-lang/test/issues/388.');
 }
diff --git a/test/initializer_from_test.dart b/test/initializer_from_test.dart
index aa7172b..74449a6 100644
--- a/test/initializer_from_test.dart
+++ b/test/initializer_from_test.dart
@@ -29,11 +29,12 @@
     expect(InitializeTracker.seen.length, 2);
     // Don't know what the path will be, so have to explicitly check fields
     // and use an [endsWith] matcher for the path.
-    expect(InitializeTracker.seen[1].name,
-        #initialize.test.initializer_from_test);
+    expect(
+        InitializeTracker.seen[1].name, #initialize.test.initializer_from_test);
     expect(InitializeTracker.seen[1].package, isNull);
     expect(
         InitializeTracker.seen[1].path, endsWith('initializer_from_test.dart'));
-  }, skip: 'Should be skipped only in pub-serve mode, blocked on  '
-      'https://github.com/dart-lang/test/issues/388.');
+  },
+      skip: 'Should be skipped only in pub-serve mode, blocked on  '
+          'https://github.com/dart-lang/test/issues/388.');
 }
diff --git a/test/initializer_super_test.dart b/test/initializer_super_test.dart
index 512ef51..430d796 100644
--- a/test/initializer_super_test.dart
+++ b/test/initializer_super_test.dart
@@ -15,7 +15,13 @@
   // Run all initializers.
   return run().then((_) {
     test('annotations are seen in post-order with superclasses first', () {
-      var expectedNames = [A, C, B, E, D,];
+      var expectedNames = [
+        A,
+        C,
+        B,
+        E,
+        D,
+      ];
       expect(InitializeTracker.seen, expectedNames);
     });
   });
diff --git a/test/initializer_type_filter_test.dart b/test/initializer_type_filter_test.dart
index 87e0196..1cd57d3 100644
--- a/test/initializer_type_filter_test.dart
+++ b/test/initializer_type_filter_test.dart
@@ -20,16 +20,23 @@
   });
 
   test('filter option limits which types of annotations will be ran', () {
-    return run(typeFilter: const [_Adder]).then((_) {
-      expect(total, 2);
-    }).then((_) => run(typeFilter: const [_Subtractor])).then((_) {
-      expect(total, 0);
-    }).then((_) => run(typeFilter: const [_Adder])).then((_) {
-      // Sanity check, future calls should be no-ops
-      expect(total, 0);
-    }).then((_) => run(typeFilter: const [_Subtractor])).then((_) {
-      expect(total, 0);
-    });
+    return run(typeFilter: const [_Adder])
+        .then((_) {
+          expect(total, 2);
+        })
+        .then((_) => run(typeFilter: const [_Subtractor]))
+        .then((_) {
+          expect(total, 0);
+        })
+        .then((_) => run(typeFilter: const [_Adder]))
+        .then((_) {
+          // Sanity check, future calls should be no-ops
+          expect(total, 0);
+        })
+        .then((_) => run(typeFilter: const [_Subtractor]))
+        .then((_) {
+          expect(total, 0);
+        });
   });
 }
 
@@ -48,6 +55,7 @@
   @override
   initialize(_) => total++;
 }
+
 const adder = const _Adder();
 
 // Initializer that decrements `total` by one.
@@ -57,4 +65,5 @@
   @override
   initialize(_) => total--;
 }
+
 const subtractor = const _Subtractor();
diff --git a/test/transformer_test.dart b/test/transformer_test.dart
index 8342c03..c8e017f 100644
--- a/test/transformer_test.dart
+++ b/test/transformer_test.dart
@@ -19,14 +19,19 @@
 }
 
 void htmlEntryPointTests() {
-  var phases = [[new InitializeTransformer(['web/*.html'])]];
+  var phases = [
+    [
+      new InitializeTransformer(['web/*.html'])
+    ]
+  ];
 
   testPhases('basic', phases, {
     'a|web/index.html': '''
         <html><head></head><body>
           <script type="application/dart" src="index.dart"></script>
         </body></html>
-        '''.replaceAll('        ', ''),
+        '''
+        .replaceAll('        ', ''),
     'a|web/index.dart': '''
         library web_foo;
 
@@ -77,7 +82,8 @@
         <html><head></head><body>
           <script type="application/dart" src="index.initialize.dart"></script>
 
-        </body></html>'''.replaceAll('        ', ''),
+        </body></html>'''
+        .replaceAll('        ', ''),
     'a|web/index.initialize.dart': formatter.format('''
         import 'package:initialize/src/static_loader.dart';
         import 'package:initialize/initialize.dart';
@@ -109,7 +115,11 @@
 }
 
 void dartEntryPointTests() {
-  var phases = [[new InitializeTransformer(['web/index.dart'])]];
+  var phases = [
+    [
+      new InitializeTransformer(['web/index.dart'])
+    ]
+  ];
 
   testPhases('constructor arguments', phases, {
     'a|web/index.dart': '''
diff --git a/tool/all_tests.sh b/tool/all_tests.sh
index 312cda2..d5c23c1 100755
--- a/tool/all_tests.sh
+++ b/tool/all_tests.sh
@@ -7,6 +7,8 @@
 # Fast fail the script on failures.
 set -e
 
+dartanalyzer --fatal-warnings lib/initialize.dart lib/transformer.dart
+
 # Run the un-transformed command-line tests.
 dart test/deferred_library_test.dart
 dart test/init_method_test.dart
