@@ -14,16 +14,22 @@ import 'package:_fe_analyzer_shared/src/macros/api.dart';
1414/// to validate the introspection APIs work as expected.
1515class SimpleMacro
1616 implements
17+ ClassTypesMacro ,
1718 ClassDeclarationsMacro ,
1819 ClassDefinitionMacro ,
20+ ConstructorTypesMacro ,
1921 ConstructorDeclarationsMacro ,
2022 ConstructorDefinitionMacro ,
23+ FieldTypesMacro ,
2124 FieldDeclarationsMacro ,
2225 FieldDefinitionMacro ,
26+ FunctionTypesMacro ,
2327 FunctionDeclarationsMacro ,
2428 FunctionDefinitionMacro ,
29+ MethodTypesMacro ,
2530 MethodDeclarationsMacro ,
2631 MethodDefinitionMacro ,
32+ VariableTypesMacro ,
2733 VariableDeclarationsMacro ,
2834 VariableDefinitionMacro {
2935 final int ? x;
@@ -236,6 +242,77 @@ class SimpleMacro
236242 initializer: variable.initializer,
237243 );
238244 }
245+
246+ @override
247+ FutureOr <void > buildTypesForClass (
248+ ClassDeclaration clazz, TypeBuilder builder) {
249+ List <Object > _buildTypeParam (
250+ TypeParameterDeclaration typeParam, bool isFirst) {
251+ return [
252+ if (! isFirst) ', ' ,
253+ typeParam.name,
254+ if (typeParam.bounds != null ) ...[
255+ ' extends ' ,
256+ typeParam.bounds! ,
257+ ]
258+ ];
259+ }
260+
261+ builder.declareType (DeclarationCode .fromParts ([
262+ 'class ${clazz .name }Builder' ,
263+ if (clazz.typeParameters.isNotEmpty) ...[
264+ '<' ,
265+ ..._buildTypeParam (clazz.typeParameters.first, true ),
266+ for (var typeParam in clazz.typeParameters.skip (1 ))
267+ ..._buildTypeParam (typeParam, false ),
268+ '>' ,
269+ ],
270+ ' implements Builder<' ,
271+ clazz.type,
272+ if (clazz.typeParameters.isNotEmpty) ...[
273+ '<' ,
274+ clazz.typeParameters.first,
275+ for (var typeParam in clazz.typeParameters) ', ${typeParam .name }' ,
276+ '>' ,
277+ ],
278+ '> {}'
279+ ]));
280+ }
281+
282+ @override
283+ FutureOr <void > buildTypesForConstructor (
284+ ConstructorDeclaration constructor, TypeBuilder builder) {
285+ builder.declareType (DeclarationCode .fromString (
286+ 'class GeneratedBy${constructor .name .capitalize ()} {}' ));
287+ }
288+
289+ @override
290+ FutureOr <void > buildTypesForField (
291+ FieldDeclaration field, TypeBuilder builder) {
292+ builder.declareType (DeclarationCode .fromString (
293+ 'class GeneratedBy${field .name .capitalize ()} {}' ));
294+ }
295+
296+ @override
297+ FutureOr <void > buildTypesForFunction (
298+ FunctionDeclaration function, TypeBuilder builder) {
299+ builder.declareType (DeclarationCode .fromString (
300+ 'class GeneratedBy${function .name .capitalize ()} {}' ));
301+ }
302+
303+ @override
304+ FutureOr <void > buildTypesForMethod (
305+ MethodDeclaration method, TypeBuilder builder) {
306+ builder.declareType (DeclarationCode .fromString (
307+ 'class GeneratedBy${method .name .capitalize ()} {}' ));
308+ }
309+
310+ @override
311+ FutureOr <void > buildTypesForVariable (
312+ VariableDeclaration variable, TypeBuilder builder) {
313+ builder.declareType (DeclarationCode .fromString (
314+ 'class GeneratedBy${variable .name .capitalize ()} {}' ));
315+ }
239316}
240317
241318FunctionBodyCode _buildFunctionAugmentation (FunctionDeclaration function) =>
0 commit comments