diff --git a/pkg/analysis_server/lib/src/cider/rename.dart b/pkg/analysis_server/lib/src/cider/rename.dart
index 7b00736..a155512 100644
--- a/pkg/analysis_server/lib/src/cider/rename.dart
+++ b/pkg/analysis_server/lib/src/cider/rename.dart
@@ -84,7 +84,7 @@
       var oldStateName = '${element.displayName}State';
       var library = element.library!;
       var state =
-          library.getType(oldStateName) ?? library.getType('_$oldStateName');
+          library.getClass(oldStateName) ?? library.getClass('_$oldStateName');
       if (state != null) {
         var flutterWidgetStateNewName = '${newName}State';
         // If the State was private, ensure that it stays private.
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
index 0ef382b..30f982f 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_unit_member.dart
@@ -145,7 +145,7 @@
       var oldStateName = '${oldName}State';
       var library = element.library!;
       _flutterWidgetState =
-          library.getType(oldStateName) ?? library.getType('_$oldStateName');
+          library.getClass(oldStateName) ?? library.getClass('_$oldStateName');
     }
   }
 
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 754cb95..4aa2f0f 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -363,7 +363,7 @@
 
     var coreLibResult = await driverFor(testFilePath)
         .getLibraryByUri('dart:core') as LibraryElementResult;
-    var intElement = coreLibResult.element.getType('int')!;
+    var intElement = coreLibResult.element.getClass('int')!;
 
     var matches = await searchEngine.searchReferences(intElement);
 
diff --git a/pkg/analysis_server/test/src/utilities/flutter_test.dart b/pkg/analysis_server/test/src/utilities/flutter_test.dart
index 67cc038..9cf4a14 100644
--- a/pkg/analysis_server/test/src/utilities/flutter_test.dart
+++ b/pkg/analysis_server/test/src/utilities/flutter_test.dart
@@ -444,19 +444,19 @@
 class NotFlutter {}
 class NotWidget extends State {}
 ''');
-    var myStatelessWidget = testUnitElement.getType('MyStatelessWidget');
+    var myStatelessWidget = testUnitElement.getClass('MyStatelessWidget');
     expect(_flutter.isWidget(myStatelessWidget), isTrue);
 
-    var myStatefulWidget = testUnitElement.getType('MyStatefulWidget');
+    var myStatefulWidget = testUnitElement.getClass('MyStatefulWidget');
     expect(_flutter.isWidget(myStatefulWidget), isTrue);
 
-    var myContainer = testUnitElement.getType('MyContainer');
+    var myContainer = testUnitElement.getClass('MyContainer');
     expect(_flutter.isWidget(myContainer), isTrue);
 
-    var notFlutter = testUnitElement.getType('NotFlutter');
+    var notFlutter = testUnitElement.getClass('NotFlutter');
     expect(_flutter.isWidget(notFlutter), isFalse);
 
-    var notWidget = testUnitElement.getType('NotWidget');
+    var notWidget = testUnitElement.getClass('NotWidget');
     expect(_flutter.isWidget(notWidget), isFalse);
   }
 
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 49105bc..6a2a55a 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -20,6 +20,7 @@
 * Deprecated `get enums/mixin`, use `get enums2/mixins2` instead.
 * Deprecated `DartType.element`, check for `InterfaceType`, `TypeParameterType`, and then ask the element.
 * Deprecated `ClassElement.isEnum` and `isMixin`. Check for `is EnumElement` and `is MixinElement` instead.
+* Deprecated `LibraryElement.getType()` use `getClass()` instead.
 
 ## 4.3.1
 * Fix `identifier` for `LibraryExportElement` and `LibraryImportElement`.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index b389c48..7aec856 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -293,6 +293,11 @@
   /// compilation unit.
   List<TypeAliasElement> get typeAliases;
 
+  /// Return the class defined in this compilation unit that has the given
+  /// [name], or `null` if this compilation unit does not define a class with
+  /// the given name.
+  ClassElement? getClass(String name);
+
   /// Return the enum defined in this compilation unit that has the given
   /// [name], or `null` if this compilation unit does not define an enum with
   /// the given name.
@@ -307,6 +312,7 @@
   /// Return the class defined in this compilation unit that has the given
   /// [name], or `null` if this compilation unit does not define a class with
   /// the given name.
+  @Deprecated('Use getClass() instead')
   ClassElement? getType(String name);
 }
 
@@ -1697,6 +1703,10 @@
   /// included using the `part` directive.
   List<CompilationUnitElement> get units;
 
+  /// Return the class defined in this library that has the given [name], or
+  /// `null` if this library does not define a class with the given name.
+  ClassElement? getClass(String name);
+
   /// Return a list containing all of the imports that share the given [prefix],
   /// or an empty array if there are no such imports.
   @Deprecated('Use PrefixElement.imports instead')
@@ -1704,6 +1714,7 @@
 
   /// Return the class defined in this library that has the given [name], or
   /// `null` if this library does not define a class with the given name.
+  @Deprecated('Use getClass() instead')
   ClassElement? getType(String className);
 
   /// If a legacy library, return the legacy view on the [element].
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 000d357..bbd5bcf 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1316,6 +1316,16 @@
     builder.writeCompilationUnitElement(this);
   }
 
+  @override
+  ClassElement? getClass(String className) {
+    for (final class_ in classes) {
+      if (class_.name == className) {
+        return class_;
+      }
+    }
+    return null;
+  }
+
   @Deprecated('Use getEnum2() instead')
   @override
   ClassElement? getEnum(String enumName) {
@@ -1337,6 +1347,7 @@
     return null;
   }
 
+  @Deprecated('Use getClass() instead')
   @override
   ClassElement? getType(String className) {
     for (ClassElement class_ in classes) {
@@ -4371,6 +4382,17 @@
           ..returnType = typeProvider.futureDynamicType;
   }
 
+  @override
+  ClassElement? getClass(String name) {
+    for (final unitElement in units) {
+      final element = unitElement.getClass(name);
+      if (element != null) {
+        return element;
+      }
+    }
+    return null;
+  }
+
   EnumElement? getEnum(String name) {
     for (final unitElement in units) {
       final element = unitElement.getEnum2(name);
@@ -4387,6 +4409,7 @@
     return prefix.imports;
   }
 
+  @Deprecated('Use getClass() instead')
   @override
   ClassElement? getType(String name) {
     for (final unitElement in units) {
@@ -4524,23 +4547,6 @@
     }
     return prefixes.toList(growable: false);
   }
-
-  static ClassElement? getTypeFromParts(
-      String className,
-      CompilationUnitElement definingCompilationUnit,
-      List<CompilationUnitElement> parts) {
-    var type = definingCompilationUnit.getType(className);
-    if (type != null) {
-      return type;
-    }
-    for (CompilationUnitElement part in parts) {
-      type = part.getType(className);
-      if (type != null) {
-        return type;
-      }
-    }
-    return null;
-  }
 }
 
 class LibraryExportElementImpl extends _ExistingElementImpl
diff --git a/pkg/analyzer/lib/src/dart/element/type_provider.dart b/pkg/analyzer/lib/src/dart/element/type_provider.dart
index 9e23e3d..5a2bbbe 100644
--- a/pkg/analyzer/lib/src/dart/element/type_provider.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_provider.dart
@@ -226,7 +226,7 @@
   ClassElement? get enumElement {
     if (!_hasEnumElement) {
       _hasEnumElement = true;
-      _enumElement = _coreLibrary.getType('Enum');
+      _enumElement = _coreLibrary.getClass('Enum');
     }
     return _enumElement;
   }
@@ -520,7 +520,7 @@
   /// Return the class with the given [name] from the given [library], or
   /// throw a [StateError] if there is no class with the given name.
   ClassElement _getClassElement(LibraryElement library, String name) {
-    var element = library.getType(name);
+    var element = library.getClass(name);
     if (element == null) {
       throw StateError('No definition of type $name');
     }
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index f436d60..9f13c23 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -157,7 +157,7 @@
         final compoundType = node.declaredElement!.thisType;
         final structType = compoundType.superclass!;
         final ffiLibrary = structType.element2.library;
-        final finalizableElement = ffiLibrary.getType(_finalizableClassName)!;
+        final finalizableElement = ffiLibrary.getClass(_finalizableClassName)!;
         final finalizableType = finalizableElement.thisType;
         if (typeSystem.isSubtypeOf(compoundType, finalizableType)) {
           _errorReporter.reportErrorForToken(
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index b472f5a..008ff70b 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -274,7 +274,7 @@
     final augmentedUnitElement = element.definingCompilationUnit;
     for (final augmentation in unitElement.classes) {
       // TODO(scheglov) if augmentation
-      final augmented = element.getType(augmentation.name);
+      final augmented = element.getClass(augmentation.name);
       if (augmented is ClassElementImpl) {
         augmented.accessors = [
           ...augmented.accessors,
diff --git a/pkg/analyzer/test/dart/sdk/build_sdk_summary_test.dart b/pkg/analyzer/test/dart/sdk/build_sdk_summary_test.dart
index c48c7c7..fc2a3ee 100644
--- a/pkg/analyzer/test/dart/sdk/build_sdk_summary_test.dart
+++ b/pkg/analyzer/test/dart/sdk/build_sdk_summary_test.dart
@@ -86,11 +86,11 @@
     final dartCore = await analysisSession.getLibrary('dart:core');
     final dartMath = await analysisSession.getLibrary('dart:math');
     final dartUi = await analysisSession.getLibrary('dart:ui');
-    expect(dartAsync.getType('Stream'), isNotNull);
-    expect(dartCore.getType('String'), isNotNull);
-    expect(dartMath.getType('Random'), isNotNull);
-    expect(dartUi.getType('FontStyle'), isNotNull);
-    expect(dartUi.getType('Offset'), isNotNull);
+    expect(dartAsync.getClass('Stream'), isNotNull);
+    expect(dartCore.getClass('String'), isNotNull);
+    expect(dartMath.getClass('Random'), isNotNull);
+    expect(dartUi.getClass('FontStyle'), isNotNull);
+    expect(dartUi.getClass('Offset'), isNotNull);
   }
 
   test_it() async {
@@ -132,9 +132,9 @@
     final dartAsync = await analysisSession.getLibrary('dart:async');
     final dartCore = await analysisSession.getLibrary('dart:core');
     final dartMath = await analysisSession.getLibrary('dart:math');
-    expect(dartAsync.getType('Stream'), isNotNull);
-    expect(dartCore.getType('String'), isNotNull);
-    expect(dartMath.getType('Random'), isNotNull);
+    expect(dartAsync.getClass('Stream'), isNotNull);
+    expect(dartCore.getClass('String'), isNotNull);
+    expect(dartMath.getClass('Random'), isNotNull);
   }
 }
 
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index b8a11e6..a46f88f 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -174,7 +174,7 @@
 
   InterfaceType comparableNone(DartType type) {
     var coreLibrary = typeProvider.intElement.library;
-    var element = coreLibrary.getType('Comparable')!;
+    var element = coreLibrary.getClass('Comparable')!;
     return element.instantiate(
       typeArguments: [type],
       nullabilitySuffix: NullabilitySuffix.none,
@@ -183,7 +183,7 @@
 
   InterfaceType comparableQuestion(DartType type) {
     var coreLibrary = typeProvider.intElement.library;
-    var element = coreLibrary.getType('Comparable')!;
+    var element = coreLibrary.getClass('Comparable')!;
     return element.instantiate(
       typeArguments: [type],
       nullabilitySuffix: NullabilitySuffix.question,
@@ -192,7 +192,7 @@
 
   InterfaceType comparableStar(DartType type) {
     var coreLibrary = typeProvider.intElement.library;
-    var element = coreLibrary.getType('Comparable')!;
+    var element = coreLibrary.getClass('Comparable')!;
     return element.instantiate(
       typeArguments: [type],
       nullabilitySuffix: NullabilitySuffix.star,
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 28a7fb5..2496ae6 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -768,7 +768,7 @@
 class E {}
 ''');
     CompilationUnit unit = result.unit;
-    ClassElement classC = unit.declaredElement!.getType('C')!;
+    ClassElement classC = unit.declaredElement!.getClass('C')!;
     expect(classC.documentationComment, isNotNull);
   }
 
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
index 792f4eb..d24f291 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_caching_test.dart
@@ -381,8 +381,8 @@
     // This macro generates `MacroA`, but not `MacroB`.
     {
       final libraryA = await getLibrary('package:test/a.dart');
-      expect(libraryA.getType('MacroA'), isNotNull);
-      expect(libraryA.getType('MacroB'), isNull);
+      expect(libraryA.getClass('MacroA'), isNotNull);
+      expect(libraryA.getClass('MacroB'), isNull);
       // This propagates transitively.
       final libraryB = await getLibrary('package:test/b.dart');
       expect(libraryB.exportNamespace.get('MacroA'), isNotNull);
@@ -402,8 +402,8 @@
     // This macro generates `MacroB`, but not `MacroA`.
     {
       final libraryA = await getLibrary('package:test/a.dart');
-      expect(libraryA.getType('MacroA'), isNull);
-      expect(libraryA.getType('MacroB'), isNotNull);
+      expect(libraryA.getClass('MacroA'), isNull);
+      expect(libraryA.getClass('MacroB'), isNotNull);
       // This propagates transitively.
       final libraryB = await getLibrary('package:test/b.dart');
       expect(libraryB.exportNamespace.get('MacroA'), isNull);
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index fdd27ee..6ca2456 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -417,7 +417,7 @@
     LibraryElement aLibrary = aImport.importedLibrary!;
 
     CompilationUnitElement aUnitElement = aLibrary.definingCompilationUnit;
-    ClassElement aClass = aUnitElement.getType('A')!;
+    ClassElement aClass = aUnitElement.getClass('A')!;
     var aGetter = aClass.getField('a')!.getter;
 
     Annotation annotation = unit.declarations[0].metadata.single;
@@ -456,7 +456,7 @@
     LibraryElement aLibrary = aImport.importedLibrary!;
 
     CompilationUnitElement aUnitElement = aLibrary.definingCompilationUnit;
-    ClassElement aClass = aUnitElement.getType('A')!;
+    ClassElement aClass = aUnitElement.getClass('A')!;
     ConstructorElement constructor = aClass.unnamedConstructor!;
 
     Annotation annotation = unit.declarations[0].metadata.single;
@@ -497,7 +497,7 @@
     LibraryElement aLibrary = aImport.importedLibrary!;
 
     CompilationUnitElement aUnitElement = aLibrary.definingCompilationUnit;
-    ClassElement aClass = aUnitElement.getType('A')!;
+    ClassElement aClass = aUnitElement.getClass('A')!;
     ConstructorElement constructor = aClass.getNamedConstructor('named')!;
 
     Annotation annotation = unit.declarations[0].metadata.single;
@@ -567,7 +567,7 @@
     CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
-    ClassElement aClass = unitElement.getType('A')!;
+    ClassElement aClass = unitElement.getClass('A')!;
     var aGetter = aClass.getField('a')!.getter;
 
     Annotation annotation = unit.declarations[0].metadata.single;
@@ -597,7 +597,7 @@
     CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
-    ClassElement aClass = unitElement.getType('A')!;
+    ClassElement aClass = unitElement.getClass('A')!;
     ConstructorElement constructor = aClass.unnamedConstructor!;
 
     Annotation annotation = unit.declarations[0].metadata.single;
@@ -627,7 +627,7 @@
     CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
-    ClassElement aClass = unitElement.getType('A')!;
+    ClassElement aClass = unitElement.getClass('A')!;
     ConstructorElement constructor = aClass.constructors.single;
 
     Annotation annotation = unit.declarations[0].metadata.single;
@@ -2203,7 +2203,7 @@
     final aImport = unit.declaredElement!.library.libraryImports[0];
     LibraryElement aLibrary = aImport.importedLibrary!;
 
-    ClassElement cElement = aLibrary.getType('C')!;
+    ClassElement cElement = aLibrary.getClass('C')!;
     ConstructorElement defaultConstructor = cElement.constructors[0];
     ConstructorElement namedConstructor = cElement.constructors[1];
 
@@ -2348,7 +2348,7 @@
     CompilationUnit unit = result.unit;
     CompilationUnitElement unitElement = unit.declaredElement!;
 
-    ClassElement cElement = unitElement.getType('C')!;
+    ClassElement cElement = unitElement.getClass('C')!;
     ConstructorElement defaultConstructor = cElement.constructors[0];
     ConstructorElement namedConstructor = cElement.constructors[1];
 
@@ -5719,7 +5719,7 @@
     await resolveTestFile();
     expect(result.errors, isEmpty);
     var import = findElement.import('package:test/a.dart');
-    var c = import.importedLibrary!.getType('C')!;
+    var c = import.importedLibrary!.getClass('C')!;
 
     {
       var creation = findNode.instanceCreation('C(); // ref');
@@ -7866,7 +7866,7 @@
 
     LibraryElement bLibrary = bImport.importedLibrary!;
     LibraryElement aLibrary = bLibrary.libraryExports[0].exportedLibrary!;
-    ClassElement aClass = aLibrary.getType('A')!;
+    ClassElement aClass = aLibrary.getClass('A')!;
 
     {
       var declaration = unit.declarations[0] as TopLevelVariableDeclaration;
@@ -8161,7 +8161,7 @@
     var unitElement = result.unit.declaredElement!;
     var mathImport = unitElement.library.libraryImports[0];
     var foo = mathImport.prefix?.element;
-    var randomElement = mathImport.importedLibrary!.getType('Random')!;
+    var randomElement = mathImport.importedLibrary!.getClass('Random')!;
 
     List<Statement> statements = _getMainStatements(result);
     var statement = statements[0] as ExpressionStatement;
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 92ec357..bbd6352 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -1748,8 +1748,8 @@
 
     var result = await driver.getLibraryByUri(aUriStr);
     result as LibraryElementResult;
-    expect(result.element.getType('A'), isNotNull);
-    expect(result.element.getType('B'), isNotNull);
+    expect(result.element.getClass('A'), isNotNull);
+    expect(result.element.getClass('B'), isNotNull);
 
     // It is an error to ask for a library when we know that it is a part.
     expect(
diff --git a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
index c4bf3b8..20e9c8e 100644
--- a/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/results/get_element_declaration_test.dart
@@ -68,7 +68,7 @@
 part 'a.dart';
 ''');
     var library = this.result.unit.declaredElement!.library;
-    var element = library.getType('A')!;
+    var element = library.getClass('A')!;
     var result = await getElementDeclaration(element);
     var node = result!.node as ClassDeclaration;
     expect(node.name2.lexeme, 'A');
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index f173919..eea57e2 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -2439,7 +2439,7 @@
 
     var aLibraryResult =
         await driver.getLibraryByUri(aUri) as LibraryElementResult;
-    ClassElement aClass = aLibraryResult.element.getType('A')!;
+    ClassElement aClass = aLibraryResult.element.getClass('A')!;
 
     // Search by 'type'.
     List<SubtypeResult> subtypes =
@@ -2485,7 +2485,7 @@
 
     var coreLibResult =
         await driver.getLibraryByUri('dart:core') as LibraryElementResult;
-    ClassElement listElement = coreLibResult.element.getType('List')!;
+    ClassElement listElement = coreLibResult.element.getClass('List')!;
 
     var searchedFiles = SearchedFiles();
     var results = await driver.search.subTypes(listElement, searchedFiles);
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 0dde953..ea1140f 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -253,9 +253,9 @@
     var session = contextFor(testFile).currentSession;
     var result = await session.getLibraryByUriValid('package:test/test.dart');
     var library = result.element;
-    expect(library.getType('A'), isNotNull);
-    expect(library.getType('B'), isNotNull);
-    expect(library.getType('C'), isNull);
+    expect(library.getClass('A'), isNotNull);
+    expect(library.getClass('B'), isNotNull);
+    expect(library.getClass('C'), isNull);
   }
 
   test_getLibraryByUri_inconsistent() async {
@@ -326,7 +326,7 @@
     );
     var parsedLibrary = session.getParsedLibraryValid(test.path);
 
-    var element = libraryResult.element.getType('A')!;
+    var element = libraryResult.element.getClass('A')!;
     var declaration = parsedLibrary.getElementDeclaration(element)!;
     var node = declaration.node as ClassDeclaration;
     expect(node.name2.lexeme, 'A');
@@ -568,9 +568,9 @@
 
     var libraryElement = resolvedLibrary.element;
 
-    var aClass = libraryElement.getType('A')!;
+    var aClass = libraryElement.getClass('A')!;
 
-    var bClass = libraryElement.getType('B')!;
+    var bClass = libraryElement.getClass('B')!;
 
     var aUnitResult = resolvedLibrary.units[0];
     expect(aUnitResult.path, a.path);
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index 876de8d..5cb77a38 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -13,7 +13,6 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../../../generated/test_support.dart';
 import '../../../generated/type_system_test.dart';
 import '../resolution/context_collection_resolution.dart';
 
@@ -27,7 +26,6 @@
     defineReflectiveTests(TypeParameterTypeImplTest);
     defineReflectiveTests(VoidTypeImplTest);
     defineReflectiveTests(ClassElementImplTest);
-    defineReflectiveTests(CompilationUnitElementImplTest);
     defineReflectiveTests(ElementLocationImplTest);
     defineReflectiveTests(ElementImplTest);
     defineReflectiveTests(TopLevelVariableElementImplTest);
@@ -448,27 +446,6 @@
 }
 
 @reflectiveTest
-class CompilationUnitElementImplTest {
-  void test_getType_declared() {
-    CompilationUnitElementImpl unit =
-        ElementFactory.compilationUnit(source: TestSource("/lib.dart"));
-    String className = "C";
-    ClassElement classElement = ElementFactory.classElement2(className);
-    unit.classes = <ClassElement>[classElement];
-    expect(unit.getType(className), same(classElement));
-  }
-
-  void test_getType_undeclared() {
-    CompilationUnitElementImpl unit =
-        ElementFactory.compilationUnit(source: TestSource("/lib.dart"));
-    String className = "C";
-    ClassElement classElement = ElementFactory.classElement2(className);
-    unit.classes = <ClassElement>[classElement];
-    expect(unit.getType("${className}x"), isNull);
-  }
-}
-
-@reflectiveTest
 class ElementAnnotationImplTest extends PubPackageResolutionTest {
   test_computeConstantValue() async {
     newFile('$testPackageLibPath/a.dart', r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index f243881..c8b79d3 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -210,7 +210,7 @@
 ''');
 
     var aLib = findElement.import('package:test/a.dart').importedLibrary!;
-    var aConstructor = aLib.getType('A')!.constructors.single;
+    var aConstructor = aLib.getClass('A')!.constructors.single;
     var p = aConstructor.parameters.single as DefaultParameterElementImpl;
 
     // To evaluate `const A()` we have to evaluate `{int p}`.
diff --git a/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
index ac8fe41..ac24869 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_deferred_class_test.dart
@@ -68,7 +68,7 @@
       error(CompileTimeErrorCode.IMPLEMENTS_DEFERRED_CLASS, 56, 11),
     ]);
     var mathImport = findElement.import('dart:math');
-    var randomElement = mathImport.importedLibrary!.getType('Random')!;
+    var randomElement = mathImport.importedLibrary!.getClass('Random')!;
 
     var element = findElement.mixin('M');
     assertElementTypes(element.interfaces, ['Random']);
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
index 8fb3ea2..fa75b60 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_application_not_implemented_interface_test.dart
@@ -122,7 +122,7 @@
       error(HintCode.UNUSED_ELEMENT, 96, 15),
     ]);
     var mixins =
-        result.unit.declaredElement!.getType('_LocalDirectory')!.mixins;
+        result.unit.declaredElement!.getClass('_LocalDirectory')!.mixins;
     assertType(mixins[0], 'ForwardingDirectory<_LocalDirectory>');
   }
 
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_deferred_class_test.dart
index 21d8902..ad6bf38 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_deferred_class_test.dart
@@ -25,7 +25,7 @@
           48, 11),
     ]);
     var mathImport = findElement.import('dart:math');
-    var randomElement = mathImport.importedLibrary!.getType('Random')!;
+    var randomElement = mathImport.importedLibrary!.getClass('Random')!;
 
     var element = findElement.mixin('M');
     assertElementTypes(element.superclassConstraints, ['Random']);
diff --git a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
index 134478d..b373ca8 100644
--- a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
@@ -709,7 +709,7 @@
           contextMessages: [message('/home/test/lib/test.dart', 65, 3)]),
     ]);
     // Instantiate-to-bounds should have instantiated "Bar" to "Bar<Foo>".
-    assertType(result.unit.declaredElement!.getType('Baz')!.supertype,
+    assertType(result.unit.declaredElement!.getClass('Baz')!.supertype,
         'Bar<Foo<dynamic>>');
   }
 
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index b12f41d..f1c3ab8 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -21321,7 +21321,7 @@
           synthetic @-1
             superConstructor: package:test/foo.dart::@class::A::@constructor::•
 ''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
     expect(typeA.element2.source.shortName, 'foo.dart');
   }
 
@@ -21354,7 +21354,7 @@
           synthetic @-1
             superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
 ''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
     expect(typeA.element2.source.shortName, 'foo_io.dart');
   }
 
@@ -21387,7 +21387,7 @@
           synthetic @-1
             superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
 ''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
     expect(typeA.element2.source.shortName, 'foo_html.dart');
   }
 
@@ -23767,7 +23767,7 @@
           synthetic @-1
             superConstructor: package:test/foo.dart::@class::A::@constructor::•
 ''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
     expect(typeA.element2.source.shortName, 'foo.dart');
   }
 
@@ -23798,7 +23798,7 @@
           synthetic @-1
             superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
 ''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
     expect(typeA.element2.source.shortName, 'foo_io.dart');
   }
 
@@ -23829,7 +23829,7 @@
           synthetic @-1
             superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
 ''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
     expect(typeA.element2.source.shortName, 'foo_io.dart');
   }
 
@@ -23860,7 +23860,7 @@
           synthetic @-1
             superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
 ''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
     expect(typeA.element2.source.shortName, 'foo_html.dart');
   }
 
@@ -23891,7 +23891,7 @@
           synthetic @-1
             superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
 ''');
-    var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
+    var typeA = library.definingCompilationUnit.getClass('B')!.supertype!;
     expect(typeA.element2.source.shortName, 'foo_html.dart');
   }
 
diff --git a/pkg/analyzer/test/src/summary/macro_test.dart b/pkg/analyzer/test/src/summary/macro_test.dart
index 6e0f286..f096fe7 100644
--- a/pkg/analyzer/test/src/summary/macro_test.dart
+++ b/pkg/analyzer/test/src/summary/macro_test.dart
@@ -1616,7 +1616,7 @@
       {'package:test/a.dart'}
     ]);
 
-    final A = library.getType('A') as ClassElementImpl;
+    final A = library.getClass('A') as ClassElementImpl;
     final error = A.macroApplicationErrors.single;
     error as UnknownMacroApplicationError;
 
@@ -1648,7 +1648,7 @@
       {'package:test/a.dart'}
     ]);
 
-    final A = library.getType('A') as ClassElementImpl;
+    final A = library.getClass('A') as ClassElementImpl;
     final error = A.macroApplicationErrors.single;
     error as UnknownMacroApplicationError;
 
@@ -1680,7 +1680,7 @@
       {'package:test/a.dart'}
     ]);
 
-    final A = library.getType('A') as ClassElementImpl;
+    final A = library.getClass('A') as ClassElementImpl;
     final error = A.macroApplicationErrors.single;
     error as UnknownMacroApplicationError;
 
@@ -1797,7 +1797,7 @@
       {'package:test/arguments_text.dart'}
     ]);
 
-    final A = library.definingCompilationUnit.getType('A');
+    final A = library.definingCompilationUnit.getClass('A');
     if (expectedErrors != null) {
       expect(_errorsStrForClassElement(A), expectedErrors);
       return;
@@ -1866,7 +1866,7 @@
     ]);
 
     _assertNoErrorsForClassElement(
-      library.definingCompilationUnit.getType('A'),
+      library.definingCompilationUnit.getClass('A'),
     );
 
     final partUri = library.parts2.single.uri as DirectiveUriWithUnit;
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index 05b4002..03d932e 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -2233,7 +2233,7 @@
 }
 typedef void F<V>(V v);
 ''');
-    var f = _resultUnitElement.getType('C')!.methods[0];
+    var f = _resultUnitElement.getClass('C')!.methods[0];
     _assertTypeStr(f.type, 'void Function(U) Function<U>(U)');
   }
 
@@ -2247,7 +2247,7 @@
 }
 typedef List<V> G<V>();
 ''');
-    var f = _resultUnitElement.getType('C')!.methods[0];
+    var f = _resultUnitElement.getClass('C')!.methods[0];
     _assertTypeStr(f.type, 'void Function<U>(List<U> Function())');
   }
 
@@ -2261,7 +2261,7 @@
 }
 typedef V F<V>();
 ''');
-    var f = _resultUnitElement.getType('C')!.methods[0];
+    var f = _resultUnitElement.getClass('C')!.methods[0];
     _assertTypeStr(f.type, 'U Function() Function<U>(U)');
   }
 
@@ -2974,7 +2974,7 @@
   int foo;
 }
 ''');
-    var f = _resultUnitElement.getType('C')!.accessors[0];
+    var f = _resultUnitElement.getClass('C')!.accessors[0];
     _assertTypeStr(f.type, 'void Function(int)');
   }
 
@@ -2987,7 +2987,7 @@
   set foo(int x) {}
 }
 ''');
-    var f = _resultUnitElement.getType('C')!.accessors[0];
+    var f = _resultUnitElement.getClass('C')!.accessors[0];
     _assertTypeStr(f.type, 'void Function(int)');
   }
 
@@ -3001,10 +3001,10 @@
   };
 }
 ''');
-    var x = _resultUnitElement.getType('C')!.fields[0];
+    var x = _resultUnitElement.getClass('C')!.fields[0];
     expect(x.name, 'x');
     _assertTypeStr(x.type, 'String');
-    var y = _resultUnitElement.getType('C')!.fields[1];
+    var y = _resultUnitElement.getClass('C')!.fields[1];
     expect(y.name, 'y');
     _assertTypeStr(y.type, 'Map<String, Map<String, String>>');
   }
@@ -3019,7 +3019,7 @@
     var x = _resultUnitElement.topLevelVariables[0];
     expect(x.name, 'x');
     _assertTypeStr(x.type, 'String');
-    var y = _resultUnitElement.getType('C')!.fields[0];
+    var y = _resultUnitElement.getClass('C')!.fields[0];
     expect(y.name, 'y');
     _assertTypeStr(y.type, 'String');
   }
@@ -3307,7 +3307,7 @@
       (int i) => {i: b};
 }
 ''');
-    var f = _resultUnitElement.getType('C')!.fields[0];
+    var f = _resultUnitElement.getClass('C')!.fields[0];
     _assertTypeStr(f.type, 'Map<int, bool> Function(int) Function(bool)');
   }
 
@@ -3317,7 +3317,7 @@
   static final f = (bool b) => b;
 }
 ''');
-    var f = _resultUnitElement.getType('C')!.fields[0];
+    var f = _resultUnitElement.getClass('C')!.fields[0];
     _assertTypeStr(f.type, 'bool Function(bool)');
   }
 
@@ -3327,7 +3327,7 @@
   static final f = (bool b) => 1;
 }
 ''');
-    var f = _resultUnitElement.getType('C')!.fields[0];
+    var f = _resultUnitElement.getClass('C')!.fields[0];
     _assertTypeStr(f.type, 'int Function(bool)');
   }
 
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index 06f1d0f..1337757 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -1762,7 +1762,7 @@
 
   Future<ClassElement> _getClassElement(String path, String name) async {
     var result = (await resolveFile(path)).unit;
-    return result.declaredElement!.getType(name)!;
+    return result.declaredElement!.getClass(name)!;
   }
 
   Future<PropertyAccessorElement> _getTopLevelAccessorElement(
diff --git a/tools/VERSION b/tools/VERSION
index 9f9c040..1b0496f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 19
 PATCH 0
-PRERELEASE 67
+PRERELEASE 68
 PRERELEASE_PATCH 0
\ No newline at end of file
