diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 326c869..a7ea8fd 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -484,7 +484,9 @@
           }
 
           var optionsFile = analysisContext.contextRoot.optionsFile;
-          if (optionsFile != null) {
+
+          if (optionsFile != null &&
+              analysisContext.contextRoot.isAnalyzed(optionsFile.path)) {
             _analyzeAnalysisOptionsYaml(driver, optionsFile.path);
           }
 
@@ -497,7 +499,8 @@
 
           var pubspecFile =
               rootFolder.getChildAssumingFile(file_paths.pubspecYaml);
-          if (pubspecFile.exists) {
+          if (pubspecFile.exists &&
+              analysisContext.contextRoot.isAnalyzed(pubspecFile.path)) {
             _analyzePubspecYaml(driver, pubspecFile.path);
           }
         }
diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart
index 1ad43e5..8705302 100644
--- a/pkg/analysis_server/test/domain_analysis_test.dart
+++ b/pkg/analysis_server/test/domain_analysis_test.dart
@@ -1223,6 +1223,30 @@
     ]);
   }
 
+  Future<void> test_setRoots_notDartFile_analysisOptions_excluded() async {
+    deleteTestPackageAnalysisOptionsFile();
+    var a_path = '$testPackageLibPath/a.dart';
+    var options_path = '$testPackageRootPath/analysis_options.yaml';
+
+    newFile2(a_path, 'error');
+
+    // 'analysis_options.yaml' that has an error and excludes itself.
+    newFile2(options_path, '''
+analyzer:
+  exclude:
+    - analysis_options.yaml
+  error:
+''');
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+
+    _assertAnalyzedFiles(
+      hasErrors: [a_path],
+      notAnalyzed: [options_path],
+    );
+  }
+
   Future<void> test_setRoots_notDartFile_androidManifestXml() async {
     var path = '$testPackageRootPath/AndroidManifest.xml';
 
@@ -1253,6 +1277,35 @@
     assertHasErrors(path);
   }
 
+  Future<void> test_setRoots_notDartFile_pubspec_excluded() async {
+    deleteTestPackageAnalysisOptionsFile();
+    var a_path = '$testPackageLibPath/a.dart';
+    var pubspec_path = '$testPackageRootPath/pubspec.yaml';
+    var options_path = '$testPackageRootPath/analysis_options.yaml';
+
+    newFile2(a_path, 'error');
+
+    writeTestPackagePubspecYamlFile('''
+name:
+  - error
+''');
+
+    // 'analysis_options.yaml' that excludes pubspec.yaml.
+    newFile2(options_path, '''
+analyzer:
+  exclude:
+    - pubspec.yaml
+''');
+
+    await setRoots(included: [workspaceRootPath], excluded: []);
+    await server.onAnalysisComplete;
+
+    _assertAnalyzedFiles(
+      hasErrors: [a_path],
+      notAnalyzed: [pubspec_path],
+    );
+  }
+
   Future<void> test_setRoots_packageConfigJsonFile() async {
     var aaaRootPath = '/packages/aaa';
     var a_path = '$aaaRootPath/lib/a.dart';
diff --git a/pkg/analyzer/test/src/dart/analysis/context_root_test.dart b/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
index 7f8f853..95d12bc 100644
--- a/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/context_root_test.dart
@@ -113,6 +113,26 @@
     );
   }
 
+  test_isAnalyzed_explicitlyExcluded_byFile() {
+    var excludePath = convertPath('/test/root/exclude/c.dart');
+    var siblingPath = convertPath('/test/root/exclude/d.dart');
+    contextRoot.excluded.add(newFile2(excludePath, ''));
+    expect(contextRoot.isAnalyzed(excludePath), isFalse);
+    expect(contextRoot.isAnalyzed(siblingPath), isTrue);
+  }
+
+  test_isAnalyzed_explicitlyExcluded_byFile_analysisOptions() {
+    var excludePath = convertPath('/test/root/analysis_options.yaml');
+    contextRoot.excluded.add(newFile2(excludePath, ''));
+    expect(contextRoot.isAnalyzed(excludePath), isFalse);
+  }
+
+  test_isAnalyzed_explicitlyExcluded_byFile_pubspec() {
+    var excludePath = convertPath('/test/root/pubspec.yaml');
+    contextRoot.excluded.add(newFile2(excludePath, ''));
+    expect(contextRoot.isAnalyzed(excludePath), isFalse);
+  }
+
   test_isAnalyzed_explicitlyExcluded_byFolder() {
     String excludePath = convertPath('/test/root/exclude');
     String filePath = convertPath('/test/root/exclude/root.dart');
diff --git a/pkg/dds/test/devtools_server/devtools_server_driver.dart b/pkg/dds/test/devtools_server/devtools_server_driver.dart
index a5d44b8..9f56b81 100644
--- a/pkg/dds/test/devtools_server/devtools_server_driver.dart
+++ b/pkg/dds/test/devtools_server/devtools_server_driver.dart
@@ -66,7 +66,7 @@
     final script =
         Platform.script.resolveUri(Uri.parse('./serve_devtools.dart'));
     final args = [
-      script.path,
+      script.toFilePath(),
       '--machine',
       '--port',
       '$port',
@@ -202,7 +202,7 @@
   Future<void> startApp() async {
     final appUri = Platform.script
         .resolveUri(Uri.parse('../fixtures/empty_dart_app.dart'));
-    appFixture = await CliAppFixture.create(appUri.path);
+    appFixture = await CliAppFixture.create(appUri.toFilePath());
 
     // Track services method names as they're registered.
     appFixture.serviceConnection
diff --git a/pkg/dds/test/devtools_server/serve_devtools.dart b/pkg/dds/test/devtools_server/serve_devtools.dart
index e44c4f8..7fbd12c 100644
--- a/pkg/dds/test/devtools_server/serve_devtools.dart
+++ b/pkg/dds/test/devtools_server/serve_devtools.dart
@@ -12,7 +12,7 @@
   unawaited(
     DevToolsServer().serveDevToolsWithArgs(
       args,
-      customDevToolsPath: devtoolsAppUri(prefix: '../../../../').path,
+      customDevToolsPath: devtoolsAppUri(prefix: '../../../../').toFilePath(),
     ),
   );
 }
diff --git a/pkg/dev_compiler/lib/src/js_ast/builder.dart b/pkg/dev_compiler/lib/src/js_ast/builder.dart
index 6ba6a81..5f0c23e 100644
--- a/pkg/dev_compiler/lib/src/js_ast/builder.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/builder.dart
@@ -2,14 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// ignore_for_file: always_declare_return_types
 // ignore_for_file: library_prefixes
 // ignore_for_file: non_constant_identifier_names
 // ignore_for_file: omit_local_variable_types
-// ignore_for_file: prefer_collection_literals
 // ignore_for_file: prefer_single_quotes
 // ignore_for_file: unnecessary_brace_in_string_interps
-// ignore_for_file: unnecessary_new
 
 /// Utilities for building JS ASTs at runtime. Contains a builder class and a
 /// parser that parses part of the language.
@@ -325,7 +322,7 @@
       return string(value, quote);
     }
 
-    var sb = new StringBuffer();
+    var sb = StringBuffer();
 
     for (int rune in value.runes) {
       final escape = _irregularEscape(rune, quote);
@@ -398,7 +395,7 @@
   LiteralNumber number(num value) => LiteralNumber('$value');
 
   LiteralNumber uint64(int value) {
-    BigInt uint64Value = new BigInt.from(value).toUnsigned(64);
+    BigInt uint64Value = BigInt.from(value).toUnsigned(64);
     return LiteralNumber('$uint64Value');
   }
 
@@ -640,7 +637,7 @@
     '/': 5,
     '%': 5
   };
-  static final UNARY_OPERATORS = [
+  static final UNARY_OPERATORS = {
     '++',
     '--',
     '+',
@@ -651,12 +648,12 @@
     'void',
     'delete',
     'await'
-  ].toSet();
+  };
 
   static final ARROW_TOKEN = '=>';
   static final ELLIPSIS_TOKEN = '...';
 
-  static final OPERATORS_THAT_LOOK_LIKE_IDENTIFIERS = [
+  static final OPERATORS_THAT_LOOK_LIKE_IDENTIFIERS = {
     'typeof',
     'void',
     'delete',
@@ -664,7 +661,7 @@
     'instanceof',
     'await',
     'extends'
-  ].toSet();
+  };
 
   static int category(int code) {
     if (code >= CATEGORIES.length) return OTHER;
diff --git a/pkg/dev_compiler/lib/src/js_ast/js_ast.dart b/pkg/dev_compiler/lib/src/js_ast/js_ast.dart
index d059a14..7fc3091 100644
--- a/pkg/dev_compiler/lib/src/js_ast/js_ast.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/js_ast.dart
@@ -2,13 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// @dart = 2.9
-
-// ignore_for_file: directives_ordering
-
 library js_ast;
 
-export 'nodes.dart';
 export 'builder.dart';
+export 'nodes.dart';
 export 'printer.dart';
 export 'template.dart';
diff --git a/pkg/dev_compiler/lib/src/js_ast/nodes.dart b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
index cb6c11d..9d29e05 100644
--- a/pkg/dev_compiler/lib/src/js_ast/nodes.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/nodes.dart
@@ -3,10 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // ignore_for_file: always_declare_return_types
-// ignore_for_file: always_require_non_null_named_parameters
 // ignore_for_file: omit_local_variable_types
-// ignore_for_file: prefer_final_fields
-// ignore_for_file: prefer_initializing_formals
 // ignore_for_file: prefer_single_quotes
 // ignore_for_file: unnecessary_this
 
@@ -1124,9 +1121,7 @@
 
 class SimpleBindingPattern extends BindingPattern {
   final Identifier name;
-  SimpleBindingPattern(Identifier name)
-      : name = name,
-        super([DestructuredVariable(name: name)]);
+  SimpleBindingPattern(this.name) : super([DestructuredVariable(name: name)]);
 
   @override
   T accept<T>(NodeVisitor<T> visitor) =>
@@ -1406,7 +1401,7 @@
       throw ArgumentError.value(name, "name", "not a valid identifier");
     }
   }
-  static RegExp _identifierRE = RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
+  static final RegExp _identifierRE = RegExp(r'^[A-Za-z_$][A-Za-z_$0-9]*$');
 
   @override
   bool shadows(Set<String> names) => names.contains(name);
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index adddaae..7a97ad3 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -5,13 +5,10 @@
 // ignore_for_file: always_declare_return_types
 // ignore_for_file: library_prefixes
 // ignore_for_file: omit_local_variable_types
-// ignore_for_file: prefer_collection_literals
-// ignore_for_file: prefer_final_fields
 // ignore_for_file: prefer_initializing_formals
 // ignore_for_file: prefer_interpolation_to_compose_strings
 // ignore_for_file: prefer_is_not_empty
 // ignore_for_file: prefer_single_quotes
-// ignore_for_file: unnecessary_const
 // ignore_for_file: use_function_type_syntax_for_parameters
 
 library js_ast.printer;
@@ -89,7 +86,7 @@
   // The current indentation level.
   int _indentLevel = 0;
   // A cache of all indentation strings used so far.
-  List<String> _indentList = <String>[""];
+  final List<String> _indentList = [""];
 
   /// Whether the next call to [indent] should just be a no-op.
   bool _skipNextIndent = false;
@@ -610,15 +607,15 @@
 
     out(")");
     switch (fun.asyncModifier) {
-      case const AsyncModifier.sync():
+      case AsyncModifier.sync():
         break;
-      case const AsyncModifier.async():
+      case AsyncModifier.async():
         out(' async');
         break;
-      case const AsyncModifier.syncStar():
+      case AsyncModifier.syncStar():
         out(' sync*');
         break;
-      case const AsyncModifier.asyncStar():
+      case AsyncModifier.asyncStar():
         out(' async*');
         break;
     }
@@ -1452,8 +1449,8 @@
 
   VarCollector()
       : nested = false,
-        vars = Set<String>(),
-        params = Set<String>();
+        vars = {},
+        params = {};
 
   void forEachVar(void fn(String v)) => vars.forEach(fn);
   void forEachParam(void fn(String p)) => params.forEach(fn);
@@ -1632,7 +1629,7 @@
   void enterScope(Node node) {
     var vars = VarCollector();
     node.accept(vars);
-    maps.add(Map<String, String>());
+    maps.add({});
     variableNumberStack.add(variableNumber);
     parameterNumberStack.add(parameterNumber);
     vars.forEachVar(declareVariable);
diff --git a/pkg/dev_compiler/lib/src/js_ast/template.dart b/pkg/dev_compiler/lib/src/js_ast/template.dart
index 9ceb51f..22d76d7 100644
--- a/pkg/dev_compiler/lib/src/js_ast/template.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/template.dart
@@ -3,20 +3,17 @@
 // BSD-style license that can be found in the LICENSE file.
 
 // ignore_for_file: always_declare_return_types
-// ignore_for_file: avoid_returning_null_for_void
 // ignore_for_file: omit_local_variable_types
-// ignore_for_file: prefer_collection_literals
 // ignore_for_file: prefer_generic_function_type_aliases
 // ignore_for_file: prefer_single_quotes
-// ignore_for_file: unnecessary_this
 
 library js_ast.template;
 
 import 'nodes.dart';
 
 class TemplateManager {
-  Map<String, Template> expressionTemplates = Map<String, Template>();
-  Map<String, Template> statementTemplates = Map<String, Template>();
+  Map<String, Template> expressionTemplates = {};
+  Map<String, Template> statementTemplates = {};
 
   TemplateManager();
 
@@ -817,13 +814,13 @@
   @override
   Instantiator<ArrayBindingPattern> visitArrayBindingPattern(
       ArrayBindingPattern node) {
-    List<Instantiator> makeVars = node.variables.map(this.visit).toList();
+    List<Instantiator> makeVars = node.variables.map(visit).toList();
     return (a) => ArrayBindingPattern(splayNodes(makeVars, a));
   }
 
   @override
   Instantiator visitObjectBindingPattern(ObjectBindingPattern node) {
-    List<Instantiator> makeVars = node.variables.map(this.visit).toList();
+    List<Instantiator> makeVars = node.variables.map(visit).toList();
     return (a) => ObjectBindingPattern(splayNodes(makeVars, a));
   }
 
@@ -835,8 +832,8 @@
 /// InterpolatedNodeAnalysis determines which AST trees contain
 /// [InterpolatedNode]s, and the names of the named interpolated nodes.
 class InterpolatedNodeAnalysis extends BaseVisitorVoid {
-  final Set<Node> containsInterpolatedNode = Set<Node>();
-  final Set<String> holeNames = Set<String>();
+  final Set<Node> containsInterpolatedNode = {};
+  final Set<String> holeNames = {};
   int count = 0;
 
   InterpolatedNodeAnalysis();
@@ -853,7 +850,6 @@
     int before = count;
     node.visitChildren(this);
     if (count != before) containsInterpolatedNode.add(node);
-    return null;
   }
 
   @override
diff --git a/pkg/dev_compiler/test/js/builder_test.dart b/pkg/dev_compiler/test/js/builder_test.dart
index acfb55c..9a1ac18 100644
--- a/pkg/dev_compiler/test/js/builder_test.dart
+++ b/pkg/dev_compiler/test/js/builder_test.dart
@@ -1,5 +1,3 @@
-// @dart = 2.9
-
 import 'package:dev_compiler/src/js_ast/js_ast.dart';
 import 'package:test/test.dart';
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index c433a3e..15e3b74 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -320,31 +320,6 @@
 
     ConstructorBuilder? superTargetBuilder =
         _computeSuperTargetBuilder(initializers);
-    Constructor superTarget;
-    List<FormalParameterBuilder>? superFormals;
-    if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
-      superTarget = superTargetBuilder.constructor;
-      superFormals = superTargetBuilder.formals!;
-    } else if (superTargetBuilder is DillConstructorBuilder) {
-      superTarget = superTargetBuilder.constructor;
-      if (superTargetBuilder is SyntheticSourceConstructorBuilder) {
-        superFormals = superTargetBuilder.formals;
-      } else {
-        // The error in this case should be reported elsewhere. Here we perform
-        // a simple recovery.
-        return performRecoveryForErroneousCase();
-      }
-    } else {
-      // The error in this case should be reported elsewhere. Here we perform a
-      // simple recovery.
-      return performRecoveryForErroneousCase();
-    }
-
-    if (superFormals == null) {
-      // The error in this case should be reported elsewhere. Here we perform a
-      // simple recovery.
-      return performRecoveryForErroneousCase();
-    }
 
     if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
       superTargetBuilder.inferFormalTypes(typeEnvironment);
@@ -356,6 +331,58 @@
       }
     }
 
+    Constructor superTarget;
+    List<FormalParameterBuilder>? superFormals;
+    FunctionNode? superConstructorFunction;
+    if (superTargetBuilder is DeclaredSourceConstructorBuilder) {
+      superTarget = superTargetBuilder.constructor;
+      superFormals = superTargetBuilder.formals!;
+    } else if (superTargetBuilder is DillConstructorBuilder) {
+      superTarget = superTargetBuilder.constructor;
+      if (superTargetBuilder is SyntheticSourceConstructorBuilder) {
+        superFormals = superTargetBuilder.formals;
+      } else {
+        superConstructorFunction = superTargetBuilder.function;
+      }
+    } else {
+      // The error in this case should be reported elsewhere. Here we perform a
+      // simple recovery.
+      return performRecoveryForErroneousCase();
+    }
+
+    List<DartType?> positionalSuperFormalType = [];
+    List<bool> positionalSuperFormalHasInitializer = [];
+    Map<String, DartType?> namedSuperFormalType = {};
+    Map<String, bool> namedSuperFormalHasInitializer = {};
+    if (superFormals != null) {
+      for (FormalParameterBuilder formal in superFormals) {
+        if (formal.isPositional) {
+          positionalSuperFormalType.add(formal.variable?.type);
+          positionalSuperFormalHasInitializer
+              .add(formal.hasDeclaredInitializer);
+        } else {
+          namedSuperFormalType[formal.name] = formal.variable?.type;
+          namedSuperFormalHasInitializer[formal.name] =
+              formal.hasDeclaredInitializer;
+        }
+      }
+    } else if (superConstructorFunction != null) {
+      for (VariableDeclaration formal
+          in superConstructorFunction.positionalParameters) {
+        positionalSuperFormalType.add(formal.type);
+        positionalSuperFormalHasInitializer.add(formal.initializer != null);
+      }
+      for (VariableDeclaration formal
+          in superConstructorFunction.namedParameters) {
+        namedSuperFormalType[formal.name!] = formal.type;
+        namedSuperFormalHasInitializer[formal.name!] =
+            formal.initializer != null;
+      }
+    } else {
+      // The error is reported elsewhere.
+      return performRecoveryForErroneousCase();
+    }
+
     int superInitializingFormalIndex = -1;
     List<int?>? positionalSuperParameters;
     List<String>? namedSuperParameters;
@@ -373,33 +400,30 @@
         superInitializingFormalIndex++;
         bool hasImmediatelyDeclaredInitializer = formal.hasDeclaredInitializer;
 
-        FormalParameterBuilder? correspondingSuperFormal;
-
+        DartType? correspondingSuperFormalType;
         if (formal.isPositional) {
-          if (superInitializingFormalIndex < superFormals.length) {
-            correspondingSuperFormal =
-                superFormals[superInitializingFormalIndex];
+          assert(positionalSuperFormalHasInitializer.length ==
+              positionalSuperFormalType.length);
+          if (superInitializingFormalIndex <
+              positionalSuperFormalHasInitializer.length) {
             formal.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer ||
-                correspondingSuperFormal.hasDeclaredInitializer;
+                positionalSuperFormalHasInitializer[
+                    superInitializingFormalIndex];
+            correspondingSuperFormalType =
+                positionalSuperFormalType[superInitializingFormalIndex];
             if (!hasImmediatelyDeclaredInitializer && !formal.isRequired) {
               (positionalSuperParameters ??= <int?>[]).add(formalIndex);
             } else {
               (positionalSuperParameters ??= <int?>[]).add(null);
             }
           } else {
-            // TODO(cstefantsova): Report an error.
+            // The error is reported elsewhere.
           }
         } else {
-          for (FormalParameterBuilder superFormal in superFormals) {
-            if (superFormal.isNamed && superFormal.name == formal.name) {
-              correspondingSuperFormal = superFormal;
-              break;
-            }
-          }
-
-          if (correspondingSuperFormal != null) {
+          if (namedSuperFormalHasInitializer[formal.name] != null) {
             formal.hasDeclaredInitializer = hasImmediatelyDeclaredInitializer ||
-                correspondingSuperFormal.hasDeclaredInitializer;
+                namedSuperFormalHasInitializer[formal.name]!;
+            correspondingSuperFormalType = namedSuperFormalType[formal.name];
             if (!hasImmediatelyDeclaredInitializer && !formal.isNamedRequired) {
               (namedSuperParameters ??= <String>[]).add(formal.name);
             }
@@ -409,7 +433,7 @@
         }
 
         if (formal.type == null) {
-          DartType? type = correspondingSuperFormal?.variable?.type;
+          DartType? type = correspondingSuperFormalType;
           if (substitution.isNotEmpty && type != null) {
             type = substitute(type, substitution);
           }
diff --git a/pkg/front_end/testcases/incremental/super_key.yaml b/pkg/front_end/testcases/incremental/super_key.yaml
new file mode 100644
index 0000000..df78096
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/super_key.yaml
@@ -0,0 +1,49 @@
+# Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE.md file.
+
+type: newworld
+target: DDC
+trackWidgetCreation: true
+worlds:
+  - entry: main.dart
+    sources:
+      main.dart: |
+        import 'package:flutter/src/widgets/framework.dart';
+      flutter/lib/src/widgets/framework.dart: |
+        abstract class Bar {
+          const Bar();
+        }
+        abstract class Widget extends Bar {
+          const Widget();
+        }
+        class Key {}
+        class StatefulWidget extends Widget {
+          final Key? key;
+        
+          const StatefulWidget({this.key});
+        }
+      .dart_tool/package_config.json: |
+        {
+          "configVersion": 2,
+          "packages": [
+            {
+              "name": "flutter",
+              "rootUri": "../flutter",
+              "packageUri": "lib/"
+            }
+          ]
+        }
+    expectedLibraryCount: 2
+  - entry: main.dart
+    worldType: updated
+    invalidate:
+      - main.dart
+    expectInitializeFromDill: false
+    sources:
+      main.dart: |
+        import 'package:flutter/src/widgets/framework.dart';
+        class GalleryApp extends StatefulWidget {
+          const GalleryApp({super.key});
+        }
+    expectedLibraryCount: 2
diff --git a/pkg/front_end/testcases/incremental/super_key.yaml.world.1.expect b/pkg/front_end/testcases/incremental/super_key.yaml.world.1.expect
new file mode 100644
index 0000000..e84e96d
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/super_key.yaml.world.1.expect
@@ -0,0 +1,37 @@
+main = <No Member>;
+library from "package:flutter/src/widgets/framework.dart" as fra {
+
+  abstract class Bar extends dart.core::Object /*hasConstConstructor*/  {
+    const constructor •() → fra::Bar
+      : super dart.core::Object::•()
+      ;
+  }
+  abstract class Widget extends fra::Bar /*hasConstConstructor*/  {
+    const constructor •() → fra::Widget
+      : super fra::Bar::•()
+      ;
+  }
+  class Key extends dart.core::Object {
+    synthetic constructor •() → fra::Key
+      : super dart.core::Object::•()
+      ;
+    static method _#new#tearOff() → fra::Key
+      return new fra::Key::•();
+  }
+  class StatefulWidget extends fra::Widget /*hasConstConstructor*/  {
+    final field fra::Key? key;
+    const constructor •({fra::Key? key = #C1}) → fra::StatefulWidget
+      : fra::StatefulWidget::key = key, super fra::Widget::•()
+      ;
+    static method _#new#tearOff({fra::Key? key = #C1}) → fra::StatefulWidget
+      return new fra::StatefulWidget::•(key: key);
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "package:flutter/src/widgets/framework.dart";
+
+}
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/incremental/super_key.yaml.world.2.expect b/pkg/front_end/testcases/incremental/super_key.yaml.world.2.expect
new file mode 100644
index 0000000..09116a0
--- /dev/null
+++ b/pkg/front_end/testcases/incremental/super_key.yaml.world.2.expect
@@ -0,0 +1,44 @@
+main = <No Member>;
+library from "package:flutter/src/widgets/framework.dart" as fra {
+
+  abstract class Bar extends dart.core::Object /*hasConstConstructor*/  {
+    const constructor •() → fra::Bar
+      : super dart.core::Object::•()
+      ;
+  }
+  abstract class Widget extends fra::Bar /*hasConstConstructor*/  {
+    const constructor •() → fra::Widget
+      : super fra::Bar::•()
+      ;
+  }
+  class Key extends dart.core::Object {
+    synthetic constructor •() → fra::Key
+      : super dart.core::Object::•()
+      ;
+    static method _#new#tearOff() → fra::Key
+      return new fra::Key::•();
+  }
+  class StatefulWidget extends fra::Widget /*hasConstConstructor*/  {
+    final field fra::Key? key;
+    const constructor •({fra::Key? key = #C1}) → fra::StatefulWidget
+      : fra::StatefulWidget::key = key, super fra::Widget::•()
+      ;
+    static method _#new#tearOff({fra::Key? key = #C1}) → fra::StatefulWidget
+      return new fra::StatefulWidget::•(key: key);
+  }
+}
+library from "org-dartlang-test:///main.dart" as main {
+
+  import "package:flutter/src/widgets/framework.dart";
+
+  class GalleryApp extends fra::StatefulWidget /*hasConstConstructor*/  {
+    const constructor •({fra::Key? key = #C1}) → main::GalleryApp
+      : super fra::StatefulWidget::•(key: key)
+      ;
+    static method _#new#tearOff({fra::Key? key}) → main::GalleryApp
+      return new main::GalleryApp::•(key: key);
+  }
+}
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart b/pkg/front_end/testcases/super_parameters/super_key/main.dart
new file mode 100644
index 0000000..4081eaf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart
@@ -0,0 +1,7 @@
+import 'main_lib.dart';
+
+class GalleryApp extends StatefulWidget {
+  const GalleryApp({super.key});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.expect
new file mode 100644
index 0000000..9afb427
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    : super core::Object::•()
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.transformed.expect
new file mode 100644
index 0000000..9afb427
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.strong.transformed.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    : super core::Object::•()
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline.expect
new file mode 100644
index 0000000..4081eaf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline.expect
@@ -0,0 +1,7 @@
+import 'main_lib.dart';
+
+class GalleryApp extends StatefulWidget {
+  const GalleryApp({super.key});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..4081eaf
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.textual_outline_modelled.expect
@@ -0,0 +1,7 @@
+import 'main_lib.dart';
+
+class GalleryApp extends StatefulWidget {
+  const GalleryApp({super.key});
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.expect
new file mode 100644
index 0000000..9afb427
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    : super core::Object::•()
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.modular.expect
new file mode 100644
index 0000000..816dc6b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.modular.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
new file mode 100644
index 0000000..76d37eb
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic
+  ;
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.transformed.expect
new file mode 100644
index 0000000..9afb427
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main.dart.weak.transformed.expect
@@ -0,0 +1,32 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "main_lib.dart" as mai;
+
+import "org-dartlang-testcase:///main_lib.dart";
+
+class GalleryApp extends mai::StatefulWidget /*hasConstConstructor*/  {
+  const constructor •({mai::Key? key = #C1}) → self::GalleryApp
+    : super mai::StatefulWidget::•(key: key)
+    ;
+}
+static method main() → dynamic {}
+
+library /*isNonNullableByDefault*/;
+import self as mai;
+import "dart:core" as core;
+
+class Key extends core::Object {
+  synthetic constructor •() → mai::Key
+    : super core::Object::•()
+    ;
+}
+class StatefulWidget extends core::Object /*hasConstConstructor*/  {
+  final field mai::Key? key;
+  const constructor •({mai::Key? key = #C1}) → mai::StatefulWidget
+    : mai::StatefulWidget::key = key, super core::Object::•()
+    ;
+}
+
+constants  {
+  #C1 = null
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/main_lib.dart b/pkg/front_end/testcases/super_parameters/super_key/main_lib.dart
new file mode 100644
index 0000000..f6ee73d
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/main_lib.dart
@@ -0,0 +1,7 @@
+class Key {}
+
+class StatefulWidget {
+  final Key? key;
+
+  const StatefulWidget({this.key});
+}
diff --git a/pkg/front_end/testcases/super_parameters/super_key/test.options b/pkg/front_end/testcases/super_parameters/super_key/test.options
new file mode 100644
index 0000000..bfe6dc8
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_key/test.options
@@ -0,0 +1 @@
+main_lib.dart
\ No newline at end of file
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 7122a64..2aef55f 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -145,8 +145,6 @@
 vm_snapshot_analysis/test/*: SkipByDesign # Only meant to run on vm
 
 [ $system == windows ]
-dds/test/devtools_server/devtools_server_connection_test: Skip # Issue 48528
-dds/test/devtools_server/devtools_server_test: Skip # Issue 48528
 front_end/test/fasta/bootstrap_test: Skip # Issue 31902
 front_end/test/fasta/strong_test: Pass, Slow, Timeout
 front_end/test/fasta/text_serialization_test: Pass, Slow, Timeout
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index f2ede3d..0f8cabf 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -200,10 +200,10 @@
 #elif defined(_M_IX86) || defined(__i386__)
 #define HOST_ARCH_IA32 1
 #define ARCH_IS_32_BIT 1
-#elif defined(__ARMEL__)
+#elif defined(_M_ARM) || defined(__ARMEL__)
 #define HOST_ARCH_ARM 1
 #define ARCH_IS_32_BIT 1
-#elif defined(__aarch64__)
+#elif defined(_M_ARM64) || defined(__aarch64__)
 #define HOST_ARCH_ARM64 1
 #define ARCH_IS_64_BIT 1
 #elif defined(__riscv)
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 359c6db..e42ac60 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -1610,6 +1610,10 @@
   // frames before doing an overflow check.)
   ldr(TMP, Address(thr, target::Thread::saved_stack_limit_offset()));
   AddImmediate(CSP, TMP, -4096);
+
+  // TODO(47824): This will probably cause signal handlers on Windows to crash.
+  // Windows requires the stack to grow in order, one page at a time, but
+  // pushing CSP to near the stack limit likely skips over many pages.
 }
 
 void Assembler::RestoreCSP() {
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 7406b47..18a2bc2 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -49,7 +49,7 @@
 // The Linux/Android ABI and the iOS ABI differ in their choice of frame
 // pointer, their treatment of R9, and the interprocedural stack alignment.
 
-// EABI (Linux, Android)
+// EABI (Linux, Android, Windows)
 // See "Procedure Call Standard for the ARM Architecture".
 // R0-R1:  Argument / result / volatile
 // R2-R3:  Argument / volatile
@@ -61,9 +61,10 @@
 // R15:    Program counter
 // Stack alignment: 4 bytes always, 8 bytes at public interfaces
 
-// Linux (Debian armhf) and Android also differ in whether floating point
-// arguments are passed in floating point registers. Linux uses hardfp and
-// Android uses softfp. See TargetCPUFeatures::hardfp_supported().
+// Linux (Debian armhf), Windows and Android also differ in whether floating
+// point arguments are passed in floating point registers. Linux and Windows
+// use hardfp and Android uses softfp. See
+// TargetCPUFeatures::hardfp_supported().
 
 // iOS ABI
 // See "iOS ABI Function Call Guide"
@@ -92,7 +93,7 @@
   R8 = 8,
   R9 = 9,
   R10 = 10,  // THR
-  R11 = 11,  // Linux FP
+  R11 = 11,  // Linux/Android/Windows FP
   R12 = 12,  // IP aka TMP
   R13 = 13,  // SP
   R14 = 14,  // LR
diff --git a/runtime/vm/constants_arm64.h b/runtime/vm/constants_arm64.h
index 5be6e98..b09a94a 100644
--- a/runtime/vm/constants_arm64.h
+++ b/runtime/vm/constants_arm64.h
@@ -49,7 +49,7 @@
   R15 = 15,  // SP in Dart code.
   R16 = 16,  // IP0 aka TMP
   R17 = 17,  // IP1 aka TMP2
-  R18 = 18,  // reserved on iOS, shadow call stack on Fuchsia.
+  R18 = 18,  // reserved on iOS, shadow call stack on Fuchsia, TEB on Windows.
   R19 = 19,
   R20 = 20,
   R21 = 21,  // DISPATCH_TABLE_REG
diff --git a/runtime/vm/cpu_arm.cc b/runtime/vm/cpu_arm.cc
index 284b62d..b18056a 100644
--- a/runtime/vm/cpu_arm.cc
+++ b/runtime/vm/cpu_arm.cc
@@ -16,6 +16,8 @@
 
 #if defined(DART_HOST_OS_IOS)
 #include <libkern/OSCacheControl.h>
+#elif defined(DART_HOST_OS_WINDOWS)
+#include <processthreadsapi.h>
 #endif
 
 #if !defined(TARGET_HOST_MISMATCH)
@@ -88,6 +90,10 @@
   __builtin___clear_cache(beg, end);
 #elif defined(DART_HOST_OS_ANDROID)
   cacheflush(start, start + size, 0);
+#elif defined(DART_HOST_OS_WINDOWS)
+  BOOL result = FlushInstructionCache(
+      GetCurrentProcess(), reinterpret_cast<const void*>(start), size);
+  ASSERT(result != 0);
 #else
 #error FlushICache only tested/supported on Linux, Android and iOS
 #endif
@@ -126,6 +132,16 @@
   initialized_ = true;
 #endif
 }
+#elif DART_HOST_OS_WINDOWS
+void HostCPUFeatures::Init() {
+  hardware_ = "";
+  integer_division_supported_ = true;
+  neon_supported_ = true;
+  hardfp_supported_ = true;
+#if defined(DEBUG)
+  initialized_ = true;
+#endif
+}
 #else  // DART_HOST_OS_IOS
 void HostCPUFeatures::Init() {
   bool is_arm64 = false;
diff --git a/runtime/vm/cpu_arm64.cc b/runtime/vm/cpu_arm64.cc
index 23e9fee..1ae9f0d 100644
--- a/runtime/vm/cpu_arm64.cc
+++ b/runtime/vm/cpu_arm64.cc
@@ -22,6 +22,8 @@
 
 #if defined(DART_HOST_OS_MACOS) || defined(DART_HOST_OS_IOS)
 #include <libkern/OSCacheControl.h>
+#elif defined(DART_HOST_OS_WINDOWS)
+#include <processthreadsapi.h>
 #endif
 
 namespace dart {
@@ -52,6 +54,10 @@
   zx_status_t result = zx_cache_flush(reinterpret_cast<const void*>(start),
                                       size, ZX_CACHE_FLUSH_INSN);
   ASSERT(result == ZX_OK);
+#elif defined(DART_HOST_OS_WINDOWS)
+  BOOL result = FlushInstructionCache(
+      GetCurrentProcess(), reinterpret_cast<const void*>(start), size);
+  ASSERT(result != 0);
 #else
 #error FlushICache not implemented for this OS
 #endif
diff --git a/runtime/vm/os_thread_win.cc b/runtime/vm/os_thread_win.cc
index 98c95ed..0d0a742 100644
--- a/runtime/vm/os_thread_win.cc
+++ b/runtime/vm/os_thread_win.cc
@@ -172,14 +172,10 @@
 }
 
 bool OSThread::GetCurrentStackBounds(uword* lower, uword* upper) {
-// On Windows stack limits for the current thread are available in
-// the thread information block (TIB). Its fields can be accessed through
-// FS segment register on x86 and GS segment register on x86_64.
-#ifdef _WIN64
-  *upper = static_cast<uword>(__readgsqword(offsetof(NT_TIB64, StackBase)));
-#else
-  *upper = static_cast<uword>(__readfsdword(offsetof(NT_TIB, StackBase)));
-#endif
+  // On Windows stack limits for the current thread are available in
+  // the thread information block (TIB).
+  NT_TIB* tib = reinterpret_cast<NT_TIB*>(NtCurrentTeb());
+  *upper = reinterpret_cast<uword>(tib->StackBase);
   // Notice that we cannot use the TIB's StackLimit for the stack end, as it
   // tracks the end of the committed range. We're after the end of the reserved
   // stack area (most of which will be uncommitted, most times).
diff --git a/tools/VERSION b/tools/VERSION
index 7b9e5d4..664d064 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 256
+PRERELEASE 257
 PRERELEASE_PATCH 0
\ No newline at end of file
