diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index a270d2c..d57fbdb 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -60,6 +60,11 @@
 
   bool get previewDart2 => driver.analysisOptions.previewDart2;
 
+  /**
+   * Return `true` to enable the Dart 2.0 Common Front End.
+   */
+  bool get useCFE => false;
+
   void addFlutterPackage() {
     addMetaPackageSource();
     Folder libFolder = configureFlutterPackage(resourceProvider);
@@ -140,7 +145,8 @@
         new ContextRoot(resourceProvider.convertPath('/project'), [],
             pathContext: resourceProvider.pathContext),
         sourceFactory,
-        new AnalysisOptionsImpl());
+        new AnalysisOptionsImpl(),
+        enableKernelDriver: useCFE);
     scheduler.start();
     AnalysisEngine.instance.logger = PrintLogger.instance;
   }
diff --git a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
index d462006..347d0df 100644
--- a/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
+++ b/pkg/analysis_server/test/integration/edit/get_statement_completion_test.dart
@@ -61,5 +61,5 @@
 
   @override
   @failingTest
-  Future test_statement_completion() => super.test_statement_completion();
+  test_statement_completion() => super.test_statement_completion();
 }
diff --git a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
index 244b2b2..6d35673 100644
--- a/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/postfix/postfix_completion_test.dart
@@ -13,15 +13,25 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(_AssertTest);
+    defineReflectiveTests(_AssertTest_UseCfe);
     defineReflectiveTests(_ForTest);
+    defineReflectiveTests(_ForTest_UseCfe);
     defineReflectiveTests(_NegateTest);
+    defineReflectiveTests(_NegateTest_UseCfe);
     defineReflectiveTests(_IfTest);
+    defineReflectiveTests(_IfTest_UseCfe);
     defineReflectiveTests(_NotNullTest);
+    defineReflectiveTests(_NotNullTest_UseCfe);
     defineReflectiveTests(_ParenTest);
+    defineReflectiveTests(_ParenTest_UseCfe);
     defineReflectiveTests(_ReturnTest);
+    defineReflectiveTests(_ReturnTest_UseCfe);
     defineReflectiveTests(_SwitchTest);
+    defineReflectiveTests(_SwitchTest_UseCfe);
     defineReflectiveTests(_TryTest);
+    defineReflectiveTests(_TryTest_UseCfe);
     defineReflectiveTests(_WhileTest);
+    defineReflectiveTests(_WhileTest_UseCfe);
   });
 }
 
@@ -137,6 +147,12 @@
 }
 
 @reflectiveTest
+class _AssertTest_UseCfe extends _AssertTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _ForTest extends PostfixCompletionTest {
   @failingTest
   test_for_invalid() async {
@@ -267,6 +283,12 @@
 }
 
 @reflectiveTest
+class _ForTest_UseCfe extends _ForTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _IfTest extends PostfixCompletionTest {
   test_Else() async {
     await _prepareCompletion('.else', '''
@@ -324,6 +346,12 @@
 }
 
 @reflectiveTest
+class _IfTest_UseCfe extends _IfTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _NegateTest extends PostfixCompletionTest {
   test_negate() async {
     await _prepareCompletion('.not', '''
@@ -427,6 +455,12 @@
 }
 
 @reflectiveTest
+class _NegateTest_UseCfe extends _NegateTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _NotNullTest extends PostfixCompletionTest {
   test_nn() async {
     await _prepareCompletion('.nn', '''
@@ -535,6 +569,12 @@
 }
 
 @reflectiveTest
+class _NotNullTest_UseCfe extends _NotNullTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _ParenTest extends PostfixCompletionTest {
   test_paren() async {
     await _prepareCompletion('.par', '''
@@ -551,6 +591,12 @@
 }
 
 @reflectiveTest
+class _ParenTest_UseCfe extends _ParenTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _ReturnTest extends PostfixCompletionTest {
   test_return() async {
     await _prepareCompletion('.return', '''
@@ -567,6 +613,12 @@
 }
 
 @reflectiveTest
+class _ReturnTest_UseCfe extends _ReturnTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _SwitchTest extends PostfixCompletionTest {
   test_return() async {
     await _prepareCompletion('.switch', '''
@@ -585,6 +637,12 @@
 }
 
 @reflectiveTest
+class _SwitchTest_UseCfe extends _SwitchTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _TryTest extends PostfixCompletionTest {
   test_try() async {
     await _prepareCompletion('.try', '''
@@ -691,6 +749,12 @@
 }
 
 @reflectiveTest
+class _TryTest_UseCfe extends _TryTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _WhileTest extends PostfixCompletionTest {
   test_while() async {
     await _prepareCompletion('.while', '''
@@ -707,3 +771,9 @@
 ''');
   }
 }
+
+@reflectiveTest
+class _WhileTest_UseCfe extends _WhileTest {
+  @override
+  bool get useCFE => true;
+}
diff --git a/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart b/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
index e870159..bf2de54 100644
--- a/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
+++ b/pkg/analysis_server/test/services/completion/statement/statement_completion_test.dart
@@ -13,16 +13,27 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(_DeclarationCompletionTest);
+    defineReflectiveTests(_DeclarationCompletionTest_UseCfe);
     defineReflectiveTests(_ControlFlowCompletionTest);
+    defineReflectiveTests(_ControlFlowCompletionTest_UseCfe);
     defineReflectiveTests(_DoCompletionTest);
+    defineReflectiveTests(_DoCompletionTest_UseCfe);
     defineReflectiveTests(_ExpressionCompletionTest);
+    defineReflectiveTests(_ExpressionCompletionTest_UseCfe);
     defineReflectiveTests(_ForCompletionTest);
+    defineReflectiveTests(_ForCompletionTest_UseCfe);
     defineReflectiveTests(_ForEachCompletionTest);
+    defineReflectiveTests(_ForEachCompletionTest_UseCfe);
     defineReflectiveTests(_IfCompletionTest);
+    defineReflectiveTests(_IfCompletionTest_UseCfe);
     defineReflectiveTests(_SimpleCompletionTest);
+    defineReflectiveTests(_SimpleCompletionTest_UseCfe);
     defineReflectiveTests(_SwitchCompletionTest);
+    defineReflectiveTests(_SwitchCompletionTest_UseCfe);
     defineReflectiveTests(_TryCompletionTest);
+    defineReflectiveTests(_TryCompletionTest_UseCfe);
     defineReflectiveTests(_WhileCompletionTest);
+    defineReflectiveTests(_WhileCompletionTest_UseCfe);
   });
 }
 
@@ -286,6 +297,12 @@
 }
 
 @reflectiveTest
+class _ControlFlowCompletionTest_UseCfe extends _ControlFlowCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _DeclarationCompletionTest extends StatementCompletionTest {
   test_classNameNoBody() async {
     await _prepareCompletion(
@@ -453,6 +470,12 @@
 }
 
 @reflectiveTest
+class _DeclarationCompletionTest_UseCfe extends _DeclarationCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _DoCompletionTest extends StatementCompletionTest {
   test_emptyCondition() async {
     await _prepareCompletion(
@@ -585,6 +608,16 @@
 }
 
 @reflectiveTest
+class _DoCompletionTest_UseCfe extends _DoCompletionTest {
+  @override
+  bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_keywordOnly() => super.test_keywordOnly();
+}
+
+@reflectiveTest
 class _ExpressionCompletionTest extends StatementCompletionTest {
   test_listAssign() async {
     await _prepareCompletion(
@@ -802,6 +835,12 @@
 }
 
 @reflectiveTest
+class _ExpressionCompletionTest_UseCfe extends _ExpressionCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _ForCompletionTest extends StatementCompletionTest {
   test_emptyCondition() async {
     await _prepareCompletion(
@@ -1040,6 +1079,20 @@
 }
 
 @reflectiveTest
+class _ForCompletionTest_UseCfe extends _ForCompletionTest {
+  @override
+  bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_emptyInitializers() => super.test_emptyInitializers();
+
+  @failingTest
+  @override
+  test_emptyInitializersAfterBody() => super.test_emptyInitializersAfterBody();
+}
+
+@reflectiveTest
 class _ForEachCompletionTest extends StatementCompletionTest {
   test_emptyIdentifier() async {
     await _prepareCompletion(
@@ -1133,6 +1186,12 @@
 }
 
 @reflectiveTest
+class _ForEachCompletionTest_UseCfe extends _ForEachCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _IfCompletionTest extends StatementCompletionTest {
   test_afterCondition() async {
     await _prepareCompletion(
@@ -1353,6 +1412,16 @@
 }
 
 @reflectiveTest
+class _IfCompletionTest_UseCfe extends _IfCompletionTest {
+  @override
+  bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_keywordOnly() => super.test_keywordOnly();
+}
+
+@reflectiveTest
 class _SimpleCompletionTest extends StatementCompletionTest {
   test_enter() async {
     await _prepareCompletion(
@@ -1570,6 +1639,12 @@
 }
 
 @reflectiveTest
+class _SimpleCompletionTest_UseCfe extends _SimpleCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _SwitchCompletionTest extends StatementCompletionTest {
   test_caseNoColon() async {
     await _prepareCompletion(
@@ -1682,6 +1757,12 @@
 }
 
 @reflectiveTest
+class _SwitchCompletionTest_UseCfe extends _SwitchCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _TryCompletionTest extends StatementCompletionTest {
   test_catchOnly() async {
     await _prepareCompletion(
@@ -1938,6 +2019,12 @@
 }
 
 @reflectiveTest
+class _TryCompletionTest_UseCfe extends _TryCompletionTest {
+  @override
+  bool get useCFE => true;
+}
+
+@reflectiveTest
 class _WhileCompletionTest extends StatementCompletionTest {
   /*
      The implementation of completion for while-statements is shared with
@@ -1967,3 +2054,13 @@
         (s) => _after(s, 'while ('));
   }
 }
+
+@reflectiveTest
+class _WhileCompletionTest_UseCfe extends _WhileCompletionTest {
+  @override
+  bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_keywordOnly() => super.test_keywordOnly();
+}
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index e165000..1fe73ee 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -25,6 +25,7 @@
 main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AssistProcessorTest);
+    defineReflectiveTests(AssistProcessorTest_UseCFE);
   });
 }
 
@@ -6309,6 +6310,316 @@
   }
 }
 
+@reflectiveTest
+class AssistProcessorTest_UseCFE extends AssistProcessorTest {
+  @override
+  bool get useCFE => true;
+
+  // Many of these tests are failing because the CFE is not able to find the
+  // flutter package. It seems likely that there is a problem with the way the
+  // tests (or some underlying layer) is passing package resolution to the CFE.
+
+  @failingTest
+  @override
+  test_addTypeAnnotation_parameter_BAD_hasExplicitType() =>
+      super.test_addTypeAnnotation_parameter_BAD_hasExplicitType();
+
+  @failingTest
+  @override
+  test_addTypeAnnotation_parameter_BAD_noPropagatedType() =>
+      super.test_addTypeAnnotation_parameter_BAD_noPropagatedType();
+
+  @failingTest
+  @override
+  test_addTypeAnnotation_parameter_OK() =>
+      super.test_addTypeAnnotation_parameter_OK();
+
+  @failingTest
+  @override
+  test_convertToFinalField_OK_hasOverride() =>
+      super.test_convertToFinalField_OK_hasOverride();
+
+  @failingTest
+  @override
+  test_convertToFunctionSyntax_BAD_functionTypedParameter_insideParameterList() =>
+      super
+          .test_convertToFunctionSyntax_BAD_functionTypedParameter_insideParameterList();
+
+  @failingTest
+  @override
+  test_convertToFunctionSyntax_BAD_functionTypedParameter_noParameterTypes() =>
+      super
+          .test_convertToFunctionSyntax_BAD_functionTypedParameter_noParameterTypes();
+
+  @failingTest
+  @override
+  test_convertToFunctionSyntax_OK_functionTypedParameter_noReturnType_noTypeParameters() =>
+      super
+          .test_convertToFunctionSyntax_OK_functionTypedParameter_noReturnType_noTypeParameters();
+
+  @failingTest
+  @override
+  test_convertToFunctionSyntax_OK_functionTypedParameter_returnType() =>
+      super.test_convertToFunctionSyntax_OK_functionTypedParameter_returnType();
+
+  @failingTest
+  @override
+  test_convertToGetter_OK() => super.test_convertToGetter_OK();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_BAD_childUnresolved() =>
+      super.test_flutterConvertToChildren_BAD_childUnresolved();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_BAD_notOnChild() =>
+      super.test_flutterConvertToChildren_BAD_notOnChild();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_OK_multiLine() =>
+      super.test_flutterConvertToChildren_OK_multiLine();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_OK_newlineChild() =>
+      super.test_flutterConvertToChildren_OK_newlineChild();
+
+  @failingTest
+  @override
+  test_flutterConvertToChildren_OK_singleLine() =>
+      super.test_flutterConvertToChildren_OK_singleLine();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_BAD_notClass() =>
+      super.test_flutterConvertToStatefulWidget_BAD_notClass();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_BAD_notStatelessWidget() =>
+      super.test_flutterConvertToStatefulWidget_BAD_notStatelessWidget();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_BAD_notWidget() =>
+      super.test_flutterConvertToStatefulWidget_BAD_notWidget();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK() =>
+      super.test_flutterConvertToStatefulWidget_OK();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_empty() =>
+      super.test_flutterConvertToStatefulWidget_OK_empty();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_fields() =>
+      super.test_flutterConvertToStatefulWidget_OK_fields();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_getters() =>
+      super.test_flutterConvertToStatefulWidget_OK_getters();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_methods() =>
+      super.test_flutterConvertToStatefulWidget_OK_methods();
+
+  @failingTest
+  @override
+  test_flutterConvertToStatefulWidget_OK_tail() =>
+      super.test_flutterConvertToStatefulWidget_OK_tail();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetDown_BAD_last() =>
+      super.test_flutterMoveWidgetDown_BAD_last();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetDown_BAD_notInList() =>
+      super.test_flutterMoveWidgetDown_BAD_notInList();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetDown_OK() => super.test_flutterMoveWidgetDown_OK();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetUp_BAD_first() =>
+      super.test_flutterMoveWidgetUp_BAD_first();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetUp_BAD_notInList() =>
+      super.test_flutterMoveWidgetUp_BAD_notInList();
+
+  @failingTest
+  @override
+  test_flutterMoveWidgetUp_OK() => super.test_flutterMoveWidgetUp_OK();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_BAD_childrenMultipleIntoChild() =>
+      super.test_flutterRemoveWidget_BAD_childrenMultipleIntoChild();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childIntoChild_multiLine() =>
+      super.test_flutterRemoveWidget_OK_childIntoChild_multiLine();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childIntoChild_singleLine() =>
+      super.test_flutterRemoveWidget_OK_childIntoChild_singleLine();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childIntoChildren() =>
+      super.test_flutterRemoveWidget_OK_childIntoChildren();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childrenOneIntoChild() =>
+      super.test_flutterRemoveWidget_OK_childrenOneIntoChild();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_childrenOneIntoReturn() =>
+      super.test_flutterRemoveWidget_OK_childrenOneIntoReturn();
+
+  @failingTest
+  @override
+  test_flutterRemoveWidget_OK_intoChildren() =>
+      super.test_flutterRemoveWidget_OK_intoChildren();
+
+  @failingTest
+  @override
+  test_flutterSwapWithChild_OK() => super.test_flutterSwapWithChild_OK();
+
+  @failingTest
+  @override
+  test_flutterSwapWithChild_OK_notFormatted() =>
+      super.test_flutterSwapWithChild_OK_notFormatted();
+
+  @failingTest
+  @override
+  test_flutterSwapWithParent_OK() => super.test_flutterSwapWithParent_OK();
+
+  @failingTest
+  @override
+  test_flutterSwapWithParent_OK_notFormatted() =>
+      super.test_flutterSwapWithParent_OK_notFormatted();
+
+  @failingTest
+  @override
+  test_flutterSwapWithParent_OK_outerIsInChildren() =>
+      super.test_flutterSwapWithParent_OK_outerIsInChildren();
+
+  @failingTest
+  @override
+  test_flutterWrapCenter_BAD_onCenter() =>
+      super.test_flutterWrapCenter_BAD_onCenter();
+
+  @failingTest
+  @override
+  test_flutterWrapCenter_OK() => super.test_flutterWrapCenter_OK();
+
+  @failingTest
+  @override
+  test_flutterWrapCenter_OK_implicitNew() =>
+      super.test_flutterWrapCenter_OK_implicitNew();
+
+  @failingTest
+  @override
+  test_flutterWrapCenter_OK_namedConstructor() =>
+      super.test_flutterWrapCenter_OK_namedConstructor();
+
+  @failingTest
+  @override
+  test_flutterWrapColumn_OK_coveredByWidget() =>
+      super.test_flutterWrapColumn_OK_coveredByWidget();
+
+  @failingTest
+  @override
+  test_flutterWrapColumn_OK_coversWidgets() =>
+      super.test_flutterWrapColumn_OK_coversWidgets();
+
+  @failingTest
+  @override
+  test_flutterWrapColumn_OK_implicitNew() =>
+      super.test_flutterWrapColumn_OK_implicitNew();
+
+  @failingTest
+  @override
+  test_flutterWrapPadding_BAD_onPadding() =>
+      super.test_flutterWrapPadding_BAD_onPadding();
+
+  @failingTest
+  @override
+  test_flutterWrapPadding_OK() => super.test_flutterWrapPadding_OK();
+
+  @failingTest
+  @override
+  test_flutterWrapRow_OK() => super.test_flutterWrapRow_OK();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_BAD_multiLine() =>
+      super.test_flutterWrapWidget_BAD_multiLine();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_BAD_singleLine() =>
+      super.test_flutterWrapWidget_BAD_singleLine();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_multiLine() =>
+      super.test_flutterWrapWidget_OK_multiLine();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_multiLines() =>
+      super.test_flutterWrapWidget_OK_multiLines();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_multiLines_eol2() =>
+      super.test_flutterWrapWidget_OK_multiLines_eol2();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_singleLine1() =>
+      super.test_flutterWrapWidget_OK_singleLine1();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_singleLine2() =>
+      super.test_flutterWrapWidget_OK_singleLine2();
+
+  @failingTest
+  @override
+  test_flutterWrapWidget_OK_variable() =>
+      super.test_flutterWrapWidget_OK_variable();
+
+  @failingTest
+  @override
+  test_importAddShow_BAD_unresolvedUri() =>
+      super.test_importAddShow_BAD_unresolvedUri();
+
+  @failingTest
+  @override
+  test_removeTypeAnnotation_topLevelVariable_BAD_syntheticName() =>
+      super.test_removeTypeAnnotation_topLevelVariable_BAD_syntheticName();
+}
+
 class _DartAssistContextForValues implements DartAssistContext {
   @override
   final Source source;
