diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 6c656c7..b96340e 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -155,8 +155,8 @@
         new ContextRoot(resourceProvider.convertPath('/project'), [],
             pathContext: resourceProvider.pathContext),
         sourceFactory,
-        new AnalysisOptionsImpl(),
-        enableKernelDriver: useCFE);
+        new AnalysisOptionsImpl()..useFastaParser = useCFE,
+        useCFE: useCFE);
     scheduler.start();
     AnalysisEngine.instance.logger = PrintLogger.instance;
   }
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 bf2de54..a7eeb84 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
@@ -300,6 +300,10 @@
 class _ControlFlowCompletionTest_UseCfe extends _ControlFlowCompletionTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_ifNoBlock() => super.test_ifNoBlock();
 }
 
 @reflectiveTest
@@ -838,6 +842,18 @@
 class _ExpressionCompletionTest_UseCfe extends _ExpressionCompletionTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_listAssign() => super.test_listAssign();
+
+  @failingTest
+  @override
+  test_listAssignMultiLine() => super.test_listAssignMultiLine();
+
+  @failingTest
+  @override
+  test_stringAssign() => super.test_stringAssign();
 }
 
 @reflectiveTest
@@ -1642,6 +1658,10 @@
 class _SimpleCompletionTest_UseCfe extends _SimpleCompletionTest {
   @override
   bool get useCFE => true;
+
+  @failingTest
+  @override
+  test_semicolonVar() => super.test_semicolonVar();
 }
 
 @reflectiveTest
diff --git a/pkg/analysis_server/test/services/correction/assist_test.dart b/pkg/analysis_server/test/services/correction/assist_test.dart
index fac75c7..9a80b9a 100644
--- a/pkg/analysis_server/test/services/correction/assist_test.dart
+++ b/pkg/analysis_server/test/services/correction/assist_test.dart
@@ -6317,49 +6317,11 @@
 
   @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
@@ -6609,11 +6571,6 @@
   @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 {
diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart
index b3f223d..dadcca6 100644
--- a/pkg/analyzer/lib/src/context/builder.dart
+++ b/pkg/analyzer/lib/src/context/builder.dart
@@ -200,7 +200,7 @@
         contextRoot,
         sf,
         options,
-        enableKernelDriver: useCFE,
+        useCFE: useCFE,
         kernelPlatformFolder: kernelPlatformFolder);
     // temporary plugin support:
     if (onCreateAnalysisDriver != null) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 45cd868..b07b1140 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -105,7 +105,7 @@
   /**
    * Whether kernel should be used to resynthesize elements.
    */
-  final bool enableKernelDriver;
+  final bool _useCFE;
 
   /**
    * The [Folder] with the `vm_platform.dill` file.
@@ -113,7 +113,7 @@
    * We use `vm_platform.dill`, because loading patches is not yet implemented,
    * and patches are not a part of SDK distribution.
    */
-  final Folder kernelPlatformFolder;
+  final Folder _kernelPlatformFolder;
 
   /**
    * The scheduler that schedules analysis work in this, and possibly other
@@ -351,15 +351,17 @@
       this.contextRoot,
       SourceFactory sourceFactory,
       this._analysisOptions,
-      {this.enableKernelDriver: false,
-      this.kernelPlatformFolder,
+      {bool useCFE: false,
+      Folder kernelPlatformFolder,
       PackageBundle sdkBundle,
       this.disableChangesAndCacheAllResults: false,
       SummaryDataStore externalSummaries})
       : _logger = logger,
         _sourceFactory = sourceFactory.clone(),
         _sdkBundle = sdkBundle,
-        _externalSummaries = externalSummaries {
+        _externalSummaries = externalSummaries,
+        _useCFE = useCFE,
+        _kernelPlatformFolder = kernelPlatformFolder {
     _createNewSession();
     _onResults = _resultController.stream.asBroadcastStream();
     _testView = new AnalysisDriverTestView(this);
@@ -1246,7 +1248,7 @@
           _testView.numOfAnalyzedLibraries++;
 
           LibraryAnalyzer analyzer;
-          if (enableKernelDriver) {
+          if (_useCFE) {
             kernelContext = await _createKernelContext(library);
             analyzer = new LibraryAnalyzer(
                 _logger,
@@ -1257,8 +1259,7 @@
                 kernelContext.analysisContext,
                 kernelContext.resynthesizer,
                 library,
-                enableKernelDriver: true,
-                useCFE: _analysisOptions.useFastaParser,
+                useCFE: true,
                 frontEndCompiler: _frontEndCompiler);
           } else {
             if (!_fsState.getFileForUri(Uri.parse('dart:core')).exists) {
@@ -1348,7 +1349,7 @@
       }
     }
 
-    if (enableKernelDriver) {
+    if (_useCFE) {
       var kernelContext = await _createKernelContext(library);
       try {
         CompilationUnitElement element =
@@ -1425,12 +1426,12 @@
    * changes.
    */
   void _createKernelDriver() {
-    if (enableKernelDriver) {
+    if (_useCFE) {
       _frontEndCompiler = new FrontEndCompiler(
           _logger,
           _byteStore,
           analysisOptions,
-          kernelPlatformFolder,
+          _kernelPlatformFolder,
           sourceFactory,
           fsState,
           _resourceProvider.pathContext);
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index d7f7bc9..5fad007 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -52,7 +52,6 @@
   final SourceFactory _sourceFactory;
   final FileState _library;
 
-  final bool _enableKernelDriver;
   final bool _useCFE;
   final FrontEndCompiler _frontEndCompiler;
 
@@ -82,11 +81,9 @@
       this._context,
       this._resynthesizer,
       this._library,
-      {bool enableKernelDriver: false,
-      bool useCFE: false,
+      {bool useCFE: false,
       FrontEndCompiler frontEndCompiler})
       : _typeProvider = _context.typeProvider,
-        _enableKernelDriver = enableKernelDriver,
         _useCFE = useCFE,
         _frontEndCompiler = frontEndCompiler;
 
@@ -556,7 +553,7 @@
     definingCompilationUnit.element = _libraryElement.definingCompilationUnit;
 
     bool matchNodeElement(Directive node, Element element) {
-      if (_enableKernelDriver) {
+      if (_useCFE) {
         return node.keyword.offset == element.nameOffset;
       } else {
         return node.offset == element.nameOffset;
@@ -567,7 +564,7 @@
 
     void reportErrorReportedByFrontEnd(
         ErrorCode errorCode, AstNode node, List<Object> arguments) {
-      if (!_enableKernelDriver) {
+      if (!_useCFE) {
         libraryErrorReporter.reportErrorForNode(errorCode, node, arguments);
       }
     }
@@ -701,8 +698,7 @@
       }
     }
 
-    new DeclarationResolver(enableKernelDriver: _enableKernelDriver)
-        .resolve(unit, unitElement);
+    new DeclarationResolver().resolve(unit, unitElement);
 
     if (_libraryElement.context.analysisOptions.previewDart2) {
       unit.accept(new AstRewriteVisitor(_context.typeSystem, _libraryElement,
@@ -737,8 +733,7 @@
   void _resolveFile2(FileState file, CompilationUnitImpl unit,
       CollectedResolution resolution) {
     CompilationUnitElement unitElement = unit.declaredElement;
-    new DeclarationResolver(enableKernelDriver: true, applyKernelTypes: true)
-        .resolve(unit, unitElement);
+    new DeclarationResolver(useCFE: true).resolve(unit, unitElement);
 
     var applierContext = new _ResolutionApplierContext(_resynthesizer,
         _typeProvider, _libraryElement, resolution, unit.localDeclarations);
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index ec91c2d..e12642a 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -27,8 +27,7 @@
  * any more complete than a [COMPILATION_UNIT_ELEMENT].
  */
 class DeclarationResolver extends RecursiveAstVisitor<Object> {
-  final bool _enableKernelDriver;
-  final bool _applyKernelTypes;
+  final bool _useCFE;
 
   /**
    * The compilation unit containing the AST nodes being visited.
@@ -51,10 +50,7 @@
    */
   ElementWalker _walker;
 
-  DeclarationResolver(
-      {bool enableKernelDriver: false, bool applyKernelTypes: false})
-      : _enableKernelDriver = enableKernelDriver,
-        _applyKernelTypes = applyKernelTypes;
+  DeclarationResolver({bool useCFE: false}) : _useCFE = useCFE;
 
   /**
    * Resolve the declarations within the given compilation [unit] to the
@@ -107,7 +103,7 @@
   @override
   Object visitClassDeclaration(ClassDeclaration node) {
     ClassElement element = _match(node.name, _walker.getClass());
-    if (_applyKernelTypes) {
+    if (_useCFE) {
       node.name.staticType = _typeProvider.typeType;
     }
     _walk(new ElementWalker.forClass(element), () {
@@ -120,7 +116,7 @@
   @override
   Object visitClassTypeAlias(ClassTypeAlias node) {
     ClassElement element = _match(node.name, _walker.getClass());
-    if (_applyKernelTypes) {
+    if (_useCFE) {
       node.name.staticType = _typeProvider.typeType;
     }
     _walk(new ElementWalker.forClass(element), () {
@@ -139,7 +135,7 @@
       super.visitConstructorDeclaration(node);
     });
     resolveMetadata(node, node.metadata, element);
-    if (_applyKernelTypes) {
+    if (_useCFE) {
       _applyTypeToIdentifier(node.returnType, element.returnType);
       node.name?.staticType = element.type;
     }
@@ -189,7 +185,7 @@
   @override
   Object visitEnumDeclaration(EnumDeclaration node) {
     ClassElement element = _match(node.name, _walker.getEnum());
-    if (_applyKernelTypes) {
+    if (_useCFE) {
       node.name.staticType = _typeProvider.typeType;
       for (var constant in node.constants) {
         SimpleIdentifier name = constant.name;
@@ -266,7 +262,7 @@
 
   @override
   Object visitFormalParameterList(FormalParameterList node) {
-    if (_applyKernelTypes) {
+    if (_useCFE) {
       applyParameters(_enclosingLibrary, _walker._parameters, node);
       _walker.consumeParameters();
       return null;
@@ -293,7 +289,7 @@
             elementName: functionName.name + '=');
       }
     }
-    if (_applyKernelTypes) {
+    if (_useCFE) {
       if (node.isGetter) {
         node.name.staticType = element.returnType;
       } else if (node.isSetter) {
@@ -438,7 +434,7 @@
             elementName: nameOfMethod + '=');
       }
     }
-    if (_applyKernelTypes) {
+    if (_useCFE) {
       if (node.isGetter) {
         node.name.staticType = element.returnType;
       } else if (node.isSetter) {
@@ -517,8 +513,7 @@
 
   @override
   Object visitTypeParameter(TypeParameter node) {
-    if (node.parent.parent is FunctionTypedFormalParameter &&
-        !_enableKernelDriver) {
+    if (node.parent.parent is FunctionTypedFormalParameter && !_useCFE) {
       // Work around dartbug.com/28515.
       // TODO(paulberry): remove this once dartbug.com/28515 is fixed.
       var element = new TypeParameterElementImpl.forNode(node.name);
@@ -537,7 +532,7 @@
   @override
   Object visitVariableDeclaration(VariableDeclaration node) {
     VariableElement element = _match(node.name, _walker.getVariable());
-    if (_applyKernelTypes) {
+    if (_useCFE) {
       node.name.staticType = element.type;
     }
     Expression initializer = node.initializer;
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index bf4d06e..d10680e 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -699,7 +699,7 @@
           null,
           sourceFactory,
           options,
-          enableKernelDriver: enableKernelDriver);
+          useCFE: enableKernelDriver);
       scheduler.start();
     } else {
       if (packages != null) {
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index 62d34e0..3c1ae2c 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -106,7 +106,7 @@
         createAnalysisOptions(),
         disableChangesAndCacheAllResults: disableChangesAndCacheAllResults,
         externalSummaries: externalSummaries,
-        enableKernelDriver: useCFE);
+        useCFE: useCFE);
   }
 
   AnalysisOptionsImpl createAnalysisOptions() =>
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index 1dd323a..bc1731a 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -617,9 +617,8 @@
     PerformanceLog log = new PerformanceLog(null);
     AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler(log);
 
-    bool enableKernelDriver = options.useCFE;
     file_system.Folder kernelPlatformBinariesFolder;
-    if (enableKernelDriver && options.dartSdkPlatformBinariesPath != null) {
+    if (options.useCFE && options.dartSdkPlatformBinariesPath != null) {
       kernelPlatformBinariesFolder =
           resourceProvider.getFolder(options.dartSdkPlatformBinariesPath);
     }
@@ -633,7 +632,7 @@
         null,
         sourceFactory,
         analysisOptions,
-        enableKernelDriver: enableKernelDriver,
+        useCFE: options.useCFE,
         kernelPlatformFolder: kernelPlatformBinariesFolder);
     analysisDriver.results.listen((_) {});
     analysisDriver.exceptions.listen((_) {});
