Skip to content

Commit 4f8061d

Browse files
jakemac53Commit Queue
authored and
Commit Queue
committed
Add MetadataAnnotation class and metadata fields to relevant objects
Bug: dart-lang/language#1930 Change-Id: I3ba6facd4c0487b0af18108c8d1db21ee6d5a498 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/313640 Auto-Submit: Jake Macdonald <[email protected]> Reviewed-by: Bob Nystrom <[email protected]> Commit-Queue: Jake Macdonald <[email protected]>
1 parent 2a302a9 commit 4f8061d

File tree

9 files changed

+292
-6
lines changed

9 files changed

+292
-6
lines changed

pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ part of '../api.dart';
99
/// Could be a [Declaration] or [Library].
1010
abstract interface class MacroTarget {}
1111

12+
/// The interface for things that can be annotated with [MetadataAnnotation]s.
13+
abstract interface class Annotatable {
14+
Iterable<MetadataAnnotation> get metadata;
15+
}
16+
1217
/// A concrete reference to a named declaration, which may or may not yet be
1318
/// resolved.
1419
///
@@ -100,7 +105,7 @@ abstract interface class StaticType {
100105
abstract interface class NamedStaticType implements StaticType {}
101106

102107
/// The interface for all declarations.
103-
abstract interface class Declaration implements MacroTarget {
108+
abstract interface class Declaration implements Annotatable, MacroTarget {
104109
/// The library in which this declaration is defined.
105110
Library get library;
106111

@@ -297,7 +302,7 @@ abstract interface class FieldDeclaration
297302

298303
/// General parameter introspection information, see the subtypes
299304
/// [FunctionTypeParameter] and [ParameterDeclaration].
300-
abstract interface class Parameter {
305+
abstract interface class Parameter implements Annotatable {
301306
/// The type of this parameter.
302307
TypeAnnotation get type;
303308

@@ -356,7 +361,7 @@ abstract interface class RecordFieldDeclaration implements Declaration {
356361
}
357362

358363
/// Introspection information for a Library.
359-
abstract interface class Library implements MacroTarget {
364+
abstract interface class Library implements Annotatable, MacroTarget {
360365
/// The language version of this library.
361366
LanguageVersion get languageVersion;
362367

@@ -371,3 +376,26 @@ abstract interface class LanguageVersion {
371376

372377
int get minor;
373378
}
379+
380+
/// A metadata annotation on a declaration or library directive.
381+
abstract interface class MetadataAnnotation {}
382+
383+
/// A [MetadataAnnotation] which is a reference to a const value.
384+
abstract interface class IdentifierMetadataAnnotation
385+
implements MetadataAnnotation {
386+
/// The [Identifier] for the const reference.
387+
Identifier get identifier;
388+
}
389+
390+
/// A [Metadata] annotation which is a constructor call.
391+
abstract interface class ConstructorMetadataAnnotation
392+
implements MetadataAnnotation {
393+
/// And [Identifier] referring to the type that is being constructed.
394+
Identifier get type;
395+
396+
/// An [Identifier] referring to the specific constructor being called.
397+
///
398+
/// For unnamed constructors, the name of this identifier will be the empty
399+
/// String.
400+
Identifier get constructor;
401+
}

pkg/_fe_analyzer_shared/lib/src/macros/executor/introspection_impls.dart

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ class RecordFieldDeclarationImpl extends DeclarationImpl
158158
required super.id,
159159
required super.identifier,
160160
required super.library,
161+
required super.metadata,
161162
required this.name,
162163
required this.type,
163164
});
@@ -253,17 +254,71 @@ class OmittedTypeAnnotationImpl extends TypeAnnotationImpl
253254
RemoteInstanceKind get kind => RemoteInstanceKind.omittedTypeAnnotation;
254255
}
255256

257+
abstract class MetadataAnnotationImpl extends RemoteInstance
258+
implements MetadataAnnotation {
259+
MetadataAnnotationImpl(super.id);
260+
}
261+
262+
class IdentifierMetadataAnnotationImpl extends MetadataAnnotationImpl
263+
implements IdentifierMetadataAnnotation {
264+
@override
265+
final IdentifierImpl identifier;
266+
267+
@override
268+
RemoteInstanceKind get kind =>
269+
RemoteInstanceKind.identifierMetadataAnnotation;
270+
271+
IdentifierMetadataAnnotationImpl({required int id, required this.identifier})
272+
: super(id);
273+
274+
@override
275+
void serializeUncached(Serializer serializer) {
276+
super.serializeUncached(serializer);
277+
278+
identifier.serialize(serializer);
279+
}
280+
}
281+
282+
class ConstructorMetadataAnnotationImpl extends MetadataAnnotationImpl
283+
implements ConstructorMetadataAnnotation {
284+
@override
285+
final IdentifierImpl constructor;
286+
287+
@override
288+
final IdentifierImpl type;
289+
290+
@override
291+
RemoteInstanceKind get kind =>
292+
RemoteInstanceKind.constructorMetadataAnnotation;
293+
294+
ConstructorMetadataAnnotationImpl(
295+
{required int id, required this.constructor, required this.type})
296+
: super(id);
297+
298+
@override
299+
void serializeUncached(Serializer serializer) {
300+
super.serializeUncached(serializer);
301+
302+
constructor.serialize(serializer);
303+
type.serialize(serializer);
304+
}
305+
}
306+
256307
abstract class DeclarationImpl extends RemoteInstance implements Declaration {
257308
@override
258309
final IdentifierImpl identifier;
259310

260311
@override
261312
final LibraryImpl library;
262313

314+
@override
315+
final List<MetadataAnnotationImpl> metadata;
316+
263317
DeclarationImpl({
264318
required int id,
265319
required this.identifier,
266320
required this.library,
321+
required this.metadata,
267322
}) : super(id);
268323

269324
@override
@@ -272,6 +327,11 @@ abstract class DeclarationImpl extends RemoteInstance implements Declaration {
272327

273328
identifier.serialize(serializer);
274329
library.serialize(serializer);
330+
serializer.startList();
331+
for (MetadataAnnotationImpl annotation in metadata) {
332+
annotation.serialize(serializer);
333+
}
334+
serializer.endList();
275335
}
276336
}
277337

@@ -293,6 +353,7 @@ class ParameterDeclarationImpl extends DeclarationImpl
293353
required super.id,
294354
required super.identifier,
295355
required super.library,
356+
required super.metadata,
296357
required this.isNamed,
297358
required this.isRequired,
298359
required this.type,
@@ -322,6 +383,9 @@ class FunctionTypeParameterImpl extends RemoteInstance
322383
@override
323384
final bool isRequired;
324385

386+
@override
387+
final List<MetadataAnnotationImpl> metadata;
388+
325389
@override
326390
final String? name;
327391

@@ -335,6 +399,7 @@ class FunctionTypeParameterImpl extends RemoteInstance
335399
required int id,
336400
required this.isNamed,
337401
required this.isRequired,
402+
required this.metadata,
338403
required this.name,
339404
required this.type,
340405
}) : super(id);
@@ -345,6 +410,12 @@ class FunctionTypeParameterImpl extends RemoteInstance
345410

346411
serializer.addBool(isNamed);
347412
serializer.addBool(isRequired);
413+
414+
serializer.startList();
415+
for (MetadataAnnotationImpl annotation in metadata) {
416+
annotation.serialize(serializer);
417+
}
418+
serializer.endList();
348419
serializer.addNullableString(name);
349420
type.serialize(serializer);
350421
}
@@ -368,6 +439,7 @@ class TypeParameterDeclarationImpl extends DeclarationImpl
368439
required super.id,
369440
required super.identifier,
370441
required super.library,
442+
required super.metadata,
371443
required this.bound,
372444
});
373445

@@ -424,6 +496,7 @@ class FunctionDeclarationImpl extends DeclarationImpl
424496
required super.id,
425497
required super.identifier,
426498
required super.library,
499+
required super.metadata,
427500
required this.isAbstract,
428501
required this.isExternal,
429502
required this.isGetter,
@@ -481,6 +554,7 @@ class MethodDeclarationImpl extends FunctionDeclarationImpl
481554
required super.id,
482555
required super.identifier,
483556
required super.library,
557+
required super.metadata,
484558
// Function fields.
485559
required super.isAbstract,
486560
required super.isExternal,
@@ -518,6 +592,7 @@ class ConstructorDeclarationImpl extends MethodDeclarationImpl
518592
required super.id,
519593
required super.identifier,
520594
required super.library,
595+
required super.metadata,
521596
// Function fields.
522597
required super.isAbstract,
523598
required super.isExternal,
@@ -565,6 +640,7 @@ class VariableDeclarationImpl extends DeclarationImpl
565640
required super.id,
566641
required super.identifier,
567642
required super.library,
643+
required super.metadata,
568644
required this.isExternal,
569645
required this.isFinal,
570646
required this.isLate,
@@ -596,6 +672,7 @@ class FieldDeclarationImpl extends VariableDeclarationImpl
596672
required super.id,
597673
required super.identifier,
598674
required super.library,
675+
required super.metadata,
599676
// Variable fields.
600677
required super.isExternal,
601678
required super.isFinal,
@@ -630,6 +707,7 @@ abstract class ParameterizedTypeDeclarationImpl extends DeclarationImpl
630707
required super.id,
631708
required super.identifier,
632709
required super.library,
710+
required super.metadata,
633711
required this.typeParameters,
634712
});
635713

@@ -695,6 +773,7 @@ class ClassDeclarationImpl extends ParameterizedTypeDeclarationImpl
695773
required super.id,
696774
required super.identifier,
697775
required super.library,
776+
required super.metadata,
698777
// TypeDeclaration fields.
699778
required super.typeParameters,
700779
// ClassDeclaration fields.
@@ -762,6 +841,7 @@ class EnumDeclarationImpl extends ParameterizedTypeDeclarationImpl
762841
required super.id,
763842
required super.identifier,
764843
required super.library,
844+
required super.metadata,
765845
// TypeDeclaration fields.
766846
required super.typeParameters,
767847
// EnumDeclaration fields.
@@ -799,6 +879,7 @@ class EnumValueDeclarationImpl extends DeclarationImpl
799879
required super.id,
800880
required super.identifier,
801881
required super.library,
882+
required super.metadata,
802883
required this.definingEnum,
803884
});
804885

@@ -836,6 +917,7 @@ class MixinDeclarationImpl extends ParameterizedTypeDeclarationImpl
836917
required super.id,
837918
required super.identifier,
838919
required super.library,
920+
required super.metadata,
839921
// TypeDeclaration fields.
840922
required super.typeParameters,
841923
// MixinDeclaration fields.
@@ -878,6 +960,7 @@ class TypeAliasDeclarationImpl extends ParameterizedTypeDeclarationImpl
878960
required super.id,
879961
required super.identifier,
880962
required super.library,
963+
required super.metadata,
881964
// TypeDeclaration fields.
882965
required super.typeParameters,
883966
// TypeAlias fields.
@@ -899,18 +982,29 @@ class LibraryImpl extends RemoteInstance implements Library {
899982
@override
900983
final LanguageVersionImpl languageVersion;
901984

985+
@override
986+
final List<MetadataAnnotationImpl> metadata;
987+
902988
@override
903989
final Uri uri;
904990

905991
LibraryImpl(
906-
{required int id, required this.languageVersion, required this.uri})
992+
{required int id,
993+
required this.languageVersion,
994+
required this.metadata,
995+
required this.uri})
907996
: super(id);
908997

909998
@override
910999
void serializeUncached(Serializer serializer) {
9111000
super.serializeUncached(serializer);
9121001

9131002
languageVersion.serialize(serializer);
1003+
serializer.startList();
1004+
for (MetadataAnnotationImpl annotation in metadata) {
1005+
annotation.serialize(serializer);
1006+
}
1007+
serializer.endList();
9141008
serializer.addUri(uri);
9151009
}
9161010
}

pkg/_fe_analyzer_shared/lib/src/macros/executor/remote_instance.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,15 @@ class RemoteInstanceImpl extends RemoteInstance {
101101
enum RemoteInstanceKind {
102102
classDeclaration,
103103
constructorDeclaration,
104+
constructorMetadataAnnotation,
104105
enumDeclaration,
105106
enumValueDeclaration,
106107
fieldDeclaration,
107108
functionDeclaration,
108109
functionTypeAnnotation,
109110
functionTypeParameter,
110111
identifier,
112+
identifierMetadataAnnotation,
111113
identifierResolver,
112114
introspectableClassDeclaration,
113115
introspectableEnumDeclaration,

0 commit comments

Comments
 (0)