[dart2js] Use J- instead of K- entities everywhere.

The only entities specific to the K- model are `KLocalFunction` and `KLocalTypeVariable`. I've copied these both (as is) to the J- model.

The only thing we "lose" here is the calls to `checkFamily` in `kernel/element_map_impl.dart`. Given how interchangable the 2 models were, this wasn't adding much value anyway.

Since there is still a distinction between the K- environment and J- environment, we can now think of that conversion as being between a `J` and `J'` environment where the semantics are slightly different (e.g. `J'` has closure conversion applied).

Using the same model also makes it easier to have more intermediate states of the `J` model. For example, we might keep around the `JLocalFunction` nodes until SSA and do closure conversion at that point instead.


Change-Id: If149241725a03b8de6aba6d486506434529b998d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/306980
Commit-Queue: Nate Biggs <natebiggs@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/compiler/lib/src/deferred_load/entity_data_info.dart b/pkg/compiler/lib/src/deferred_load/entity_data_info.dart
index 7c2e831..ac1d009 100644
--- a/pkg/compiler/lib/src/deferred_load/entity_data_info.dart
+++ b/pkg/compiler/lib/src/deferred_load/entity_data_info.dart
@@ -16,8 +16,8 @@
 import '../elements/types.dart';
 import '../ir/util.dart';
 import '../kernel/element_map.dart';
-import '../kernel/kelements.dart' show KLocalFunction;
 import '../kernel/kernel_world.dart' show KClosedWorld;
+import '../js_model/elements.dart' show JLocalFunction;
 import '../universe/use.dart';
 import '../universe/world_impact.dart' show WorldImpact;
 
@@ -125,9 +125,9 @@
       if (usedEntity is MemberEntity) {
         addMember(usedEntity, import: staticUse.deferredImport);
       } else {
-        assert(usedEntity is KLocalFunction,
+        assert(usedEntity is JLocalFunction,
             failedAt(usedEntity, "Unexpected static use $staticUse."));
-        var localFunction = usedEntity as KLocalFunction;
+        var localFunction = usedEntity as JLocalFunction;
         // TODO(sra): Consult KClosedWorld to see if signature is needed.
         addTypeDependencies(localFunction.functionType);
         addLocalFunction(localFunction);
diff --git a/pkg/compiler/lib/src/js_backend/field_analysis.dart b/pkg/compiler/lib/src/js_backend/field_analysis.dart
index 9acaa02..7f0e4a2 100644
--- a/pkg/compiler/lib/src/js_backend/field_analysis.dart
+++ b/pkg/compiler/lib/src/js_backend/field_analysis.dart
@@ -11,10 +11,9 @@
 import '../elements/entity_utils.dart';
 import '../elements/types.dart';
 import '../ir/scope_visitor.dart';
-import '../js_model/elements.dart' show JField;
+import '../js_model/elements.dart' show JClass, JConstructor, JField;
 import '../js_model/js_to_frontend_map.dart' show JsToFrontendMap;
 import '../kernel/element_map.dart' show KernelToElementMap;
-import '../kernel/kelements.dart' show KClass, KField, KConstructor;
 import '../kernel/kernel_world.dart';
 import '../options.dart';
 import '../serialization/serialization.dart';
@@ -39,18 +38,18 @@
 class KFieldAnalysis {
   final KernelToElementMap _elementMap;
 
-  final Map<KClass, ClassData> _classData = {};
-  final Map<KField, StaticFieldData> _staticFieldData = {};
+  final Map<JClass, ClassData> _classData = {};
+  final Map<JField, StaticFieldData> _staticFieldData = {};
 
   KFieldAnalysis(this._elementMap);
 
   // Register class during resolution. Use simple syntactic analysis to find
   // null-initialized fields.
-  void registerInstantiatedClass(KClass class_) {
+  void registerInstantiatedClass(JClass class_) {
     ir.Class classNode = _elementMap.getClassNode(class_);
 
-    List<KConstructor> constructors = [];
-    Map<KField, AllocatorData> fieldData = {};
+    List<JConstructor> constructors = [];
+    Map<JField, AllocatorData> fieldData = {};
     for (ir.Field field in classNode.fields) {
       if (!field.isInstanceMember) continue;
 
@@ -67,20 +66,20 @@
             requireConstant: false, implicitNull: true);
       }
       if (value != null && value.isConstant) {
-        fieldData[fieldElement as KField] = AllocatorData(value);
+        fieldData[fieldElement as JField] = AllocatorData(value);
       }
     }
 
     for (ir.Constructor constructor in classNode.constructors) {
-      KConstructor constructorElement =
-          _elementMap.getConstructor(constructor) as KConstructor;
+      JConstructor constructorElement =
+          _elementMap.getConstructor(constructor) as JConstructor;
       ir.StaticTypeContext staticTypeContext =
           _elementMap.getStaticTypeContext(constructorElement);
       constructors.add(constructorElement);
       for (ir.Initializer initializer in constructor.initializers) {
         if (initializer is ir.FieldInitializer) {
           AllocatorData? data =
-              fieldData[_elementMap.getField(initializer.field) as KField];
+              fieldData[_elementMap.getField(initializer.field) as JField];
           if (data == null) {
             // TODO(johnniwinther): Support initializers with side-effects?
 
@@ -130,7 +129,7 @@
     _classData[class_] = ClassData(constructors, fieldData);
   }
 
-  void registerStaticField(KField field, EvaluationComplexity complexity) {
+  void registerStaticField(JField field, EvaluationComplexity complexity) {
     ir.Field node = _elementMap.getMemberNode(field) as ir.Field;
     ir.Expression? expression = node.initializer;
     ConstantValue? value;
@@ -151,18 +150,18 @@
     _staticFieldData[field] = StaticFieldData(value, complexity);
   }
 
-  AllocatorData? getAllocatorDataForTesting(KField field) {
+  AllocatorData? getAllocatorDataForTesting(JField field) {
     return _classData[field.enclosingClass!]!.fieldData[field];
   }
 
-  StaticFieldData? getStaticFieldDataForTesting(KField field) {
+  StaticFieldData? getStaticFieldDataForTesting(JField field) {
     return _staticFieldData[field];
   }
 }
 
 class ClassData {
-  final List<KConstructor> constructors;
-  final Map<KField, AllocatorData> fieldData;
+  final List<JConstructor> constructors;
+  final Map<JField, AllocatorData> fieldData;
 
   ClassData(this.constructors, this.fieldData);
 }
@@ -178,7 +177,7 @@
 
 class AllocatorData {
   final ConstantValue? initialValue;
-  final Map<KConstructor, Initializer> initializers = {};
+  final Map<JConstructor, Initializer> initializers = {};
 
   AllocatorData(this.initialValue);
 
@@ -279,7 +278,7 @@
 
     closedWorld.fieldAnalysis._classData
         .forEach((ClassEntity cls, ClassData classData) {
-      classData.fieldData.forEach((KField kField, AllocatorData data) {
+      classData.fieldData.forEach((JField kField, AllocatorData data) {
         JField? jField = map.toBackendMember(kField) as JField?;
         if (jField == null) {
           return;
@@ -315,7 +314,7 @@
             memberUsage.initialConstants!.forEach(includeInitialValue);
 
             bool inAllConstructors = true;
-            for (KConstructor constructor in classData.constructors) {
+            for (JConstructor constructor in classData.constructors) {
               if (isTooComplex) {
                 break;
               }
@@ -396,14 +395,14 @@
       });
     });
 
-    List<KField> independentFields = [];
-    List<KField> dependentFields = [];
+    List<JField> independentFields = [];
+    List<JField> dependentFields = [];
 
     closedWorld.liveMemberUsage
         .forEach((MemberEntity member, MemberUsage memberUsage) {
       if (member is FieldEntity && !member.isInstanceMember) {
         StaticFieldData staticFieldData =
-            closedWorld.fieldAnalysis._staticFieldData[member as KField]!;
+            closedWorld.fieldAnalysis._staticFieldData[member as JField]!;
         if (staticFieldData.hasDependencies) {
           dependentFields.add(member);
         } else {
@@ -413,10 +412,10 @@
     });
 
     // Fields already processed.
-    Set<KField> processedFields = {};
+    Set<JField> processedFields = {};
 
     // Fields currently being processed. Use for detecting cyclic dependencies.
-    Set<KField> currentFields = {};
+    Set<JField> currentFields = {};
 
     // Index ascribed to eager fields that depend on other fields. This is
     // used to sort the field in emission to ensure that used fields have been
@@ -428,7 +427,7 @@
     ///
     /// If the data is currently been computed, that is, [kField] has a
     /// cyclic dependency, `null` is returned.
-    FieldAnalysisData? processField(KField kField) {
+    FieldAnalysisData? processField(JField kField) {
       JField? jField = map.toBackendMember(kField) as JField?;
       // TODO(johnniwinther): Can we assert that [jField] exists?
       if (jField == null) return null;
@@ -493,8 +492,8 @@
             isEager = complexity.isEager;
             if (isEager && complexity.fields != null) {
               for (ir.Field node in complexity.fields!) {
-                KField otherField =
-                    closedWorld.elementMap.getField(node) as KField;
+                JField otherField =
+                    closedWorld.elementMap.getField(node) as JField;
                 FieldAnalysisData? otherData = processField(otherField);
                 if (otherData == null) {
                   // Cyclic dependency on [otherField].
@@ -555,7 +554,7 @@
     // Process dependent fields in declaration order to make ascribed creation
     // indices stable. The emitter uses the creation indices for sorting
     // dependent fields.
-    dependentFields.sort((KField a, KField b) {
+    dependentFields.sort((JField a, JField b) {
       int result =
           compareLibrariesUris(a.library.canonicalUri, b.library.canonicalUri);
       if (result != 0) return result;
diff --git a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
index 64035c2..5e1f896 100644
--- a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
+++ b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
@@ -7,7 +7,7 @@
 import '../common/names.dart' show Identifiers, Selectors;
 import '../elements/entities.dart';
 import '../inferrer/types.dart' show GlobalTypeInferenceResults;
-import '../kernel/kelements.dart' show KFunction;
+import '../js_model/elements.dart' show JFunction;
 import '../kernel/no_such_method_resolver.dart';
 import '../serialization/serialization.dart';
 
@@ -124,7 +124,7 @@
     if (_commonElements.isDefaultNoSuchMethodImplementation(element)) {
       _defaultImpls.add(element);
       return NsmCategory.DEFAULT;
-    } else if (_resolver.hasForwardingSyntax(element as KFunction)) {
+    } else if (_resolver.hasForwardingSyntax(element as JFunction)) {
       _forwardingSyntaxImpls.add(element);
       // If the implementation is 'noSuchMethod(x) => super.noSuchMethod(x);'
       // then it is in the same category as the super call.
diff --git a/pkg/compiler/lib/src/js_backend/resolution_listener.dart b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
index d88c5a2..576d09a 100644
--- a/pkg/compiler/lib/src/js_backend/resolution_listener.dart
+++ b/pkg/compiler/lib/src/js_backend/resolution_listener.dart
@@ -11,7 +11,7 @@
 import '../elements/entities.dart';
 import '../elements/types.dart';
 import '../enqueue.dart' show Enqueuer, EnqueuerListener;
-import '../kernel/kelements.dart' show KClass;
+import '../js_model/elements.dart' show JClass;
 import '../native/enqueue.dart';
 import '../options.dart' show CompilerOptions;
 import '../universe/call_structure.dart' show CallStructure;
@@ -420,7 +420,7 @@
 
   @override
   WorldImpact registerInstantiatedClass(ClassEntity cls) {
-    _fieldAnalysis.registerInstantiatedClass(cls as KClass);
+    _fieldAnalysis.registerInstantiatedClass(cls as JClass);
     return _processClass(cls);
   }
 
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
index d8a4fa4..886aad8 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
@@ -11,7 +11,7 @@
 import '../elements/names.dart';
 import '../elements/types.dart';
 import '../ir/runtime_type_analysis.dart';
-import '../kernel/kelements.dart';
+import '../js_model/elements.dart' show JLocalFunction;
 import '../kernel/kernel_world.dart';
 import '../options.dart';
 import '../serialization/serialization.dart';
@@ -1157,7 +1157,7 @@
       if (closedWorld.annotationsData
           // TODO(johnniwinther): Support @pragma on local functions and use
           // this here instead of the enclosing member.
-          .getParameterCheckPolicy((function as KLocalFunction).memberContext)
+          .getParameterCheckPolicy((function as JLocalFunction).memberContext)
           .isEmitted) {
         checkFunction(
             function, _elementEnvironment.getLocalFunctionType(function));
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index fa84576..e0457f6 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -39,7 +39,6 @@
 import '../kernel/dart2js_target.dart' show allowedNativeTest;
 import '../kernel/element_map.dart';
 import '../kernel/env.dart';
-import '../kernel/kelements.dart';
 import '../native/behavior.dart';
 import '../options.dart';
 import '../ordered_typeset.dart';
@@ -2404,7 +2403,7 @@
   }
 
   @override
-  FunctionType getLocalFunctionType(covariant KLocalFunction function) {
+  FunctionType getLocalFunctionType(covariant JLocalFunction function) {
     return function.functionType;
   }
 
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart
index 4b1ce72..4457c8d 100644
--- a/pkg/compiler/lib/src/js_model/elements.dart
+++ b/pkg/compiler/lib/src/js_model/elements.dart
@@ -4,6 +4,8 @@
 
 library dart2js.js_model.elements;
 
+import 'package:kernel/ast.dart' as ir show LocalFunction;
+
 import '../common/names.dart' show Names;
 import '../elements/entities.dart';
 import '../elements/indexed.dart';
@@ -817,3 +819,36 @@
   String toString() =>
       '${jsElementPrefix}type_variable(${typeDeclaration?.name}.$name)';
 }
+
+class JLocalFunction implements Local {
+  @override
+  final String? name;
+  final MemberEntity memberContext;
+  final Entity executableContext;
+  final ir.LocalFunction node;
+  late final FunctionType functionType;
+
+  JLocalFunction(
+      this.name, this.memberContext, this.executableContext, this.node);
+
+  @override
+  String toString() => '${jsElementPrefix}local_function'
+      '(${memberContext.name}.${name ?? '<anonymous>'})';
+}
+
+class JLocalTypeVariable implements TypeVariableEntity {
+  @override
+  final JLocalFunction typeDeclaration;
+  @override
+  final String name;
+  @override
+  final int index;
+  late final DartType bound;
+  late final DartType defaultType;
+
+  JLocalTypeVariable(this.typeDeclaration, this.name, this.index);
+
+  @override
+  String toString() =>
+      '${jsElementPrefix}local_type_variable(${typeDeclaration.name}.$name)';
+}
diff --git a/pkg/compiler/lib/src/js_model/js_world_builder.dart b/pkg/compiler/lib/src/js_model/js_world_builder.dart
index 21bea52..2c7c139 100644
--- a/pkg/compiler/lib/src/js_model/js_world_builder.dart
+++ b/pkg/compiler/lib/src/js_model/js_world_builder.dart
@@ -22,7 +22,6 @@
 import '../js_backend/native_data.dart';
 import '../js_backend/no_such_method_registry.dart';
 import '../js_backend/runtime_types_resolution.dart';
-import '../kernel/kelements.dart';
 import '../kernel/kernel_world.dart';
 import '../options.dart';
 import '../universe/class_hierarchy.dart';
@@ -160,14 +159,14 @@
           Set<ir.LocalFunction>();
       for (Local localFunction
           in kernelRtiNeed.localFunctionsNeedingSignature) {
-        ir.LocalFunction node = (localFunction as KLocalFunction).node;
+        ir.LocalFunction node = (localFunction as JLocalFunction).node;
         localFunctionsNodesNeedingSignature.add(node);
       }
       Set<ir.LocalFunction> localFunctionsNodesNeedingTypeArguments =
           Set<ir.LocalFunction>();
       for (Local localFunction
           in kernelRtiNeed.localFunctionsNeedingTypeArguments) {
-        ir.LocalFunction node = (localFunction as KLocalFunction).node;
+        ir.LocalFunction node = (localFunction as JLocalFunction).node;
         localFunctionsNodesNeedingTypeArguments.add(node);
       }
 
@@ -417,7 +416,7 @@
       localFunctionMap.forEach((Local entity, OutputUnit unit) {
         // Ensure closure classes are included in the output unit corresponding
         // to the local function.
-        if (entity is KLocalFunction) {
+        if (entity is JLocalFunction) {
           var closureInfo = closureDataLookup.getClosureInfo(entity.node);
           result[closureInfo.closureClassEntity!] = unit;
         }
@@ -441,7 +440,7 @@
       localFunctionMap.forEach((Local entity, OutputUnit unit) {
         // Ensure closure call-methods are included in the output unit
         // corresponding to the local function.
-        if (entity is KLocalFunction) {
+        if (entity is JLocalFunction) {
           var closureInfo = closureDataLookup.getClosureInfo(entity.node);
           result[closureInfo.callMethod!] = unit;
           if (closureInfo.signatureMethod != null) {
@@ -577,7 +576,7 @@
   }
 
   TypeVariableEntity? toBackendTypeVariable(TypeVariableEntity typeVariable) {
-    if (typeVariable is KLocalTypeVariable) {
+    if (typeVariable is JLocalTypeVariable) {
       if (_closureData == null) {
         failedAt(
             typeVariable,
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 46e09c1..3cbe138 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -38,6 +38,7 @@
 import '../js_backend/namer.dart';
 import '../js_backend/native_data.dart';
 import '../js_backend/runtime_types_resolution.dart';
+import '../js_model/elements.dart';
 import '../js_model/locals.dart';
 import '../kernel/dart2js_target.dart';
 import '../kernel/transformations/late_lowering.dart' as late_lowering
@@ -53,7 +54,6 @@
 import '../universe/world_impact.dart';
 import 'element_map.dart';
 import 'env.dart';
-import 'kelements.dart';
 import 'kernel_impact.dart';
 
 /// Implementation of [IrToElementMap] that only supports world
@@ -110,7 +110,7 @@
 
   BehaviorBuilder? _nativeBehaviorBuilder;
 
-  Map<KMember, Map<ir.Expression, TypeMap>>? typeMapsForTesting;
+  Map<IndexedMember, Map<ir.Expression, TypeMap>>? typeMapsForTesting;
   Map<ir.Member, ImpactData>? impactDataForTesting;
 
   KernelToElementMap(this.reporter, this._environment, this.options) {
@@ -156,7 +156,7 @@
           spannable.memberIndex < members.length) {
         KMemberData data = members.getData(spannable);
         return computeSourceSpanFromTreeNode(data.node);
-      } else if (spannable is KLocalFunction) {
+      } else if (spannable is JLocalFunction) {
         return getSourceSpan(spannable.memberContext, currentElement);
       } else if (spannable is JLocal) {
         return getSourceSpan(spannable.memberContext, currentElement);
@@ -176,14 +176,12 @@
   }
 
   String _getLibraryName(IndexedLibrary library) {
-    assert(checkFamily(library));
     KLibraryEnv libraryEnv = libraries.getEnv(library);
     return libraryEnv.library.name ?? '';
   }
 
   MemberEntity? lookupLibraryMember(IndexedLibrary library, String name,
       {bool setter = false}) {
-    assert(checkFamily(library));
     KLibraryEnv libraryEnv = libraries.getEnv(library);
     ir.Member? member = libraryEnv.lookupMember(name, setter: setter);
     return member != null ? getMember(member) : null;
@@ -191,7 +189,6 @@
 
   void _forEachLibraryMember(
       IndexedLibrary library, void f(MemberEntity member)) {
-    assert(checkFamily(library));
     KLibraryEnv libraryEnv = libraries.getEnv(library);
     libraryEnv.forEachMember((ir.Member node) {
       f(getMember(node));
@@ -199,7 +196,6 @@
   }
 
   ClassEntity? lookupClass(IndexedLibrary library, String name) {
-    assert(checkFamily(library));
     KLibraryEnv libraryEnv = libraries.getEnv(library);
     KClassEnv? classEnv = libraryEnv.lookupClass(name);
     if (classEnv != null) {
@@ -209,7 +205,6 @@
   }
 
   void _forEachClass(IndexedLibrary library, void f(ClassEntity cls)) {
-    assert(checkFamily(library));
     KLibraryEnv libraryEnv = libraries.getEnv(library);
     libraryEnv.forEachClass((KClassEnv classEnv) {
       if (!classEnv.isUnnamedMixinApplication) {
@@ -238,13 +233,11 @@
 
   MemberEntity? lookupClassMember(IndexedClass cls, Name name,
       {bool setter = false}) {
-    assert(checkFamily(cls));
     KClassEnv classEnv = classes.getEnv(cls);
     return classEnv.lookupMember(this, name);
   }
 
   ConstructorEntity? lookupConstructor(IndexedClass cls, String name) {
-    assert(checkFamily(cls));
     KClassEnv classEnv = classes.getEnv(cls);
     return classEnv.lookupConstructor(this, name);
   }
@@ -265,7 +258,6 @@
 
   @override
   InterfaceType? getSuperType(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureSupertypes(cls, data);
     return data.supertype;
@@ -278,7 +270,6 @@
   }
 
   void _ensureCallType(ClassEntity cls, KClassData data) {
-    assert(checkFamily(cls));
     if (!data.isCallTypeComputed) {
       MemberEntity? callMember =
           _elementEnvironment.lookupClassMember(cls, Names.call);
@@ -292,7 +283,6 @@
   }
 
   void _ensureThisAndRawType(ClassEntity cls, KClassData data) {
-    assert(checkFamily(cls));
     if (data.thisType == null) {
       ir.Class node = data.node;
       if (node.typeParameters.isEmpty) {
@@ -314,7 +304,6 @@
   }
 
   void _ensureJsInteropType(ClassEntity cls, KClassData data) {
-    assert(checkFamily(cls));
     if (data.jsInteropType == null) {
       ir.Class node = data.node;
       if (node.typeParameters.isEmpty) {
@@ -328,7 +317,6 @@
   }
 
   void _ensureClassInstantiationToBounds(ClassEntity cls, KClassData data) {
-    assert(checkFamily(cls));
     if (data.instantiationToBounds == null) {
       ir.Class node = data.node;
       if (node.typeParameters.isEmpty) {
@@ -348,7 +336,6 @@
       getTypeVariableInternal(node);
 
   void _ensureSupertypes(ClassEntity cls, KClassData data) {
-    assert(checkFamily(cls));
     if (data.orderedTypeSet == null) {
       _ensureThisAndRawType(cls, data);
 
@@ -629,7 +616,6 @@
   @override
   FunctionType? getCallType(InterfaceType type) {
     IndexedClass cls = type.element as IndexedClass;
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureCallType(cls, data);
     if (data.callType != null) {
@@ -640,61 +626,52 @@
 
   @override
   InterfaceType getThisType(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureThisAndRawType(cls, data);
     return data.thisType!;
   }
 
   InterfaceType? _getJsInteropType(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureJsInteropType(cls, data);
     return data.jsInteropType;
   }
 
   InterfaceType _getRawType(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureThisAndRawType(cls, data);
     return data.rawType!;
   }
 
   InterfaceType _getClassInstantiationToBounds(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureClassInstantiationToBounds(cls, data);
     return data.instantiationToBounds!;
   }
 
   DartType _getFieldType(IndexedField field) {
-    assert(checkFamily(field));
     KFieldData data = members.getData(field) as KFieldData;
     return data.getFieldType(this);
   }
 
   FunctionType _getFunctionType(IndexedFunction function) {
-    assert(checkFamily(function));
     KFunctionData data = members.getData(function) as KFunctionData;
     return data.getFunctionType(this);
   }
 
   List<TypeVariableType> _getFunctionTypeVariables(IndexedFunction function) {
-    assert(checkFamily(function));
     KFunctionData data = members.getData(function) as KFunctionData;
     return data.getFunctionTypeVariables(this);
   }
 
   @override
   DartType getTypeVariableBound(IndexedTypeVariable typeVariable) {
-    assert(checkFamily(typeVariable));
     KTypeVariableData data = typeVariables.getData(typeVariable);
     return data.getBound(this);
   }
 
   @override
   List<Variance> getTypeVariableVariances(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     return data.getVariances();
   }
@@ -706,34 +683,29 @@
   //     class B = Object with A;
   //     class C = Object with B;
   ClassEntity? getAppliedMixin(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureSupertypes(cls, data);
     return data.mixedInType?.element;
   }
 
   bool _isMixinApplication(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureSupertypes(cls, data);
     return data.isMixinApplication;
   }
 
   bool _isUnnamedMixinApplication(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassEnv env = classes.getEnv(cls);
     return env.isUnnamedMixinApplication;
   }
 
   void _forEachSupertype(IndexedClass cls, void f(InterfaceType supertype)) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureSupertypes(cls, data);
     data.orderedTypeSet!.supertypes!.forEach(f);
   }
 
   void _forEachMixin(IndexedClass? cls, void f(ClassEntity mixin)) {
-    assert(checkFamily(cls!));
     while (cls != null) {
       KClassData data = classes.getData(cls);
       _ensureSupertypes(cls, data);
@@ -745,13 +717,11 @@
   }
 
   void _forEachConstructor(IndexedClass cls, void f(ConstructorEntity member)) {
-    assert(checkFamily(cls));
     KClassEnv env = classes.getEnv(cls);
     env.forEachConstructor(this, f);
   }
 
   void _forEachLocalClassMember(IndexedClass cls, void f(MemberEntity member)) {
-    assert(checkFamily(cls));
     KClassEnv env = classes.getEnv(cls);
     env.forEachMember(this, (MemberEntity member) {
       f(member);
@@ -760,14 +730,12 @@
 
   void forEachInjectedClassMember(
       IndexedClass cls, void f(MemberEntity member)) {
-    assert(checkFamily(cls));
     throw UnsupportedError(
         'KernelToElementMapBase._forEachInjectedClassMember');
   }
 
   void _forEachClassMember(
       IndexedClass cls, void f(ClassEntity cls, MemberEntity member)) {
-    assert(checkFamily(cls));
     KClassEnv env = classes.getEnv(cls);
     env.forEachMember(this, (MemberEntity member) {
       f(cls, member);
@@ -781,7 +749,6 @@
 
   @override
   InterfaceType? asInstanceOf(InterfaceType type, ClassEntity cls) {
-    assert(checkFamily(cls));
     OrderedTypeSet orderedTypeSet =
         getOrderedTypeSet(type.element as IndexedClass);
     InterfaceType? supertype = orderedTypeSet.asInstanceOf(
@@ -794,7 +761,6 @@
 
   @override
   OrderedTypeSet getOrderedTypeSet(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureSupertypes(cls, data);
     return data.orderedTypeSet!;
@@ -808,7 +774,6 @@
   /// Returns the hierarchy depth of [cls].
   @override
   int getHierarchyDepth(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureSupertypes(cls, data);
     return data.orderedTypeSet!.maxDepth;
@@ -816,7 +781,6 @@
 
   @override
   Iterable<InterfaceType> getInterfaces(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     _ensureSupertypes(cls, data);
     assert(data.interfaces != null);
@@ -825,13 +789,11 @@
 
   /// Returns the defining node for [member].
   ir.Member getMemberNode(MemberEntity member) {
-    assert(checkFamily(member));
     return members.getData(member as IndexedMember).node;
   }
 
   /// Returns the defining node for [cls].
   ir.Class getClassNode(ClassEntity cls) {
-    assert(checkFamily(cls));
     return classes.getData(cls as IndexedClass).node;
   }
 
@@ -1195,7 +1157,7 @@
       MemberEntity? member = elementEnvironment.lookupLocalClassMember(
           superclass, Names.noSuchMethod_);
       if (member != null && !member.isAbstract) {
-        if (member is KMethod) {
+        if (member is JMethod) {
           if (member.parameterStructure.positionalParameters >= 1) {
             return member;
           }
@@ -1212,7 +1174,7 @@
 
   Iterable<LibraryEntity> get libraryListInternal {
     if (env.length != libraryMap.length) {
-      // Create a [KLibrary] for each library.
+      // Create a [JLibrary] for each library.
       env.forEachLibrary((KLibraryEnv env) {
         getLibraryInternal(env.library, env);
       });
@@ -1254,7 +1216,7 @@
         !envIsClosed,
         "Environment of $this is closed. Trying to create "
         "class for $node.");
-    KLibrary library = getLibraryInternal(node.enclosingLibrary) as KLibrary;
+    JLibrary library = getLibraryInternal(node.enclosingLibrary) as JLibrary;
     if (classEnv == null) {
       classEnv = libraries.getEnv(library).lookupClass(node.name)!;
     }
@@ -1322,7 +1284,7 @@
         "constructor for $node.");
     ir.FunctionNode functionNode;
     final enclosingClass =
-        getClassForMemberInternal(node.enclosingClass!) as KClass;
+        getClassForMemberInternal(node.enclosingClass!) as JClass;
     Name name = getName(node.name);
     bool isExternal = node.isExternal;
 
@@ -1366,14 +1328,14 @@
         "Environment of $this is closed. Trying to create "
         "function for $node.");
     late IndexedFunction function;
-    KLibrary library;
-    KClass? enclosingClass;
+    JLibrary library;
+    JClass? enclosingClass;
     if (node.enclosingClass != null) {
       enclosingClass =
-          getClassForMemberInternal(node.enclosingClass!) as KClass;
+          getClassForMemberInternal(node.enclosingClass!) as JClass;
       library = enclosingClass.library;
     } else {
-      library = getLibraryInternal(node.enclosingLibrary) as KLibrary;
+      library = getLibraryInternal(node.enclosingLibrary) as JLibrary;
     }
     Name name = getName(node.name);
     bool isStatic = node.isStatic;
@@ -1419,14 +1381,14 @@
         !envIsClosed,
         "Environment of $this is closed. Trying to create "
         "field for $node.");
-    KLibrary library;
-    KClass? enclosingClass;
+    JLibrary library;
+    JClass? enclosingClass;
     if (node.enclosingClass != null) {
       enclosingClass =
-          getClassForMemberInternal(node.enclosingClass!) as KClass;
+          getClassForMemberInternal(node.enclosingClass!) as JClass;
       library = enclosingClass.library;
     } else {
-      library = getLibraryInternal(node.enclosingLibrary) as KLibrary;
+      library = getLibraryInternal(node.enclosingLibrary) as JLibrary;
     }
     Name name = getName(node.name);
     bool isStatic = node.isStatic;
@@ -1449,14 +1411,6 @@
             isLateFinalBackingField: isLateFinalBackingField));
   }
 
-  bool checkFamily(Entity entity) {
-    assert(
-        '$entity'.startsWith(kElementPrefix),
-        failedAt(entity,
-            "Unexpected entity $entity, expected family $kElementPrefix."));
-    return true;
-  }
-
   /// NativeBasicData is need for computation of the default super class.
   NativeBasicData get nativeBasicData {
     var data = _nativeBasicData;
@@ -1484,7 +1438,7 @@
           commonElements, nativeBasicData, reporter, options);
 
   WorldImpact computeWorldImpact(
-      KMember member,
+      IndexedMember member,
       BackendImpacts impacts,
       NativeResolutionEnqueuer nativeResolutionEnqueuer,
       BackendUsageBuilder backendUsageBuilder,
@@ -1523,16 +1477,16 @@
     return converter.convert(impactData);
   }
 
-  StaticTypeCache getCachedStaticTypes(KMember member) {
+  StaticTypeCache getCachedStaticTypes(JMember member) {
     return members.getData(member).staticTypes!;
   }
 
-  Map<ir.Expression, TypeMap>? getTypeMapsForTesting(KMember member) {
+  Map<ir.Expression, TypeMap>? getTypeMapsForTesting(IndexedMember member) {
     return typeMapsForTesting![member];
   }
 
   /// Returns the kernel [ir.Procedure] node for the [method].
-  ir.Procedure lookupProcedure(KFunction method) {
+  ir.Procedure lookupProcedure(JFunction method) {
     return members.getData(method).node as ir.Procedure;
   }
 
@@ -1542,8 +1496,8 @@
   }
 
   /// Returns the [Local] corresponding to the local function [node].
-  KLocalFunction getLocalFunction(ir.LocalFunction? node) {
-    KLocalFunction? localFunction = localFunctionMap[node!] as KLocalFunction?;
+  JLocalFunction getLocalFunction(ir.LocalFunction? node) {
+    JLocalFunction? localFunction = localFunctionMap[node!] as JLocalFunction?;
     if (localFunction == null) {
       late MemberEntity memberContext;
       late Entity executableContext;
@@ -1554,7 +1508,7 @@
           break;
         }
         if (parent is ir.LocalFunction) {
-          KLocalFunction localFunction = getLocalFunction(parent);
+          JLocalFunction localFunction = getLocalFunction(parent);
           executableContext = localFunction;
           memberContext = localFunction.memberContext;
           break;
@@ -1570,12 +1524,12 @@
         function = node.function;
       }
       localFunction = localFunctionMap[node] =
-          KLocalFunction(name, memberContext, executableContext, node);
+          JLocalFunction(name, memberContext, executableContext, node);
       int index = 0;
-      List<KLocalTypeVariable> typeVariables = <KLocalTypeVariable>[];
+      List<JLocalTypeVariable> typeVariables = <JLocalTypeVariable>[];
       for (ir.TypeParameter typeParameter in function.typeParameters) {
         typeVariables.add(typeVariableMap[typeParameter] =
-            KLocalTypeVariable(localFunction, typeParameter.name!, index));
+            JLocalTypeVariable(localFunction, typeParameter.name!, index));
         index++;
       }
       index = 0;
@@ -1593,7 +1547,6 @@
   /// Returns `true` if [cls] implements `Function` either explicitly or through
   /// a `call` method.
   bool implementsFunction(IndexedClass cls) {
-    assert(checkFamily(cls));
     KClassData data = classes.getData(cls);
     OrderedTypeSet orderedTypeSet = data.orderedTypeSet!;
     InterfaceType? supertype = orderedTypeSet.asInstanceOf(
@@ -1675,72 +1628,72 @@
 
   IndexedLibrary createLibrary(
       String name, Uri canonicalUri, bool isNonNullableByDefault) {
-    return KLibrary(name, canonicalUri, isNonNullableByDefault);
+    return JLibrary(name, canonicalUri, isNonNullableByDefault);
   }
 
-  IndexedClass createClass(KLibrary library, String name,
+  IndexedClass createClass(JLibrary library, String name,
       {required bool isAbstract}) {
-    return KClass(library, name, isAbstract: isAbstract);
+    return JClass(library, name, isAbstract: isAbstract);
   }
 
-  KTypeVariable createTypeVariable(
+  IndexedTypeVariable createTypeVariable(
       Entity typeDeclaration, String name, int index) {
-    return KTypeVariable(typeDeclaration, name, index);
+    return JTypeVariable(typeDeclaration, name, index);
   }
 
   IndexedConstructor createGenerativeConstructor(
-      KClass enclosingClass, Name name, ParameterStructure parameterStructure,
+      JClass enclosingClass, Name name, ParameterStructure parameterStructure,
       {required bool isExternal, required bool isConst}) {
-    return KGenerativeConstructor(enclosingClass, name, parameterStructure,
+    return JGenerativeConstructor(enclosingClass, name, parameterStructure,
         isExternal: isExternal, isConst: isConst);
   }
 
   // TODO(dart2js-team): Rename isFromEnvironmentConstructor to
   // isEnvironmentConstructor: Here, and everywhere in the compiler.
   IndexedConstructor createFactoryConstructor(
-      KClass enclosingClass, Name name, ParameterStructure parameterStructure,
+      JClass enclosingClass, Name name, ParameterStructure parameterStructure,
       {required bool isExternal,
       required bool isConst,
       required bool isFromEnvironmentConstructor}) {
-    return KFactoryConstructor(enclosingClass, name, parameterStructure,
+    return JFactoryConstructor(enclosingClass, name, parameterStructure,
         isExternal: isExternal,
         isConst: isConst,
         isFromEnvironmentConstructor: isFromEnvironmentConstructor);
   }
 
-  IndexedFunction createGetter(KLibrary library, KClass? enclosingClass,
+  IndexedFunction createGetter(JLibrary library, JClass? enclosingClass,
       Name name, AsyncMarker asyncMarker,
       {required bool isStatic,
       required bool isExternal,
       required bool isAbstract}) {
-    return KGetter(library, enclosingClass, name, asyncMarker,
+    return JGetter(library, enclosingClass, name, asyncMarker,
         isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
   }
 
-  IndexedFunction createMethod(KLibrary library, KClass? enclosingClass,
+  IndexedFunction createMethod(JLibrary library, JClass? enclosingClass,
       Name name, ParameterStructure parameterStructure, AsyncMarker asyncMarker,
       {required bool isStatic,
       required bool isExternal,
       required bool isAbstract}) {
-    return KMethod(
+    return JMethod(
         library, enclosingClass, name, parameterStructure, asyncMarker,
         isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
   }
 
   IndexedFunction createSetter(
-      KLibrary library, KClass? enclosingClass, Name name,
+      JLibrary library, JClass? enclosingClass, Name name,
       {required bool isStatic,
       required bool isExternal,
       required bool isAbstract}) {
-    return KSetter(library, enclosingClass, name,
+    return JSetter(library, enclosingClass, name,
         isStatic: isStatic, isExternal: isExternal, isAbstract: isAbstract);
   }
 
-  IndexedField createField(KLibrary library, KClass? enclosingClass, Name name,
+  IndexedField createField(JLibrary library, JClass? enclosingClass, Name name,
       {required bool isStatic,
       required bool isAssignable,
       required bool isConst}) {
-    return KField(library, enclosingClass, name,
+    return JField(library, enclosingClass, name,
         isStatic: isStatic, isAssignable: isAssignable, isConst: isConst);
   }
 }
@@ -1804,7 +1757,7 @@
 
   @override
   DartType getTypeVariableBound(TypeVariableEntity typeVariable) {
-    if (typeVariable is KLocalTypeVariable) return typeVariable.bound;
+    if (typeVariable is JLocalTypeVariable) return typeVariable.bound;
     return elementMap.getTypeVariableBound(typeVariable as IndexedTypeVariable);
   }
 
@@ -1835,7 +1788,7 @@
   }
 
   @override
-  FunctionType getLocalFunctionType(covariant KLocalFunction function) {
+  FunctionType getLocalFunctionType(covariant JLocalFunction function) {
     return function.functionType;
   }
 
@@ -1868,7 +1821,6 @@
   @override
   ClassEntity? getSuperClass(ClassEntity cls,
       {bool skipUnnamedMixinApplications = false}) {
-    assert(elementMap.checkFamily(cls));
     ClassEntity? superclass =
         elementMap.getSuperType(cls as IndexedClass)?.element;
     if (skipUnnamedMixinApplications) {
@@ -1952,7 +1904,6 @@
 
   @override
   Iterable<ImportEntity> getImports(covariant IndexedLibrary library) {
-    assert(elementMap.checkFamily(library));
     KLibraryData libraryData = elementMap.libraries.getData(library);
     return libraryData.getImports(elementMap);
   }
@@ -1961,14 +1912,12 @@
   Iterable<ConstantValue> getMemberMetadata(covariant IndexedMember member,
       {bool includeParameterMetadata = false}) {
     // TODO(redemption): Support includeParameterMetadata.
-    assert(elementMap.checkFamily(member));
     KMemberData memberData = elementMap.members.getData(member);
     return memberData.getMetadata(elementMap);
   }
 
   @override
   bool isEnumClass(ClassEntity cls) {
-    assert(elementMap.checkFamily(cls));
     KClassData classData = elementMap.classes.getData(cls as IndexedClass);
     return classData.isEnumClass;
   }
@@ -1984,14 +1933,12 @@
 
   @override
   bool isLateBackingField(covariant IndexedField field) {
-    assert(elementMap.checkFamily(field));
     KFieldData fieldData = elementMap.members.getData(field) as KFieldData;
     return fieldData.isLateBackingField;
   }
 
   @override
   bool isLateFinalBackingField(covariant IndexedField field) {
-    assert(elementMap.checkFamily(field));
     KFieldData fieldData = elementMap.members.getData(field) as KFieldData;
     return fieldData.isLateFinalBackingField;
   }
@@ -2015,7 +1962,7 @@
       bool isNative = _processMethodAnnotations(node, annotationData);
       if (isNative || isJsInterop) {
         NativeBehavior behavior = _computeNativeMethodBehavior(
-            method as KFunction, annotationData,
+            method as JFunction, annotationData,
             isJsInterop: isJsInterop);
         _nativeDataBuilder!.setNativeMethodBehavior(method, behavior);
       }
@@ -2024,7 +1971,7 @@
       bool isNative = _processFieldAnnotations(node, annotationData);
       if (isNative || isJsInterop) {
         NativeBehavior fieldLoadBehavior = _computeNativeFieldLoadBehavior(
-            field as KField, annotationData,
+            field as JField, annotationData,
             isJsInterop: isJsInterop);
         NativeBehavior fieldStoreBehavior =
             _computeNativeFieldStoreBehavior(field);
@@ -2129,13 +2076,13 @@
     return annotationData.getNativeMemberName(node);
   }
 
-  NativeBehavior _computeNativeFieldStoreBehavior(covariant KField field) {
+  NativeBehavior _computeNativeFieldStoreBehavior(covariant JField field) {
     ir.Field node = _elementMap.getMemberNode(field) as ir.Field;
     return _elementMap.getNativeBehaviorForFieldStore(node);
   }
 
   NativeBehavior _computeNativeFieldLoadBehavior(
-      KField field, IrAnnotationData annotationData,
+      JField field, IrAnnotationData annotationData,
       {required bool isJsInterop}) {
     ir.Field node = _elementMap.getMemberNode(field) as ir.Field;
     Iterable<String> createsAnnotations =
@@ -2148,7 +2095,7 @@
   }
 
   NativeBehavior _computeNativeMethodBehavior(
-      KFunction function, IrAnnotationData annotationData,
+      JFunction function, IrAnnotationData annotationData,
       {required bool isJsInterop}) {
     ir.Member node = _elementMap.getMemberNode(function);
     Iterable<String> createsAnnotations =
diff --git a/pkg/compiler/lib/src/kernel/kelements.dart b/pkg/compiler/lib/src/kernel/kelements.dart
deleted file mode 100644
index 9702fb0..0000000
--- a/pkg/compiler/lib/src/kernel/kelements.dart
+++ /dev/null
@@ -1,292 +0,0 @@
-// Copyright (c) 2017, 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.
-
-/// Entity model for elements derived from Kernel IR.
-
-import 'package:kernel/ast.dart' as ir;
-import '../elements/entities.dart';
-import '../elements/indexed.dart';
-import '../elements/names.dart';
-import '../elements/types.dart';
-
-const String kElementPrefix = 'k:';
-
-class KLibrary extends IndexedLibrary {
-  @override
-  final String name;
-  @override
-  final Uri canonicalUri;
-  @override
-  final bool isNonNullableByDefault;
-
-  KLibrary(this.name, this.canonicalUri, this.isNonNullableByDefault);
-
-  @override
-  String toString() => '${kElementPrefix}library($name)';
-}
-
-class KClass extends IndexedClass {
-  @override
-  final KLibrary library;
-
-  @override
-  final String name;
-  @override
-  final bool isAbstract;
-
-  KClass(this.library, this.name, {required this.isAbstract});
-
-  @override
-  bool get isClosure => false;
-
-  @override
-  String toString() => '${kElementPrefix}class($name)';
-}
-
-abstract class KMember extends IndexedMember {
-  @override
-  final KLibrary library;
-  @override
-  final KClass? enclosingClass;
-  final Name _name;
-  final bool _isStatic;
-
-  KMember(this.library, this.enclosingClass, this._name,
-      {bool isStatic = false})
-      : _isStatic = isStatic;
-
-  @override
-  String get name => _name.text;
-
-  @override
-  Name get memberName => _name;
-
-  @override
-  bool get isAssignable => false;
-
-  @override
-  bool get isConst => false;
-
-  @override
-  bool get isAbstract => false;
-
-  @override
-  bool get isSetter => false;
-
-  @override
-  bool get isGetter => false;
-
-  @override
-  bool get isFunction => false;
-
-  @override
-  bool get isInstanceMember => enclosingClass != null && !_isStatic;
-
-  @override
-  bool get isStatic => enclosingClass != null && _isStatic;
-
-  @override
-  bool get isTopLevel => enclosingClass == null;
-
-  String get _kind;
-
-  @override
-  String toString() => '${kElementPrefix}$_kind'
-      '(${enclosingClass != null ? '${enclosingClass!.name}.' : ''}$name)';
-}
-
-abstract class KFunction extends KMember
-    implements FunctionEntity, IndexedFunction {
-  @override
-  final ParameterStructure parameterStructure;
-  @override
-  final bool isExternal;
-  @override
-  final AsyncMarker asyncMarker;
-
-  KFunction(super.library, super.enclosingClass, super.name,
-      this.parameterStructure, this.asyncMarker,
-      {super.isStatic, this.isExternal = false});
-}
-
-abstract class KConstructor extends KFunction
-    implements ConstructorEntity, IndexedConstructor {
-  @override
-  final bool isConst;
-  @override
-  KClass enclosingClass;
-
-  KConstructor(
-      this.enclosingClass, Name name, ParameterStructure parameterStructure,
-      {required bool isExternal, required this.isConst})
-      : super(enclosingClass.library, enclosingClass, name, parameterStructure,
-            AsyncMarker.SYNC,
-            isExternal: isExternal);
-
-  @override
-  bool get isInstanceMember => false;
-
-  @override
-  bool get isStatic => false;
-
-  @override
-  bool get isTopLevel => false;
-
-  @override
-  bool get isFromEnvironmentConstructor => false;
-
-  @override
-  String get _kind => 'constructor';
-}
-
-class KGenerativeConstructor extends KConstructor {
-  KGenerativeConstructor(
-      super.enclosingClass, super.name, super.parameterStructure,
-      {required super.isExternal, required super.isConst});
-
-  @override
-  bool get isFactoryConstructor => false;
-
-  @override
-  bool get isGenerativeConstructor => true;
-}
-
-class KFactoryConstructor extends KConstructor {
-  @override
-  final bool isFromEnvironmentConstructor;
-
-  KFactoryConstructor(
-      super.enclosingClass, super.name, super.parameterStructure,
-      {required super.isExternal,
-      required super.isConst,
-      required this.isFromEnvironmentConstructor});
-
-  @override
-  bool get isFactoryConstructor => true;
-
-  @override
-  bool get isGenerativeConstructor => false;
-}
-
-class KMethod extends KFunction {
-  @override
-  final bool isAbstract;
-
-  KMethod(super.library, super.enclosingClass, super.name,
-      super.parameterStructure, super.asyncMarker,
-      {required super.isStatic,
-      required super.isExternal,
-      required this.isAbstract});
-
-  @override
-  bool get isFunction => true;
-
-  @override
-  String get _kind => 'method';
-}
-
-class KGetter extends KFunction {
-  @override
-  final bool isAbstract;
-
-  KGetter(KLibrary library, KClass? enclosingClass, Name name,
-      AsyncMarker asyncMarker,
-      {required bool isStatic,
-      required bool isExternal,
-      required this.isAbstract})
-      : super(library, enclosingClass, name, ParameterStructure.getter,
-            asyncMarker,
-            isStatic: isStatic, isExternal: isExternal);
-
-  @override
-  bool get isGetter => true;
-
-  @override
-  String get _kind => 'getter';
-}
-
-class KSetter extends KFunction {
-  @override
-  final bool isAbstract;
-
-  KSetter(KLibrary library, KClass? enclosingClass, Name name,
-      {required bool isStatic,
-      required bool isExternal,
-      required this.isAbstract})
-      : super(library, enclosingClass, name, ParameterStructure.setter,
-            AsyncMarker.SYNC,
-            isStatic: isStatic, isExternal: isExternal);
-
-  @override
-  bool get isAssignable => true;
-
-  @override
-  bool get isSetter => true;
-
-  @override
-  String get _kind => 'setter';
-}
-
-class KField extends KMember implements FieldEntity, IndexedField {
-  @override
-  final bool isAssignable;
-  @override
-  final bool isConst;
-
-  KField(super.library, super.enclosingClass, super.name,
-      {required super.isStatic,
-      required this.isAssignable,
-      required this.isConst});
-
-  @override
-  String get _kind => 'field';
-}
-
-class KTypeVariable extends IndexedTypeVariable {
-  @override
-  final Entity typeDeclaration;
-  @override
-  final String name;
-  @override
-  final int index;
-
-  KTypeVariable(this.typeDeclaration, this.name, this.index);
-
-  @override
-  String toString() =>
-      '${kElementPrefix}type_variable(${typeDeclaration.name}.$name)';
-}
-
-class KLocalFunction implements Local {
-  @override
-  final String? name;
-  final MemberEntity memberContext;
-  final Entity executableContext;
-  final ir.LocalFunction node;
-  late final FunctionType functionType;
-
-  KLocalFunction(
-      this.name, this.memberContext, this.executableContext, this.node);
-
-  @override
-  String toString() => '${kElementPrefix}local_function'
-      '(${memberContext.name}.${name ?? '<anonymous>'})';
-}
-
-class KLocalTypeVariable implements TypeVariableEntity {
-  @override
-  final KLocalFunction typeDeclaration;
-  @override
-  final String name;
-  @override
-  final int index;
-  late final DartType bound;
-  late final DartType defaultType;
-
-  KLocalTypeVariable(this.typeDeclaration, this.name, this.index);
-
-  @override
-  String toString() =>
-      '${kElementPrefix}local_type_variable(${typeDeclaration.name}.$name)';
-}
diff --git a/pkg/compiler/lib/src/kernel/kernel_strategy.dart b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
index c429629..0b75294 100644
--- a/pkg/compiler/lib/src/kernel/kernel_strategy.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_strategy.dart
@@ -31,6 +31,7 @@
 import '../js_backend/no_such_method_registry.dart';
 import '../js_backend/resolution_listener.dart';
 import '../js_backend/runtime_types_resolution.dart';
+import '../js_model/elements.dart';
 import '../kernel/dart2js_target.dart';
 import '../kernel/no_such_method_resolver.dart';
 import '../native/enqueue.dart' show NativeResolutionEnqueuer;
@@ -42,7 +43,6 @@
 import '../universe/world_builder.dart';
 import '../universe/world_impact.dart';
 import '../util/enumset.dart';
-import 'kelements.dart';
 import 'element_map.dart';
 import 'element_map_impl.dart';
 import 'native_basic_data.dart';
@@ -395,12 +395,12 @@
       }
       if (element is FieldEntity && !element.isInstanceMember) {
         _fieldAnalysis.registerStaticField(
-            element as KField, scopeModel.initializerComplexity);
+            element as JField, scopeModel.initializerComplexity);
       }
       ImpactBuilderData impactBuilderData = modularMemberData.impactBuilderData;
       return _compilerTask.measureSubtask('worldImpact', () {
         WorldImpact worldImpact = _elementMap.computeWorldImpact(
-            element as KMember,
+            element as JMember,
             _impacts,
             _nativeResolutionEnqueuer,
             _backendUsageBuilder,
diff --git a/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart b/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
index f4786e0..e9d7397 100644
--- a/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
+++ b/pkg/compiler/lib/src/kernel/no_such_method_resolver.dart
@@ -8,8 +8,8 @@
 import '../common/names.dart';
 import '../elements/entities.dart';
 
+import '../js_model/elements.dart';
 import 'element_map.dart';
-import 'kelements.dart';
 
 /// Interface for determining the form of a `noSuchMethod` implementation.
 class NoSuchMethodResolver {
@@ -23,7 +23,7 @@
   ///
   ///     noSuchMethod(i) => super.noSuchMethod(i);
   ///
-  bool hasForwardingSyntax(KFunction method) {
+  bool hasForwardingSyntax(JFunction method) {
     ir.Procedure node = elementMap.lookupProcedure(method);
     if (node.function.positionalParameters.isEmpty) return false;
     ir.VariableDeclaration firstParameter =
@@ -59,7 +59,7 @@
   ///
   ///     noSuchMethod(i) => throw Error();
   ///
-  bool hasThrowingSyntax(KFunction method) {
+  bool hasThrowingSyntax(JFunction method) {
     ir.Procedure node = elementMap.lookupProcedure(method);
     ir.Statement? body = node.function.body;
     if (body is ir.Block && body.statements.isNotEmpty) {
diff --git a/pkg/compiler/test/field_analysis/kfield_analysis_test.dart b/pkg/compiler/test/field_analysis/kfield_analysis_test.dart
index eb3e7e9..ac8b375 100644
--- a/pkg/compiler/test/field_analysis/kfield_analysis_test.dart
+++ b/pkg/compiler/test/field_analysis/kfield_analysis_test.dart
@@ -9,7 +9,7 @@
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/js_backend/field_analysis.dart';
-import 'package:compiler/src/kernel/kelements.dart';
+import 'package:compiler/src/js_model/elements.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:kernel/ast.dart' as ir;
 import '../equivalence/id_equivalence.dart';
@@ -44,7 +44,7 @@
       Features features = Features();
       if (member.isInstanceMember) {
         AllocatorData? data =
-            allocatorAnalysis.getAllocatorDataForTesting(member as KField);
+            allocatorAnalysis.getAllocatorDataForTesting(member as JField);
         if (data != null) {
           if (data.initialValue != null) {
             features[Tags.initialValue] =
@@ -57,7 +57,7 @@
         }
       } else {
         StaticFieldData staticFieldData =
-            allocatorAnalysis.getStaticFieldDataForTesting(member as KField)!;
+            allocatorAnalysis.getStaticFieldDataForTesting(member as JField)!;
         if (staticFieldData.initialValue != null) {
           features[Tags.initialValue] =
               staticFieldData.initialValue!.toStructuredText(dartTypes);
diff --git a/pkg/compiler/test/helpers/type_test_helper.dart b/pkg/compiler/test/helpers/type_test_helper.dart
index 12d0ebc..088362c 100644
--- a/pkg/compiler/test/helpers/type_test_helper.dart
+++ b/pkg/compiler/test/helpers/type_test_helper.dart
@@ -6,13 +6,13 @@
 
 import 'dart:async';
 import 'package:compiler/src/elements/names.dart';
+import 'package:compiler/src/js_model/elements.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/common/elements.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/compiler.dart' show Compiler;
 import 'package:compiler/src/elements/types.dart';
 import 'package:compiler/src/elements/entities.dart';
-import 'package:compiler/src/kernel/kelements.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:compiler/src/kernel/kernel_world.dart';
 import 'package:compiler/src/options.dart';
@@ -163,7 +163,7 @@
 
     for (Local local
         in compiler.frontendClosedWorldForTesting!.localFunctions) {
-      final kLocal = local as KLocalFunction;
+      final kLocal = local as JLocalFunction;
       if (kLocal.memberContext == member) {
         type ??= elementEnvironment.getLocalFunctionType(kLocal);
       }
diff --git a/pkg/compiler/test/model/no_such_method_enabled_test.dart b/pkg/compiler/test/model/no_such_method_enabled_test.dart
index e0f8b68..5c80558 100644
--- a/pkg/compiler/test/model/no_such_method_enabled_test.dart
+++ b/pkg/compiler/test/model/no_such_method_enabled_test.dart
@@ -8,8 +8,8 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/js_backend/no_such_method_registry.dart';
+import 'package:compiler/src/js_model/elements.dart';
 import 'package:compiler/src/js_model/js_world.dart' show JClosedWorld;
-import 'package:compiler/src/kernel/kelements.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/util/memory_compiler.dart';
 
@@ -295,7 +295,7 @@
 
     Expect.equals(
         info.hasForwardingSyntax,
-        resolver.hasForwardingSyntax(noSuchMethod as KFunction),
+        resolver.hasForwardingSyntax(noSuchMethod as JFunction),
         "Unexpected hasForwardSyntax result on $noSuchMethod.");
     Expect.equals(
         info.hasThrowingSyntax,
diff --git a/pkg/compiler/test/static_type/static_type_test.dart b/pkg/compiler/test/static_type/static_type_test.dart
index 86dfbdc..46ae2f4 100644
--- a/pkg/compiler/test/static_type/static_type_test.dart
+++ b/pkg/compiler/test/static_type/static_type_test.dart
@@ -10,8 +10,8 @@
 import 'package:compiler/src/ir/cached_static_type.dart';
 import 'package:compiler/src/ir/static_type_base.dart';
 import 'package:compiler/src/ir/static_type_cache.dart';
+import 'package:compiler/src/js_model/elements.dart';
 import 'package:compiler/src/kernel/element_map.dart';
-import 'package:compiler/src/kernel/kelements.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
@@ -53,7 +53,7 @@
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
     KernelToElementMap elementMap = frontendStrategy.elementMap;
     StaticTypeCache staticTypeCache =
-        elementMap.getCachedStaticTypes(member as KMember);
+        elementMap.getCachedStaticTypes(member as JMember);
     ir.Member node = elementMap.getMemberNode(member);
     StaticTypeIrComputer(
             compiler.reporter,
diff --git a/pkg/compiler/test/static_type/type_promotion_test.dart b/pkg/compiler/test/static_type/type_promotion_test.dart
index f34cdc1..31ae4bb 100644
--- a/pkg/compiler/test/static_type/type_promotion_test.dart
+++ b/pkg/compiler/test/static_type/type_promotion_test.dart
@@ -7,9 +7,9 @@
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
 import 'package:compiler/src/elements/entities.dart';
+import 'package:compiler/src/elements/indexed.dart';
 import 'package:compiler/src/ir/static_type.dart';
 import 'package:compiler/src/kernel/element_map.dart';
-import 'package:compiler/src/kernel/kelements.dart';
 import 'package:compiler/src/kernel/kernel_strategy.dart';
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
@@ -50,7 +50,7 @@
     KernelFrontendStrategy frontendStrategy = compiler.frontendStrategy;
     KernelToElementMap elementMap = frontendStrategy.elementMap;
     Map<ir.Expression, TypeMap> typeMaps =
-        elementMap.getTypeMapsForTesting(member as KMember)!;
+        elementMap.getTypeMapsForTesting(member as IndexedMember)!;
     ir.Member node = elementMap.getMemberNode(member);
     TypePromotionIrComputer(compiler.reporter, actualMap, typeMaps).run(node);
   }