mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 05:36:49 +00:00
9018d41706
Change-Id: I4b85cfaf154591434729ba9ad5f94a6cfc2d1033 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/354060 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Jake Macdonald <jakemac@google.com>
286 lines
12 KiB
Dart
286 lines
12 KiB
Dart
// 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.
|
|
|
|
part of dart._macros;
|
|
|
|
/// The marker interface for all types of macros.
|
|
abstract interface class Macro {}
|
|
|
|
/// The interface for [Macro]s that can be applied to a library directive, and
|
|
/// want to contribute new type declarations to the library.
|
|
abstract interface class LibraryTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForLibrary(Library library, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to a library directive, and
|
|
/// want to contribute new non-type declarations to the library.
|
|
abstract interface class LibraryDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForLibrary(
|
|
Library library, DeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to a library directive, and
|
|
/// want to provide definitions for declarations in the library.
|
|
abstract interface class LibraryDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForLibrary(
|
|
Library library, LibraryDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any top level function,
|
|
/// instance method, or static method, and want to contribute new type
|
|
/// declarations to the program.
|
|
abstract interface class FunctionTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForFunction(
|
|
FunctionDeclaration function, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any top level function,
|
|
/// instance method, or static method, and want to contribute new non-type
|
|
/// declarations to the program.
|
|
abstract interface class FunctionDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForFunction(
|
|
FunctionDeclaration function, DeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any top level function,
|
|
/// instance method, or static method, and want to augment the function
|
|
/// definition.
|
|
abstract interface class FunctionDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForFunction(
|
|
FunctionDeclaration function, FunctionDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any top level variable or
|
|
/// instance field, and want to contribute new type declarations to the
|
|
/// program.
|
|
abstract interface class VariableTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForVariable(
|
|
VariableDeclaration variable, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any top level variable or
|
|
/// instance field and want to contribute new non-type declarations to the
|
|
/// program.
|
|
abstract interface class VariableDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForVariable(
|
|
VariableDeclaration variable, DeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any top level variable
|
|
/// or instance field, and want to augment the variable definition.
|
|
abstract interface class VariableDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForVariable(
|
|
VariableDeclaration variable, VariableDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any class, and want to
|
|
/// contribute new type declarations to the program.
|
|
abstract interface class ClassTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForClass(
|
|
ClassDeclaration clazz, ClassTypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any class, and want to
|
|
/// contribute new non-type declarations to the program.
|
|
abstract interface class ClassDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForClass(
|
|
ClassDeclaration clazz, MemberDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any class, and want to
|
|
/// augment the definitions of the members of that class.
|
|
abstract interface class ClassDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForClass(
|
|
ClassDeclaration clazz, TypeDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any enum, and want to
|
|
/// contribute new type declarations to the program.
|
|
abstract interface class EnumTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForEnum(
|
|
EnumDeclaration enuum, EnumTypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any enum, and want to
|
|
/// contribute new non-type declarations to the program.
|
|
abstract interface class EnumDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForEnum(
|
|
EnumDeclaration enuum, EnumDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any enum, and want to
|
|
/// augment the definitions of members or values of that enum.
|
|
abstract interface class EnumDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForEnum(
|
|
EnumDeclaration enuum, EnumDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any enum, and want to
|
|
/// contribute new type declarations to the program.
|
|
abstract interface class EnumValueTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForEnumValue(
|
|
EnumValueDeclaration entry, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any enum, and want to
|
|
/// contribute new non-type declarations to the program.
|
|
abstract interface class EnumValueDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForEnumValue(
|
|
EnumValueDeclaration entry, EnumDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any enum, and want to
|
|
/// augment the definitions of members or values of that enum.
|
|
abstract interface class EnumValueDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForEnumValue(
|
|
EnumValueDeclaration entry, EnumValueDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any field, and want to
|
|
/// contribute new type declarations to the program.
|
|
abstract interface class FieldTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForField(
|
|
FieldDeclaration field, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any field, and want to
|
|
/// contribute new type declarations to the program.
|
|
abstract interface class FieldDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForField(
|
|
FieldDeclaration field, MemberDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any field, and want to
|
|
/// augment the field definition.
|
|
abstract interface class FieldDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForField(
|
|
FieldDeclaration field, VariableDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any method, and want to
|
|
/// contribute new type declarations to the program.
|
|
abstract interface class MethodTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForMethod(
|
|
MethodDeclaration method, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any method, and want to
|
|
/// contribute new non-type declarations to the program.
|
|
abstract interface class MethodDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForMethod(
|
|
MethodDeclaration method, MemberDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any method, and want to
|
|
/// augment the function definition.
|
|
abstract interface class MethodDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForMethod(
|
|
MethodDeclaration method, FunctionDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any constructor, and want
|
|
/// to contribute new type declarations to the program.
|
|
abstract interface class ConstructorTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForConstructor(
|
|
ConstructorDeclaration constructor, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any constructors, and
|
|
/// want to contribute new non-type declarations to the program.
|
|
abstract interface class ConstructorDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForConstructor(
|
|
ConstructorDeclaration constructor, MemberDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any constructor, and want
|
|
/// to augment the function definition.
|
|
abstract interface class ConstructorDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForConstructor(
|
|
ConstructorDeclaration constructor, ConstructorDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any mixin declaration, and
|
|
/// want to contribute new type declarations to the program.
|
|
abstract interface class MixinTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForMixin(
|
|
MixinDeclaration mixin, MixinTypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any mixin declaration, and
|
|
/// want to contribute new non-type declarations to the program.
|
|
abstract interface class MixinDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForMixin(
|
|
MixinDeclaration mixin, MemberDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any mixin declaration, and
|
|
/// want to augment the definitions of the members of that mixin.
|
|
abstract interface class MixinDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForMixin(
|
|
MixinDeclaration mixin, TypeDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any extension declaration,
|
|
/// and want to contribute new type declarations to the program.
|
|
abstract interface class ExtensionTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForExtension(
|
|
ExtensionDeclaration extension, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any extension declaration,
|
|
/// and want to contribute new non-type declarations to the program.
|
|
abstract interface class ExtensionDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForExtension(
|
|
ExtensionDeclaration extension, MemberDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any extension declaration,
|
|
/// and want to augment the definitions of the members of that extension.
|
|
abstract interface class ExtensionDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForExtension(
|
|
ExtensionDeclaration extension, TypeDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any extension type
|
|
/// declaration, and want to contribute new type declarations to the program.
|
|
abstract interface class ExtensionTypeTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForExtensionType(
|
|
ExtensionTypeDeclaration extension, TypeBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any extension type
|
|
/// declaration, and want to contribute new non-type declarations to the
|
|
/// program.
|
|
abstract interface class ExtensionTypeDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForExtensionType(
|
|
ExtensionTypeDeclaration extension, MemberDeclarationBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any extension type
|
|
/// declaration, and want to augment the definitions of the members of that
|
|
/// extension.
|
|
abstract interface class ExtensionTypeDefinitionMacro implements Macro {
|
|
FutureOr<void> buildDefinitionForExtensionType(
|
|
ExtensionTypeDeclaration extension, TypeDefinitionBuilder builder);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any type alias
|
|
/// declaration, and want to contribute new type declarations to the program.
|
|
abstract interface class TypeAliasTypesMacro implements Macro {
|
|
FutureOr<void> buildTypesForTypeAlias(
|
|
TypeAliasDeclaration declaration,
|
|
TypeBuilder builder,
|
|
);
|
|
}
|
|
|
|
/// The interface for [Macro]s that can be applied to any type alias
|
|
/// declaration, and want to contribute new non-type declarations to the
|
|
/// program.
|
|
abstract interface class TypeAliasDeclarationsMacro implements Macro {
|
|
FutureOr<void> buildDeclarationsForTypeAlias(
|
|
TypeAliasDeclaration declaration,
|
|
DeclarationBuilder builder,
|
|
);
|
|
}
|