Add resource identifier to generated code
diff --git a/pkgs/messages/example_json/lib/messages.g.dart b/pkgs/messages/example_json/lib/messages.g.dart
index 1ebaa48..4d3a4f5 100644
--- a/pkgs/messages/example_json/lib/messages.g.dart
+++ b/pkgs/messages/example_json/lib/messages.g.dart
@@ -4,6 +4,7 @@
 
 import 'package:intl4x/intl4x.dart';
 import 'package:messages/messages_json.dart';
+import 'package:meta/meta.dart';
 
 class AboutPageMessages {
   AboutPageMessages();
@@ -48,24 +49,33 @@
   }
 
   String aboutMessage(String websitename) =>
-      _currentMessages.generateStringAtIndex(0, [websitename]);
+      generateStringAtIndex(0, [websitename]);
 
   String helloAndWelcome(
     String firstName,
     int lastName,
   ) =>
-      _currentMessages.generateStringAtIndex(1, [firstName, lastName]);
+      generateStringAtIndex(1, [firstName, lastName]);
 
   String newMessages(int newMessages) =>
-      _currentMessages.generateStringAtIndex(2, [newMessages]);
+      generateStringAtIndex(2, [newMessages]);
 
   String newMessages2(
     String gender,
     int newVar,
   ) =>
-      _currentMessages.generateStringAtIndex(3, [gender, newVar]);
+      generateStringAtIndex(3, [gender, newVar]);
 
-  String get otherMsg => _currentMessages.generateStringAtIndex(4, []);
+  String get otherMsg => generateStringAtIndex(4, []);
+}
+
+extension on AboutPageMessages {
+  @ResourceIdentifier('AboutPageMessages')
+  String generateStringAtIndex(
+    int index,
+    List args,
+  ) =>
+      _currentMessages.generateStringAtIndex(index, args);
 }
 
 class HomePageMessages {
@@ -114,22 +124,31 @@
     String firstName,
     String lastName,
   ) =>
-      _currentMessages.generateStringAtIndex(0, [firstName, lastName]);
+      generateStringAtIndex(0, [firstName, lastName]);
 
   String helloAndWelcome2(
     String firstName,
     String lastName,
   ) =>
-      _currentMessages.generateStringAtIndex(1, [firstName, lastName]);
+      generateStringAtIndex(1, [firstName, lastName]);
 
   String newMessages(int newMessages) =>
-      _currentMessages.generateStringAtIndex(2, [newMessages]);
+      generateStringAtIndex(2, [newMessages]);
 
   String newMessages2(
     String gender,
     int newVar,
   ) =>
-      _currentMessages.generateStringAtIndex(3, [gender, newVar]);
+      generateStringAtIndex(3, [gender, newVar]);
+}
+
+extension on HomePageMessages {
+  @ResourceIdentifier('HomePageMessages')
+  String generateStringAtIndex(
+    int index,
+    List args,
+  ) =>
+      _currentMessages.generateStringAtIndex(index, args);
 }
 
 Message _pluralSelector(
diff --git a/pkgs/messages/example_json/pubspec.yaml b/pkgs/messages/example_json/pubspec.yaml
index 5b5f489..5d141b8 100644
--- a/pkgs/messages/example_json/pubspec.yaml
+++ b/pkgs/messages/example_json/pubspec.yaml
@@ -9,6 +9,7 @@
   intl4x:
     path: ../../intl4x
   messages: ^0.2.0
+  meta: ^1.15.0
   native_assets_cli: ^0.6.0
 
 dev_dependencies:
diff --git a/pkgs/messages/lib/src/message_format.dart b/pkgs/messages/lib/src/message_format.dart
index a92949e..909d7a4 100644
--- a/pkgs/messages/lib/src/message_format.dart
+++ b/pkgs/messages/lib/src/message_format.dart
@@ -2,8 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'package:meta/meta.dart';
-
 // ignore_for_file: non_constant_identifier_names
 import 'plural_selector.dart';
 
@@ -34,19 +32,9 @@
   Preamble get preamble;
   PluralSelector get pluralSelector;
 
-  String _generateStringAtIndex(int index, List args);
+  String generateStringAtIndex(int index, List args);
 
-  String _generateStringAtId(String id, List args);
-}
-
-extension MessageListStatic on MessageList {
-  @ResourceIdentifier()
-  String generateStringAtIndex(int index, List args) =>
-      _generateStringAtIndex(index, args);
-
-  @ResourceIdentifier()
-  String generateStringAtId(String id, List args) =>
-      _generateStringAtId(id, args);
+  String generateStringAtId(String id, List args);
 }
 
 sealed class PluralMarker {
diff --git a/pkgs/messages_builder/lib/code_generation/class_generation.dart b/pkgs/messages_builder/lib/code_generation/class_generation.dart
index a55c689..6f651f4 100644
--- a/pkgs/messages_builder/lib/code_generation/class_generation.dart
+++ b/pkgs/messages_builder/lib/code_generation/class_generation.dart
@@ -29,10 +29,11 @@
   String getClassName(String? context) => '${context ?? ''}Messages';
 
   List<Spec> generate() {
+    final className = getClassName(context);
     final classes = <Spec>[
       Class(
         (cb) => cb
-          ..name = getClassName(context)
+          ..name = className
           ..constructors.addAll(constructors)
           ..fields.addAll(fields)
           ..methods.addAll(methods),
@@ -49,6 +50,51 @@
                   )
                 : null).whereType<EnumValue>())));
     }
+    classes.add(Extension((b) => b
+      ..on = Reference(className)
+      ..methods.addAll([
+        if (options.findById)
+          Method(
+            (p0) => p0
+              ..name = 'generateStringAtId'
+              ..requiredParameters.addAll([
+                Parameter((p0) => p0
+                  ..name = 'id'
+                  ..type = const Reference('String')),
+                Parameter((p0) => p0
+                  ..name = 'args'
+                  ..type = const Reference('List'))
+              ])
+              ..annotations
+                  .add(CodeExpression(Code("ResourceIdentifier('$className')")))
+              ..lambda = true
+              ..body = const Code('''
+_currentMessages.generateStringAtId(id, args)
+''')
+              ..returns = const Reference('String'),
+          ),
+        //String generateStringAtIndex(int index, List args)
+        if (options.messageCalls || options.indexType == IndexType.enumerate)
+          Method(
+            (p0) => p0
+              ..name = 'generateStringAtIndex'
+              ..requiredParameters.addAll([
+                Parameter((p0) => p0
+                  ..name = 'index'
+                  ..type = const Reference('int')),
+                Parameter((p0) => p0
+                  ..name = 'args'
+                  ..type = const Reference('List'))
+              ])
+              ..annotations
+                  .add(CodeExpression(Code("ResourceIdentifier('$className')")))
+              ..lambda = true
+              ..body = const Code('''
+_currentMessages.generateStringAtIndex(index, args)
+''')
+              ..returns = const Reference('String'),
+          )
+      ])));
     return classes;
   }
 }
diff --git a/pkgs/messages_builder/lib/code_generation/import_generation.dart b/pkgs/messages_builder/lib/code_generation/import_generation.dart
index b616b5c..04931c2 100644
--- a/pkgs/messages_builder/lib/code_generation/import_generation.dart
+++ b/pkgs/messages_builder/lib/code_generation/import_generation.dart
@@ -27,6 +27,10 @@
     return [
       ...serializationImports,
       ...pluralImports,
+      if (options.findById ||
+          options.messageCalls ||
+          options.indexType == IndexType.enumerate)
+        Directive.import('package:meta/meta.dart'),
       Directive.import('dart:ffi'),
     ];
   }
diff --git a/pkgs/messages_builder/lib/code_generation/method_generation.dart b/pkgs/messages_builder/lib/code_generation/method_generation.dart
index be6f589..b146b0b 100644
--- a/pkgs/messages_builder/lib/code_generation/method_generation.dart
+++ b/pkgs/messages_builder/lib/code_generation/method_generation.dart
@@ -25,8 +25,7 @@
     final indexStr = options.indexType == IndexType.enumerate
         ? '${enumName(context)}.${message.name}.index'
         : index.toString();
-    final body =
-        '_currentMessages.generateStringAtIndex($indexStr, [$arguments])';
+    final body = 'generateStringAtIndex($indexStr, [$arguments])';
     final methodType = message.placeholders.isEmpty ? MethodType.getter : null;
     return Method(
       (mb) => mb
@@ -143,8 +142,7 @@
           ..type = const Reference('List<dynamic>')
           ..defaultTo = const Code('const []'),
       ))
-      ..body =
-          const Code('return _currentMessages.generateStringAtId(id, args);')
+      ..body = const Code('return generateStringAtId(id, args);')
       ..returns = const Reference('String'));
     final findByEnum = Method((mb) => mb
       ..name = 'getByEnum'
@@ -161,8 +159,7 @@
           ..type = const Reference('List<dynamic>')
           ..defaultTo = const Code('const []'),
       ))
-      ..body =
-          const Code('_currentMessages.generateStringAtIndex(val.index, args)')
+      ..body = const Code('generateStringAtIndex(val.index, args)')
       ..lambda = true
       ..returns = const Reference('String'));