diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 7983d90..dc66628 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -48,6 +48,7 @@
 import 'package:analyzer/src/services/lint.dart';
 import 'package:analyzer/src/task/strong/checker.dart';
 import 'package:analyzer/src/util/performance/operation_performance.dart';
+import 'package:collection/collection.dart';
 
 class AnalysisForCompletionResult {
   final CompilationUnit parsedUnit;
@@ -271,11 +272,19 @@
     }
 
     if (_analysisOptions.lint) {
-      var allUnits = _library.files
-          .map((file) => LinterContextUnit(file.content, units[file]!))
+      final allUnits = _library.files
+          .map((file) {
+            final unit = units[file];
+            if (unit != null) {
+              return LinterContextUnit2(file, unit);
+            } else {
+              return null;
+            }
+          })
+          .whereNotNull()
           .toList();
-      for (int i = 0; i < allUnits.length; i++) {
-        _computeLints(_library.files[i], allUnits[i], allUnits,
+      for (final linterUnit in allUnits) {
+        _computeLints(linterUnit.file, linterUnit, allUnits,
             analysisOptions: _analysisOptions);
       }
     }
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 6d5ea0d..275cde4 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -17,6 +17,7 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/error/listener.dart';
 import 'package:analyzer/file_system/file_system.dart' as file_system;
+import 'package:analyzer/src/dart/analysis/file_state.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/token.dart';
 import 'package:analyzer/src/dart/constant/compute.dart';
@@ -512,6 +513,21 @@
   LinterContextUnit(this.content, this.unit);
 }
 
+/// TODO(scheglov) This class exists only because there are places in the
+/// analyzer and analysis server that instantiate [LinterContextUnit]. This
+/// should not happen, and should be fixed.
+class LinterContextUnit2 implements LinterContextUnit {
+  final FileState file;
+
+  @override
+  final CompilationUnit unit;
+
+  LinterContextUnit2(this.file, this.unit);
+
+  @override
+  String get content => file.content;
+}
+
 /// Thrown when an error occurs in linting.
 class LinterException implements Exception {
   /// A message describing the error.
diff --git a/pkg/analyzer/lib/src/summary2/macro_application.dart b/pkg/analyzer/lib/src/summary2/macro_application.dart
index 3870b8e..8260593 100644
--- a/pkg/analyzer/lib/src/summary2/macro_application.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_application.dart
@@ -33,7 +33,7 @@
       _IdentifierResolver(_linker.elementFactory, declarationBuilder);
 
   late final macro.TypeDeclarationResolver _typeDeclarationResolver =
-      _TypeDeclarationResolver();
+      _TypeDeclarationResolver(declarationBuilder);
 
   late final macro.TypeIntrospector _typeIntrospector =
       _TypeIntrospector(declarationBuilder);
@@ -570,11 +570,20 @@
 }
 
 class _TypeDeclarationResolver implements macro.TypeDeclarationResolver {
+  final DeclarationBuilder declarationBuilder;
+
+  _TypeDeclarationResolver(this.declarationBuilder);
+
   @override
   Future<macro.TypeDeclaration> declarationOf(
-      covariant macro.Identifier identifier) {
-    // TODO: implement declarationOf
-    throw UnimplementedError();
+    covariant IdentifierImpl identifier,
+  ) async {
+    final element = identifier.element;
+    if (element is ClassElementImpl) {
+      return declarationBuilder.fromElement.classElement(element);
+    } else {
+      throw ArgumentError('element: $element');
+    }
   }
 }
 
diff --git a/pkg/analyzer/lib/src/summary2/macro_declarations.dart b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
index 96d2711..bfe0b62 100644
--- a/pkg/analyzer/lib/src/summary2/macro_declarations.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
@@ -36,11 +36,11 @@
   /// corresponding elements. So, we can access them uniformly via interfaces,
   /// mixins, etc.
   void transferToElements() {
+    // TODO(scheglov) Make sure that these are only declarations?
     for (final entry in fromNode._identifierMap.entries) {
       final element = entry.key.staticElement;
       if (element != null) {
         final declaration = entry.value;
-        declaration.element = element;
         fromElement._identifierMap[element] = declaration;
       }
     }
@@ -74,10 +74,11 @@
   }
 
   macro.IdentifierImpl identifier(Element element) {
-    return _identifierMap[element] ??= IdentifierImpl(
+    return _identifierMap[element] ??= IdentifierImplFromElement(
       id: macro.RemoteInstance.uniqueId,
       name: element.name!,
-    )..element = element;
+      element: element,
+    );
   }
 
   macro.TypeParameterDeclarationImpl typeParameter(
@@ -198,9 +199,10 @@
     } else {
       simpleIdentifier = (node as ast.PrefixedIdentifier).identifier;
     }
-    return _identifierMap[simpleIdentifier] ??= IdentifierImpl(
+    return _identifierMap[simpleIdentifier] ??= IdentifierImplFromNode(
       id: macro.RemoteInstance.uniqueId,
       name: simpleIdentifier.name,
+      node: simpleIdentifier,
     );
   }
 
@@ -300,10 +302,37 @@
   });
 }
 
-class IdentifierImpl extends macro.IdentifierImpl {
-  late final Element? element;
+abstract class IdentifierImpl extends macro.IdentifierImpl {
+  IdentifierImpl({
+    required super.id,
+    required super.name,
+  });
 
-  IdentifierImpl({required super.id, required super.name});
+  Element? get element;
+}
+
+class IdentifierImplFromElement extends IdentifierImpl {
+  @override
+  final Element element;
+
+  IdentifierImplFromElement({
+    required super.id,
+    required super.name,
+    required this.element,
+  });
+}
+
+class IdentifierImplFromNode extends IdentifierImpl {
+  final ast.SimpleIdentifier node;
+
+  IdentifierImplFromNode({
+    required super.id,
+    required super.name,
+    required this.node,
+  });
+
+  @override
+  Element? get element => node.staticElement;
 }
 
 class IntrospectableClassDeclarationImpl
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index adf42bb..0d9b911 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -23,6 +23,7 @@
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:linter/src/rules.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -104,6 +105,12 @@
 
 @reflectiveTest
 class AnalysisDriver_PubPackageTest extends PubPackageResolutionTest {
+  @override
+  void setUp() {
+    super.setUp();
+    registerLintRules();
+  }
+
   test_getLibraryByUri_cannotResolveUri() async {
     final driver = driverFor(testFile.path);
     expect(
@@ -229,6 +236,76 @@
       isA<NotLibraryButPartResult>(),
     );
   }
+
+  test_getResult_part_doesNotExist_lints() async {
+    newFile('$testPackageRootPath/analysis_options.yaml', r'''
+linter:
+  rules:
+    - omit_local_variable_types
+''');
+
+    await assertErrorsInCode(r'''
+library my.lib;
+part 'a.dart';
+''', [
+      error(CompileTimeErrorCode.URI_DOES_NOT_EXIST, 21, 8),
+    ]);
+  }
+
+  test_getResult_part_empty_lints() async {
+    newFile('$testPackageRootPath/analysis_options.yaml', r'''
+linter:
+  rules:
+    - omit_local_variable_types
+''');
+
+    newFile('$testPackageLibPath/a.dart', '');
+
+    await assertErrorsInCode(r'''
+library my.lib;
+part 'a.dart';
+''', [
+      error(CompileTimeErrorCode.PART_OF_NON_PART, 21, 8),
+    ]);
+  }
+
+  test_getResult_part_hasPartOfName_notThisLibrary_lints() async {
+    newFile('$testPackageRootPath/analysis_options.yaml', r'''
+linter:
+  rules:
+    - omit_local_variable_types
+''');
+
+    newFile('$testPackageLibPath/a.dart', r'''
+part of other.lib;
+''');
+
+    await assertErrorsInCode(r'''
+library my.lib;
+part 'a.dart';
+''', [
+      error(CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY, 21, 8),
+    ]);
+  }
+
+  test_getResult_part_hasPartOfUri_notThisLibrary_lints() async {
+    newFile('$testPackageRootPath/analysis_options.yaml', r'''
+linter:
+  rules:
+    - omit_local_variable_types
+''');
+
+    newFile('$testPackageLibPath/a.dart', r'''
+part of 'not_test.dart';
+''');
+
+    await assertErrorsInCode(r'''
+library my.lib;
+part 'a.dart';
+''', [
+      error(CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY, 21, 8),
+    ]);
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/summary/macro/introspect_declarations_phase.dart b/pkg/analyzer/test/src/summary/macro/introspect_declarations_phase.dart
index 40a5d33..a9a35af 100644
--- a/pkg/analyzer/test/src/summary/macro/introspect_declarations_phase.dart
+++ b/pkg/analyzer/test/src/summary/macro/introspect_declarations_phase.dart
@@ -78,13 +78,19 @@
     }
 
     await _withIndent(() async {
-      final superclass = e.superclass == null
-          ? null
-          : await typeDeclarationResolver.declarationOf(
-              e.superclass!.identifier) as IntrospectableClassDeclaration;
-      if (superclass != null) {
+      final superAnnotation = e.superclass;
+      if (superAnnotation != null) {
+        final superIdentifier = superAnnotation.identifier;
         _writelnWithIndent('superclass');
-        await _withIndent(() => writeClassDeclaration(superclass));
+        try {
+          final superDeclaration = await typeDeclarationResolver
+              .declarationOf(superIdentifier) as IntrospectableClassDeclaration;
+          await _withIndent(() => writeClassDeclaration(superDeclaration));
+        } on ArgumentError {
+          await _withIndent(() async {
+            _writelnWithIndent('notType ${superIdentifier.name}');
+          });
+        }
       }
 
       await _writeTypeParameters(e.typeParameters);
diff --git a/pkg/analyzer/test/src/summary/macro_test.dart b/pkg/analyzer/test/src/summary/macro_test.dart
index b6deb4c..0f417e7 100644
--- a/pkg/analyzer/test/src/summary/macro_test.dart
+++ b/pkg/analyzer/test/src/summary/macro_test.dart
@@ -1210,7 +1210,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_ClassDeclaration_imported_interfaces() async {
     newFile('$testPackageLibPath/a.dart', r'''
 class A {}
@@ -1235,7 +1234,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_ClassDeclaration_imported_isAbstract() async {
     newFile('$testPackageLibPath/a.dart', r'''
 abstract class A {}
@@ -1255,7 +1253,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_ClassDeclaration_imported_mixins() async {
     newFile('$testPackageLibPath/a.dart', r'''
 mixin M1 {}
@@ -1280,7 +1277,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_ClassDeclaration_imported_superclass() async {
     newFile('$testPackageLibPath/a.dart', r'''
 class A {}
@@ -1303,7 +1299,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_ClassDeclaration_imported_typeParameters() async {
     newFile('$testPackageLibPath/a.dart', r'''
 class A<T, U extends List<T>> {}
@@ -1327,7 +1322,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_ClassDeclaration_superclassOf() async {
     await _assertIntrospectDeclarationsText(r'''
 class A {}
@@ -1343,19 +1337,15 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_ClassDeclaration_superclassOf_implicit() async {
     await _assertIntrospectDeclarationsText(r'''
 @introspectMacro
 class X {}
 ''', r'''
 class X
-  superclass
-    class Object
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_ClassDeclaration_superclassOf_unresolved() async {
     await _assertIntrospectDeclarationsText(r'''
 @introspectMacro
@@ -1363,11 +1353,10 @@
 ''', r'''
 class X
   superclass
-    class Object
+    notType A
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_FieldDeclaration_isExternal() async {
     await _assertIntrospectDeclarationsText(r'''
 @introspectMacroX
@@ -1377,8 +1366,6 @@
 }
 ''', r'''
 class X
-  superclass
-    class Object
   fields
     external a
       type: int
@@ -1387,7 +1374,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_FieldDeclaration_isFinal() async {
     await _assertIntrospectDeclarationsText(r'''
 @introspectMacroX
@@ -1397,8 +1383,6 @@
 }
 ''', r'''
 class X
-  superclass
-    class Object
   fields
     final a
       type: int
@@ -1407,7 +1391,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_FieldDeclaration_isLate() async {
     await _assertIntrospectDeclarationsText(r'''
 @introspectMacroX
@@ -1417,8 +1400,6 @@
 }
 ''', r'''
 class X
-  superclass
-    class Object
   fields
     late final a
       type: int
@@ -1427,7 +1408,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_FieldDeclaration_isStatic() async {
     await _assertIntrospectDeclarationsText(r'''
 @introspectMacroX
@@ -1437,8 +1417,6 @@
 }
 ''', r'''
 class X
-  superclass
-    class Object
   fields
     static a
       type: int
@@ -1447,7 +1425,6 @@
 ''');
   }
 
-  @failingTest
   test_introspect_declarations_FieldDeclaration_type_explicit() async {
     await _assertIntrospectDeclarationsText(r'''
 @introspectMacroX
@@ -1457,8 +1434,6 @@
 }
 ''', r'''
 class X
-  superclass
-    class Object
   fields
     a
       type: int
diff --git a/tools/VERSION b/tools/VERSION
index 5c1c3ff..830b50c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 254
+PRERELEASE 255
 PRERELEASE_PATCH 0
\ No newline at end of file
