diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 67f2db7..69105f8 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -232,11 +232,6 @@
   /// Whether `dart:core` has been transitively discovered.
   bool _hasDartCoreDiscovered = false;
 
-  /// This function is invoked when the current session is about to be discarded.
-  /// The argument represents the path of the resource causing the session
-  /// to be discarded or `null` if there are multiple or this is unknown.
-  void Function(String?)? onCurrentSessionAboutToBeDiscarded;
-
   /// If testing data is being retained, a pointer to the object that is
   /// retaining the testing data.  Otherwise `null`.
   final TestingData? testingData;
@@ -304,7 +299,7 @@
         _sourceFactory = sourceFactory,
         _externalSummaries = externalSummaries,
         testingData = retainDataForTesting ? TestingData() : null {
-    _createNewSession(null);
+    _createNewSession();
     _onResults = _resultController.stream.asBroadcastStream();
     _testView = AnalysisDriverTestView(this);
     _createFileTracker();
@@ -1212,7 +1207,7 @@
   void resetUriResolution() {
     _fsState.resetUriResolution();
     _fileTracker.scheduleAllAddedFiles();
-    _changeHook(null);
+    _changeHook();
   }
 
   void _addDeclaredVariablesToSignature(ApiSignature buffer) {
@@ -1235,8 +1230,8 @@
 
   /// Handles a notification from the [FileTracker] that there has been a change
   /// of state.
-  void _changeHook(String? path) {
-    _createNewSession(path);
+  void _changeHook() {
+    _createNewSession();
     clearLibraryContext();
     _priorityResults.clear();
     _scheduler.notify(this);
@@ -1522,10 +1517,7 @@
   }
 
   /// Create a new analysis session, so invalidating the current one.
-  void _createNewSession(String? path) {
-    if (onCurrentSessionAboutToBeDiscarded != null) {
-      onCurrentSessionAboutToBeDiscarded!(path);
-    }
+  void _createNewSession() {
     _currentSession = AnalysisSessionImpl(this);
   }
 
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_tracker.dart b/pkg/analyzer/lib/src/dart/analysis/file_tracker.dart
index f973d53..0494153 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_tracker.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_tracker.dart
@@ -5,12 +5,6 @@
 import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/analysis/performance_logger.dart';
 
-/// Callback used by [FileTracker] to report to its client that files have been
-/// added, changed, or removed, and therefore more analysis may be necessary.
-/// [path] is the path of the file that was added, changed, or removed, or
-/// `null` if multiple files were added, changed, or removed.
-typedef FileTrackerChangeHook = void Function(String? path);
-
 /// Maintains the file system state needed by the analysis driver, as well as
 /// information about files that have changed and the impact of those changes.
 ///
@@ -24,7 +18,7 @@
 class FileTracker {
   /// Callback invoked whenever a change occurs that may require the client to
   /// perform analysis.
-  final FileTrackerChangeHook _changeHook;
+  final void Function() _changeHook;
 
   /// The logger to write performed operations and performance to.
   final PerformanceLog _logger;
@@ -109,14 +103,14 @@
     _fsState.markFileForReading(path);
     addedFiles.add(path);
     _pendingFiles.add(path);
-    _changeHook(path);
+    _changeHook();
   }
 
   /// Adds the given [paths] to the set of "added files".
   void addFiles(Iterable<String> paths) {
     addedFiles.addAll(paths);
     _pendingFiles.addAll(paths);
-    _changeHook(null);
+    _changeHook();
   }
 
   /// Adds the given [path] to the set of "changed files".
@@ -126,7 +120,7 @@
       _pendingChangedFiles.add(path);
     }
     _fsState.markFileForReading(path);
-    _changeHook(path);
+    _changeHook();
   }
 
   /// Removes the given [path] from the set of "pending files".
@@ -171,7 +165,7 @@
     // files seems extreme.
     _fsState.removeFile(path);
     _pendingFiles.addAll(addedFiles);
-    _changeHook(path);
+    _changeHook();
   }
 
   /// Schedule all added files for analysis.
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index aeea523..575fe79 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -244,6 +244,10 @@
     return _node(search, (n) => n is NamedExpression);
   }
 
+  NamedType namedType(String search) {
+    return _node(search, (n) => n is NamedType);
+  }
+
   NullLiteral nullLiteral(String search) {
     return _node(search, (n) => n is NullLiteral);
   }
@@ -370,10 +374,6 @@
     return _node(search, (n) => n is TypeLiteral);
   }
 
-  TypeName typeName(String search) {
-    return _node(search, (n) => n is TypeName);
-  }
-
   TypeParameter typeParameter(String search) {
     return _node(search, (n) => n is TypeParameter);
   }
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 9564da7..31572f3 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -2587,7 +2587,7 @@
     assertElement(aRef, findElement.topGet('a'));
     assertType(aRef, 'num');
 
-    assertNamedType(findNode.typeName('int;'), intElement, 'int');
+    assertNamedType(findNode.namedType('int;'), intElement, 'int');
   }
 
   test_invalid_const_constructor_initializer_field_multiple() async {
@@ -2908,12 +2908,12 @@
     expect(result.errors, isNotEmpty);
 
     assertNamedType(
-      findNode.typeName('a.Future'),
+      findNode.namedType('a.Future'),
       futureElement,
       'Future<int>',
       expectedPrefix: findElement.import('dart:async').prefix,
     );
-    assertNamedType(findNode.typeName('int>'), intElement, 'int');
+    assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
   test_invalid_fieldInitializer_field() async {
@@ -4614,7 +4614,7 @@
 
     var tElement = findNode.typeParameter('T>(T x)').declaredElement!;
 
-    var gType = findNode.typeName('Consumer<T>');
+    var gType = findNode.namedType('Consumer<T>');
     var gTypeType = gType.type as FunctionType;
 
     var gTypeParameterType =
@@ -4641,7 +4641,7 @@
 
     var tElement = findNode.typeParameter('T>(T x)').declaredElement!;
 
-    var gType = findNode.typeName('Consumer<T>');
+    var gType = findNode.namedType('Consumer<T>');
     var gTypeType = gType.type as FunctionType;
 
     var gTypeParameterType =
@@ -4668,7 +4668,7 @@
 
     var tElement = findNode.typeParameter('T>(T x)').declaredElement!;
 
-    var gType = findNode.typeName('Consumer<T>');
+    var gType = findNode.namedType('Consumer<T>');
     var gTypeType = gType.type as FunctionType;
 
     var gTypeParameterType =
@@ -4695,7 +4695,7 @@
 
     var tElement = findNode.typeParameter('T>(T x)').declaredElement!;
 
-    var gType = findNode.typeName('Producer<T>');
+    var gType = findNode.namedType('Producer<T>');
     var gTypeType = gType.type as FunctionType;
 
     var gTypeReturnType = gTypeType.returnType as TypeParameterType;
@@ -5693,7 +5693,7 @@
       assertType(creation, 'C<int>');
 
       assertNamedType(creation.constructorName.type, c, 'C<int>');
-      assertNamedType(findNode.typeName('int>'), intElement, 'int');
+      assertNamedType(findNode.namedType('int>'), intElement, 'int');
     }
 
     {
@@ -5703,7 +5703,7 @@
       assertType(creation, 'C<String>');
 
       assertNamedType(creation.constructorName.type, c, 'C<String>');
-      assertNamedType(findNode.typeName('String>'), stringElement, 'String');
+      assertNamedType(findNode.namedType('String>'), stringElement, 'String');
 
       assertMember(
           creation.constructorName.name, namedConstructor, {'T': 'String'});
@@ -5717,10 +5717,10 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var mapRef = findNode.typeName('Map<');
+    var mapRef = findNode.namedType('Map<');
     assertNamedType(mapRef, mapElement, 'Map<dynamic, dynamic>');
 
-    var intRef = findNode.typeName('int>');
+    var intRef = findNode.namedType('int>');
     assertNamedType(intRef, intElement, 'int');
   }
 
@@ -5731,13 +5731,13 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var listRef = findNode.typeName('List<');
+    var listRef = findNode.namedType('List<');
     assertNamedType(listRef, listElement, 'List<dynamic>');
 
-    var intRef = findNode.typeName('int,');
+    var intRef = findNode.namedType('int,');
     assertNamedType(intRef, intElement, 'int');
 
-    var doubleRef = findNode.typeName('double>');
+    var doubleRef = findNode.namedType('double>');
     assertNamedType(doubleRef, doubleElement, 'double');
   }
 
@@ -5748,13 +5748,13 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var tRef = findNode.typeName('T<');
+    var tRef = findNode.namedType('T<');
     assertNamedType(tRef, findElement.typeParameter('T'), 'T');
 
-    var intRef = findNode.typeName('int,');
+    var intRef = findNode.namedType('int,');
     assertNamedType(intRef, intElement, 'int');
 
-    var doubleRef = findNode.typeName('double>');
+    var doubleRef = findNode.namedType('double>');
     assertNamedType(doubleRef, doubleElement, 'double');
   }
 
@@ -5765,10 +5765,10 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var mapRef = findNode.typeName('Map<');
+    var mapRef = findNode.namedType('Map<');
     assertNamedType(mapRef, mapElement, 'Map<dynamic, dynamic>');
 
-    var intRef = findNode.typeName('int>');
+    var intRef = findNode.namedType('int>');
     assertNamedType(intRef, intElement, 'int');
   }
 
@@ -5779,13 +5779,13 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var listRef = findNode.typeName('List<');
+    var listRef = findNode.namedType('List<');
     assertNamedType(listRef, listElement, 'List<dynamic>');
 
-    var intRef = findNode.typeName('int,');
+    var intRef = findNode.namedType('int,');
     assertNamedType(intRef, intElement, 'int');
 
-    var doubleRef = findNode.typeName('double>');
+    var doubleRef = findNode.namedType('double>');
     assertNamedType(doubleRef, doubleElement, 'double');
   }
 
@@ -5796,13 +5796,13 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var xRef = findNode.typeName('X<');
+    var xRef = findNode.namedType('X<');
     assertNamedType(xRef, null, 'dynamic');
 
-    var intRef = findNode.typeName('int,');
+    var intRef = findNode.namedType('int,');
     assertNamedType(intRef, intElement, 'int');
 
-    var doubleRef = findNode.typeName('double>');
+    var doubleRef = findNode.namedType('double>');
     assertNamedType(doubleRef, doubleElement, 'double');
   }
 
@@ -5813,7 +5813,7 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var xRef = findNode.typeName('X {}');
+    var xRef = findNode.namedType('X {}');
     assertNamedType(xRef, null, 'dynamic');
   }
 
@@ -5824,13 +5824,13 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var tRef = findNode.typeName('T<');
+    var tRef = findNode.namedType('T<');
     assertNamedType(tRef, findElement.typeParameter('T'), 'T');
 
-    var intRef = findNode.typeName('int,');
+    var intRef = findNode.namedType('int,');
     assertNamedType(intRef, intElement, 'int');
 
-    var doubleRef = findNode.typeName('double>');
+    var doubleRef = findNode.namedType('double>');
     assertNamedType(doubleRef, doubleElement, 'double');
   }
 
@@ -5841,10 +5841,10 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var mapRef = findNode.typeName('Map<');
+    var mapRef = findNode.namedType('Map<');
     assertNamedType(mapRef, mapElement, 'Map<dynamic, dynamic>');
 
-    var intRef = findNode.typeName('int>');
+    var intRef = findNode.namedType('int>');
     assertNamedType(intRef, intElement, 'int');
   }
 
@@ -5855,13 +5855,13 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var listRef = findNode.typeName('List<');
+    var listRef = findNode.namedType('List<');
     assertNamedType(listRef, listElement, 'List<dynamic>');
 
-    var intRef = findNode.typeName('int,');
+    var intRef = findNode.namedType('int,');
     assertNamedType(intRef, intElement, 'int');
 
-    var doubleRef = findNode.typeName('double>');
+    var doubleRef = findNode.namedType('double>');
     assertNamedType(doubleRef, doubleElement, 'double');
   }
 
@@ -5872,10 +5872,10 @@
     await resolveTestFile();
     expect(result.errors, isNotEmpty);
 
-    var tRef = findNode.typeName('T<');
+    var tRef = findNode.namedType('T<');
     assertNamedType(tRef, findElement.typeParameter('T'), 'T');
 
-    var intRef = findNode.typeName('int>');
+    var intRef = findNode.namedType('int>');
     assertNamedType(intRef, intElement, 'int');
   }
 
@@ -5886,13 +5886,13 @@
     await resolveTestFile();
     expect(result.errors, isEmpty);
 
-    var intRef = findNode.typeName('int Function');
+    var intRef = findNode.namedType('int Function');
     assertNamedType(intRef, intElement, 'int');
 
     var functionRef = findNode.genericFunctionType('Function(double)');
     assertType(functionRef, 'int Function(double)');
 
-    var doubleRef = findNode.typeName('double) g');
+    var doubleRef = findNode.namedType('double) g');
     assertNamedType(doubleRef, doubleElement, 'double');
   }
 
@@ -5904,13 +5904,13 @@
     await resolveTestFile();
     expect(result.errors, isEmpty);
 
-    var intRef = findNode.typeName('int a');
+    var intRef = findNode.namedType('int a');
     assertNamedType(intRef, intElement, 'int');
 
-    var listRef = findNode.typeName('List<double> b');
+    var listRef = findNode.namedType('List<double> b');
     assertNamedType(listRef, listElement, 'List<double>');
 
-    var doubleRef = findNode.typeName('double> b');
+    var doubleRef = findNode.namedType('double> b');
     assertNamedType(doubleRef, doubleElement, 'double');
   }
 
@@ -5922,10 +5922,10 @@
     await resolveTestFile();
     ImportElement myImport = result.libraryElement.imports[0];
 
-    var intRef = findNode.typeName('int> a');
+    var intRef = findNode.namedType('int> a');
     assertNamedType(intRef, intElement, 'int');
 
-    var futureRef = findNode.typeName('my.Future<int> a');
+    var futureRef = findNode.namedType('my.Future<int> a');
     assertNamedType(futureRef, futureElement, 'Future<int>',
         expectedPrefix: myImport.prefix);
   }
@@ -6910,10 +6910,10 @@
     addTestFile(content);
     await resolveTestFile();
 
-    var aRef = findNode.typeName('A<int>');
+    var aRef = findNode.namedType('A<int>');
     assertNamedType(aRef, findElement.class_('A'), 'A<int>');
 
-    var intRef = findNode.typeName('int>');
+    var intRef = findNode.namedType('int>');
     assertNamedType(intRef, intElement, 'int');
   }
 
diff --git a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
index e3aaab4..6184eb4 100644
--- a/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/potentially_constant_test.dart
@@ -563,7 +563,7 @@
     var x = const <T>[0, 1, 2];
   }
 }
-''', () => _xInitializer(), () => [findNode.typeName('T>[0')]);
+''', () => _xInitializer(), () => [findNode.namedType('T>[0')]);
   }
 
   test_literal_bool() async {
@@ -646,7 +646,7 @@
   }
 }
 ''', () => _xInitializer(),
-        () => [findNode.typeName('T,'), findNode.typeName('T>{')]);
+        () => [findNode.namedType('T,'), findNode.namedType('T>{')]);
   }
 
   test_methodInvocation_identical() async {
@@ -978,7 +978,7 @@
     var x = const <T>{0, 1, 2};
   }
 }
-''', () => _xInitializer(), () => [findNode.typeName('T>{0')]);
+''', () => _xInitializer(), () => [findNode.namedType('T>{0')]);
   }
 
   test_simpleIdentifier_class() async {
@@ -1174,7 +1174,7 @@
     var x = a as T;
   }
 }
-''', () => _xInitializer(), () => [findNode.typeName('T;')]);
+''', () => _xInitializer(), () => [findNode.namedType('T;')]);
   }
 
   test_isExpression_typeParameter() async {
@@ -1185,7 +1185,7 @@
     var x = a is T;
   }
 }
-''', () => _xInitializer(), () => [findNode.typeName('T;')]);
+''', () => _xInitializer(), () => [findNode.namedType('T;')]);
   }
 
   _assertNotConst(String code, AstNode Function() getNode,
diff --git a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
index 3be6471..dde73ec 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
@@ -35,9 +35,9 @@
 
     var x = findElement.class_('X');
 
-    assertNamedType(findNode.typeName('A with'), findElement.class_('A'), 'A');
-    assertNamedType(findNode.typeName('B impl'), findElement.class_('B'), 'B');
-    assertNamedType(findNode.typeName('C;'), findElement.class_('C'), 'C');
+    assertNamedType(findNode.namedType('A with'), findElement.class_('A'), 'A');
+    assertNamedType(findNode.namedType('B impl'), findElement.class_('B'), 'B');
+    assertNamedType(findNode.namedType('C;'), findElement.class_('C'), 'C');
 
     assertType(x.supertype, 'A');
     assertElementTypes(x.mixins, ['B']);
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 14282df..fd7aa57 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -379,7 +379,7 @@
     var a = findElement.class_('A');
     assertType(a.supertype, 'Object');
 
-    var eRef = findNode.typeName('E {}');
+    var eRef = findNode.namedType('E {}');
     assertNamedType(eRef, findElement.enum_('E'), 'E');
   }
 
@@ -394,7 +394,7 @@
     var a = findElement.class_('A');
     assertType(a.supertype, 'Object');
 
-    var mRef = findNode.typeName('M {} // ref');
+    var mRef = findNode.namedType('M {} // ref');
     assertNamedType(mRef, findElement.mixin('M'), 'M');
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
index 637b28d..2f6fbd0 100644
--- a/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/instance_creation_test.dart
@@ -64,7 +64,7 @@
       expectedConstructorMember: true,
       expectedSubstitution: {'T': 'int'},
     );
-    assertNamedType(findNode.typeName('int>'), intElement, 'int');
+    assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
   test_class_generic_unnamed_inferTypeArguments() async {
@@ -107,7 +107,7 @@
       expectedConstructorMember: true,
       expectedSubstitution: {'T': 'int'},
     );
-    assertNamedType(findNode.typeName('int>'), intElement, 'int');
+    assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
   test_class_notGeneric() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
index 034b2bb3..4dca4cb 100644
--- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
@@ -1200,7 +1200,7 @@
 void f(C c) {}
 ''');
 
-    var classC = findNode.typeName('C c').name.staticElement!;
+    var classC = findNode.namedType('C c').name.staticElement!;
     var annotation = classC.metadata.single;
     _assertElementAnnotationValueText(annotation, r'''
 B
@@ -1230,7 +1230,7 @@
 void f(B b) {}
 ''');
 
-    var classB = findNode.typeName('B b').name.staticElement!;
+    var classB = findNode.namedType('B b').name.staticElement!;
     var annotation = classB.metadata.single;
     _assertElementAnnotationValueText(annotation, r'''
 A
@@ -1259,7 +1259,7 @@
 void f(B b) {}
 ''');
 
-    var classB = findNode.typeName('B b').name.staticElement!;
+    var classB = findNode.namedType('B b').name.staticElement!;
     var annotation = classB.metadata.single;
     _assertElementAnnotationValueText(annotation, r'''
 A
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 86c30be..f9f50e2 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -943,7 +943,7 @@
       'foo<int>();',
       expectedTypeArguments: ['int'],
     );
-    assertNamedType(findNode.typeName('int>'), intElement, 'int');
+    assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
   test_error_undefinedMethod_hasTarget_class_typeParameter() async {
@@ -1296,7 +1296,7 @@
       findElement.topFunction('foo'),
       'void Function()',
     );
-    assertNamedType(findNode.typeName('int>'), intElement, 'int');
+    assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
   test_error_wrongNumberOfTypeArgumentsMethod_21() async {
@@ -1315,7 +1315,7 @@
       'Map<dynamic, dynamic> Function()',
       expectedTypeArguments: ['dynamic', 'dynamic'],
     );
-    assertNamedType(findNode.typeName('int>'), intElement, 'int');
+    assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 
   test_hasReceiver_class_staticGetter() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index 6fa9868..3a5ac26 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -93,7 +93,7 @@
     var aElement = findElement.class_('A');
     assertElementTypes(aElement.mixins, ['M']);
 
-    var mRef = findNode.typeName('M {} // A');
+    var mRef = findNode.namedType('M {} // A');
     assertNamedType(mRef, mElement, 'M');
   }
 
@@ -108,7 +108,7 @@
     var aElement = findElement.class_('A');
     assertElementTypes(aElement.mixins, ['M']);
 
-    var mRef = findNode.typeName('M;');
+    var mRef = findNode.namedType('M;');
     assertNamedType(mRef, mElement, 'M');
   }
 
@@ -308,7 +308,7 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.interfaces, ['Random']);
 
-    var typeRef = findNode.typeName('Random {}');
+    var typeRef = findNode.namedType('Random {}');
     assertNamedType(typeRef, randomElement, 'Random',
         expectedPrefix: mathImport.prefix);
   }
@@ -323,7 +323,7 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.interfaces, ['int']);
 
-    var typeRef = findNode.typeName('int {}');
+    var typeRef = findNode.namedType('int {}');
     assertNamedType(typeRef, intElement, 'int');
   }
 
@@ -338,7 +338,7 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.interfaces, []);
 
-    var typeRef = findNode.typeName('void {}');
+    var typeRef = findNode.namedType('void {}');
     assertNamedType(typeRef, null, 'void');
   }
 
@@ -831,7 +831,7 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.superclassConstraints, ['Random']);
 
-    var typeRef = findNode.typeName('Random {}');
+    var typeRef = findNode.namedType('Random {}');
     assertNamedType(typeRef, randomElement, 'Random',
         expectedPrefix: mathImport.prefix);
   }
@@ -847,7 +847,7 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.superclassConstraints, ['int']);
 
-    var typeRef = findNode.typeName('int {}');
+    var typeRef = findNode.namedType('int {}');
     assertNamedType(typeRef, intElement, 'int');
   }
 
@@ -862,7 +862,7 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.superclassConstraints, ['Object']);
 
-    var typeRef = findNode.typeName('dynamic {}');
+    var typeRef = findNode.namedType('dynamic {}');
     assertNamedType(typeRef, dynamicElement, 'dynamic');
   }
 
@@ -878,7 +878,7 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.superclassConstraints, ['Object']);
 
-    var typeRef = findNode.typeName('E {}');
+    var typeRef = findNode.namedType('E {}');
     assertNamedType(typeRef, findElement.enum_('E'), 'E');
   }
 
@@ -894,7 +894,7 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.superclassConstraints, ['Object']);
 
-    var typeRef = findNode.typeName('void {}');
+    var typeRef = findNode.namedType('void {}');
     assertNamedType(typeRef, null, 'void');
   }
 
@@ -956,7 +956,7 @@
     var fNode = findNode.variableDeclaration('f;');
     assertElement(fNode.name, fElement);
 
-    assertNamedType(findNode.typeName('T f'), tElement, 'T');
+    assertNamedType(findNode.namedType('T f'), tElement, 'T');
 
     var accessors = element.accessors;
     expect(accessors, hasLength(2));
@@ -975,10 +975,10 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.interfaces, ['A', 'B']);
 
-    var aRef = findNode.typeName('A, ');
+    var aRef = findNode.namedType('A, ');
     assertNamedType(aRef, findElement.class_('A'), 'A');
 
-    var bRef = findNode.typeName('B {} // M');
+    var bRef = findNode.namedType('B {} // M');
     assertNamedType(bRef, findElement.class_('B'), 'B');
   }
 
@@ -1063,10 +1063,10 @@
     var element = findElement.mixin('M');
     assertElementTypes(element.superclassConstraints, ['A', 'B']);
 
-    var aRef = findNode.typeName('A, ');
+    var aRef = findNode.namedType('A, ');
     assertNamedType(aRef, findElement.class_('A'), 'A');
 
-    var bRef = findNode.typeName('B {} // M');
+    var bRef = findNode.namedType('B {} // M');
     assertNamedType(bRef, findElement.class_('B'), 'B');
   }
 
diff --git a/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart b/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
index 1168802..4b18551 100644
--- a/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/non_nullable_bazel_workspace_test.dart
@@ -28,7 +28,7 @@
       'int v = 0;',
     );
     assertNoErrorsInResult();
-    assertType(findNode.typeName('int v'), 'int*');
+    assertType(findNode.namedType('int v'), 'int*');
   }
 
   test_buildFile_nonNullable() async {
@@ -44,7 +44,7 @@
       'int v = 0;',
     );
     assertNoErrorsInResult();
-    assertType(findNode.typeName('int v'), 'int');
+    assertType(findNode.namedType('int v'), 'int');
 
     // Non-nullable in test/.
     await resolveFileCode(
@@ -52,7 +52,7 @@
       'int v = 0;',
     );
     assertNoErrorsInResult();
-    assertType(findNode.typeName('int v'), 'int');
+    assertType(findNode.namedType('int v'), 'int');
 
     // Non-nullable in bin/.
     await resolveFileCode(
@@ -60,7 +60,7 @@
       'int v = 0;',
     );
     assertNoErrorsInResult();
-    assertType(findNode.typeName('int v'), 'int');
+    assertType(findNode.namedType('int v'), 'int');
   }
 
   test_buildFile_nonNullable_oneLine_noComma() async {
@@ -73,7 +73,7 @@
       'int v = 0;',
     );
     assertNoErrorsInResult();
-    assertType(findNode.typeName('int v'), 'int');
+    assertType(findNode.namedType('int v'), 'int');
   }
 
   test_buildFile_nonNullable_withComments() async {
@@ -89,7 +89,7 @@
       'int v = 0;',
     );
     assertNoErrorsInResult();
-    assertType(findNode.typeName('int v'), 'int');
+    assertType(findNode.namedType('int v'), 'int');
   }
 
   test_noBuildFile_legacy() async {
@@ -97,6 +97,6 @@
 int v = 0;
 ''');
 
-    assertType(findNode.typeName('int v'), 'int*');
+    assertType(findNode.namedType('int v'), 'int*');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart b/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
index dde5670..5b7cc34 100644
--- a/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/non_nullable_test.dart
@@ -28,9 +28,9 @@
 class X3 with A {} // 3
 ''');
 
-    assertType(findNode.typeName('A {} // 1'), 'A');
-    assertType(findNode.typeName('A {} // 2'), 'A');
-    assertType(findNode.typeName('A {} // 3'), 'A');
+    assertType(findNode.namedType('A {} // 1'), 'A');
+    assertType(findNode.namedType('A {} // 2'), 'A');
+    assertType(findNode.namedType('A {} // 3'), 'A');
   }
 
   test_classTypeAlias_hierarchy() async {
@@ -42,9 +42,9 @@
 class X = A with B implements C;
 ''');
 
-    assertType(findNode.typeName('A with'), 'A');
-    assertType(findNode.typeName('B implements'), 'B');
-    assertType(findNode.typeName('C;'), 'C');
+    assertType(findNode.namedType('A with'), 'A');
+    assertType(findNode.namedType('B implements'), 'B');
+    assertType(findNode.namedType('C;'), 'C');
   }
 
   test_field_functionTypeAlias() async {
@@ -100,8 +100,8 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 29, 1),
     ]);
 
-    assertType(findNode.typeName('int? a'), 'int?');
-    assertType(findNode.typeName('int b'), 'int');
+    assertType(findNode.namedType('int? a'), 'int?');
+    assertType(findNode.namedType('int b'), 'int');
   }
 
   test_local_interfaceType_generic() async {
@@ -119,10 +119,10 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 85, 1),
     ]);
 
-    assertType(findNode.typeName('List<int?>? a'), 'List<int?>?');
-    assertType(findNode.typeName('List<int>? b'), 'List<int>?');
-    assertType(findNode.typeName('List<int?> c'), 'List<int?>');
-    assertType(findNode.typeName('List<int> d'), 'List<int>');
+    assertType(findNode.namedType('List<int?>? a'), 'List<int?>?');
+    assertType(findNode.namedType('List<int>? b'), 'List<int>?');
+    assertType(findNode.namedType('List<int?> c'), 'List<int?>');
+    assertType(findNode.namedType('List<int> d'), 'List<int>');
   }
 
   test_local_methodNullAwareCall_interfaceType() async {
@@ -172,8 +172,8 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 33, 1),
     ]);
 
-    assertType(findNode.typeName('T x'), 'T');
-    assertType(findNode.typeName('T? y'), 'T?');
+    assertType(findNode.namedType('T x'), 'T');
+    assertType(findNode.namedType('T? y'), 'T?');
   }
 
   test_local_variable_genericFunctionType() async {
@@ -200,8 +200,8 @@
       error(HintCode.UNUSED_ELEMENT, 11, 1),
     ]);
 
-    assertType(findNode.typeName('int? a'), 'int?');
-    assertType(findNode.typeName('int b'), 'int');
+    assertType(findNode.namedType('int? a'), 'int?');
+    assertType(findNode.namedType('int b'), 'int');
   }
 
   test_localFunction_returnType_interfaceType() async {
@@ -215,8 +215,8 @@
       error(HintCode.UNUSED_ELEMENT, 32, 1),
     ]);
 
-    assertType(findNode.typeName('int? f'), 'int?');
-    assertType(findNode.typeName('int g'), 'int');
+    assertType(findNode.namedType('int? f'), 'int?');
+    assertType(findNode.namedType('int g'), 'int');
   }
 
   test_member_potentiallyNullable_called() async {
@@ -239,8 +239,8 @@
 mixin X2 implements A {} // 2
 ''');
 
-    assertType(findNode.typeName('A {} // 1'), 'A');
-    assertType(findNode.typeName('A {} // 2'), 'A');
+    assertType(findNode.namedType('A {} // 1'), 'A');
+    assertType(findNode.namedType('A {} // 2'), 'A');
   }
 
   test_parameter_functionTyped() async {
@@ -315,8 +315,8 @@
 }
 ''');
 
-    assertType(findNode.typeName('int? a'), 'int?');
-    assertType(findNode.typeName('int b'), 'int');
+    assertType(findNode.namedType('int? a'), 'int?');
+    assertType(findNode.namedType('int b'), 'int');
   }
 
   test_parameter_interfaceType_generic() async {
@@ -325,10 +325,10 @@
 }
 ''');
 
-    assertType(findNode.typeName('List<int?>? a'), 'List<int?>?');
-    assertType(findNode.typeName('List<int>? b'), 'List<int>?');
-    assertType(findNode.typeName('List<int?> c'), 'List<int?>');
-    assertType(findNode.typeName('List<int> d'), 'List<int>');
+    assertType(findNode.namedType('List<int?>? a'), 'List<int?>?');
+    assertType(findNode.namedType('List<int>? b'), 'List<int>?');
+    assertType(findNode.namedType('List<int?> c'), 'List<int?>');
+    assertType(findNode.namedType('List<int> d'), 'List<int>');
   }
 
   test_parameter_methodNullAwareCall_interfaceType() async {
@@ -369,8 +369,8 @@
 }
 ''');
 
-    assertType(findNode.typeName('T a'), 'T');
-    assertType(findNode.typeName('T? b'), 'T?');
+    assertType(findNode.namedType('T a'), 'T');
+    assertType(findNode.namedType('T? b'), 'T?');
   }
 
   test_typedef_classic() async {
@@ -384,7 +384,7 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 50, 1),
     ]);
 
-    assertType(findNode.typeName('F? a'), 'int? Function(bool, String?)?');
+    assertType(findNode.namedType('F? a'), 'int? Function(bool, String?)?');
   }
 
   test_typedef_function() async {
@@ -399,7 +399,7 @@
     ]);
 
     assertType(
-      findNode.typeName('F<String>'),
+      findNode.namedType('F<String>'),
       'int? Function(bool, String, String?)?',
     );
   }
@@ -411,8 +411,8 @@
 void f(F<int> a, F<double>? b) {}
 ''');
 
-    assertType(findNode.typeName('F<int>'), 'int Function(int)?');
-    assertType(findNode.typeName('F<double>?'), 'int Function(double)?');
+    assertType(findNode.namedType('F<int>'), 'int Function(int)?');
+    assertType(findNode.namedType('F<double>?'), 'int Function(double)?');
   }
 
   test_typedef_function_nullable_local() async {
@@ -428,8 +428,8 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 68, 1),
     ]);
 
-    assertType(findNode.typeName('F<int>'), 'int Function(int)?');
-    assertType(findNode.typeName('F<double>?'), 'int Function(double)?');
+    assertType(findNode.namedType('F<int>'), 'int Function(int)?');
+    assertType(findNode.namedType('F<double>?'), 'int Function(double)?');
   }
 }
 
@@ -448,9 +448,9 @@
 class X3 with A {} // 3
 ''');
 
-    assertType(findNode.typeName('A {} // 1'), 'A*');
-    assertType(findNode.typeName('A {} // 2'), 'A*');
-    assertType(findNode.typeName('A {} // 3'), 'A*');
+    assertType(findNode.namedType('A {} // 1'), 'A*');
+    assertType(findNode.namedType('A {} // 2'), 'A*');
+    assertType(findNode.namedType('A {} // 3'), 'A*');
   }
 
   test_classTypeAlias_hierarchy() async {
@@ -462,9 +462,9 @@
 class X = A with B implements C;
 ''');
 
-    assertType(findNode.typeName('A with'), 'A*');
-    assertType(findNode.typeName('B implements'), 'B*');
-    assertType(findNode.typeName('C;'), 'C*');
+    assertType(findNode.namedType('A with'), 'A*');
+    assertType(findNode.namedType('B implements'), 'B*');
+    assertType(findNode.namedType('C;'), 'C*');
   }
 
   test_local_variable_interfaceType_notMigrated() async {
@@ -479,8 +479,8 @@
       error(HintCode.UNUSED_LOCAL_VARIABLE, 29, 1),
     ]);
 
-    assertType(findNode.typeName('int? a'), 'int*');
-    assertType(findNode.typeName('int b'), 'int*');
+    assertType(findNode.namedType('int? a'), 'int*');
+    assertType(findNode.namedType('int b'), 'int*');
   }
 
   test_mixin_hierarchy() async {
@@ -491,7 +491,7 @@
 mixin X2 implements A {} // 2
 ''');
 
-    assertType(findNode.typeName('A {} // 1'), 'A*');
-    assertType(findNode.typeName('A {} // 2'), 'A*');
+    assertType(findNode.namedType('A {} // 1'), 'A*');
+    assertType(findNode.namedType('A {} // 2'), 'A*');
   }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
index d09e2dc..99398a5 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
@@ -36,7 +36,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       import_a.class_('A'),
       'A*',
     );
@@ -55,7 +55,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       import_a.class_('A'),
       'A<num*>*',
     );
@@ -74,7 +74,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       import_a.class_('A'),
       'A<dynamic>*',
     );
@@ -93,7 +93,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A<int> a'),
+      findNode.namedType('A<int> a'),
       import_a.class_('A'),
       'A<int*>*',
     );
@@ -113,7 +113,7 @@
 
     var element = import_a.typeAlias('F');
 
-    var typeName = findNode.typeName('F a');
+    var typeName = findNode.namedType('F a');
     assertNamedType(typeName, element, 'int* Function(bool*)*');
 
     assertTypeAlias(
@@ -137,7 +137,7 @@
 
     var element = import_a.typeAlias('F');
 
-    var typeName = findNode.typeName('F a');
+    var typeName = findNode.namedType('F a');
     assertNamedType(typeName, element, 'dynamic Function(bool*)*');
 
     assertTypeAlias(
@@ -161,7 +161,7 @@
 
     var element = import_a.typeAlias('F');
 
-    var typeName = findNode.typeName('F a');
+    var typeName = findNode.namedType('F a');
     assertNamedType(typeName, element, 'num* Function(bool*)*');
 
     assertTypeAlias(
@@ -185,7 +185,7 @@
 
     var element = import_a.typeAlias('F');
 
-    var typeName = findNode.typeName('F<int> a');
+    var typeName = findNode.namedType('F<int> a');
     assertNamedType(typeName, element, 'int* Function(bool*)*');
 
     assertTypeAlias(
@@ -210,7 +210,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       import_a.class_('A'),
       'A',
     );
@@ -231,7 +231,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       import_a.class_('A'),
       'A<num*>',
     );
@@ -252,7 +252,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       import_a.class_('A'),
       'A<dynamic>',
     );
@@ -273,7 +273,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('A<int> a'),
+      findNode.namedType('A<int> a'),
       import_a.class_('A'),
       'A<int>',
     );
@@ -294,7 +294,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('F a'),
+      findNode.namedType('F a'),
       import_a.typeAlias('F'),
       'int* Function()',
     );
@@ -315,7 +315,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('F a'),
+      findNode.namedType('F a'),
       import_a.typeAlias('F'),
       'num* Function()',
     );
@@ -336,7 +336,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('F a'),
+      findNode.namedType('F a'),
       import_a.typeAlias('F'),
       'dynamic Function()',
     );
@@ -357,7 +357,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('F<int> a'),
+      findNode.namedType('F<int> a'),
       import_a.typeAlias('F'),
       'int* Function()',
     );
@@ -375,7 +375,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X<int>()'),
+      findNode.namedType('X<int>()'),
       findElement.typeAlias('X'),
       'A<int>',
     );
@@ -393,7 +393,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X()'),
+      findNode.namedType('X()'),
       findElement.typeAlias('X'),
       'A<int>',
     );
@@ -411,7 +411,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X<int>()'),
+      findNode.namedType('X<int>()'),
       findElement.typeAlias('X'),
       'A<int>',
     );
@@ -424,13 +424,13 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X<String>'),
+      findNode.namedType('X<String>'),
       findElement.typeAlias('X'),
       'Map<int, String>',
     );
 
     assertNamedType(
-      findNode.typeName('X<String?>'),
+      findNode.namedType('X<String?>'),
       findElement.typeAlias('X'),
       'Map<int, String?>',
     );
@@ -447,7 +447,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X<String>'),
+      findNode.namedType('X<String>'),
       findElement.importFind('package:test/a.dart').typeAlias('X'),
       'Map<int*, String*>*',
     );
@@ -460,13 +460,13 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X<int>'),
+      findNode.namedType('X<int>'),
       findElement.typeAlias('X'),
       'List<int?>',
     );
 
     assertNamedType(
-      findNode.typeName('X<int?>'),
+      findNode.namedType('X<int?>'),
       findElement.typeAlias('X'),
       'List<int?>',
     );
@@ -483,7 +483,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X<int>'),
+      findNode.namedType('X<int>'),
       findElement.importFind('package:test/a.dart').typeAlias('X'),
       'List<int*>*',
     );
@@ -496,13 +496,13 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X a'),
+      findNode.namedType('X a'),
       findElement.typeAlias('X'),
       'Never',
     );
 
     assertNamedType(
-      findNode.typeName('X? b'),
+      findNode.namedType('X? b'),
       findElement.typeAlias('X'),
       'Never?',
     );
@@ -519,7 +519,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X a'),
+      findNode.namedType('X a'),
       findElement.importFind('package:test/a.dart').typeAlias('X'),
       'Null*',
     );
@@ -532,13 +532,13 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X a'),
+      findNode.namedType('X a'),
       findElement.typeAlias('X'),
       'Never?',
     );
 
     assertNamedType(
-      findNode.typeName('X? b'),
+      findNode.namedType('X? b'),
       findElement.typeAlias('X'),
       'Never?',
     );
@@ -551,7 +551,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X<int>'),
+      findNode.namedType('X<int>'),
       findElement.typeAlias('X'),
       'int?',
     );
@@ -564,7 +564,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('X<String>'),
+      findNode.namedType('X<String>'),
       findElement.typeAlias('X'),
       'Map<int, String>',
     );
@@ -577,7 +577,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('Nothing f()'),
+      findNode.namedType('Nothing f()'),
       findElement.typeAlias('Nothing'),
       'void',
     );
@@ -593,7 +593,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       findElement.class_('A'),
       typeStr('A', 'A*'),
     );
@@ -607,7 +607,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       findElement.class_('A'),
       typeStr('A<num>', 'A<num*>*'),
     );
@@ -621,7 +621,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A a'),
+      findNode.namedType('A a'),
       findElement.class_('A'),
       typeStr('A<dynamic>', 'A<dynamic>*'),
     );
@@ -635,7 +635,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A<int> a'),
+      findNode.namedType('A<int> a'),
       findElement.class_('A'),
       typeStr('A<int>', 'A<int*>*'),
     );
@@ -649,7 +649,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('dynamic a;'),
+      findNode.namedType('dynamic a;'),
       dynamicElement,
       'dynamic',
     );
@@ -663,7 +663,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('mycore.dynamic a;'),
+      findNode.namedType('mycore.dynamic a;'),
       dynamicElement,
       'dynamic',
       expectedPrefix: findElement.import('dart:core').prefix,
@@ -680,7 +680,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('dynamic a;'),
+      findNode.namedType('dynamic a;'),
       null,
       'dynamic',
     );
@@ -692,7 +692,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('dynamic a;'),
+      findNode.namedType('dynamic a;'),
       dynamicElement,
       'dynamic',
     );
@@ -706,7 +706,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('F a'),
+      findNode.namedType('F a'),
       findElement.typeAlias('F'),
       typeStr('int Function()', 'int* Function()*'),
     );
@@ -720,7 +720,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('F a'),
+      findNode.namedType('F a'),
       findElement.typeAlias('F'),
       typeStr('num Function()', 'num* Function()*'),
     );
@@ -734,7 +734,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('F a'),
+      findNode.namedType('F a'),
       findElement.typeAlias('F'),
       typeStr('dynamic Function()', 'dynamic Function()*'),
     );
@@ -748,7 +748,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('F<int> a'),
+      findNode.namedType('F<int> a'),
       findElement.typeAlias('F'),
       typeStr('int Function()', 'int* Function()*'),
     );
@@ -766,7 +766,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('A();'),
+      findNode.namedType('A();'),
       null,
       'dynamic',
       expectedPrefix: findElement.prefix('math'),
@@ -783,7 +783,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('A();'),
+      findNode.namedType('A();'),
       findElement.class_('A'),
       typeStr('A', 'A*'),
     );
@@ -799,7 +799,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('A();'),
+      findNode.namedType('A();'),
       null,
       'dynamic',
     );
@@ -815,7 +815,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('int.double'),
+      findNode.namedType('int.double'),
       null,
       'dynamic',
       expectedPrefix: intElement,
@@ -832,7 +832,7 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('int.double'),
+      findNode.namedType('int.double'),
       null,
       'dynamic',
       expectedPrefix: intElement,
@@ -845,7 +845,7 @@
 ''');
 
     assertNamedType(
-      findNode.typeName('Never a'),
+      findNode.namedType('Never a'),
       neverElement,
       typeStr('Never', 'Null*'),
     );
diff --git a/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart b/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart
index 9df2f85..1cf6c42 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_repeated_test.dart
@@ -24,8 +24,8 @@
     ]);
 
     var A = findElement.class_('A');
-    assertNamedType(findNode.typeName('A, A {} // ref'), A, 'A');
-    assertNamedType(findNode.typeName('A {} // ref'), A, 'A');
+    assertNamedType(findNode.namedType('A, A {} // ref'), A, 'A');
+    assertNamedType(findNode.namedType('A {} // ref'), A, 'A');
   }
 
   test_class_implements_2times_viaTypeAlias() async {
@@ -38,13 +38,13 @@
     ]);
 
     assertNamedType(
-      findNode.typeName('A, B {} // ref'),
+      findNode.namedType('A, B {} // ref'),
       findElement.class_('A'),
       'A',
     );
 
     assertNamedType(
-      findNode.typeName('B {} // ref'),
+      findNode.namedType('B {} // ref'),
       findElement.typeAlias('B'),
       'A',
     );
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
index 4624ee0..6dc76c1 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_inference_no_possible_substitution_test.dart
@@ -32,7 +32,7 @@
 class X extends A<int> with M {}
 ''');
 
-    assertType(findNode.typeName('M {}'), 'M<int>');
+    assertType(findNode.namedType('M {}'), 'M<int>');
   }
 }
 
@@ -55,7 +55,7 @@
 class D extends A<int> with B<int>, C {}
 ''');
 
-    assertType(findNode.typeName('B<int>'), 'B<int*>*');
-    assertType(findNode.typeName('C {}'), 'C<int*>*');
+    assertType(findNode.namedType('B<int>'), 'B<int*>*');
+    assertType(findNode.namedType('C {}'), 'C<int*>*');
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart b/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart
index c2adf0a..c89c75d9 100644
--- a/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart
@@ -44,7 +44,7 @@
 extension E on int {}
 E a;
 ''', [error(CompileTimeErrorCode.NOT_A_TYPE, 22, 1)]);
-    var typeName = findNode.typeName('E a;');
+    var typeName = findNode.namedType('E a;');
     assertTypeDynamic(typeName.type);
     assertTypeNull(typeName.name);
   }
diff --git a/pkg/analyzer/test/src/diagnostics/void_with_type_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/void_with_type_arguments_test.dart
index e771072..aa5a2d8 100644
--- a/pkg/analyzer/test/src/diagnostics/void_with_type_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/void_with_type_arguments_test.dart
@@ -27,6 +27,6 @@
 ''', [
       error(ParserErrorCode.VOID_WITH_TYPE_ARGUMENTS, 4, 1),
     ]);
-    assertNamedType(findNode.typeName('int>'), intElement, 'int');
+    assertNamedType(findNode.namedType('int>'), intElement, 'int');
   }
 }
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index 901468a..76db62c 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -8108,7 +8108,7 @@
 void f(Point<int> x) {}
 ''');
     var pointClass =
-        findNode.typeName('Point').name.staticElement as ClassElement;
+        findNode.namedType('Point').name.staticElement as ClassElement;
     var pointBound =
         variables!.decoratedTypeParameterBound(pointClass.typeParameters[0])!;
     _assertType(pointBound.type!, 'num');
diff --git a/pkg/nnbd_migration/test/fix_aggregator_test.dart b/pkg/nnbd_migration/test/fix_aggregator_test.dart
index 27a9571..f32f6be 100644
--- a/pkg/nnbd_migration/test/fix_aggregator_test.dart
+++ b/pkg/nnbd_migration/test/fix_aggregator_test.dart
@@ -1187,7 +1187,7 @@
 
   Future<void> test_makeNullable() async {
     await analyze('f(int x) {}');
-    var typeName = findNode.typeName('int');
+    var typeName = findNode.namedType('int');
     var previewInfo = run({
       typeName: NodeChangeForTypeAnnotation()
         ..recordNullability(
@@ -1217,7 +1217,7 @@
 
   Future<void> test_noChangeToTypeAnnotation() async {
     await analyze('int x = 0;');
-    var typeName = findNode.typeName('int');
+    var typeName = findNode.namedType('int');
     var previewInfo = run({
       typeName: NodeChangeForTypeAnnotation()
         ..recordNullability(
@@ -1233,7 +1233,7 @@
 
   Future<void> test_noInfoForTypeAnnotation() async {
     await analyze('int x = 0;');
-    var typeName = findNode.typeName('int');
+    var typeName = findNode.namedType('int');
     var previewInfo = run({typeName: NodeChangeForTypeAnnotation()});
     expect(previewInfo, null);
   }
diff --git a/pkg/nnbd_migration/test/fix_builder_test.dart b/pkg/nnbd_migration/test/fix_builder_test.dart
index 74fa1a8..242c69f 100644
--- a/pkg/nnbd_migration/test/fix_builder_test.dart
+++ b/pkg/nnbd_migration/test/fix_builder_test.dart
@@ -1327,7 +1327,7 @@
 int _f({int/*?*/ x}) => 1;
 ''');
     visitAll(
-        changes: {findNode.typeName('int/*?*/ x'): isMakeNullableDueToHint});
+        changes: {findNode.namedType('int/*?*/ x'): isMakeNullableDueToHint});
   }
 
   Future<void>
@@ -1367,7 +1367,7 @@
 ''');
     visitAll(changes: {
       findNode.annotation('required'): isRequiredAnnotationToRequiredKeyword,
-      findNode.typeName('int'): isMakeNullableDueToHint,
+      findNode.namedType('int'): isMakeNullableDueToHint,
     });
   }
 
@@ -1594,7 +1594,7 @@
 }
 void _g(int/*?*/ x) {}
 ''');
-    var intTypeAnnotation = findNode.typeName('int)');
+    var intTypeAnnotation = findNode.namedType('int)');
     var genericFunctionTypeAnnotation =
         findNode.genericFunctionType('Function(int)');
     visitTypeAnnotation(genericFunctionTypeAnnotation, 'void Function(int?)',
@@ -1608,7 +1608,7 @@
 }
 int/*?*/ _g() => null;
 ''');
-    var intTypeAnnotation = findNode.typeName('int Function');
+    var intTypeAnnotation = findNode.namedType('int Function');
     var genericFunctionTypeAnnotation =
         findNode.genericFunctionType('Function');
     visitTypeAnnotation(genericFunctionTypeAnnotation, 'int? Function()',
diff --git a/tools/VERSION b/tools/VERSION
index 1cfc234..eb841a6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 134
+PRERELEASE 135
 PRERELEASE_PATCH 0
\ No newline at end of file
