Version 2.17.0-101.0.dev

Merge commit '4dbd35f04d47ccdcb14086054941c610f2bae82d' into 'dev'
diff --git a/pkg/compiler/test/analyses/api_allowed.json b/pkg/compiler/test/analyses/api_allowed.json
index 7fe7b5a..c54c832 100644
--- a/pkg/compiler/test/analyses/api_allowed.json
+++ b/pkg/compiler/test/analyses/api_allowed.json
@@ -1,4 +1,19 @@
 {
+  "org-dartlang-sdk:///lib/_http/http_impl.dart": {
+    "Dynamic access of 'message'.": 3,
+    "Dynamic invocation of 'destroy'.": 1,
+    "Dynamic access of 'address'.": 2,
+    "Dynamic access of 'host'.": 2,
+    "Dynamic access of 'port'.": 2,
+    "Dynamic access of 'remoteAddress'.": 1,
+    "Dynamic access of 'remotePort'.": 1,
+    "Dynamic invocation of 'dart._http::_toJSON'.": 3,
+    "Dynamic invocation of 'listen'.": 1,
+    "Dynamic invocation of 'close'.": 1
+  },
+  "org-dartlang-sdk:///lib/_http/websocket_impl.dart": {
+    "Dynamic invocation of 'dart._http::_toJSON'.": 1
+  },
   "org-dartlang-sdk:///lib/_internal/js_runtime/lib/js_number.dart": {
     "Dynamic invocation of '[]'.": 5
   },
@@ -9,6 +24,12 @@
     "Dynamic access of 'iterator'.": 1,
     "Dynamic invocation of 'then'.": 1
   },
+  "org-dartlang-sdk:///lib/_internal/js_runtime/lib/convert_patch.dart": {
+    "Dynamic invocation of 'clear'.": 1
+  },
+  "org-dartlang-sdk:///lib/convert/json.dart": {
+    "Dynamic invocation of 'toJson'.": 1
+  },
   "org-dartlang-sdk:///lib/html/dart2js/html_dart2js.dart": {
     "Dynamic access of 'style'.": 1,
     "Dynamic invocation of 'remove'.": 2,
@@ -87,28 +108,5 @@
   },
   "org-dartlang-sdk:///lib/core/errors.dart": {
     "Dynamic access of 'length'.": 2
-  },
-  "org-dartlang-sdk:///lib/_internal/js_runtime/lib/convert_patch.dart": {
-    "Dynamic invocation of 'clear'.": 1
-  },
-  "org-dartlang-sdk:///lib/convert/json.dart": {
-    "Dynamic invocation of 'toJson'.": 1
-  },
-  "org-dartlang-sdk:///lib/_http/http_impl.dart": {
-    "Dynamic access of 'message'.": 3,
-    "Dynamic invocation of 'destroy'.": 2,
-    "Dynamic access of 'address'.": 3,
-    "Dynamic access of 'type'.": 1,
-    "Dynamic invocation of 'setOption'.": 1,
-    "Dynamic access of 'host'.": 2,
-    "Dynamic access of 'port'.": 2,
-    "Dynamic access of 'remoteAddress'.": 1,
-    "Dynamic access of 'remotePort'.": 1,
-    "Dynamic invocation of 'dart._http::_toJSON'.": 3,
-    "Dynamic invocation of 'listen'.": 1,
-    "Dynamic invocation of 'close'.": 1
-  },
-  "org-dartlang-sdk:///lib/_http/websocket_impl.dart": {
-    "Dynamic invocation of 'dart._http::_toJSON'.": 1
   }
 }
\ No newline at end of file
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index d23c72b..1eed920 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -335,6 +335,15 @@
       members["toString"] = toStringBuilder;
     }
     String className = name;
+    final int startCharOffsetComputed =
+        metadata == null ? startCharOffset : metadata.first.charOffset;
+    scope.forEachLocalMember((name, member) {
+      members[name] = member as MemberBuilder;
+    });
+    scope.forEachLocalSetter((name, member) {
+      setters[name] = member;
+    });
+
     if (enumConstantInfos != null) {
       for (int i = 0; i < enumConstantInfos.length; i++) {
         EnumConstantInfo enumConstantInfo = enumConstantInfos[i]!;
@@ -345,6 +354,18 @@
           // The existing declaration is synthetic if it has the same
           // charOffset as the enclosing enum.
           bool isSynthetic = existing.charOffset == charOffset;
+
+          // Report the error on the member that occurs later in the code.
+          int existingOffset;
+          int duplicateOffset;
+          if (existing.charOffset < enumConstantInfo.charOffset) {
+            existingOffset = existing.charOffset;
+            duplicateOffset = enumConstantInfo.charOffset;
+          } else {
+            existingOffset = enumConstantInfo.charOffset;
+            duplicateOffset = existing.charOffset;
+          }
+
           List<LocatedMessage> context = isSynthetic
               ? <LocatedMessage>[
                   templateDuplicatedDeclarationSyntheticCause
@@ -355,11 +376,10 @@
               : <LocatedMessage>[
                   templateDuplicatedDeclarationCause
                       .withArguments(name)
-                      .withLocation(
-                          parent.fileUri, existing.charOffset, name.length)
+                      .withLocation(parent.fileUri, existingOffset, name.length)
                 ];
           parent.addProblem(templateDuplicatedDeclaration.withArguments(name),
-              enumConstantInfo.charOffset, name.length, parent.fileUri,
+              duplicateOffset, name.length, parent.fileUri,
               context: context);
           enumConstantInfos[i] = null;
         } else if (name == className) {
@@ -396,14 +416,7 @@
         members[name] = fieldBuilder..next = existing;
       }
     }
-    final int startCharOffsetComputed =
-        metadata == null ? startCharOffset : metadata.first.charOffset;
-    scope.forEachLocalMember((name, member) {
-      members[name] = member as MemberBuilder;
-    });
-    scope.forEachLocalSetter((name, member) {
-      setters[name] = member;
-    });
+
     SourceEnumBuilder enumBuilder = new SourceEnumBuilder.internal(
         metadata,
         name,
@@ -461,14 +474,7 @@
   @override
   TypeBuilder? get mixedInTypeBuilder => null;
 
-  @override
-  Class build(SourceLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary) {
-    cls.isEnum = true;
-    intType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
-    stringType.resolveIn(
-        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
-    objectType.resolveIn(
-        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+  NamedTypeBuilder? _computeEnumSupertype() {
     TypeBuilder? supertypeBuilder = this.supertypeBuilder;
     NamedTypeBuilder? enumType;
 
@@ -482,6 +488,18 @@
       }
     }
     assert(enumType is NamedTypeBuilder && enumType.name == "_Enum");
+    return enumType;
+  }
+
+  @override
+  Class build(SourceLibraryBuilder libraryBuilder, LibraryBuilder coreLibrary) {
+    cls.isEnum = true;
+    intType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    stringType.resolveIn(
+        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    objectType.resolveIn(
+        coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+    NamedTypeBuilder? enumType = _computeEnumSupertype();
     enumType!.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
 
     listType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
@@ -682,21 +700,20 @@
     SourceProcedureBuilder toStringBuilder =
         firstMemberNamed("toString") as SourceProcedureBuilder;
 
-    TypeBuilder supertypeBuilder = this.supertypeBuilder!;
-    ClassBuilder enumClass = supertypeBuilder.declaration as ClassBuilder;
+    ClassBuilder enumClass =
+        _computeEnumSupertype()!.declaration as ClassBuilder;
     MemberBuilder? nameFieldBuilder =
         enumClass.lookupLocalMember("_name") as MemberBuilder?;
-    if (nameFieldBuilder != null) {
-      Field nameField = nameFieldBuilder.member as Field;
+    assert(nameFieldBuilder != null);
+    Field nameField = nameFieldBuilder!.member as Field;
 
-      toStringBuilder.body = new ReturnStatement(new StringConcatenation([
-        new StringLiteral("${cls.demangledName}."),
-        new InstanceGet.byReference(
-            InstanceAccessKind.Instance, new ThisExpression(), nameField.name,
-            interfaceTargetReference: nameField.getterReference,
-            resultType: nameField.getterType),
-      ]));
-    }
+    toStringBuilder.body = new ReturnStatement(new StringConcatenation([
+      new StringLiteral("${cls.demangledName}."),
+      new InstanceGet.byReference(
+          InstanceAccessKind.Instance, new ThisExpression(), nameField.name,
+          interfaceTargetReference: nameField.getterReference,
+          resultType: nameField.getterType),
+    ]));
 
     super.buildOutlineExpressions(library, classHierarchy,
         delayedActionPerformers, synthesizedFunctionNodes);
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 766d631..3130c75 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -2514,9 +2514,11 @@
 }
 
 abstract class Enum {
+  String get _name;
 }
 
 abstract class _Enum {
+  final String _name;
 }
 
 class String {}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart
new file mode 100644
index 0000000..ad84c08
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart
@@ -0,0 +1,69 @@
+// Copyright (c) 2022, 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 file.
+
+enum E1 {
+  element;
+  final int element = 42; // Error.
+}
+
+enum E2 {
+  element,
+  element; // Error.
+}
+
+enum E3 {
+  element;
+
+  void element() {} // Error.
+}
+
+enum E4 {
+  element;
+
+  static void element() {} // Error.
+}
+
+enum E5 {
+  element;
+
+  static int element = 42; // Error.
+}
+
+enum E6 {
+  element; // Error.
+
+  void set element(E6 value) {}
+}
+
+enum E7 {
+  element; // Ok.
+
+  static void set element(E7 value) {}
+}
+
+class A8 {
+  void set element(dynamic value) {}
+}
+
+enum E8 with A8 {
+  element // Error.
+}
+
+class A9 {
+  int element = 42;
+}
+
+enum E9 with A9 {
+  element // Error.
+}
+
+class A10 {
+  void element() {}
+}
+
+enum E10 with A10 {
+  element // Error.
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect
new file mode 100644
index 0000000..bac3cd9
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.expect
@@ -0,0 +1,241 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C5;
+  static const field self::E2 element = #C4;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C6;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 = core::_Enum with self::A8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub set element(dynamic value) → void
+    return super.{self::A8::element} = value;
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin*/  {
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get element() → core::int
+    return super.{self::A9::element};
+  mixin-super-stub set element(core::int value) → void
+    return super.{self::A9::element} = value;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 = core::_Enum with self::A10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method element() → void
+    return super.{self::A10::element}();
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2>[#C4]
+  #C6 = <self::E3>[]
+  #C7 = <self::E4>[]
+  #C8 = <self::E5>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect
new file mode 100644
index 0000000..37fade4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.strong.transformed.expect
@@ -0,0 +1,236 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C5;
+  static const field self::E2 element = #C4;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C6;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 extends core::_Enum implements self::A8 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  set element(dynamic value) → void {}
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 extends core::_Enum implements self::A9 /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int element = 42;
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 extends core::_Enum implements self::A10 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  method element() → void {}
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2>[#C4]
+  #C6 = <self::E3>[]
+  #C7 = <self::E4>[]
+  #C8 = <self::E5>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect
new file mode 100644
index 0000000..aa6cb56
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.textual_outline.expect
@@ -0,0 +1,20 @@
+enum E1 { element; final int element = 42; }
+enum E2 { element, element; }
+enum E3 { element; void element() {} }
+enum E4 { element; static void element() {} }
+enum E5 { element; static int element = 42; }
+enum E6 { element; void set element(E6 value) {} }
+enum E7 { element; static void set element(E7 value) {} }
+class A8 {
+  void set element(dynamic value) {}
+}
+enum E8 with A8 { element }
+class A9 {
+  int element = 42;
+}
+enum E9 with A9 { element }
+class A10 {
+  void element() {}
+}
+enum E10 with A10 { element }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect
new file mode 100644
index 0000000..a1dbcac
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.expect
@@ -0,0 +1,241 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C5;
+  static const field self::E2 element = #C4;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C6;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 = core::_Enum with self::A8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub set element(dynamic value) → void
+    return super.{self::A8::element} = value;
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin*/  {
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get element() → core::int
+    return super.{self::A9::element};
+  mixin-super-stub set element(core::int value) → void
+    return super.{self::A9::element} = value;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 = core::_Enum with self::A10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method element() → void
+    return super.{self::A10::element}();
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1*>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2*>[#C4]
+  #C6 = <self::E3*>[]
+  #C7 = <self::E4*>[]
+  #C8 = <self::E5*>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6*>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7*>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8*>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect
new file mode 100644
index 0000000..a1dbcac
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.modular.expect
@@ -0,0 +1,241 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C5;
+  static const field self::E2 element = #C4;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C6;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 = core::_Enum with self::A8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub set element(dynamic value) → void
+    return super.{self::A8::element} = value;
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin*/  {
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get element() → core::int
+    return super.{self::A9::element};
+  mixin-super-stub set element(core::int value) → void
+    return super.{self::A9::element} = value;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 = core::_Enum with self::A10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method element() → void
+    return super.{self::A10::element}();
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1*>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2*>[#C4]
+  #C6 = <self::E3*>[]
+  #C7 = <self::E4*>[]
+  #C8 = <self::E5*>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6*>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7*>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8*>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.outline.expect
new file mode 100644
index 0000000..2f845e4
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.outline.expect
@@ -0,0 +1,225 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = const <self::E1>[];
+  final field core::int element;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = const <self::E2>[self::E2::element];
+  static const field self::E2 element = const self::E2::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = const <self::E3>[];
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  method element() → void
+    ;
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = const <self::E4>[];
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  static method element() → void
+    ;
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = const <self::E5>[];
+  static field core::int element;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = const <self::E6>[self::E6::element];
+  static const field self::E6 element = const self::E6::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+  set element(self::E6 value) → void
+    ;
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = const <self::E7>[self::E7::element];
+  static const field self::E7 element = const self::E7::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E7 value) → void
+    ;
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    ;
+  set element(dynamic value) → void
+    ;
+}
+abstract class _E8&_Enum&A8 = core::_Enum with self::A8 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub set element(dynamic value) → void
+    return super.{self::A8::element} = value;
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = const <self::E8>[self::E8::element];
+  static const field self::E8 element = const self::E8::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E8
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element;
+  synthetic constructor •() → self::A9
+    ;
+}
+abstract class _E9&_Enum&A9 = core::_Enum with self::A9 /*isAnonymousMixin*/  {
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub get element() → core::int
+    return super.{self::A9::element};
+  mixin-super-stub set element(core::int value) → void
+    return super.{self::A9::element} = value;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = const <self::E9>[self::E9::element];
+  static const field self::E9 element = const self::E9::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E9
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    ;
+  method element() → void
+    ;
+}
+abstract class _E10&_Enum&A10 = core::_Enum with self::A10 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method element() → void
+    return super.{self::A10::element}();
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = const <self::E10>[self::E10::element];
+  static const field self::E10 element = const self::E10::•(0, "element");
+  const constructor •(core::int index, core::String name) → self::E10
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:5:6 -> ListConstant(const <E1*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:10:6 -> ListConstant(const <E2*>[const E2{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:11:3 -> InstanceConstant(const E2{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:15:6 -> ListConstant(const <E3*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:21:6 -> ListConstant(const <E4*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:27:6 -> ListConstant(const <E5*>[])
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:33:6 -> ListConstant(const <E6*>[const E6{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:34:3 -> InstanceConstant(const E6{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:39:6 -> ListConstant(const <E7*>[const E7{_Enum.index: 0, _Enum._name: "element"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:40:3 -> InstanceConstant(const E7{_Enum.index: 0, _Enum._name: "element"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:49:6 -> ListConstant(const <E8*>[const E8{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:50:3 -> InstanceConstant(const E8{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:57:6 -> ListConstant(const <E9*>[const E9{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:58:3 -> InstanceConstant(const E9{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///conflicting_elements.dart:65:6 -> ListConstant(const <E10*>[const E10{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///conflicting_elements.dart:66:3 -> InstanceConstant(const E10{})
+Extra constant evaluation: evaluated: 72, effectively constant: 16
diff --git a/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect
new file mode 100644
index 0000000..00f7ff2
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart.weak.transformed.expect
@@ -0,0 +1,236 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:7:13: Error: 'element' is already declared in this scope.
+//   final int element = 42; // Error.
+//             ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:6:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:12:3: Error: 'element' is already declared in this scope.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:11:3: Context: Previous declaration of 'element'.
+//   element,
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:18:8: Error: 'element' is already declared in this scope.
+//   void element() {} // Error.
+//        ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:16:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:24:15: Error: 'element' is already declared in this scope.
+//   static void element() {} // Error.
+//               ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:22:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:30:14: Error: 'element' is already declared in this scope.
+//   static int element = 42; // Error.
+//              ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:28:3: Context: Previous declaration of 'element'.
+//   element;
+//   ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:34:3: Error: This static member conflicts with an instance member.
+//   element; // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:36:12: Context: This is the instance member.
+//   void set element(E6 value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:50:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:46:12: Context: This is the inherited member.
+//   void set element(dynamic value) {}
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:58:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:54:7: Context: This is the inherited member.
+//   int element = 42;
+//       ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:66:3: Error: Can't declare a member that conflicts with an inherited one.
+//   element // Error.
+//   ^^^^^^^
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:62:8: Context: This is the inherited member.
+//   void element() {}
+//        ^^^^^^^
+//
+// pkg/front_end/testcases/enhanced_enums/conflicting_elements.dart:57:6: Error: A constant constructor can't call a non-constant super constructor.
+// enum E9 with A9 {
+//      ^
+//
+import self as self;
+import "dart:core" as core;
+
+class E1 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E1> values = #C1;
+  final field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E1
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
+}
+class E2 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E2> values = #C5;
+  static const field self::E2 element = #C4;
+  const constructor •(core::int index, core::String name) → self::E2
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
+}
+class E3 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E3> values = #C6;
+  const constructor •(core::int index, core::String name) → self::E3
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
+  method element() → void {}
+}
+class E4 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E4> values = #C7;
+  const constructor •(core::int index, core::String name) → self::E4
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E4.${this.{core::_Enum::_name}{core::String}}";
+  static method element() → void {}
+}
+class E5 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E5> values = #C8;
+  static field core::int element = null;
+  const constructor •(core::int index, core::String name) → self::E5
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E5.${this.{core::_Enum::_name}{core::String}}";
+}
+class E6 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E6> values = #C10;
+  static const field self::E6 element = #C9;
+  const constructor •(core::int index, core::String name) → self::E6
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E6.${this.{core::_Enum::_name}{core::String}}";
+  set element(self::E6 value) → void {}
+}
+class E7 extends core::_Enum /*isEnum*/  {
+  static const field core::List<self::E7> values = #C12;
+  static const field self::E7 element = #C11;
+  const constructor •(core::int index, core::String name) → self::E7
+    : super core::_Enum::•(index, name)
+    ;
+  method toString() → core::String
+    return "E7.${this.{core::_Enum::_name}{core::String}}";
+  static set element(self::E7 value) → void {}
+}
+class A8 extends core::Object {
+  synthetic constructor •() → self::A8
+    : super core::Object::•()
+    ;
+  set element(dynamic value) → void {}
+}
+abstract class _E8&_Enum&A8 extends core::_Enum implements self::A8 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E8&_Enum&A8
+    : super core::_Enum::•(index, _name)
+    ;
+  set element(dynamic value) → void {}
+}
+class E8 extends self::_E8&_Enum&A8 /*isEnum*/  {
+  static const field core::List<self::E8> values = #C14;
+  static const field self::E8 element = #C13;
+  const constructor •(core::int index, core::String name) → self::E8
+    : super self::_E8&_Enum&A8::•(index, name)
+    ;
+  method toString() → core::String
+    return "E8.${this.{core::_Enum::_name}{core::String}}";
+}
+class A9 extends core::Object {
+  field core::int element = 42;
+  synthetic constructor •() → self::A9
+    : super core::Object::•()
+    ;
+}
+abstract class _E9&_Enum&A9 extends core::_Enum implements self::A9 /*isAnonymousMixin,isEliminatedMixin*/  {
+  field core::int element = 42;
+  synthetic constructor •(core::int index, core::String _name) → self::_E9&_Enum&A9
+    : super core::_Enum::•(index, _name)
+    ;
+}
+class E9 extends self::_E9&_Enum&A9 /*isEnum*/  {
+  static const field core::List<self::E9> values = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  static const field self::E9 element = invalid-expression "A constant constructor can't call a non-constant super constructor.";
+  const constructor •(core::int index, core::String name) → self::E9
+    : super self::_E9&_Enum&A9::•(index, name)
+    ;
+  method toString() → core::String
+    return "E9.${this.{core::_Enum::_name}{core::String}}";
+}
+class A10 extends core::Object {
+  synthetic constructor •() → self::A10
+    : super core::Object::•()
+    ;
+  method element() → void {}
+}
+abstract class _E10&_Enum&A10 extends core::_Enum implements self::A10 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E10&_Enum&A10
+    : super core::_Enum::•(index, _name)
+    ;
+  method element() → void {}
+}
+class E10 extends self::_E10&_Enum&A10 /*isEnum*/  {
+  static const field core::List<self::E10> values = #C16;
+  static const field self::E10 element = #C15;
+  const constructor •(core::int index, core::String name) → self::E10
+    : super self::_E10&_Enum&A10::•(index, name)
+    ;
+  method toString() → core::String
+    return "E10.${this.{core::_Enum::_name}{core::String}}";
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = <self::E1*>[]
+  #C2 = 0
+  #C3 = "element"
+  #C4 = self::E2 {index:#C2, _name:#C3}
+  #C5 = <self::E2*>[#C4]
+  #C6 = <self::E3*>[]
+  #C7 = <self::E4*>[]
+  #C8 = <self::E5*>[]
+  #C9 = self::E6 {index:#C2, _name:#C3}
+  #C10 = <self::E6*>[#C9]
+  #C11 = self::E7 {index:#C2, _name:#C3}
+  #C12 = <self::E7*>[#C11]
+  #C13 = self::E8 {index:#C2, _name:#C3}
+  #C14 = <self::E8*>[#C13]
+  #C15 = self::E10 {index:#C2, _name:#C3}
+  #C16 = <self::E10*>[#C15]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///conflicting_elements.dart:
+- E2. (from org-dartlang-testcase:///conflicting_elements.dart:10:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E6. (from org-dartlang-testcase:///conflicting_elements.dart:33:6)
+- E7. (from org-dartlang-testcase:///conflicting_elements.dart:39:6)
+- E8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- _E8&_Enum&A8. (from org-dartlang-testcase:///conflicting_elements.dart:49:6)
+- E9. (from org-dartlang-testcase:///conflicting_elements.dart:57:6)
+- E10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
+- _E10&_Enum&A10. (from org-dartlang-testcase:///conflicting_elements.dart:65:6)
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
index 162a26b..bf189d3 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
index 1444aa0..ce0af0b 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.strong.transformed.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
index 6d6adb6..3b7f732 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
index 6d6adb6..3b7f732 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.modular.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
index dbfdd01..37f7523 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.outline.expect
@@ -21,7 +21,7 @@
   const constructor •(core::int index, core::String name) → self::EA
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -42,7 +42,7 @@
   const constructor •(core::int index, core::String name) → self::EB
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -61,7 +61,7 @@
   const constructor •(core::int index, core::String name) → self::EM
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -80,7 +80,7 @@
   const constructor •(core::int index, core::String name) → self::EN
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic
   ;
@@ -97,4 +97,4 @@
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_as_supertype.dart:21:18 -> InstanceConstant(const EM{})
 Evaluated: ListLiteral @ org-dartlang-testcase:///enum_as_supertype.dart:27:6 -> ListConstant(const <EN*>[const EN{}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///enum_as_supertype.dart:27:18 -> InstanceConstant(const EN{})
-Extra constant evaluation: evaluated: 20, effectively constant: 8
+Extra constant evaluation: evaluated: 32, effectively constant: 8
diff --git a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
index d61d9a5..99d70ca 100644
--- a/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/enum_as_supertype.dart.weak.transformed.expect
@@ -23,7 +23,7 @@
     : super self::_EA&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EA.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class B extends core::Object implements core::Enum {
   synthetic constructor •() → self::B
@@ -46,7 +46,7 @@
     : super self::_EB&_Enum&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EB.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class M extends core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -66,7 +66,7 @@
     : super self::_EM&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EM.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class N extends core::Object implements core::Enum /*isMixinDeclaration*/  {
   get foo() → core::int
@@ -86,7 +86,7 @@
     : super self::_EN&_Enum&N::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "EN.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
index 07b42df..9ea4317 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
index 07b42df..9ea4317 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.strong.transformed.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
index 8ce162b..c23f2d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
index 8ce162b..c23f2d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.modular.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.outline.expect
index 0f67ffa..cb1e18e 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.outline.expect
@@ -4,9 +4,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = const <self::E<dynamic>>[self::E::one, self::E::two];
+  final field self::E::X% field;
   static const field self::E<core::int> one = const self::E::•<core::int>(0, "one", 1);
   static const field self::E<core::String> two = const self::E::•<core::String>(1, "two", "2");
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
index 8ce162b..c23f2d4 100644
--- a/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/instantiated_generic_enum_types.dart.weak.transformed.expect
@@ -49,9 +49,9 @@
 
 class E<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E<dynamic>> values = #C8;
+  final field self::E::X% field;
   static const field self::E<core::int> one = #C4;
   static const field self::E<core::String> two = #C7;
-  final field self::E::X% field;
   const constructor •(core::int index, core::String name, self::E::X% field) → self::E<self::E::X%>
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
index cbaf5c4..d250b38 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
index cbaf5c4..d250b38 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
index 8ce5ddc..87ec425 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
index 8ce5ddc..87ec425 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect
index 1419d47..264ede3 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = const <self::E>[self::E::one, self::E::two];
+  final field core::String field;
   static const field self::E one = const self::E::•(0, "one", "foo");
   static const field self::E two = const self::E::•(1, "two", "bar");
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
index 8ce5ddc..87ec425 100644
--- a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
@@ -4,9 +4,9 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
+  final field core::String field;
   static const field self::E one = #C4;
   static const field self::E two = #C8;
-  final field core::String field;
   const constructor •(core::int index, core::String name, core::String field) → self::E
     : self::E::field = field, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart b/pkg/front_end/testcases/enhanced_enums/issue48303.dart
new file mode 100644
index 0000000..a5a178f
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2022, 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 file.
+
+mixin M1 on Enum {
+  int mixedInMethod1(int v) => v;
+}
+
+enum E with M1 {
+  e1,
+  e2,
+  e3;
+}
+
+expectEquals(x, y) {
+  if (x != y) {
+    throw "Expected $x to be equal to $y.";
+  }
+}
+
+main() {
+  expectEquals(E.e1.toString(), "E.e1");
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.expect
new file mode 100644
index 0000000..bd7335d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 = core::_Enum with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method mixedInMethod1(core::int v) → core::int
+    return super.{self::M1::mixedInMethod1}(v);
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.transformed.expect
new file mode 100644
index 0000000..830bd89
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.strong.transformed.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 extends core::_Enum implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect
new file mode 100644
index 0000000..b70621c
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.textual_outline.expect
@@ -0,0 +1,6 @@
+mixin M1 on Enum {
+  int mixedInMethod1(int v) => v;
+}
+enum E with M1 { e1, e2, e3; }
+expectEquals(x, y) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.expect
new file mode 100644
index 0000000..c400ee6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 = core::_Enum with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method mixedInMethod1(core::int v) → core::int
+    return super.{self::M1::mixedInMethod1}(v);
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.modular.expect
new file mode 100644
index 0000000..c400ee6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.modular.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 = core::_Enum with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method mixedInMethod1(core::int v) → core::int
+    return super.{self::M1::mixedInMethod1}(v);
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.outline.expect
new file mode 100644
index 0000000..4ed3de3
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.outline.expect
@@ -0,0 +1,37 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    ;
+}
+abstract class _E&_Enum&M1 = core::_Enum with self::M1 /*isAnonymousMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  mixin-super-stub method mixedInMethod1(core::int v) → core::int
+    return super.{self::M1::mixedInMethod1}(v);
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = const <self::E>[self::E::e1, self::E::e2, self::E::e3];
+  static const field self::E e1 = const self::E::•(0, "e1");
+  static const field self::E e2 = const self::E::•(1, "e2");
+  static const field self::E e3 = const self::E::•(2, "e3");
+  const constructor •(core::int index, core::String name) → self::E
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic
+  ;
+static method main() → dynamic
+  ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///issue48303.dart:9:6 -> ListConstant(const <E*>[const E{}, const E{}, const E{}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48303.dart:10:3 -> InstanceConstant(const E{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48303.dart:11:3 -> InstanceConstant(const E{})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48303.dart:12:3 -> InstanceConstant(const E{})
+Extra constant evaluation: evaluated: 11, effectively constant: 4
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.transformed.expect
new file mode 100644
index 0000000..cf0dbb9
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48303.dart.weak.transformed.expect
@@ -0,0 +1,55 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class M1 extends core::Enum /*isMixinDeclaration*/  {
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+abstract class _E&_Enum&M1 extends core::_Enum implements self::M1 /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
+  const synthetic constructor •(core::int index, core::String _name) → self::_E&_Enum&M1
+    : super core::_Enum::•(index, _name)
+    ;
+  method mixedInMethod1(core::int v) → core::int
+    return v;
+}
+class E extends self::_E&_Enum&M1 /*isEnum*/  {
+  static const field core::List<self::E> values = #C10;
+  static const field self::E e1 = #C3;
+  static const field self::E e2 = #C6;
+  static const field self::E e3 = #C9;
+  const constructor •(core::int index, core::String name) → self::E
+    : super self::_E&_Enum&M1::•(index, name)
+    ;
+  method toString() → core::String
+    return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic x, dynamic y) → dynamic {
+  if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
+    throw "Expected ${x} to be equal to ${y}.";
+  }
+}
+static method main() → dynamic {
+  self::expectEquals(#C3.{self::E::toString}(){() → core::String}, "E.e1");
+}
+
+constants  {
+  #C1 = 0
+  #C2 = "e1"
+  #C3 = self::E {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "e2"
+  #C6 = self::E {index:#C4, _name:#C5}
+  #C7 = 2
+  #C8 = "e3"
+  #C9 = self::E {index:#C7, _name:#C8}
+  #C10 = <self::E*>[#C3, #C6, #C9]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48303.dart:
+- E. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _E&_Enum&M1. (from org-dartlang-testcase:///issue48303.dart:9:6)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:103:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
index 29920d5..a026fd3 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
index 29920d5..a026fd3 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
index aed1af8..2cd33ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
index aed1af8..2cd33ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect
index 65b7311..b88e3da 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = const <self::E>[self::E::one, self::E::two];
-  static const field self::E one = const self::E::•(0, "one", 1);
-  static const field self::E two = const self::E::•(1, "two", 2);
   final field core::int foo;
   final field core::int bar;
   static field self::E staticFoo;
+  static const field self::E one = const self::E::•(0, "one", 1);
+  static const field self::E two = const self::E::•(1, "two", 2);
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = const <self::E2<dynamic>>[self::E2::one, self::E2::two];
-  static const field self::E2<core::num> one = const self::E2::•<core::num>(0, "one", 1);
-  static const field self::E2<core::String> two = const self::E2::•<core::String>(1, "two", "2");
   final field self::E2::X% foo;
   final field self::E2::X? bar;
   static field () → self::E2<dynamic> staticFoo;
+  static const field self::E2<core::num> one = const self::E2::•<core::num>(0, "one", 1);
+  static const field self::E2<core::String> two = const self::E2::•<core::String>(1, "two", "2");
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
index aed1af8..2cd33ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
@@ -4,11 +4,11 @@
 
 class E extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E> values = #C9;
-  static const field self::E one = #C5;
-  static const field self::E two = #C8;
   final field core::int foo;
   final field core::int bar = 42;
   static field self::E staticFoo = self::E::f();
+  static const field self::E one = #C5;
+  static const field self::E two = #C8;
   const constructor •(core::int index, core::String name, core::int foo) → self::E
     : self::E::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -23,11 +23,11 @@
 }
 class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic>> values = #C14;
-  static const field self::E2<core::num> one = #C11;
-  static const field self::E2<core::String> two = #C13;
   final field self::E2::X% foo;
   final field self::E2::X? bar = null;
   static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+  static const field self::E2<core::num> one = #C11;
+  static const field self::E2<core::String> two = #C13;
   const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
index 49718de..db452f8 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
index 49718de..db452f8 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.strong.transformed.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
index cbc80ff..7e7d8fa 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
index cbc80ff..7e7d8fa 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.modular.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
index c98ffa3..593c828 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.outline.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = const <self::E0>[self::E0::one, self::E0::two];
-  static const field self::E0 one = const self::E0::•(0, "one", 1, bar: 1);
-  static const field self::E0 two = const self::E0::•(1, "two", 2, bar: 2);
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = const self::E0::•(0, "one", 1, bar: 1);
+  static const field self::E0 two = const self::E0::•(1, "two", 2, bar: 2);
   const constructor •(core::int index, core::String name, core::int foo, {required core::int bar}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = const <self::E1<dynamic>>[self::E1::one, self::E1::two];
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = const self::E1::•<core::String>(0, "one", foo: "1");
   static const field self::E1<core::int> two = const self::E1::•<core::int>(1, "two", foo: 2);
-  final field self::E1::X% foo;
   const constructor •(core::int index, core::String name, {required self::E1::X% foo}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = const <self::E2<dynamic, dynamic, dynamic>>[self::E2::one, self::E2::two, self::E2::three];
-  static const field self::E2<core::int, core::String, core::double> one = const self::E2::•<core::int, core::String, core::double>(0, "one", 1, bar: "1", baz: 3.14);
-  static const field self::E2<core::String, core::int, core::double> two = const self::E2::•<core::String, core::int, core::double>(1, "two", "2", baz: 3.14, bar: 2);
-  static const field self::E2<core::double, core::bool, dynamic> three = const self::E2::•<core::double, core::bool, dynamic>(2, "three", 3.0, bar: false);
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = const self::E2::•<core::int, core::String, core::double>(0, "one", 1, bar: "1", baz: 3.14);
+  static const field self::E2<core::String, core::int, core::double> two = const self::E2::•<core::String, core::int, core::double>(1, "two", "2", baz: 3.14, bar: 2);
+  static const field self::E2<core::double, core::bool, dynamic> three = const self::E2::•<core::double, core::bool, dynamic>(2, "three", 3.0, bar: false);
   const constructor •(core::int index, core::String name, self::E2::X% foo, {required self::E2::Y% bar, self::E2::Z? baz = null}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
index cbc80ff..7e7d8fa 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments.dart.weak.transformed.expect
@@ -4,10 +4,10 @@
 
 class E0 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E0> values = #C8;
-  static const field self::E0 one = #C4;
-  static const field self::E0 two = #C7;
   final field core::int foo;
   final field core::int bar;
+  static const field self::E0 one = #C4;
+  static const field self::E0 two = #C7;
   const constructor •(core::int index, core::String name = #C9, core::int foo, {required core::int bar = #C9}) → self::E0
     : self::E0::foo = foo, self::E0::bar = bar, super core::_Enum::•(index, name)
     ;
@@ -16,9 +16,9 @@
 }
 class E1<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1<dynamic>> values = #C13;
+  final field self::E1::X% foo;
   static const field self::E1<core::String> one = #C11;
   static const field self::E1<core::int> two = #C12;
-  final field self::E1::X% foo;
   const constructor •(core::int index = #C9, core::String name, {required self::E1::X% foo = #C9}) → self::E1<self::E1::X%>
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -27,12 +27,12 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic, Z extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic, dynamic>> values = #C22;
-  static const field self::E2<core::int, core::String, core::double> one = #C15;
-  static const field self::E2<core::String, core::int, core::double> two = #C17;
-  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   final field self::E2::X% foo;
   final field self::E2::Y% bar;
   final field self::E2::Z? baz;
+  static const field self::E2<core::int, core::String, core::double> one = #C15;
+  static const field self::E2<core::String, core::int, core::double> two = #C17;
+  static const field self::E2<core::double, core::bool, dynamic> three = #C21;
   const constructor •(core::int index, core::String name = #C9, self::E2::X% foo, {required self::E2::Y% bar = #C9, self::E2::Z? baz = #C9}) → self::E2<self::E2::X%, self::E2::Y%, self::E2::Z%>
     : self::E2::foo = foo, self::E2::bar = bar, self::E2::baz = baz, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
index a84ac89..1d119a5 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.expect
@@ -4,13 +4,13 @@
 
 class C extends core::_Enum /*isEnum*/  {
   static const field core::List<self::C> values = #C20;
+  final field core::String log;
   static const field self::C a = #C4;
   static const field self::C b = #C7;
   static const field self::C c = #C10;
   static const field self::C d = #C13;
   static const field self::C e = #C16;
   static const field self::C f = #C19;
-  final field core::String log;
   const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
     : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
index a84ac89..1d119a5 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.strong.transformed.expect
@@ -4,13 +4,13 @@
 
 class C extends core::_Enum /*isEnum*/  {
   static const field core::List<self::C> values = #C20;
+  final field core::String log;
   static const field self::C a = #C4;
   static const field self::C b = #C7;
   static const field self::C c = #C10;
   static const field self::C d = #C13;
   static const field self::C e = #C16;
   static const field self::C f = #C19;
-  final field core::String log;
   const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
     : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
index 6ce1261..20fc39a 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.expect
@@ -4,13 +4,13 @@
 
 class C extends core::_Enum /*isEnum*/  {
   static const field core::List<self::C> values = #C20;
+  final field core::String log;
   static const field self::C a = #C4;
   static const field self::C b = #C7;
   static const field self::C c = #C10;
   static const field self::C d = #C13;
   static const field self::C e = #C16;
   static const field self::C f = #C19;
-  final field core::String log;
   const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
     : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
index 6ce1261..20fc39a 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.modular.expect
@@ -4,13 +4,13 @@
 
 class C extends core::_Enum /*isEnum*/  {
   static const field core::List<self::C> values = #C20;
+  final field core::String log;
   static const field self::C a = #C4;
   static const field self::C b = #C7;
   static const field self::C c = #C10;
   static const field self::C d = #C13;
   static const field self::C e = #C16;
   static const field self::C f = #C19;
-  final field core::String log;
   const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
     : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect
index 4a9962c..d5fea66 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.outline.expect
@@ -4,13 +4,13 @@
 
 class C extends core::_Enum /*isEnum*/  {
   static const field core::List<self::C> values = const <self::C>[self::C::a, self::C::b, self::C::c, self::C::d, self::C::e, self::C::f];
+  final field core::String log;
   static const field self::C a = const self::C::•(0, "a", 1, 2, z: 3);
   static const field self::C b = let final core::int #t1 = 1 in let final core::String #t2 = "b" in let final core::int #t3 = 3 in const self::C::•(#t1, #t2, 1, 2, z: #t3);
   static const field self::C c = let final core::int #t4 = 2 in let final core::String #t5 = "c" in let final core::int #t6 = 1 in let final core::int #t7 = 3 in const self::C::•(#t4, #t5, #t6, 2, z: #t7);
   static const field self::C d = const self::C::named1(3, "d", 1, 2, 3);
   static const field self::C e = const self::C::named2(4, "e", 1, 2, 3);
   static const field self::C f = const self::C::named3(5, "f", 1, 2, 3);
-  final field core::String log;
   const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = 42}) → self::C
     : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
index 6ce1261..20fc39a 100644
--- a/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/named_arguments_anywhere/redirecting_constructor.dart.weak.transformed.expect
@@ -4,13 +4,13 @@
 
 class C extends core::_Enum /*isEnum*/  {
   static const field core::List<self::C> values = #C20;
+  final field core::String log;
   static const field self::C a = #C4;
   static const field self::C b = #C7;
   static const field self::C c = #C10;
   static const field self::C d = #C13;
   static const field self::C e = #C16;
   static const field self::C f = #C19;
-  final field core::String log;
   const constructor •(core::int index, core::String name, core::int x, core::int y, {core::int z = #C21}) → self::C
     : self::C::log = "x=${x}, y=${y}, z=${z}", super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
index 81dd3f0..2e42601 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
index 81dd3f0..2e42601 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.strong.transformed.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
index afd513d..6b1338a 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
index afd513d..6b1338a 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.modular.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect
index 6ded04c..b00ddd1 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.outline.expect
@@ -12,9 +12,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = const <self::E1>[self::E1::one, self::E1::two];
+  final field core::int foo;
   static const field self::E1 one = const self::E1::•(0, "one", 1);
   static const field self::E1 two = const self::E1::named(1, "two", 2);
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -26,9 +26,9 @@
 }
 class E2 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2> values = const <self::E2>[self::E2::one, self::E2::two];
+  final field core::int foo;
   static const field self::E2 one = const self::E2::•(0, "one", 1);
   static const field self::E2 two = const self::E2::named(1, "two", 2);
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
index afd513d..6b1338a 100644
--- a/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart.weak.transformed.expect
@@ -20,9 +20,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -37,12 +37,12 @@
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
+  final field core::int foo;
   static const field self::E2 one = #C9;
   static const field self::E2 two = invalid-expression "pkg/front_end/testcases/enhanced_enums/redirecting_initializers.dart:22:35: Error: Too many positional arguments: 3 allowed, but 4 found.
 Try removing the extra positional arguments.
   const E2.named(int value) : this(value, value); // Error.
                                   ^";
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E2
     : self::E2::foo = foo, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
index edb79d9..375eda9 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
index edb79d9..375eda9 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.strong.transformed.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
index aaeb527..88a8796 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
index aaeb527..88a8796 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.modular.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect
index e4af5a2..f072647 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.outline.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = const <self::E1>[self::E1::one, self::E1::two];
+  final field core::int foo;
   static const field self::E1 one = const self::E1::•(0, "one", 1);
   static const field self::E1 two = const self::E1::named(1, "two", 2);
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = const <self::E2<dynamic, dynamic>>[self::E2::one, self::E2::two, self::E2::three];
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = const self::E2::•<core::int, core::String>(0, "one", 1, "one");
   static const field self::E2<core::int, core::String> two = const self::E2::named<core::int, core::String>(1, "two", "two", 2);
   static const field self::E2<core::String, core::String> three = const self::E2::named<core::String, core::String>(2, "three", "three", "three");
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
index aaeb527..88a8796 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_fields.dart.weak.transformed.expect
@@ -4,9 +4,9 @@
 
 class E1 extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E1> values = #C8;
+  final field core::int foo;
   static const field self::E1 one = #C4;
   static const field self::E1 two = #C7;
-  final field core::int foo;
   const constructor •(core::int index, core::String name, core::int foo) → self::E1
     : self::E1::foo = foo, super core::_Enum::•(index, name)
     ;
@@ -18,11 +18,11 @@
 }
 class E2<X extends core::Object? = dynamic, Y extends core::Object? = dynamic> extends core::_Enum /*isEnum*/  {
   static const field core::List<self::E2<dynamic, dynamic>> values = #C13;
+  final field self::E2::X% foo;
+  final field self::E2::Y% bar;
   static const field self::E2<core::int, core::String> one = #C9;
   static const field self::E2<core::int, core::String> two = #C10;
   static const field self::E2<core::String, core::String> three = #C12;
-  final field self::E2::X% foo;
-  final field self::E2::Y% bar;
   const constructor •(core::int index, core::String name, self::E2::X% foo, self::E2::Y% bar) → self::E2<self::E2::X%, self::E2::Y%>
     : self::E2::foo = foo, self::E2::bar = bar, super core::_Enum::•(index, name)
     ;
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
index cf6273c..16540f3 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A = core::_Enum with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M = core::_Enum with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -77,7 +77,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
index 8b41530..ceb7cd71 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.strong.transformed.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A extends core::_Enum implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M extends core::_Enum implements self::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -78,7 +78,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
index ec20440..62be6f0 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A = core::_Enum with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M = core::_Enum with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -77,7 +77,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
index ec20440..62be6f0 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.modular.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A = core::_Enum with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M = core::_Enum with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -77,7 +77,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.outline.expect
index abd958f..d37a555 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.outline.expect
@@ -32,7 +32,7 @@
   const constructor •(core::int index, core::String name) → self::E1
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A = core::_Enum with self::A /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -55,7 +55,7 @@
   const constructor •(core::int index, core::String name) → self::E2
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M = core::_Enum with self::M /*isAnonymousMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -71,7 +71,7 @@
   const constructor •(core::int index, core::String name) → self::E3
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic
   ;
@@ -93,4 +93,4 @@
 Evaluated: ListLiteral @ org-dartlang-testcase:///simple_mixins.dart:23:6 -> ListConstant(const <E3*>[const E3{}, const E3{}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_mixins.dart:23:18 -> InstanceConstant(const E3{})
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///simple_mixins.dart:23:23 -> InstanceConstant(const E3{})
-Extra constant evaluation: evaluated: 22, effectively constant: 9
+Extra constant evaluation: evaluated: 31, effectively constant: 9
diff --git a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
index 364ca56..fcb9129 100644
--- a/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/simple_mixins.dart.weak.transformed.expect
@@ -36,7 +36,7 @@
     : super self::_E1&_Enum&A::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E1.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E2&_Enum&A extends core::_Enum implements self::A /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E2&_Enum&A
@@ -60,7 +60,7 @@
     : super self::_E2&_Enum&A&B::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E2.${this.{core::_Enum::_name}{core::String}}";
 }
 abstract class _E3&_Enum&M extends core::_Enum implements self::M /*isAnonymousMixin,isEliminatedMixin,hasConstConstructor*/  {
   const synthetic constructor •(core::int index, core::String _name) → self::_E3&_Enum&M
@@ -78,7 +78,7 @@
     : super self::_E3&_Enum&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E3.${this.{core::_Enum::_name}{core::String}}";
 }
 static method expectEquals(dynamic x, dynamic y) → dynamic {
   if(!(x =={core::Object::==}{(core::Object) → core::bool} y)) {
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
index 5a75aa0..f4b5349 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
index c4ce6f4..da949ab 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.strong.transformed.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
index 08ab64c..5e0c562 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
index 08ab64c..5e0c562 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.modular.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect
index 7647f76..b8c85bc 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.outline.expect
@@ -30,7 +30,7 @@
   const constructor •(core::int index, core::String name) → self::E<self::E::S, self::E::T>
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic
   ;
@@ -39,4 +39,4 @@
 Extra constant evaluation status:
 Evaluated: ListLiteral @ org-dartlang-testcase:///supertype_resolved_before_checking.dart:16:6 -> ListConstant(const <E<dynamic, dynamic>*>[const E<num*, num*>{}])
 Evaluated: ConstructorInvocation @ org-dartlang-testcase:///supertype_resolved_before_checking.dart:18:27 -> InstanceConstant(const E<num*, num*>{})
-Extra constant evaluation: evaluated: 6, effectively constant: 2
+Extra constant evaluation: evaluated: 9, effectively constant: 2
diff --git a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
index 357bbc8..737b8b8 100644
--- a/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/enhanced_enums/supertype_resolved_before_checking.dart.weak.transformed.expect
@@ -33,7 +33,7 @@
     : super self::_E&_Enum&GM&M::•(index, name)
     ;
   method toString() → core::String
-    ;
+    return "E.${this.{core::_Enum::_name}{core::String}}";
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index f762981..3788a0f 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -28,6 +28,7 @@
 constructor_tearoffs/new_as_selector: FormatterCrash
 dart2js/late_fields: FormatterCrash
 dart2js/late_statics: FormatterCrash
+enhanced_enums/conflicting_elements: FormatterCrash
 enhanced_enums/constructor_calls: FormatterCrash
 enhanced_enums/entries_with_type_arguments: FormatterCrash
 enhanced_enums/enum_as_supertype: FormatterCrash
@@ -36,6 +37,7 @@
 enhanced_enums/issue48084: FormatterCrash
 enhanced_enums/issue48181: FormatterCrash
 enhanced_enums/issue48232: FormatterCrash
+enhanced_enums/issue48303: FormatterCrash
 enhanced_enums/malformed_constructors: FormatterCrash
 enhanced_enums/members: FormatterCrash
 enhanced_enums/named_arguments: FormatterCrash
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
index 7777d7a..2f5ecea 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
@@ -22,6 +22,6 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3398,getterSelectorId:3399]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3331,getterSelectorId:3332]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
index a2ce7a5..3edc30c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/create_test.dart.expect
@@ -37,9 +37,9 @@
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(#C1 ?{core::String} "" : "mapKeep", #C2){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", "hasKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", "clearKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
@@ -82,7 +82,7 @@
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
   constructor _() → self::BarKeep
@@ -105,7 +105,7 @@
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
   constructor _() → self::HasKeep
@@ -119,7 +119,7 @@
 }
 class ClearKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
   constructor _() → self::ClearKeep
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
index a36af4a..5f438f9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/decode_test.dart.expect
@@ -30,9 +30,9 @@
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep", createEmptyInstance: #C2) in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", "barKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(#C1 ?{core::String} "" : "mapKeep", #C3){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", "hasKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", "clearKeep", #C5){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
@@ -69,7 +69,7 @@
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep", createEmptyInstance: #C3) in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::a}<core::int>(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
   constructor _() → self::BarKeep
@@ -86,7 +86,7 @@
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep", createEmptyInstance: #C4) in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
   constructor _() → self::HasKeep
@@ -100,7 +100,7 @@
 }
 class ClearKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t5 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep", createEmptyInstance: #C5) in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t5.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t5;
   constructor _() → self::ClearKeep
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
index 423420c..0df0c27 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/encode_all_fields.dart.expect
@@ -44,7 +44,7 @@
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(3, #C1 ?{core::String} "" : "mapKeep", "FooKeep.MapKeepEntry", "mapKeep", #C2){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::ZopDrop>(4, #C1 ?{core::String} "" : "mapDrop", "FooKeep.MapDropEntry", "mapDrop", #C3){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep", "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
@@ -112,7 +112,7 @@
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
   constructor _() → self::HasKeep
@@ -128,7 +128,7 @@
 }
 class ClearKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
   constructor _() → self::ClearKeep
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
index c046050..426f988 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/protobuf_handler/lib/freeze_test.dart.expect
@@ -40,9 +40,9 @@
 class FooKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t1 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "FooKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::BarKeep>(1, #C1 ?{core::String} "" : "barKeep", "barKeep", #C2){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::BarKeep}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.m] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::m}<core::String, self::BarKeep>(#C1 ?{core::String} "" : "mapKeep", #C2){(core::int, core::String, {defaultEnumValue: pro::ProtobufEnum?, entryClassName: core::String?, enumValues: core::List<pro::ProtobufEnum>?, keyFieldType: core::int?, packageName: pro::PackageName, protoName: core::String?, valueCreator: () →? pro::GeneratedMessage, valueFieldType: core::int?, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::a}<core::int>(5, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::HasKeep>(6, #C1 ?{core::String} "" : "hasKeep", "hasKeep", #C3){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::HasKeep}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.aOM] [@vm.inferred-type.metadata=!? (skip check)] #t1.{pro::BuilderInfo::aOM}<self::ClearKeep>(7, #C1 ?{core::String} "" : "clearKeep", "clearKeep", #C4){(core::int, core::String, {protoName: core::String?, subBuilder: () →? self::ClearKeep}) → void};
@@ -85,7 +85,7 @@
 class BarKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t2 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "BarKeep") in block {
     [@vm.direct-call.metadata=protobuf::BuilderInfo.a] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::a}<core::int>(1, #C1 ?{core::String} "" : "aKeep"){(core::int, core::String, core::int, {defaultOrMaker: dynamic, enumValues: core::List<pro::ProtobufEnum>?, protoName: core::String?, subBuilder: () →? pro::GeneratedMessage, valueOf: (core::int) →? pro::ProtobufEnum?}) → void};
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t2.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t2;
   constructor _() → self::BarKeep
@@ -108,7 +108,7 @@
 }
 class HasKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t3 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "HasKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t3.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t3;
   constructor _() → self::HasKeep
@@ -122,7 +122,7 @@
 }
 class ClearKeep extends pro::GeneratedMessage {
 [@vm.inferred-type.metadata=protobuf::BuilderInfo?]  static final field pro::BuilderInfo _i = let final pro::BuilderInfo #t4 = new pro::BuilderInfo::•(#C1 ?{core::String} "" : "ClearKeep") in block {
-    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
+    [@vm.direct-call.metadata=protobuf::BuilderInfo.add] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::add}<Null>(0, null, null, null, null){(core::int, core::String, core::int?, dynamic, () →? pro::GeneratedMessage, (core::int) →? pro::ProtobufEnum?, core::List<pro::ProtobufEnum>?, {protoName: core::String?}) → void};
     [@vm.direct-call.metadata=protobuf::BuilderInfo.hasRequiredFields] [@vm.inferred-type.metadata=!? (skip check)] #t4.{pro::BuilderInfo::hasRequiredFields} = false;
   } =>#t4;
   constructor _() → self::ClearKeep
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
index 69b1559..ce3bd09 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_41452_nnbd_strong.dart.expect
@@ -17,7 +17,7 @@
   synthetic constructor •() → self::_SplayTree<self::_SplayTree::Node>
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method add(covariant-by-class self::_SplayTree::Node n) → dynamic {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method add([@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] covariant-by-class self::_SplayTree::Node n) → dynamic {
     self::_SplayTree::Node? root = [@vm.direct-call.metadata=#lib::SplayTreeMap._root] [@vm.inferred-type.metadata=#lib::_SplayTreeMapNode<dynamic>] this.{self::_SplayTree::_root}{self::_SplayTree::Node?};
     ;
     core::print([@vm.direct-call.metadata=#lib::_SplayTreeNode.left] [@vm.inferred-type.metadata=dart.core::Null? (value: null)] root{self::_SplayTree::Node}.{self::_SplayTreeNode::left}{self::_SplayTree::Node?});
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
index fa24c7a..9b6b0d9 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
@@ -19,7 +19,7 @@
   synthetic constructor •() → self::A1
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=#lib::T1?] dynamic a5 = #C1]) → void {
     [@vm.direct-call.metadata=#lib::A1.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A1::foo} = _in::unsafeCast<self::T1?>(a5);
   }
 }
@@ -42,7 +42,7 @@
   synthetic constructor •() → self::A2
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=#lib::T2?] dynamic a6 = #C1]) → void {
     [@vm.direct-call.metadata=#lib::A2.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A2::foo} = a6;
   }
 }
@@ -75,7 +75,7 @@
   synthetic constructor •() → self::A3
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:24,getterSelectorId:25]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:24,getterSelectorId:25]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=#lib::T3?] dynamic a7 = #C1]) → void {
     [@vm.direct-call.metadata=#lib::A3.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A3::foo} = a7;
   }
 }
@@ -98,7 +98,7 @@
   synthetic constructor •() → self::A4
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:32,getterSelectorId:33]  method call([dynamic a1 = #C1, dynamic a2 = #C1, dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a7 = #C1, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = #C1]) → void {
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:32,getterSelectorId:33]  method call([dynamic a1 = #C1, dynamic a2 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a3 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a5 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a6 = #C1, [@vm.inferred-type.metadata=dart.core::_Smi?] dynamic a7 = #C1, [@vm.inferred-type.metadata=#lib::T4?] dynamic a8 = #C1]) → void {
     [@vm.direct-call.metadata=#lib::A4.foo] [@vm.inferred-type.metadata=!? (skip check)] this.{self::A4::foo} = a8;
   }
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
index 5a63ba0..512caf3 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
@@ -51,6 +51,6 @@
   synthetic constructor •() → self::ConstClass
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3402,getterSelectorId:3403]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3335,getterSelectorId:3336]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index a3073eb..9922f32 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -3295,7 +3295,6 @@
     "../../../tests/standalone/io/http_parser_header_add_test.dart",
     "../../../tests/standalone/io/http_proxy_close_test.dart",
     "../../../tests/standalone/io/http_proxy_configuration_test.dart",
-    "../../../tests/standalone/io/http_redirect_test.dart",
     "../../../tests/standalone/io/http_request_pipeling_test.dart",
     "../../../tests/standalone/io/http_requested_uri_test.dart",
     "../../../tests/standalone/io/http_response_deadline_test.dart",
@@ -6622,7 +6621,6 @@
     "../../../tests/standalone_2/io/http_parser_header_add_test.dart",
     "../../../tests/standalone_2/io/http_proxy_close_test.dart",
     "../../../tests/standalone_2/io/http_proxy_configuration_test.dart",
-    "../../../tests/standalone_2/io/http_redirect_test.dart",
     "../../../tests/standalone_2/io/http_request_pipeling_test.dart",
     "../../../tests/standalone_2/io/http_requested_uri_test.dart",
     "../../../tests/standalone_2/io/http_response_deadline_test.dart",
diff --git a/sdk/lib/_http/http_impl.dart b/sdk/lib/_http/http_impl.dart
index 312ca7c..b97025a 100644
--- a/sdk/lib/_http/http_impl.dart
+++ b/sdk/lib/_http/http_impl.dart
@@ -2340,7 +2340,7 @@
   final SecurityContext? context;
   final Set<_HttpClientConnection> _idle = HashSet();
   final Set<_HttpClientConnection> _active = HashSet();
-  final Set<ConnectionTask> _socketTasks = HashSet();
+  final Set<ConnectionTask<Socket>> _socketTasks = HashSet();
   final _pending = ListQueue<void Function()>();
   int _connecting = 0;
 
@@ -2434,14 +2434,14 @@
       return currentBadCertificateCallback(certificate, uriHost, uriPort);
     }
 
-    Future<ConnectionTask> connectionTask = (isSecure && proxy.isDirect
+    Future<ConnectionTask<Socket>> connectionTask = (isSecure && proxy.isDirect
         ? SecureSocket.startConnect(host, port,
             context: context, onBadCertificate: callback)
         : Socket.startConnect(host, port));
     _connecting++;
-    return connectionTask.then((ConnectionTask task) {
+    return connectionTask.then((ConnectionTask<Socket> task) {
       _socketTasks.add(task);
-      Future socketFuture = task.socket;
+      Future<Socket> socketFuture = task.socket;
       final Duration? connectionTimeout = client.connectionTimeout;
       if (connectionTimeout != null) {
         socketFuture = socketFuture.timeout(connectionTimeout);
diff --git a/sdk/lib/_internal/vm/bin/platform_patch.dart b/sdk/lib/_internal/vm/bin/platform_patch.dart
index db632d6..fbcd877 100644
--- a/sdk/lib/_internal/vm/bin/platform_patch.dart
+++ b/sdk/lib/_internal/vm/bin/platform_patch.dart
@@ -48,7 +48,7 @@
   static String? _packageConfig() => VMLibraryHooks.packageConfigString;
 
   @patch
-  static Uri _script() => VMLibraryHooks.platformScript;
+  static Uri _script() => VMLibraryHooks.platformScript!;
 
   // This script singleton is written to by the embedder if applicable.
   @pragma("vm:entry-point")
diff --git a/sdk/lib/_internal/vm/lib/convert_patch.dart b/sdk/lib/_internal/vm/lib/convert_patch.dart
index 2885579..5893e26 100644
--- a/sdk/lib/_internal/vm/lib/convert_patch.dart
+++ b/sdk/lib/_internal/vm/lib/convert_patch.dart
@@ -28,12 +28,7 @@
 @patch
 dynamic _parseJson(
     String source, Object? Function(Object? key, Object? value)? reviver) {
-  _BuildJsonListener listener;
-  if (reviver == null) {
-    listener = new _BuildJsonListener();
-  } else {
-    listener = new _ReviverJsonListener(reviver);
-  }
+  _JsonListener listener = new _JsonListener(reviver);
   var parser = new _JsonStringParser(listener);
   parser.chunk = source;
   parser.chunkEnd = source.length;
@@ -88,36 +83,16 @@
 // Simple API for JSON parsing.
 
 /**
- * Listener for parsing events from [_ChunkedJsonParser].
- */
-abstract class _JsonListener {
-  void handleString(String value) {}
-  void handleNumber(num value) {}
-  void handleBool(bool value) {}
-  void handleNull() {}
-  void beginObject() {}
-  void propertyName() {}
-  void propertyValue() {}
-  void endObject() {}
-  void beginArray() {}
-  void arrayElement() {}
-  void endArray() {}
-
-  /**
-   * Read out the final result of parsing a JSON string.
-   *
-   * Must only be called when the entire input has been parsed.
-   */
-  dynamic get result;
-}
-
-/**
- * A [_JsonListener] that builds data objects from the parser events.
+ * A [_JsonListener] builds data objects from the parser events.
  *
  * This is a simple stack-based object builder. It keeps the most recently
  * seen value in a variable, and uses it depending on the following event.
  */
-class _BuildJsonListener extends _JsonListener {
+class _JsonListener {
+  _JsonListener(this.reviver);
+
+  final Object? Function(Object? key, Object? value)? reviver;
+
   /**
    * Stack used to handle nested containers.
    *
@@ -126,12 +101,17 @@
    * which is also stored on the stack.
    */
   final List<Object?> stack = [];
-  /** The current [Map] or [List] being built. */
-  dynamic currentContainer;
+
+  /** The current [Map] or [List] being built, or null if not building a
+  * container.
+  */
+  Object? currentContainer;
+
   /** The most recently read property key. */
   String key = '';
+
   /** The most recently read value. */
-  dynamic value;
+  Object? value;
 
   /** Pushes the currently active container (and key, if a [Map]). */
   void pushContainer() {
@@ -168,12 +148,16 @@
   }
 
   void propertyName() {
-    key = value;
+    key = value as String;
     value = null;
   }
 
   void propertyValue() {
-    Map map = currentContainer;
+    var map = currentContainer as Map;
+    var reviver = this.reviver;
+    if (reviver != null) {
+      value = reviver(key, value);
+    }
     map[key] = value;
     key = '';
     value = null;
@@ -185,11 +169,16 @@
 
   void beginArray() {
     pushContainer();
-    currentContainer = [];
+    currentContainer = <dynamic>[];
   }
 
   void arrayElement() {
-    currentContainer.add(value);
+    var list = currentContainer as List;
+    var reviver = this.reviver;
+    if (reviver != null) {
+      value = reviver(list.length, value);
+    }
+    list.add(value);
     value = null;
   }
 
@@ -197,30 +186,19 @@
     popContainer();
   }
 
-  /** Read out the final result of parsing a JSON string. */
+  /**
+   * Read out the final result of parsing a JSON string.
+   *
+   * Must only be called when the entire input has been parsed.
+   */
   dynamic get result {
     assert(currentContainer == null);
-    return value;
-  }
-}
-
-class _ReviverJsonListener extends _BuildJsonListener {
-  final Object? Function(Object? key, Object? value) reviver;
-  _ReviverJsonListener(this.reviver);
-
-  void arrayElement() {
-    List list = currentContainer;
-    value = reviver(list.length, value);
-    super.arrayElement();
-  }
-
-  void propertyValue() {
-    value = reviver(key, value);
-    super.propertyValue();
-  }
-
-  dynamic get result {
-    return reviver(null, value);
+    var reviver = this.reviver;
+    if (reviver != null) {
+      return reviver(null, value);
+    } else {
+      return value;
+    }
   }
 }
 
@@ -1477,13 +1455,7 @@
 
   static _JsonStringParser _createParser(
       Object? Function(Object? key, Object? value)? reviver) {
-    _BuildJsonListener listener;
-    if (reviver == null) {
-      listener = new _BuildJsonListener();
-    } else {
-      listener = new _ReviverJsonListener(reviver);
-    }
-    return new _JsonStringParser(listener);
+    return new _JsonStringParser(new _JsonListener(reviver));
   }
 
   void addSlice(String chunk, int start, int end, bool isLast) {
@@ -1591,13 +1563,7 @@
   static _JsonUtf8Parser _createParser(
       Object? Function(Object? key, Object? value)? reviver,
       bool allowMalformed) {
-    _BuildJsonListener listener;
-    if (reviver == null) {
-      listener = new _BuildJsonListener();
-    } else {
-      listener = new _ReviverJsonListener(reviver);
-    }
-    return new _JsonUtf8Parser(listener, allowMalformed);
+    return new _JsonUtf8Parser(new _JsonListener(reviver), allowMalformed);
   }
 
   void addSlice(List<int> chunk, int start, int end, bool isLast) {
diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart
index 3d7a3cd8f..e0267ab 100644
--- a/sdk/lib/_internal/vm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/vm/lib/internal_patch.dart
@@ -7,6 +7,7 @@
 /// used by patches of that library. We plan to change this when we have a
 /// shared front end and simply use parts.
 
+import "dart:async" show Timer;
 import "dart:core" hide Symbol;
 
 import "dart:isolate" show SendPort;
@@ -69,36 +70,30 @@
 
 class VMLibraryHooks {
   // Example: "dart:isolate _Timer._factory"
-  static var timerFactory;
+  static Timer Function(int, void Function(Timer), bool)? timerFactory;
 
   // Example: "dart:io _EventHandler._sendData"
-  static var eventHandlerSendData;
+  static late void Function(Object?, SendPort, int) eventHandlerSendData;
 
   // A nullary closure that answers the current clock value in milliseconds.
   // Example: "dart:io _EventHandler._timerMillisecondClock"
-  static var timerMillisecondClock;
-
-  // Implementation of Resource.readAsBytes.
-  static var resourceReadAsBytes;
+  static late int Function() timerMillisecondClock;
 
   // Implementation of package root/map provision.
-  static var packageRootString;
-  static var packageConfigString;
-  static var packageConfigUriFuture;
-  static var resolvePackageUriFuture;
+  static String? packageRootString;
+  static String? packageConfigString;
+  static Future<Uri?> Function()? packageConfigUriFuture;
+  static Future<Uri?> Function(Uri)? resolvePackageUriFuture;
 
-  static var _computeScriptUri;
-  static var _cachedScript;
-  static set platformScript(var f) {
-    _computeScriptUri = f;
+  static Uri Function()? _computeScriptUri;
+  static Uri? _cachedScript;
+  static set platformScript(Object? f) {
+    _computeScriptUri = f as Uri Function()?;
     _cachedScript = null;
   }
 
-  static get platformScript {
-    if (_cachedScript == null && _computeScriptUri != null) {
-      _cachedScript = _computeScriptUri();
-    }
-    return _cachedScript;
+  static Uri? get platformScript {
+    return _cachedScript ??= _computeScriptUri?.call();
   }
 }
 
diff --git a/sdk/lib/_internal/vm/lib/invocation_mirror_patch.dart b/sdk/lib/_internal/vm/lib/invocation_mirror_patch.dart
index ae387bf..6c75bc2 100644
--- a/sdk/lib/_internal/vm/lib/invocation_mirror_patch.dart
+++ b/sdk/lib/_internal/vm/lib/invocation_mirror_patch.dart
@@ -40,8 +40,8 @@
 
   // Internal representation of the invocation mirror.
   String? _functionName;
-  List? _argumentsDescriptor;
-  List? _arguments;
+  List<Object?>? _argumentsDescriptor;
+  List<Object?>? _arguments;
   bool _isSuperInvocation = false;
   int _delayedTypeArgumentsLen = 0;
 
@@ -49,8 +49,8 @@
   Symbol? _memberName;
   int _type = _UNINITIALIZED;
   List<Type>? _typeArguments;
-  List? _positionalArguments;
-  Map<Symbol, dynamic>? _namedArguments;
+  List<Object?>? _positionalArguments;
+  Map<Symbol, Object?>? _namedArguments;
 
   _InvocationMirror._withType(this._memberName, int? type, this._typeArguments,
       this._positionalArguments, this._namedArguments)
@@ -87,7 +87,7 @@
   }
 
   int get _typeArgsLen {
-    int typeArgsLen = _argumentsDescriptor![_TYPE_ARGS_LEN];
+    var typeArgsLen = _argumentsDescriptor![_TYPE_ARGS_LEN] as int;
     return typeArgsLen == 0 ? _delayedTypeArgumentsLen : typeArgsLen;
   }
 
@@ -113,12 +113,13 @@
     if (_positionalArguments == null) {
       // The argument descriptor counts the receiver, but not the type arguments
       // as positional arguments.
-      int numPositionalArguments = _argumentsDescriptor![_POSITIONAL_COUNT] - 1;
+      var numPositionalArguments =
+          (_argumentsDescriptor![_POSITIONAL_COUNT] as int) - 1;
       if (numPositionalArguments == 0) {
         return _positionalArguments = const [];
       }
       // Exclude receiver and type args in the returned list.
-      int receiverIndex = _typeArgsLen > 0 ? 1 : 0;
+      var receiverIndex = _typeArgsLen > 0 ? 1 : 0;
       var args = _arguments!;
       _positionalArguments = new _ImmutableList._from(
           args, receiverIndex + 1, numPositionalArguments);
@@ -129,18 +130,20 @@
   Map<Symbol, dynamic> get namedArguments {
     if (_namedArguments == null) {
       final argsDescriptor = _argumentsDescriptor!;
-      int numArguments = argsDescriptor[_COUNT] - 1; // Exclude receiver.
-      int numPositionalArguments = argsDescriptor[_POSITIONAL_COUNT] - 1;
-      int numNamedArguments = numArguments - numPositionalArguments;
+      var numArguments =
+          (argsDescriptor[_COUNT] as int) - 1; // Exclude receiver.
+      var numPositionalArguments =
+          (argsDescriptor[_POSITIONAL_COUNT] as int) - 1;
+      var numNamedArguments = numArguments - numPositionalArguments;
       if (numNamedArguments == 0) {
         return _namedArguments = const {};
       }
-      int receiverIndex = _typeArgsLen > 0 ? 1 : 0;
-      final namedArguments = new Map<Symbol, dynamic>();
-      for (int i = 0; i < numNamedArguments; i++) {
-        int namedEntryIndex = _FIRST_NAMED_ENTRY + 2 * i;
-        int pos = argsDescriptor[namedEntryIndex + 1];
-        String arg_name = argsDescriptor[namedEntryIndex];
+      var receiverIndex = _typeArgsLen > 0 ? 1 : 0;
+      final namedArguments = new Map<Symbol, Object?>();
+      for (var i = 0; i < numNamedArguments; i++) {
+        var namedEntryIndex = _FIRST_NAMED_ENTRY + 2 * i;
+        var pos = argsDescriptor[namedEntryIndex + 1] as int;
+        var arg_name = argsDescriptor[namedEntryIndex] as String;
         var arg_value = _arguments![receiverIndex + pos];
         namedArguments[new internal.Symbol.unvalidated(arg_name)] = arg_value;
       }
diff --git a/sdk/lib/_internal/vm/lib/timer_impl.dart b/sdk/lib/_internal/vm/lib/timer_impl.dart
index 32f43d0..1f27731 100644
--- a/sdk/lib/_internal/vm/lib/timer_impl.dart
+++ b/sdk/lib/_internal/vm/lib/timer_impl.dart
@@ -29,8 +29,9 @@
     if (_used == _list.length) {
       _resize();
     }
-    timer._indexOrNext = _used++;
-    _list[timer._indexOrNext] = timer;
+    var index = _used++;
+    timer._indexOrNext = index;
+    _list[index] = timer;
     _bubbleUp(timer);
   }
 
@@ -49,8 +50,9 @@
     }
     var last = _list[_used];
     if (!identical(last, timer)) {
-      last._indexOrNext = timer._indexOrNext;
-      _list[last._indexOrNext] = last;
+      var index = timer._indexOrNext as int;
+      last._indexOrNext = index;
+      _list[index] = last;
       if (last._compareTo(timer) < 0) {
         _bubbleUp(last);
       } else {
@@ -81,8 +83,8 @@
 
   void _bubbleDown(_Timer timer) {
     while (true) {
-      int leftIndex = _leftChildIndex(timer._indexOrNext);
-      int rightIndex = _rightChildIndex(timer._indexOrNext);
+      var leftIndex = _leftChildIndex(timer._indexOrNext as int);
+      var rightIndex = _rightChildIndex(timer._indexOrNext as int);
       _Timer newest = timer;
       if (leftIndex < _used && _list[leftIndex]._compareTo(newest) < 0) {
         newest = _list[leftIndex];
@@ -99,14 +101,16 @@
   }
 
   void _swap(_Timer first, _Timer second) {
-    int tmp = first._indexOrNext;
-    first._indexOrNext = second._indexOrNext;
-    second._indexOrNext = tmp;
-    _list[first._indexOrNext] = first;
-    _list[second._indexOrNext] = second;
+    var newFirstIndex = second._indexOrNext as int;
+    var newSecondIndex = first._indexOrNext as int;
+    first._indexOrNext = newFirstIndex;
+    second._indexOrNext = newSecondIndex;
+    _list[newFirstIndex] = first;
+    _list[newSecondIndex] = second;
   }
 
-  _Timer _parent(_Timer timer) => _list[_parentIndex(timer._indexOrNext)];
+  _Timer _parent(_Timer timer) =>
+      _list[_parentIndex(timer._indexOrNext as int)];
 
   static int _parentIndex(int index) => (index - 1) ~/ 2;
   static int _leftChildIndex(int index) => 2 * index + 1;
@@ -136,18 +140,19 @@
   static const _ID_MASK = 0x1fffffff;
   static int _idCount = 0;
 
-  static RawReceivePort? _receivePort;
+  static _RawReceivePortImpl? _receivePort;
   static SendPort? _sendPort;
   static bool _receivePortActive = false;
   static int _scheduledWakeupTime = 0;
 
   static bool _handlingCallbacks = false;
 
-  Function? _callback; // Closure to call when timer fires. null if canceled.
+  void Function(Timer)?
+      _callback; // Closure to call when timer fires. null if canceled.
   int _wakeupTime; // Expiration time.
   final int _milliSeconds; // Duration specified at creation.
   final bool _repeating; // Indicates periodic timers.
-  var _indexOrNext; // Index if part of the TimerHeap, link otherwise.
+  Object? _indexOrNext; // Index if part of the TimerHeap, link otherwise.
   int _id; // Incrementing id to enable sorting of timers with same expiry.
 
   int _tick = 0; // Backing for [tick],
@@ -271,20 +276,20 @@
 
   // Handle the notification of a zero timer. Make sure to also execute non-zero
   // timers with a lower expiration time.
-  static List _queueFromZeroEvent() {
-    var pendingTimers = <dynamic>[];
+  static List<_Timer> _queueFromZeroEvent() {
+    var pendingTimers = <_Timer>[];
     final firstTimer = _firstZeroTimer;
     if (firstTimer != null) {
       // Collect pending timers from the timer heap that have an expiration prior
       // to the currently notified zero timer.
-      var timer;
+      _Timer timer;
       while (!_heap.isEmpty && (_heap.first._compareTo(firstTimer) < 0)) {
         timer = _heap.removeFirst();
         pendingTimers.add(timer);
       }
       // Append the first zero timer to the pending timers.
-      timer = _firstZeroTimer;
-      _firstZeroTimer = timer._indexOrNext;
+      timer = firstTimer;
+      _firstZeroTimer = timer._indexOrNext as _Timer?;
       timer._indexOrNext = null;
       pendingTimers.add(timer);
     }
@@ -321,8 +326,8 @@
     }
   }
 
-  static List _queueFromTimeoutEvent() {
-    var pendingTimers = [];
+  static List<_Timer> _queueFromTimeoutEvent() {
+    var pendingTimers = <_Timer>[];
     final firstTimer = _firstZeroTimer;
     if (firstTimer != null) {
       // Collect pending timers from the timer heap that have an expiration
@@ -331,25 +336,23 @@
       // current time, meaning all timers which are "less than" the first zero
       // timer are expired. The first zero timer will be dispatched when its
       // corresponding message is delivered.
-      var timer;
       while (!_heap.isEmpty && (_heap.first._compareTo(firstTimer) < 0)) {
-        timer = _heap.removeFirst();
+        var timer = _heap.removeFirst();
         pendingTimers.add(timer);
       }
     } else {
       // Collect pending timers from the timer heap which have expired at this
       // time.
       var currentTime = VMLibraryHooks.timerMillisecondClock();
-      var timer;
       while (!_heap.isEmpty && (_heap.first._wakeupTime <= currentTime)) {
-        timer = _heap.removeFirst();
+        var timer = _heap.removeFirst();
         pendingTimers.add(timer);
       }
     }
     return pendingTimers;
   }
 
-  static void _runTimers(List pendingTimers) {
+  static void _runTimers(List<_Timer> pendingTimers) {
     // If there are no pending timers currently reset the id space before we
     // have a chance to enqueue new timers.
     if (_heap.isEmpty && (_firstZeroTimer == null)) {
@@ -375,8 +378,8 @@
         // One of the timers in the pending_timers list can cancel
         // one of the later timers which will set the callback to
         // null. Or the pending zero timer has been canceled earlier.
-        if (timer._callback != null) {
-          var callback = timer._callback;
+        var callback = timer._callback;
+        if (callback != null) {
           if (!timer._repeating) {
             // Mark timer as inactive.
             timer._callback = null;
@@ -414,7 +417,7 @@
   }
 
   static void _handleMessage(msg) {
-    var pendingTimers;
+    List<_Timer> pendingTimers;
     if (msg == _ZERO_EVENT) {
       pendingTimers = _queueFromZeroEvent();
       assert(pendingTimers.length > 0);
@@ -434,14 +437,14 @@
     if (!_receivePortActive) {
       _createTimerHandler();
     }
-    VMLibraryHooks.eventHandlerSendData(null, _sendPort, wakeupTime);
+    VMLibraryHooks.eventHandlerSendData(null, _sendPort!, wakeupTime);
     _scheduledWakeupTime = wakeupTime;
   }
 
   // Cancel pending wakeups in the event handler.
   static void _cancelWakeup() {
     if (_sendPort != null) {
-      VMLibraryHooks.eventHandlerSendData(null, _sendPort, _NO_TIMER);
+      VMLibraryHooks.eventHandlerSendData(null, _sendPort!, _NO_TIMER);
       _scheduledWakeupTime = 0;
     }
   }
@@ -449,22 +452,23 @@
   // Create a receive port and register a message handler for the timer
   // events.
   static void _createTimerHandler() {
-    if (_receivePort == null) {
-      assert(_receivePort == null);
+    var receivePort = _receivePort;
+    if (receivePort == null) {
       assert(_sendPort == null);
-      final port = RawReceivePort(_handleMessage, 'Timer');
-      _receivePort = port;
+      final port = _RawReceivePortImpl('Timer');
+      port.handler = _handleMessage;
       _sendPort = port.sendPort;
+      _receivePort = port;
       _scheduledWakeupTime = 0;
     } else {
-      (_receivePort as _RawReceivePortImpl)._setActive(true);
+      receivePort._setActive(true);
     }
     _receivePortActive = true;
   }
 
   static void _shutdownTimerHandler() {
     _scheduledWakeupTime = 0;
-    (_receivePort as _RawReceivePortImpl)._setActive(false);
+    _receivePort!._setActive(false);
     _receivePortActive = false;
   }
 
diff --git a/tools/VERSION b/tools/VERSION
index 754897b..499468e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 100
+PRERELEASE 101
 PRERELEASE_PATCH 0
\ No newline at end of file