blob: 4979c7641e488142cd1330f3c717692e37d08f6d [file] [log] [blame]
// Copyright (c) 2021, 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:async';
import 'package:_fe_analyzer_shared/src/macros/api.dart';
macro class FunctionDefinitionMacro1 implements FunctionDefinitionMacro {
const FunctionDefinitionMacro1();
FutureOr<void> buildDefinitionForFunction(
FunctionDeclaration function, FunctionDefinitionBuilder builder) {
builder.augment(new FunctionBodyCode.fromString('''{
return 42;
}'''));
}
}
macro class FunctionDefinitionMacro2 implements FunctionDefinitionMacro {
const FunctionDefinitionMacro2();
FutureOr<void> buildDefinitionForFunction(
FunctionDeclaration function, FunctionDefinitionBuilder builder) async {
if (function.positionalParameters.isEmpty) {
return;
}
StaticType returnType = await builder.instantiateType(function.returnType);
StaticType parameterType =
await builder.instantiateType(function.positionalParameters.first.type);
builder.augment(new FunctionBodyCode.fromString('''{
print('isExactly=${await returnType.isExactly(parameterType)}');
print('isSubtype=${await returnType.isSubtypeOf(parameterType)}');
}'''));
}
}
macro class FunctionTypesMacro1 implements FunctionTypesMacro {
const FunctionTypesMacro1();
FutureOr<void> buildTypesForFunction(
FunctionDeclaration function, TypeBuilder builder) {
builder.declareType(new DeclarationCode.fromString('''
class ${function.identifier.name}GeneratedClass {}
'''));
}
}
macro class FunctionDeclarationsMacro1 implements FunctionDeclarationsMacro {
const FunctionDeclarationsMacro1();
FutureOr<void> buildDeclarationsForFunction(
FunctionDeclaration function, DeclarationBuilder builder) {
builder.declareInLibrary(new DeclarationCode.fromString('''
void ${function.identifier.name}GeneratedMethod() {}
'''));
}
}