diff --git a/bin/dartdoc.dart b/bin/dartdoc.dart
index 9814648..2b76997 100644
--- a/bin/dartdoc.dart
+++ b/bin/dartdoc.dart
@@ -13,8 +13,8 @@
 import 'package:dartdoc/src/logging.dart';
 import 'package:stack_trace/stack_trace.dart';
 
-class DartdocProgramOptionContext extends DartdocOptionContext
-    with LoggingContext, GeneratorContext {
+class DartdocProgramOptionContext extends DartdocGeneratorOptionContext
+    with LoggingContext {
   DartdocProgramOptionContext(DartdocOptionSet optionSet, Directory dir)
       : super(optionSet, dir);
 
diff --git a/lib/dartdoc.dart b/lib/dartdoc.dart
index 66bb355..df2e0ba 100644
--- a/lib/dartdoc.dart
+++ b/lib/dartdoc.dart
@@ -39,6 +39,14 @@
 // Update when pubspec version changes.
 const String dartdocVersion = '0.19.1-dev';
 
+/// Helper class to initialize the default generators since they require
+/// GeneratorContext.
+class DartdocGeneratorOptionContext extends DartdocOptionContext
+    with GeneratorContext {
+  DartdocGeneratorOptionContext(DartdocOptionSet optionSet, Directory dir)
+      : super(optionSet, dir);
+}
+
 /// Generates Dart documentation for all public Dart libraries in the given
 /// directory.
 class Dartdoc extends PackageBuilder {
@@ -57,9 +65,9 @@
 
   /// An asynchronous factory method that builds Dartdoc's file writers
   /// and returns a Dartdoc object with them.
-  static withDefaultGenerators(DartdocOptionContext config) async {
+  static withDefaultGenerators(DartdocGeneratorOptionContext config) async {
     List<Generator> generators =
-        await initGenerators(config as GeneratorContext);
+        await initGenerators(config);
     return new Dartdoc._(config, generators);
   }
 
@@ -294,7 +302,7 @@
     // The package index isn't supposed to be in the search, so suppress the
     // warning.
     found.add(indexPath);
-    for (Map<String, String> entry in jsonData) {
+    for (Map<String, dynamic> entry in jsonData) {
       if (entry.containsKey('href')) {
         String entryPath = pathLib.joinAll([origin, entry['href']]);
         if (!visited.contains(entryPath)) {
diff --git a/lib/src/model.dart b/lib/src/model.dart
index 3e4c982..ffb2aef 100644
--- a/lib/src/model.dart
+++ b/lib/src/model.dart
@@ -1320,7 +1320,7 @@
   }
 
   @override
-  List<EnumField> get documentationFrom {
+  List<ModelElement> get documentationFrom {
     if (name == 'values' && name == 'index') return [this];
     return super.documentationFrom;
   }
diff --git a/pubspec.lock b/pubspec.lock
index 00dac62..9f4ceba 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -105,7 +105,7 @@
       name: grinder
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.8.1"
+    version: "0.8.2"
   html:
     dependency: "direct main"
     description:
@@ -203,7 +203,7 @@
       name: mustache4dart
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.1"
+    version: "2.1.2"
   node_preamble:
     dependency: transitive
     description:
@@ -401,4 +401,4 @@
     source: hosted
     version: "2.1.13"
 sdks:
-  dart: ">=2.0.0-dev.23.0 <=2.0.0-dev.54.0"
+  dart: ">=2.0.0-dev.23.0 <=2.0.0-dev.55.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index ac12668..ecbab4f 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -17,7 +17,7 @@
   http_parser: '>=3.0.3 <4.0.0'
   logging: ^0.11.3+1
   markdown: ^2.0.0
-  mustache4dart: ^2.1.1
+  mustache4dart: ^2.1.2
   package_config: '>=0.1.5 <2.0.0'
   path: ^1.3.0
   pub_semver: ^1.3.7
@@ -28,7 +28,7 @@
   yaml: ^2.1.0
 dev_dependencies:
   dhttpd: ^2.0.0
-  grinder: ^0.8.1
+  grinder: ^0.8.2
   io: ^0.3.0
   http: ^0.11.0
   meta: ^1.0.0
diff --git a/test/dartdoc_test.dart b/test/dartdoc_test.dart
index 6499e38..f03f0a6 100644
--- a/test/dartdoc_test.dart
+++ b/test/dartdoc_test.dart
@@ -16,7 +16,7 @@
 import 'src/utils.dart';
 
 void main() {
-  group('dartdoc without generators', () {
+  group('dartdoc with generators', () {
     Directory tempDir;
     List<String> outputParam;
     setUp(() {
@@ -28,12 +28,12 @@
       delete(tempDir);
     });
 
-    Future<DartdocOptionContext> contextFromArgvTemp(List<String> argv) async {
-      return await contextFromArgv(argv..addAll(outputParam));
+    Future<DartdocGeneratorOptionContext> generatorContextFromArgvTemp(List<String> argv) async {
+      return await generatorContextFromArgv(argv..addAll(outputParam));
     }
 
     test('basic interlinking test', () async {
-      Dartdoc dartdoc = new Dartdoc.withoutGenerators(await contextFromArgvTemp(
+      Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(await generatorContextFromArgvTemp(
           ['--input', testPackageDir.path, '--link-to-remote']));
       DartdocResults results = await dartdoc.generateDocs();
       PackageGraph p = results.packageGraph;
@@ -60,10 +60,11 @@
           contains(stringLink));
     });
 
+
     test('generate docs for ${pathLib.basename(testPackageDir.path)} works',
         () async {
-      Dartdoc dartdoc = new Dartdoc.withoutGenerators(
-          await contextFromArgvTemp(['--input', testPackageDir.path]));
+      Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(
+          await generatorContextFromArgvTemp(['--input', testPackageDir.path]));
 
       DartdocResults results = await dartdoc.generateDocs();
       expect(results.packageGraph, isNotNull);
@@ -77,8 +78,8 @@
 
     test('generate docs for ${pathLib.basename(testPackageBadDir.path)} fails',
         () async {
-      Dartdoc dartdoc = new Dartdoc.withoutGenerators(
-          await contextFromArgvTemp(['--input', testPackageBadDir.path]));
+      Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(
+          await generatorContextFromArgvTemp(['--input', testPackageBadDir.path]));
 
       try {
         await dartdoc.generateDocs();
@@ -89,8 +90,8 @@
     });
 
     test('generate docs for a package that does not have a readme', () async {
-      Dartdoc dartdoc = new Dartdoc.withoutGenerators(
-          await contextFromArgvTemp(['--input', testPackageWithNoReadme.path]));
+      Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(
+          await generatorContextFromArgvTemp(['--input', testPackageWithNoReadme.path]));
 
       DartdocResults results = await dartdoc.generateDocs();
       expect(results.packageGraph, isNotNull);
@@ -103,7 +104,7 @@
     });
 
     test('generate docs including a single library', () async {
-      Dartdoc dartdoc = new Dartdoc.withoutGenerators(await contextFromArgvTemp(
+      Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(await generatorContextFromArgvTemp(
           ['--input', testPackageDir.path, '--include', 'fake']));
 
       DartdocResults results = await dartdoc.generateDocs();
@@ -117,7 +118,7 @@
     });
 
     test('generate docs excluding a single library', () async {
-      Dartdoc dartdoc = new Dartdoc.withoutGenerators(await contextFromArgvTemp(
+      Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(await generatorContextFromArgvTemp(
           ['--input', testPackageDir.path, '--exclude', 'fake']));
 
       DartdocResults results = await dartdoc.generateDocs();
@@ -134,7 +135,7 @@
     test('generate docs for package with embedder yaml', () async {
       PackageMeta meta = new PackageMeta.fromDir(testPackageWithEmbedderYaml);
       if (meta.needsPubGet) meta.runPubGet();
-      Dartdoc dartdoc = new Dartdoc.withoutGenerators(await contextFromArgvTemp(
+      Dartdoc dartdoc = await Dartdoc.withDefaultGenerators(await generatorContextFromArgvTemp(
           ['--input', testPackageWithEmbedderYaml.path]));
 
       DartdocResults results = await dartdoc.generateDocs();
diff --git a/test/src/utils.dart b/test/src/utils.dart
index 482ee9f..993d0c0 100644
--- a/test/src/utils.dart
+++ b/test/src/utils.dart
@@ -8,6 +8,7 @@
 import 'dart:io';
 
 import 'package:dartdoc/dartdoc.dart';
+import 'package:dartdoc/src/html/html_generator.dart';
 import 'package:dartdoc/src/model.dart';
 import 'package:dartdoc/src/package_meta.dart';
 
@@ -25,6 +26,17 @@
 final Directory testPackageWithNoReadme =
     new Directory('testing/test_package_small');
 
+
+/// Convenience factory to build a [DartdocGeneratorOptionContext] and associate
+/// it with a [DartdocOptionSet] based on the current working directory.
+Future<DartdocGeneratorOptionContext> generatorContextFromArgv(List<String> argv) async {
+  DartdocOptionSet optionSet = await DartdocOptionSet
+      .fromOptionGenerators('dartdoc', [createDartdocOptions, createGeneratorOptions]);
+  optionSet.parseArguments(argv);
+  return new DartdocGeneratorOptionContext(optionSet, Directory.current);
+}
+
+
 /// Convenience factory to build a [DartdocOptionContext] and associate it with a
 /// [DartdocOptionSet] based on the current working directory.
 Future<DartdocOptionContext> contextFromArgv(List<String> argv) async {
diff --git a/tool/grind.dart b/tool/grind.dart
index d38f124..2d38b54 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -734,10 +734,7 @@
   // sdk#32901 is really bad on Windows.
   for (File dartFile in testFiles
       .where((f) =>
-          !f.path.endsWith('html_generator_test.dart') && !Platform.isWindows)
-      .where((f) =>
-          // grinder stopped working with preview-dart-2.
-          !f.path.endsWith('grind_test.dart'))) {
+          !f.path.endsWith('html_generator_test.dart') && !Platform.isWindows)) {
     // absolute path to work around dart-lang/sdk#32901
     await testFutures.addFuture(new SubprocessLauncher(
             'dart2-${pathLib.basename(dartFile.absolute.path)}')
