| // Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file |
| // 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 'dart:convert'; |
| |
| import 'package:dart_model/dart_model.dart'; |
| import 'package:macro/macro.dart'; |
| import 'package:macro_service/macro_service.dart'; |
| |
| import 'templating.dart'; |
| |
| /// Applies a macro which sends an empty query, and outputs an augmentation |
| /// that is the query result as a comment. |
| class QueryClass { |
| const QueryClass(); |
| } |
| |
| class QueryClassImplementation implements ClassDefinitionsMacro { |
| // TODO(davidmorgan): this should be injected by the bootstrap script. |
| @override |
| MacroDescription get description => MacroDescription( |
| annotation: QualifiedName( |
| uri: 'package:_test_macros/query_class.dart', |
| name: 'QueryClass', |
| ), |
| runsInPhases: [3], |
| ); |
| |
| @override |
| Future<void> buildDefinitionsForClass(ClassDefinitionsBuilder builder) async { |
| final qualifiedName = builder.model.qualifiedNameOf(builder.target.node)!; |
| final result = await builder.query(Query(target: qualifiedName)); |
| builder.augment( |
| docCommentsAndMetadata: Augmentation( |
| code: expandTemplate('// ${json.encode(result)}'), |
| ), |
| ); |
| } |
| } |