Skip to content

Commit b9bcfa7

Browse files
jakemac53Commit Queue
authored andcommitted
add Library and LanguageVersion classes, all declarations now have a library
Bug: dart-lang/language#2839 Change-Id: Id09b2da070302b67f7c9921f1ad8a6d91a129f77 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/311000 Reviewed-by: Bob Nystrom <[email protected]> Commit-Queue: Jake Macdonald <[email protected]>
1 parent 9ec1a84 commit b9bcfa7

File tree

13 files changed

+292
-3
lines changed

13 files changed

+292
-3
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ abstract interface class NamedStaticType implements StaticType {}
9696

9797
/// The interface for all declarations.
9898
abstract interface class Declaration {
99+
/// The library in which this declaration is defined.
100+
Library get library;
101+
99102
/// An identifier pointing to this named declaration.
100103
Identifier get identifier;
101104
}
@@ -346,3 +349,20 @@ abstract interface class RecordFieldDeclaration implements Declaration {
346349
/// The type of this field.
347350
TypeAnnotation get type;
348351
}
352+
353+
/// Introspection information for a Library.
354+
abstract interface class Library {
355+
/// The language version of this library.
356+
LanguageVersion get languageVersion;
357+
358+
/// The uri identifying this library.
359+
Uri get uri;
360+
}
361+
362+
/// The language version of a library, see
363+
/// https://dart.dev/guides/language/evolution#language-version-numbers.
364+
abstract interface class LanguageVersion {
365+
int get major;
366+
367+
int get minor;
368+
}

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

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class RecordFieldDeclarationImpl extends DeclarationImpl
165165
RecordFieldDeclarationImpl({
166166
required super.id,
167167
required super.identifier,
168+
required super.library,
168169
required this.name,
169170
required this.type,
170171
});
@@ -262,13 +263,23 @@ class OmittedTypeAnnotationImpl extends TypeAnnotationImpl
262263

263264
@override
264265
RemoteInstanceKind get kind => RemoteInstanceKind.omittedTypeAnnotation;
266+
267+
@override
268+
void serialize(Serializer serializer) => super.serialize(serializer);
265269
}
266270

267271
abstract class DeclarationImpl extends RemoteInstance implements Declaration {
268272
@override
269273
final IdentifierImpl identifier;
270274

271-
DeclarationImpl({required int id, required this.identifier}) : super(id);
275+
@override
276+
final LibraryImpl library;
277+
278+
DeclarationImpl({
279+
required int id,
280+
required this.identifier,
281+
required this.library,
282+
}) : super(id);
272283

273284
@override
274285
void serialize(Serializer serializer) {
@@ -277,6 +288,7 @@ abstract class DeclarationImpl extends RemoteInstance implements Declaration {
277288
if (serializationMode.isClient) return;
278289

279290
identifier.serialize(serializer);
291+
library.serialize(serializer);
280292
}
281293
}
282294

@@ -297,6 +309,7 @@ class ParameterDeclarationImpl extends DeclarationImpl
297309
ParameterDeclarationImpl({
298310
required super.id,
299311
required super.identifier,
312+
required super.library,
300313
required this.isNamed,
301314
required this.isRequired,
302315
required this.type,
@@ -375,6 +388,7 @@ class TypeParameterDeclarationImpl extends DeclarationImpl
375388
TypeParameterDeclarationImpl({
376389
required super.id,
377390
required super.identifier,
391+
required super.library,
378392
required this.bound,
379393
});
380394

@@ -432,6 +446,7 @@ class FunctionDeclarationImpl extends DeclarationImpl
432446
FunctionDeclarationImpl({
433447
required super.id,
434448
required super.identifier,
449+
required super.library,
435450
required this.isAbstract,
436451
required this.isExternal,
437452
required this.isGetter,
@@ -490,6 +505,7 @@ class MethodDeclarationImpl extends FunctionDeclarationImpl
490505
// Declaration fields.
491506
required super.id,
492507
required super.identifier,
508+
required super.library,
493509
// Function fields.
494510
required super.isAbstract,
495511
required super.isExternal,
@@ -528,6 +544,7 @@ class ConstructorDeclarationImpl extends MethodDeclarationImpl
528544
// Declaration fields.
529545
required super.id,
530546
required super.identifier,
547+
required super.library,
531548
// Function fields.
532549
required super.isAbstract,
533550
required super.isExternal,
@@ -576,6 +593,7 @@ class VariableDeclarationImpl extends DeclarationImpl
576593
VariableDeclarationImpl({
577594
required super.id,
578595
required super.identifier,
596+
required super.library,
579597
required this.isExternal,
580598
required this.isFinal,
581599
required this.isLate,
@@ -608,6 +626,7 @@ class FieldDeclarationImpl extends VariableDeclarationImpl
608626
// Declaration fields.
609627
required super.id,
610628
required super.identifier,
629+
required super.library,
611630
// Variable fields.
612631
required super.isExternal,
613632
required super.isFinal,
@@ -640,6 +659,7 @@ abstract class ParameterizedTypeDeclarationImpl extends DeclarationImpl
640659
ParameterizedTypeDeclarationImpl({
641660
required super.id,
642661
required super.identifier,
662+
required super.library,
643663
required this.typeParameters,
644664
});
645665

@@ -660,6 +680,7 @@ abstract class ParameterizedTypeDeclarationImpl extends DeclarationImpl
660680
/// TODO: remove this https://github.com/dart-lang/language/issues/3120
661681
mixin _IntrospectableType implements IntrospectableType {}
662682

683+
// ignore: missing_override_of_must_be_overridden
663684
class IntrospectableClassDeclarationImpl = ClassDeclarationImpl
664685
with _IntrospectableType
665686
implements IntrospectableClassDeclaration;
@@ -705,6 +726,7 @@ class ClassDeclarationImpl extends ParameterizedTypeDeclarationImpl
705726
// Declaration fields.
706727
required super.id,
707728
required super.identifier,
729+
required super.library,
708730
// TypeDeclaration fields.
709731
required super.typeParameters,
710732
// ClassDeclaration fields.
@@ -751,6 +773,7 @@ class ClassDeclarationImpl extends ParameterizedTypeDeclarationImpl
751773
/// TODO: remove this https://github.com/dart-lang/language/issues/3120
752774
mixin _IntrospectableEnum implements IntrospectableEnum {}
753775

776+
// ignore: missing_override_of_must_be_overridden
754777
class IntrospectableEnumDeclarationImpl = EnumDeclarationImpl
755778
with _IntrospectableEnum
756779
implements IntrospectableEnumDeclaration;
@@ -772,6 +795,7 @@ class EnumDeclarationImpl extends ParameterizedTypeDeclarationImpl
772795
// Declaration fields.
773796
required super.id,
774797
required super.identifier,
798+
required super.library,
775799
// TypeDeclaration fields.
776800
required super.typeParameters,
777801
// EnumDeclaration fields.
@@ -810,6 +834,7 @@ class EnumValueDeclarationImpl extends DeclarationImpl
810834
EnumValueDeclarationImpl({
811835
required super.id,
812836
required super.identifier,
837+
required super.library,
813838
required this.definingEnum,
814839
});
815840

@@ -823,6 +848,7 @@ class EnumValueDeclarationImpl extends DeclarationImpl
823848
}
824849
}
825850

851+
// ignore: missing_override_of_must_be_overridden
826852
class IntrospectableMixinDeclarationImpl = MixinDeclarationImpl
827853
with _IntrospectableType
828854
implements IntrospectableMixinDeclaration;
@@ -847,6 +873,7 @@ class MixinDeclarationImpl extends ParameterizedTypeDeclarationImpl
847873
// Declaration fields.
848874
required super.id,
849875
required super.identifier,
876+
required super.library,
850877
// TypeDeclaration fields.
851878
required super.typeParameters,
852879
// MixinDeclaration fields.
@@ -890,6 +917,7 @@ class TypeAliasDeclarationImpl extends ParameterizedTypeDeclarationImpl
890917
// Declaration fields.
891918
required super.id,
892919
required super.identifier,
920+
required super.library,
893921
// TypeDeclaration fields.
894922
required super.typeParameters,
895923
// TypeAlias fields.
@@ -905,3 +933,44 @@ class TypeAliasDeclarationImpl extends ParameterizedTypeDeclarationImpl
905933
aliasedType.serialize(serializer);
906934
}
907935
}
936+
937+
class LibraryImpl extends RemoteInstance implements Library {
938+
@override
939+
RemoteInstanceKind get kind => RemoteInstanceKind.library;
940+
941+
@override
942+
final LanguageVersionImpl languageVersion;
943+
944+
@override
945+
final Uri uri;
946+
947+
LibraryImpl(
948+
{required int id, required this.languageVersion, required this.uri})
949+
: super(id);
950+
951+
@override
952+
void serialize(Serializer serializer) {
953+
super.serialize(serializer);
954+
languageVersion.serialize(serializer);
955+
serializer.addString(uri.toString());
956+
}
957+
}
958+
959+
/// This class doesn't implement [RemoteInstance] as it is always attached to a
960+
/// [Library] and doesn't need its own kind or ID.
961+
class LanguageVersionImpl implements LanguageVersion, Serializable {
962+
@override
963+
final int major;
964+
965+
@override
966+
final int minor;
967+
968+
LanguageVersionImpl(this.major, this.minor);
969+
970+
@override
971+
void serialize(Serializer serializer) {
972+
serializer
973+
..addInt(major)
974+
..addInt(minor);
975+
}
976+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ abstract class RemoteInstance implements Serializable {
5656
/// They should then return immediately if [serializationMode] is
5757
/// [SerializationMode.client], so that only an ID is sent.
5858
@override
59+
@mustBeOverridden
5960
@mustCallSuper
6061
void serialize(Serializer serializer) {
6162
serializer.addInt(id);
@@ -86,6 +87,9 @@ class RemoteInstanceImpl extends RemoteInstance {
8687
this.instance,
8788
required this.kind,
8889
}) : super(id);
90+
91+
@override
92+
void serialize(Serializer serializer) => super.serialize(serializer);
8993
}
9094

9195
// The kinds of instances.
@@ -103,6 +107,7 @@ enum RemoteInstanceKind {
103107
introspectableClassDeclaration,
104108
introspectableEnumDeclaration,
105109
introspectableMixinDeclaration,
110+
library,
106111
methodDeclaration,
107112
mixinDeclaration,
108113
namedStaticType,

0 commit comments

Comments
 (0)