diff --git a/pkg/front_end/lib/src/fasta/kernel/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro.dart
index 1cb85e0..dd6dfb1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro.dart
@@ -27,9 +27,7 @@
 }
 
 class LibraryMacroApplicationData {
-  MacroApplications? libraryApplications;
   Map<Class, ClassMacroApplicationData> classData = {};
-  Map<Typedef, MacroApplications> typedefApplications = {};
   Map<Member, MacroApplications> memberApplications = {};
 }
 
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 2f6b52c..e0779c4 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -1409,8 +1409,6 @@
       LibraryMacroApplicationData libraryMacroApplicationData =
           new LibraryMacroApplicationData();
       Library library = libraryBuilder.library;
-      libraryMacroApplicationData.libraryApplications =
-          computeApplications(library.annotations);
       for (Class cls in library.classes) {
         ClassMacroApplicationData classMacroApplicationData =
             new ClassMacroApplicationData();
@@ -1438,17 +1436,7 @@
               macroApplications;
         }
       }
-      for (Typedef typedef in library.typedefs) {
-        MacroApplications? macroApplications =
-            computeApplications(typedef.annotations);
-        if (macroApplications != null) {
-          libraryMacroApplicationData.typedefApplications[typedef] =
-              macroApplications;
-        }
-      }
-      if (libraryMacroApplicationData.libraryApplications != null ||
-          libraryMacroApplicationData.classData.isNotEmpty ||
-          libraryMacroApplicationData.typedefApplications.isNotEmpty ||
+      if (libraryMacroApplicationData.classData.isNotEmpty ||
           libraryMacroApplicationData.memberApplications.isNotEmpty) {
         if (retainDataForTesting) {
           dataForTesting!.macroApplicationData.libraryData[library] =
diff --git a/pkg/front_end/test/macros/data/tests/use_macro_package.dart b/pkg/front_end/test/macros/data/tests/use_macro_package.dart
index 062dc2c..a830bb3 100644
--- a/pkg/front_end/test/macros/data/tests/use_macro_package.dart
+++ b/pkg/front_end/test/macros/data/tests/use_macro_package.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 /*library: 
- appliedMacros=[Macro3],
  compilationSequence=[
   package:_fe_analyzer_shared/src/macros/api.dart,
   package:macro/macro.dart,
@@ -11,7 +10,6 @@
  macrosAreApplied,
  macrosAreAvailable
 */
-@Macro3()
 library use_macro_package;
 
 import 'package:macro/macro.dart';
@@ -26,6 +24,10 @@
  macrosAreApplied
 */
 class Class1 {
+  @Macro3()
+  /*member: Class1.:appliedMacros=[Macro3]*/
+  Class1();
+
   @Macro1()
   @Macro2()
   /*member: Class1.method:appliedMacros=[
@@ -48,3 +50,21 @@
   @NonMacro()
   var field;
 }
+
+@Macro1()
+/*member: field:appliedMacros=[Macro1]*/
+var field;
+
+extension Extension on int {
+  @Macro1()
+  /*member: Extension|field:appliedMacros=[Macro1]*/
+  static var field;
+
+  @Macro2()
+  /*member: Extension|method:appliedMacros=[Macro2]*/
+  void method() {}
+
+  @Macro3()
+  /*member: Extension|staticMethod:appliedMacros=[Macro3]*/
+  static void staticMethod() {}
+}
diff --git a/pkg/front_end/test/macros/macro_test.dart b/pkg/front_end/test/macros/macro_test.dart
index c1aa33e..6042432 100644
--- a/pkg/front_end/test/macros/macro_test.dart
+++ b/pkg/front_end/test/macros/macro_test.dart
@@ -112,10 +112,6 @@
     return macroApplicationData.libraryData[library];
   }
 
-  MacroApplications? getLibraryMacroApplications(Library library) {
-    return getLibraryMacroApplicationData(library)?.libraryApplications;
-  }
-
   ClassMacroApplicationData? getClassMacroApplicationData(Class cls) {
     LibraryMacroApplicationData? applicationData =
         getLibraryMacroApplicationData(cls.enclosingLibrary);
@@ -184,7 +180,6 @@
     if (getLibraryMacroApplicationData(node) != null) {
       features.add(Tags.macrosAreApplied);
     }
-    registerMacroApplications(features, getLibraryMacroApplications(node));
     return features;
   }
 
