Elements. Remove FragmentImpl.library

This caused several related changes.

* Inlines `ClassFragmentImpl.isDartCoreEnum`, `ClassFragmentImpl.isDartCoreObject`, and `ClassFragmentImpl.ClassFragmentImpl` at their call sites in `ClassElementImpl`.

* Inlines `ConstructorFragmentImpl.computeConstantDependencies` at its call site in `ConstructorElementImpl`.

* Changes the various implementations of the getter `ElementImpl.library` so that they don't use `FragmentImpl.library`.

* Removes the getters `FragmentImpl.context`.

* Inlines the getter `FragmentImpl.isNonFunctionTypeAliasesEnabled` at its call site in `TypeAliasElementImpl`.

* Inlines `InterfaceFragmentImpl.isDartCoreEnumImpl` at its call site in `InterfaceElementImpl`.

* Removes `InterfaceFragmentImpl.isDartCoreFunctionImpl`.

* Changes the extension `TypeParameterElementImplExtension` to apply to
`TypeParameterElementImpl` rather than `TypeParameterFragmentImpl`.

Change-Id: I43c538df047514412735586d5d85f1bc30eae33e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/441360
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 4cc6c4f..75966a6 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -300,11 +300,21 @@
 
   @override
   @trackedIncludedIntoId
-  bool get isDartCoreEnum => firstFragment.isDartCoreEnum;
+  bool get isDartCoreEnum {
+    return name == 'Enum' && library.isDartCore;
+  }
+
+  /// Return `true` if this class represents the class 'Function' defined in the
+  /// dart:core library.
+  bool get isDartCoreFunctionImpl {
+    return name == 'Function' && library.isDartCore;
+  }
 
   @override
   @trackedIncludedIntoId
-  bool get isDartCoreObject => firstFragment.isDartCoreObject;
+  bool get isDartCoreObject {
+    return name == 'Object' && library.isDartCore;
+  }
 
   @trackedIncludedIntoId
   bool get isDartCoreRecord {
@@ -634,18 +644,6 @@
 
   bool get isConstructable => !isSealed && !isAbstract;
 
-  bool get isDartCoreEnum {
-    return name == 'Enum' && library.isDartCore;
-  }
-
-  bool get isDartCoreObject {
-    return name == 'Object' && library.isDartCore;
-  }
-
-  bool get isDartCoreRecord {
-    return name == 'Record' && library.isDartCore;
-  }
-
   bool get isExhaustive => isSealed;
 
   bool get isFinal {
@@ -900,7 +898,14 @@
   /// Ensures that dependencies of this constructor, such as default values
   /// of formal parameters, are evaluated.
   void computeConstantDependencies() {
-    firstFragment.computeConstantDependencies();
+    if (!isConstantEvaluated) {
+      computeConstants(
+        declaredVariables: library.context.declaredVariables,
+        constants: [this],
+        featureSet: library.featureSet,
+        configuration: ConstantEvaluationConfiguration(),
+      );
+    }
   }
 
   @override
@@ -1070,19 +1075,6 @@
       typeNameOffset ??
       firstTokenOffset ??
       enclosingFragment.offset;
-
-  /// Ensures that dependencies of this constructor, such as default values
-  /// of formal parameters, are evaluated.
-  void computeConstantDependencies() {
-    if (!isConstantEvaluated) {
-      computeConstants(
-        declaredVariables: context.declaredVariables,
-        constants: [element],
-        featureSet: library.featureSet,
-        configuration: ConstantEvaluationConfiguration(),
-      );
-    }
-  }
 }
 
 /// This mixin is used to set up loading class members from summaries only when
@@ -1323,9 +1315,6 @@
   Null get enclosingFragment => null;
 
   @override
-  Null get library => null;
-
-  @override
   Null get libraryFragment => null;
 
   @Deprecated('Use metadata instead')
@@ -1866,6 +1855,11 @@
   bool get isPublic => !isPrivate;
 
   @override
+  LibraryElementImpl? get library {
+    return firstFragment.libraryFragment?.element as LibraryElementImpl?;
+  }
+
+  @override
   String? get lookupName {
     return name;
   }
@@ -2259,12 +2253,6 @@
     }
   }
 
-  @override
-  LibraryElementImpl get library {
-    var firstFragment = this.firstFragment;
-    return firstFragment.library;
-  }
-
   @Deprecated('Use library instead')
   @override
   LibraryElement get library2 => library;
@@ -2866,9 +2854,6 @@
   @override
   ElementKind get kind => ElementKind.FIELD;
 
-  @override
-  LibraryElementImpl get library => firstFragment.library;
-
   @Deprecated('Use library instead')
   @override
   LibraryElementImpl get library2 => library;
@@ -3224,9 +3209,6 @@
   @override
   ElementKind get kind => ElementKind.PARAMETER;
 
-  @override
-  LibraryElementImpl? get library => wrappedElement.library;
-
   @Deprecated('Use library instead')
   @override
   LibraryElementImpl? get library2 => library;
@@ -3491,12 +3473,6 @@
   bool get isSuperFormal => false;
 
   @override
-  LibraryElementImpl? get library {
-    var library = libraryFragment?.element;
-    return library as LibraryElementImpl?;
-  }
-
-  @override
   LibraryFragment? get libraryFragment {
     return enclosingFragment?.libraryFragment;
   }
@@ -3602,11 +3578,6 @@
   /// contains the element, or `null` if the element is synthetic.
   int? get codeOffset => _codeOffset;
 
-  /// The analysis context in which this element is defined.
-  AnalysisContext get context {
-    return library!.context;
-  }
-
   /// The declaration of this element.
   ///
   /// If the element is a view on an element, e.g. a method from an interface
@@ -3638,10 +3609,6 @@
     setModifier(Modifier.AUGMENTATION, value);
   }
 
-  bool get isNonFunctionTypeAliasesEnabled {
-    return library!.featureSet.isEnabled(Feature.nonfunction_type_aliases);
-  }
-
   /// Whether the element is private.
   ///
   /// Private elements are visible only within the library in which they are
@@ -3674,8 +3641,6 @@
     setModifier(Modifier.SYNTHETIC, isSynthetic);
   }
 
-  LibraryElementImpl? get library;
-
   String? get lookupName {
     return name;
   }
@@ -3805,6 +3770,9 @@
 abstract class FunctionTypedElementImpl extends ElementImpl
     implements FunctionTypedElement {
   @override
+  LibraryElementImpl get library => super.library!;
+
+  @override
   void visitChildren<T>(ElementVisitor2<T> visitor) {
     for (var child in children) {
       child.accept(visitor);
@@ -3875,9 +3843,6 @@
   @override
   ElementKind get kind => ElementKind.GENERIC_FUNCTION_TYPE;
 
-  @override
-  LibraryElementImpl get library => _wrappedElement.library;
-
   @Deprecated('Use library instead')
   @override
   LibraryElementImpl get library2 => library;
@@ -4203,7 +4168,7 @@
   String? get documentationComment => firstFragment.documentationComment;
 
   @override
-  LibraryElement get enclosingElement => firstFragment.library;
+  LibraryElementImpl get enclosingElement => library;
 
   @Deprecated('Use enclosingElement instead')
   @override
@@ -4255,7 +4220,7 @@
   bool get isSynthetic => firstFragment.isSynthetic;
 
   @override
-  LibraryElementImpl get library => firstFragment.library;
+  LibraryElementImpl get library => super.library!;
 
   @Deprecated('Use library instead')
   @override
@@ -4875,6 +4840,12 @@
     return firstFragment.interfaces;
   }
 
+  /// Return `true` if this class represents the class '_Enum' defined in the
+  /// dart:core library.
+  bool get isDartCoreEnumImpl {
+    return name == '_Enum' && library.isDartCore;
+  }
+
   set isSimplyBounded(bool value) {
     for (var fragment in fragments) {
       fragment.isSimplyBounded = value;
@@ -5217,18 +5188,6 @@
     _interfaces = interfaces.cast();
   }
 
-  /// Return `true` if this class represents the class '_Enum' defined in the
-  /// dart:core library.
-  bool get isDartCoreEnumImpl {
-    return name == '_Enum' && library.isDartCore;
-  }
-
-  /// Return `true` if this class represents the class 'Function' defined in the
-  /// dart:core library.
-  bool get isDartCoreFunctionImpl {
-    return name == 'Function' && library.isDartCore;
-  }
-
   @override
   bool get isSimplyBounded {
     return hasModifier(Modifier.SIMPLY_BOUNDED);
@@ -5446,7 +5405,7 @@
   ElementKind get kind => ElementKind.LABEL;
 
   @override
-  LibraryElement get library => _wrappedFragment.library;
+  LibraryElementImpl get library => super.library!;
 
   @Deprecated('Use library instead')
   @override
@@ -5529,11 +5488,6 @@
   bool get isOnSwitchMember => _onSwitchMember;
 
   @override
-  LibraryElementImpl get library {
-    return libraryFragment.element;
-  }
-
-  @override
   LibraryFragmentImpl get libraryFragment => enclosingUnit;
 
   @override
@@ -6180,7 +6134,6 @@
   @override
   LineInfo lineInfo;
 
-  @override
   final LibraryElementImpl library;
 
   /// The libraries exported by this unit.
@@ -6934,7 +6887,7 @@
   ElementKind get kind => ElementKind.LOCAL_VARIABLE;
 
   @override
-  LibraryElementImpl get library => _wrappedElement.library;
+  LibraryElementImpl get library => super.library!;
 
   @Deprecated('Use library instead')
   @override
@@ -7940,7 +7893,7 @@
   ElementKind get kind => ElementKind.ERROR;
 
   @override
-  LibraryElement get library => libraryFragment.element;
+  LibraryElementImpl get library => libraryFragment.element;
 
   @Deprecated('Use library instead')
   @override
@@ -8208,9 +8161,6 @@
   Null get enclosingFragment => null;
 
   @override
-  Null get library => null;
-
-  @override
   Null get libraryFragment => null;
 
   @Deprecated('Use metadata instead')
@@ -8270,15 +8220,6 @@
   }
 
   @override
-  LibraryElementImpl get library {
-    var thisFragment = this as Fragment;
-    var enclosingFragment = thisFragment.enclosingFragment!;
-    var libraryFragment = enclosingFragment.libraryFragment;
-    libraryFragment as LibraryFragmentImpl;
-    return libraryFragment.element;
-  }
-
-  @override
   Source get source => enclosingFragment.source!;
 }
 
@@ -8441,7 +8382,7 @@
   ElementKind get kind => ElementKind.PREFIX;
 
   @override
-  LibraryElementImpl get library => firstFragment.libraryFragment.element;
+  LibraryElementImpl get library => super.library!;
 
   @Deprecated('Use library instead')
   @override
@@ -8542,9 +8483,6 @@
       super.enclosingFragment as LibraryFragmentImpl;
 
   @override
-  LibraryElementImpl? get library => libraryFragment.element;
-
-  @override
   LibraryFragmentImpl get libraryFragment => enclosingFragment;
 }
 
@@ -8744,6 +8682,9 @@
   }
 
   @override
+  LibraryElementImpl get library => super.library!;
+
+  @override
   Element get nonSynthetic {
     if (isSynthetic) {
       if (enclosingElement case EnumElementImpl enclosingElement) {
@@ -9244,9 +9185,7 @@
   TopLevelFunctionElementImpl get baseElement => this;
 
   @override
-  LibraryElementImpl get enclosingElement {
-    return firstFragment.library;
-  }
+  LibraryElementImpl get enclosingElement => library;
 
   @Deprecated('Use enclosingElement instead')
   @override
@@ -9282,9 +9221,6 @@
     return super.lastFragment as TopLevelFunctionFragmentImpl;
   }
 
-  @override
-  LibraryElementImpl get library => firstFragment.library;
-
   @Deprecated('Use library instead')
   @override
   LibraryElementImpl get library2 => library;
@@ -9360,7 +9296,7 @@
   TopLevelVariableElement get baseElement => this;
 
   @override
-  LibraryElementImpl get enclosingElement => firstFragment.library;
+  LibraryElementImpl get enclosingElement => library;
 
   @Deprecated('Use enclosingElement instead')
   @override
@@ -9404,9 +9340,6 @@
   @override
   ElementKind get kind => ElementKind.TOP_LEVEL_VARIABLE;
 
-  @override
-  LibraryElement get library => firstFragment.libraryFragment.element;
-
   @Deprecated('Use library instead')
   @override
   LibraryElement get library2 => library;
@@ -9556,8 +9489,7 @@
   TypeAliasElementImpl get baseElement => this;
 
   @override
-  LibraryElement get enclosingElement =>
-      firstFragment.library as LibraryElement;
+  LibraryElementImpl get enclosingElement => library;
 
   @Deprecated('Use enclosingElement instead')
   @override
@@ -9575,6 +9507,10 @@
     ];
   }
 
+  bool get isNonFunctionTypeAliasesEnabled {
+    return library.featureSet.isEnabled(Feature.nonfunction_type_aliases);
+  }
+
   /// Whether this alias is a "proper rename" of [aliasedType], as defined in
   /// the constructor-tearoffs specification.
   bool get isProperRename {
@@ -9625,7 +9561,7 @@
   ElementKind get kind => ElementKind.TYPE_ALIAS;
 
   @override
-  LibraryElementImpl get library => firstFragment.library;
+  LibraryElementImpl get library => super.library!;
 
   @Deprecated('Use library instead')
   @override
@@ -9700,7 +9636,7 @@
     required NullabilitySuffix nullabilitySuffix,
   }) {
     if (firstFragment.hasSelfReference) {
-      if (firstFragment.isNonFunctionTypeAliasesEnabled) {
+      if (isNonFunctionTypeAliasesEnabled) {
         return DynamicTypeImpl.instance;
       } else {
         return _errorFunctionType(nullabilitySuffix);
@@ -9931,9 +9867,6 @@
   @override
   ElementKind get kind => ElementKind.TYPE_PARAMETER;
 
-  @override
-  LibraryElementImpl? get library => firstFragment.library;
-
   @Deprecated('Use library instead')
   @override
   LibraryElementImpl? get library2 => library;
@@ -10094,12 +10027,6 @@
   }
 
   @override
-  LibraryElementImpl? get library {
-    var library = libraryFragment?.element;
-    return library as LibraryElementImpl?;
-  }
-
-  @override
   LibraryFragment? get libraryFragment {
     return enclosingFragment?.libraryFragment;
   }
@@ -10446,15 +10373,6 @@
   _ExistingFragmentImpl({required super.firstTokenOffset});
 
   @override
-  LibraryElementImpl get library {
-    var thisFragment = this as Fragment;
-    var enclosingFragment = thisFragment.enclosingFragment!;
-    var libraryFragment = enclosingFragment.libraryFragment;
-    libraryFragment as LibraryFragmentImpl;
-    return libraryFragment.element;
-  }
-
-  @override
   Source get source => enclosingFragment!.source!;
 }
 
diff --git a/pkg/analyzer/lib/src/dart/element/extensions.dart b/pkg/analyzer/lib/src/dart/element/extensions.dart
index 6832ccd..667e622 100644
--- a/pkg/analyzer/lib/src/dart/element/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/element/extensions.dart
@@ -232,7 +232,7 @@
   }
 }
 
-extension TypeParameterElementImplExtension on TypeParameterFragmentImpl {
+extension TypeParameterElementImplExtension on TypeParameterElementImpl {
   bool get isWildcardVariable {
     return name == '_' && library.hasWildcardVariablesFeatureEnabled;
   }
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index d606035..60b8a7e 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -148,7 +148,8 @@
       parameterType: SharedTypeView(parameterType),
       parameterName: parameterName,
       genericClassName: genericClass?.name,
-      isGenericClassInDartCore: genericClass?.library.isDartCore ?? false,
+      isGenericClassInDartCore:
+          genericClass?.element.library.isDartCore ?? false,
     );
     inferenceLogWriter?.enterConstraintGeneration(
       ConstraintGenerationSource.argument,
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index c46fb13..ee04c60 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -644,7 +644,7 @@
     if (implementsDartCoreEnum) {
       var classElement = this.classElement;
       if (classElement is ClassFragmentImpl &&
-              !classElement.isDartCoreEnumImpl ||
+              !classElement.element.isDartCoreEnumImpl ||
           classElement is EnumFragmentImpl ||
           classElement is MixinFragmentImpl) {
         if (const {'index', 'hashCode', '=='}.contains(name.lexeme)) {
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 84f360d..ddd6f63 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -499,7 +499,7 @@
       _enclosingClass = declarationElement.asElement2;
 
       List<ClassMember> members = node.members;
-      if (!declarationElement.isDartCoreFunctionImpl) {
+      if (!declarationElement.element.isDartCoreFunctionImpl) {
         _checkForBuiltInIdentifierAsName(
           node.name,
           CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME,
@@ -2472,7 +2472,7 @@
     ExtensionTypeFragmentImpl fragment,
   ) {
     for (var typeParameter in fragment.typeParameters) {
-      if (typeParameter.isWildcardVariable) continue;
+      if (typeParameter.element.isWildcardVariable) continue;
 
       var name = typeParameter.name ?? '';
       // name is same as the name of the enclosing class
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 4f9ad85..c8c2b90 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -384,6 +384,16 @@
     );
     instanceElement.addGetter(getterElement);
 
+    // `class Enum {}` in `dart:core` declares `int get index` as abstract.
+    // But the specification says that practically a different class
+    // implementing `Enum` is used as a superclass, so `index` should be
+    // considered to have non-abstract implementation.
+    if (instanceElement is ClassElementImpl &&
+        instanceElement.isDartCoreEnum &&
+        getterFragment.name == 'index') {
+      getterFragment.isAbstract = false;
+    }
+
     // If `getter` is already set, this is a compile-time error.
     // Reset to `null`, so create a new variable.
     if (lastFieldElement != null) {
@@ -1540,7 +1550,6 @@
   @override
   void visitMethodDeclaration(covariant MethodDeclarationImpl node) {
     var nameToken = node.name;
-    var name = nameToken.lexeme;
 
     Reference reference;
     ExecutableFragmentImpl executableFragment;
@@ -1553,14 +1562,6 @@
       fragment.isAugmentation = node.augmentKeyword != null;
       fragment.isStatic = node.isStatic;
 
-      // `class Enum {}` in `dart:core` declares `int get index` as abstract.
-      // But the specification says that practically a different class
-      // implementing `Enum` is used as a superclass, so `index` should be
-      // considered to have non-abstract implementation.
-      if (_enclosingContext.isDartCoreEnum && name == 'index') {
-        fragment.isAbstract = false;
-      }
-
       reference = Reference.root(); // TODO(scheglov): remove this
       var parentFragment = _enclosingContext.fragment;
       fragment.enclosingFragment = parentFragment;
@@ -1583,16 +1584,6 @@
 
       executableFragment = fragment;
     } else {
-      var isUnaryMinus = false;
-      if (nameToken.lexeme == '-') {
-        var parameters = node.parameters;
-        isUnaryMinus = parameters != null && parameters.parameters.isEmpty;
-      }
-
-      if (isUnaryMinus) {
-        name = 'unary-';
-      }
-
       var fragment = MethodFragmentImpl(
         name: _getFragmentName(nameToken),
         firstTokenOffset: null,
@@ -1995,11 +1986,6 @@
     this.hasDefaultFormalParameters = false,
   });
 
-  bool get isDartCoreEnum {
-    var fragment = this.fragment;
-    return fragment is ClassFragmentImpl && fragment.isDartCoreEnum;
-  }
-
   void addFunction(String name, TopLevelFunctionFragmentImpl fragment) {}
 
   void addParameter(String? name, FormalParameterFragmentImpl fragment) {
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index 52a596a..46c1b3c 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -388,7 +388,7 @@
     for (var interfaceFragment in element.topLevelElements) {
       switch (interfaceFragment) {
         case ClassFragmentImpl():
-          if (interfaceFragment.isDartCoreObject) continue;
+          if (interfaceFragment.element.isDartCoreObject) continue;
           if (interfaceFragment.supertype == null) {
             shouldResetClassHierarchies = true;
             interfaceFragment.supertype = objectType;
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 84ffa28..19df007 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -124,7 +124,7 @@
       if (type is InterfaceTypeImpl && _isInterfaceTypeClass(type)) {
         element.supertype = type;
       }
-    } else if (element.isDartCoreObject) {
+    } else if (element.element.isDartCoreObject) {
       element.setModifier(Modifier.DART_CORE_OBJECT, true);
     }
 
@@ -300,8 +300,9 @@
 
   void _extensionTypeDeclaration(ExtensionTypeDeclarationImpl node) {
     var fragment = node.declaredFragment!;
+    var element = fragment.element;
 
-    var typeSystem = fragment.library.typeSystem;
+    var typeSystem = element.library.typeSystem;
     var interfaces =
         node.implementsClause?.interfaces
             .map((e) => e.type)
@@ -471,7 +472,7 @@
     this.element,
     this.featureSet, {
     required this.typeSystemOperations,
-  }) : typeSystem = element.library.typeSystem,
+  }) : typeSystem = element.element.library.typeSystem,
        classType = element.element.thisType {
     interfacesMerger = InterfacesMerger(typeSystem);
     interfacesMerger.addWithSupertypes(element.supertype);
@@ -663,20 +664,20 @@
     var element = declaration.element;
     element.mixinInferenceCallback = _callbackWhenLoop;
 
-    var featureSet = element.library.featureSet;
+    var library = element.element.library;
     var declarationMixins = <InterfaceTypeImpl>[];
 
     try {
       // Casts aren't relevant for mixin inference.
       var typeSystemOperations = TypeSystemOperations(
-        element.library.typeSystem,
+        library.typeSystem,
         strictCasts: false,
       );
 
       if (declaration.withClause case var withClause?) {
         var inference = _MixinInference(
           element,
-          featureSet,
+          library.featureSet,
           typeSystemOperations: typeSystemOperations,
         );
         var inferred = inference.perform(withClause);
@@ -687,7 +688,7 @@
       for (var augmentation in declaration.augmentations) {
         var inference = _MixinInference(
           element,
-          featureSet,
+          library.featureSet,
           typeSystemOperations: typeSystemOperations,
         );
         inference.addTypes(
@@ -710,8 +711,8 @@
   /// hierarchies for all classes being linked, indiscriminately.
   void _resetHierarchies() {
     for (var declaration in _declarations.values) {
-      var element = declaration.element;
-      element.library.session.classHierarchy.remove(element.asElement2);
+      var element = declaration.element.element;
+      element.library.session.classHierarchy.remove(element);
     }
   }
 }