[cfe] Include phase-specific source in macro application test
Change-Id: I91b655170adaa567679a872ed6fe32f587b99c00
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/247550
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
index 7805bbb..a86795c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/macro/macro.dart
@@ -104,21 +104,60 @@
Map<SourceLibraryBuilder, LibraryMacroApplicationData> libraryData = {};
Map<SourceLibraryBuilder, String> libraryTypesResult = {};
Map<SourceLibraryBuilder, String> libraryDefinitionResult = {};
+
Map<SourceClassBuilder, List<macro.MacroExecutionResult>> classTypesResults =
{};
+
Map<SourceClassBuilder, List<macro.MacroExecutionResult>>
classDeclarationsResults = {};
+ Map<SourceClassBuilder, List<String>> classDeclarationsSources = {};
+
Map<SourceClassBuilder, List<macro.MacroExecutionResult>>
classDefinitionsResults = {};
+
Map<MemberBuilder, List<macro.MacroExecutionResult>> memberTypesResults = {};
+ Map<MemberBuilder, List<String>> memberTypesSources = {};
+
Map<MemberBuilder, List<macro.MacroExecutionResult>>
memberDeclarationsResults = {};
+ Map<MemberBuilder, List<String>> memberDeclarationsSources = {};
+
Map<MemberBuilder, List<macro.MacroExecutionResult>>
memberDefinitionsResults = {};
List<ApplicationDataForTesting> typesApplicationOrder = [];
List<ApplicationDataForTesting> declarationsApplicationOrder = [];
List<ApplicationDataForTesting> definitionApplicationOrder = [];
+
+ void registerTypesResults(
+ Builder builder, List<macro.MacroExecutionResult> results) {
+ if (builder is SourceClassBuilder) {
+ (classTypesResults[builder] ??= []).addAll(results);
+ } else {
+ (memberTypesResults[builder as MemberBuilder] ??= []).addAll(results);
+ }
+ }
+
+ void registerDeclarationsResult(
+ Builder builder, macro.MacroExecutionResult result, String source) {
+ if (builder is SourceClassBuilder) {
+ (classDeclarationsResults[builder] ??= []).add(result);
+ (classDeclarationsSources[builder] ??= []).add(source);
+ } else {
+ (memberDeclarationsResults[builder as MemberBuilder] ??= []).add(result);
+ (memberDeclarationsSources[builder] ??= []).add(source);
+ }
+ }
+
+ void registerDefinitionsResults(
+ Builder builder, List<macro.MacroExecutionResult> results) {
+ if (builder is SourceClassBuilder) {
+ (classDefinitionsResults[builder] ??= []).addAll(results);
+ } else {
+ (memberDefinitionsResults[builder as MemberBuilder] ??= [])
+ .addAll(results);
+ }
+ }
}
class ApplicationDataForTesting {
@@ -347,12 +386,7 @@
}
if (retainDataForTesting) {
- Builder builder = applicationData.builder;
- if (builder is SourceClassBuilder) {
- dataForTesting?.classTypesResults[builder] = results;
- } else {
- dataForTesting?.memberTypesResults[builder as MemberBuilder] = results;
- }
+ dataForTesting?.registerTypesResults(applicationData.builder, results);
}
return results;
}
@@ -429,6 +463,10 @@
if (result.isNotEmpty) {
String source = _macroExecutor.buildAugmentationLibrary(
[result], _resolveIdentifier, _inferOmittedType);
+ if (retainDataForTesting) {
+ dataForTesting?.registerDeclarationsResult(
+ applicationData.builder, result, source);
+ }
SourceLibraryBuilder augmentationLibrary = await applicationData
.libraryBuilder
.createAugmentationLibrary(source);
@@ -518,13 +556,8 @@
}
}
if (retainDataForTesting) {
- Builder builder = applicationData.builder;
- if (builder is SourceClassBuilder) {
- dataForTesting?.classDefinitionsResults[builder] = results;
- } else {
- dataForTesting?.memberDefinitionsResults[builder as MemberBuilder] =
- results;
- }
+ dataForTesting?.registerDefinitionsResults(
+ applicationData.builder, results);
}
return results;
}
diff --git a/pkg/front_end/test/macros/application/data/tests/data_class.dart b/pkg/front_end/test/macros/application/data/tests/data_class.dart
index e794e81..70c6e50 100644
--- a/pkg/front_end/test/macros/application/data/tests/data_class.dart
+++ b/pkg/front_end/test/macros/application/data/tests/data_class.dart
@@ -27,11 +27,17 @@
@DataClass()
/*class: Foo:
+declarations:
+import 'dart:core' as prefix0;
+
augment class Foo {
const Foo({required this.bar, required this.baz});
-external int get hashCode;
-external bool operator ==(Object other);
-external String toString();
+external prefix0.int get hashCode;
+external prefix0.bool operator ==(prefix0.Object other);
+external prefix0.String toString();
+}
+definitions:
+augment class Foo {
augment int hashCode() {
return bar.hashCode ^ baz.hashCode;
}
diff --git a/pkg/front_end/test/macros/application/data/tests/declarations.dart b/pkg/front_end/test/macros/application/data/tests/declarations.dart
index 7ba5b39..77b616e 100644
--- a/pkg/front_end/test/macros/application/data/tests/declarations.dart
+++ b/pkg/front_end/test/macros/application/data/tests/declarations.dart
@@ -31,154 +31,224 @@
import 'package:macro/macro.dart';
-/*member: topLevelFunction1:
-void topLevelFunction1GeneratedMethod_() {}
-*/
@FunctionDeclarationsMacro1()
+/*member: topLevelFunction1:
+declarations:
+
+void topLevelFunction1GeneratedMethod_() {}
+
+*/
void topLevelFunction1() {}
-/*member: topLevelFunction2:
-void topLevelFunction2GeneratedMethod_e() {}
-*/
@FunctionDeclarationsMacro1()
+/*member: topLevelFunction2:
+declarations:
+
+void topLevelFunction2GeneratedMethod_e() {}
+
+*/
external void topLevelFunction2();
-/*member: topLevelField1:
-void topLevelField1GeneratedMethod_() {}
-*/
@VariableDeclarationsMacro1()
+/*member: topLevelField1:
+declarations:
+
+void topLevelField1GeneratedMethod_() {}
+
+*/
int? topLevelField1;
-/*member: topLevelField2:
-void topLevelField2GeneratedMethod_e() {}
-*/
@VariableDeclarationsMacro1()
+/*member: topLevelField2:
+declarations:
+
+void topLevelField2GeneratedMethod_e() {}
+
+*/
external int? topLevelField2;
-/*member: topLevelField3:
-void topLevelField3GeneratedMethod_f() {}
-*/
@VariableDeclarationsMacro1()
+/*member: topLevelField3:
+declarations:
+
+void topLevelField3GeneratedMethod_f() {}
+
+*/
final int? topLevelField3 = null;
-/*member: topLevelField4:
-void topLevelField4GeneratedMethod_l() {}
-*/
@VariableDeclarationsMacro1()
+/*member: topLevelField4:
+declarations:
+
+void topLevelField4GeneratedMethod_l() {}
+
+*/
late int? topLevelField4;
-/*member: topLevelGetter1:
-void topLevelGetter1GeneratedMethod_g() {}
-*/
@FunctionDeclarationsMacro1()
+/*member: topLevelGetter1:
+declarations:
+
+void topLevelGetter1GeneratedMethod_g() {}
+
+*/
int? get topLevelGetter1 => null;
-/*member: topLevelSetter1=:
-void topLevelSetter1GeneratedMethod_s() {}
-*/
@FunctionDeclarationsMacro1()
+/*member: topLevelSetter1=:
+declarations:
+
+void topLevelSetter1GeneratedMethod_s() {}
+
+*/
void set topLevelSetter1(int? value) {}
+@ClassDeclarationsMacro1()
+@ClassDeclarationsMacro2()
/*class: Class1:
+declarations:
+
void Class1Introspection() {
print("constructors='','redirect','fact'");
print("fields='instanceField1','instanceField2','instanceField3'");
print("methods='instanceMethod1','instanceGetter1','[]','Class1_GeneratedMethod_','Class1_redirectGeneratedMethod_f','Class1_factGeneratedMethod_f','instanceSetter1','Class1_GeneratedMethod_','Class1_redirectGeneratedMethod_f','Class1_factGeneratedMethod_f'");
}
+
+
void Class1GeneratedMethod_() {}
+
*/
-@ClassDeclarationsMacro1()
-@ClassDeclarationsMacro2()
class Class1 {
+ @ConstructorDeclarationsMacro1()
/*member: Class1.:
+declarations:
+
augment class Class1 {
void Class1_GeneratedMethod_() {}
-}*/
- @ConstructorDeclarationsMacro1()
+}
+*/
Class1();
+ @ConstructorDeclarationsMacro1()
/*member: Class1.redirect:
+declarations:
+
augment class Class1 {
void Class1_redirectGeneratedMethod_f() {}
-}*/
- @ConstructorDeclarationsMacro1()
+}
+*/
factory Class1.redirect() = Class1;
+ @ConstructorDeclarationsMacro1()
/*member: Class1.fact:
+declarations:
+
augment class Class1 {
void Class1_factGeneratedMethod_f() {}
-}*/
- @ConstructorDeclarationsMacro1()
+}
+*/
factory Class1.fact() => new Class1();
- /*member: Class1.instanceMethod1:
-void Class1_instanceMethod1GeneratedMethod_() {}
-*/
@MethodDeclarationsMacro1()
+ /*member: Class1.instanceMethod1:
+declarations:
+
+void Class1_instanceMethod1GeneratedMethod_() {}
+
+*/
void instanceMethod1() {}
- /*member: Class1.instanceGetter1:
-void Class1_instanceGetter1GeneratedMethod_g() {}
-*/
@MethodDeclarationsMacro1()
+ /*member: Class1.instanceGetter1:
+declarations:
+
+void Class1_instanceGetter1GeneratedMethod_g() {}
+
+*/
int? get instanceGetter1 => null;
- /*member: Class1.instanceSetter1=:
-void Class1_instanceSetter1GeneratedMethod_s() {}
-*/
@MethodDeclarationsMacro1()
+ /*member: Class1.instanceSetter1=:
+declarations:
+
+void Class1_instanceSetter1GeneratedMethod_s() {}
+
+*/
void set instanceSetter1(int? value) {}
- /*member: Class1.[]:
-void Class1_operatorGeneratedMethod_o() {}
-*/
@MethodDeclarationsMacro1()
+ /*member: Class1.[]:
+declarations:
+
+void Class1_operatorGeneratedMethod_o() {}
+
+*/
int operator [](int i) => i;
- /*member: Class1.instanceField1:
-void Class1_instanceField1GeneratedMethod_() {}
-*/
@FieldDeclarationsMacro1()
+ /*member: Class1.instanceField1:
+declarations:
+
+void Class1_instanceField1GeneratedMethod_() {}
+
+*/
int? instanceField1;
- /*member: Class1.instanceField2:
-void Class1_instanceField2GeneratedMethod_f() {}
-*/
@FieldDeclarationsMacro1()
+ /*member: Class1.instanceField2:
+declarations:
+
+void Class1_instanceField2GeneratedMethod_f() {}
+
+*/
final int? instanceField2 = null;
- /*member: Class1.instanceField3:
-void Class1_instanceField3GeneratedMethod_fl() {}
-*/
@FieldDeclarationsMacro1()
+ /*member: Class1.instanceField3:
+declarations:
+
+void Class1_instanceField3GeneratedMethod_fl() {}
+
+*/
late final int? instanceField3 = null;
}
+@ClassDeclarationsMacro1()
+@ClassDeclarationsMacro2()
/*class: Class2:
+declarations:
+
void Class2Introspection() {
print("constructors=");
print("fields='instanceField1'");
print("methods='instanceMethod1'");
}
+
+
void Class2GeneratedMethod_a() {}
+
*/
-@ClassDeclarationsMacro1()
-@ClassDeclarationsMacro2()
abstract class Class2 {
- /*member: Class2.instanceMethod1:
-void Class2_instanceMethod1GeneratedMethod_a() {}
-*/
@MethodDeclarationsMacro1()
+ /*member: Class2.instanceMethod1:
+declarations:
+
+void Class2_instanceMethod1GeneratedMethod_a() {}
+
+*/
void instanceMethod1();
- /*member: Class2.instanceField1:
-void Class2_instanceField1GeneratedMethod_() {}
-*/
@FieldDeclarationsMacro1()
+ /*member: Class2.instanceField1:
+declarations:
+
+void Class2_instanceField1GeneratedMethod_() {}
+
+*/
abstract int? instanceField1;
}
diff --git a/pkg/front_end/test/macros/application/data/tests/import_conflict.dart b/pkg/front_end/test/macros/application/data/tests/import_conflict.dart
index 908c3c1..9d4d622 100644
--- a/pkg/front_end/test/macros/application/data/tests/import_conflict.dart
+++ b/pkg/front_end/test/macros/application/data/tests/import_conflict.dart
@@ -24,6 +24,7 @@
@ImportConflictMacro()
/*member: function:
+definitions:
augment void function(int i, FutureOr<Random> f, JsonCodec c, ) {
var prefix = int;
var prefix0 = FutureOr<Random>;
diff --git a/pkg/front_end/test/macros/application/data/tests/layers.dart b/pkg/front_end/test/macros/application/data/tests/layers.dart
index 69afb5f..a526269 100644
--- a/pkg/front_end/test/macros/application/data/tests/layers.dart
+++ b/pkg/front_end/test/macros/application/data/tests/layers.dart
@@ -11,8 +11,11 @@
@Macro2()
/*class: Class:
+declarations:
+
augment class Class {
hasMacro() => true;
-}*/
+}
+*/
class Class {}
diff --git a/pkg/front_end/test/macros/application/data/tests/parameters.dart b/pkg/front_end/test/macros/application/data/tests/parameters.dart
index 75d6e1c..20f83ff 100644
--- a/pkg/front_end/test/macros/application/data/tests/parameters.dart
+++ b/pkg/front_end/test/macros/application/data/tests/parameters.dart
@@ -27,6 +27,7 @@
import 'package:macro/macro.dart';
/*member: topLevelFunction1:
+definitions:
augment void topLevelFunction1(int a, ) {
throw 42;
}*/
@@ -34,6 +35,7 @@
external void topLevelFunction1(int a);
/*member: topLevelFunction2:
+definitions:
augment void topLevelFunction2(int a, int b, ) {
throw 42;
}*/
@@ -41,6 +43,7 @@
external void topLevelFunction2(int a, int b);
/*member: topLevelFunction3:
+definitions:
augment void topLevelFunction3(int a, [int? b, ]) {
throw 42;
}*/
@@ -48,6 +51,7 @@
external void topLevelFunction3(int a, [int? b]);
/*member: topLevelFunction4:
+definitions:
augment void topLevelFunction4(int a, {int? b, int? c, }) {
throw 42;
}*/
diff --git a/pkg/front_end/test/macros/application/data/tests/sequence.dart b/pkg/front_end/test/macros/application/data/tests/sequence.dart
index 0af4289..0318ffd 100644
--- a/pkg/front_end/test/macros/application/data/tests/sequence.dart
+++ b/pkg/front_end/test/macros/application/data/tests/sequence.dart
@@ -29,41 +29,65 @@
import 'package:macro/macro.dart';
+@SequenceMacro(0)
/*class: Class1:
+declarations:
+
augment class Class1 {
method() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class1 {}
-/*class: Class2:
-augment class Class2 {
- method() {}
- method1() {}
-}*/
@SequenceMacro(0)
@SequenceMacro(1)
+/*class: Class2:
+declarations:
+
+augment class Class2 {
+ method() {}
+}
+
+
+augment class Class2 {
+ method1() {}
+}
+*/
class Class2 {}
+@SequenceMacro(0)
/*class: Class3:
+declarations:
+
augment class Class3 {
method1() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class3 {
@SequenceMacro(1)
method() {}
}
-/*class: Class4:
-augment class Class4 {
- method1() {}
- method3() {}
- method4() {}
-}*/
@SequenceMacro(0)
@SequenceMacro(1)
@SequenceMacro(2)
+/*class: Class4:
+declarations:
+
+augment class Class4 {
+ method1() {}
+}
+
+
+augment class Class4 {
+ method3() {}
+}
+
+
+augment class Class4 {
+ method4() {}
+}
+*/
class Class4 {
@SequenceMacro(3)
method() {}
@@ -72,79 +96,112 @@
method2() {}
}
+@SequenceMacro(0)
/*class: Class5c:
+declarations:
+
augment class Class5c {
method2() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class5c extends Class5b {}
+@SequenceMacro(0)
/*class: Class5b:
+declarations:
+
augment class Class5b {
method1() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class5b extends Class5a {}
+@SequenceMacro(0)
/*class: Class5a:
+declarations:
+
augment class Class5a {
method() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class5a {}
+@SequenceMacro(0)
/*class: Class6d:
+declarations:
+
augment class Class6d {
method2() {}
-}*/
-@SequenceMacro(0)
+}
+*/
abstract class Class6d implements Class6c, Class6b {}
+@SequenceMacro(0)
/*class: Class6c:
+declarations:
+
augment class Class6c {
method() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class6c {}
+@SequenceMacro(0)
/*class: Class6b:
+declarations:
+
augment class Class6b {
method1() {}
-}*/
-@SequenceMacro(0)
+}
+*/
abstract class Class6b implements Class6a {}
+@SequenceMacro(0)
/*class: Class6a:
+declarations:
+
augment class Class6a {
method() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class6a {}
+@SequenceMacro(0)
/*class: Class7d:
+declarations:
+
augment class Class7d {
method2() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class7d with Class7b, Class7c {}
+@SequenceMacro(0)
/*class: Class7c:
+declarations:
+
augment class Class7c {
method() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class7c {}
+@SequenceMacro(0)
/*class: Class7b:
+declarations:
+
augment class Class7b {
method1() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class7b with Class7a {}
+@SequenceMacro(0)
/*class: Class7a:
+declarations:
+
augment class Class7a {
method() {}
-}*/
-@SequenceMacro(0)
+}
+*/
class Class7a {}
diff --git a/pkg/front_end/test/macros/application/data/tests/subtypes.dart b/pkg/front_end/test/macros/application/data/tests/subtypes.dart
index edd0f6e..d62139a 100644
--- a/pkg/front_end/test/macros/application/data/tests/subtypes.dart
+++ b/pkg/front_end/test/macros/application/data/tests/subtypes.dart
@@ -54,8 +54,11 @@
class D2 {}
/*member: topLevelFunction1:
+declarations:
+
void topLevelFunction1GeneratedMethod_es() {}
+definitions:
augment A topLevelFunction1(A a, ) {
print('isExactly=true');
print('isSubtype=true');
@@ -66,8 +69,11 @@
external A topLevelFunction1(A a);
/*member: topLevelFunction2:
+declarations:
+
void topLevelFunction2GeneratedMethod_s() {}
+definitions:
augment B2 topLevelFunction2(B1 a, ) {
print('isExactly=false');
print('isSubtype=true');
@@ -78,8 +84,11 @@
external B2 topLevelFunction2(B1 a);
/*member: topLevelFunction3:
+declarations:
+
void topLevelFunction3GeneratedMethod_() {}
+definitions:
augment C2 topLevelFunction3(C1 a, ) {
print('isExactly=false');
print('isSubtype=false');
@@ -90,8 +99,11 @@
external C2 topLevelFunction3(C1 a);
/*member: topLevelFunction4:
+declarations:
+
void topLevelFunction4GeneratedMethod_() {}
+definitions:
augment D2 topLevelFunction4(D1 a, ) {
print('isExactly=false');
print('isSubtype=false');
diff --git a/pkg/front_end/test/macros/application/data/tests/supertypes.dart b/pkg/front_end/test/macros/application/data/tests/supertypes.dart
index f319df3..b236bc0 100644
--- a/pkg/front_end/test/macros/application/data/tests/supertypes.dart
+++ b/pkg/front_end/test/macros/application/data/tests/supertypes.dart
@@ -35,6 +35,7 @@
import 'package:macro/macro.dart';
/*class: A:
+definitions:
augment class A {
augment String getSuperClass() {
return "Object";
@@ -46,6 +47,7 @@
}
/*class: B:
+definitions:
augment class B {
augment String getSuperClass() {
return "A";
@@ -57,6 +59,7 @@
}
/*class: M:
+definitions:
augment class M {
augment String getSuperClass() {
return "Object";
@@ -68,6 +71,7 @@
}
/*class: C:
+definitions:
augment class C {
augment String getSuperClass() {
return "A";
diff --git a/pkg/front_end/test/macros/application/data/tests/to_string.dart b/pkg/front_end/test/macros/application/data/tests/to_string.dart
index 5f483c7..5cba268 100644
--- a/pkg/front_end/test/macros/application/data/tests/to_string.dart
+++ b/pkg/front_end/test/macros/application/data/tests/to_string.dart
@@ -12,11 +12,14 @@
@ToStringMacro()
/*class: A:
+declarations:
+
augment class A {
toString() {
return "A(a=${a},b=${b})";
}
-}*/
+}
+*/
class A {
var a;
var b;
@@ -24,11 +27,14 @@
@ToStringMacro()
/*class: B:
+declarations:
+
augment class B {
toString() {
return "B(c=${c},d=${d},e=${e})";
}
-}*/
+}
+*/
class B {
var c, d;
var e;
diff --git a/pkg/front_end/test/macros/application/data/tests/type_annotations.dart b/pkg/front_end/test/macros/application/data/tests/type_annotations.dart
index b6a734c..3b5a13a 100644
--- a/pkg/front_end/test/macros/application/data/tests/type_annotations.dart
+++ b/pkg/front_end/test/macros/application/data/tests/type_annotations.dart
@@ -46,6 +46,7 @@
import 'package:macro/macro.dart';
/*member: topLevelFunction1:
+definitions:
augment void topLevelFunction1() {
throw 42;
}*/
@@ -53,6 +54,7 @@
external void topLevelFunction1();
/*member: topLevelFunction2:
+definitions:
augment dynamic topLevelFunction2() {
throw 42;
}*/
@@ -60,6 +62,7 @@
external dynamic topLevelFunction2();
/*member: topLevelFunction3:
+definitions:
augment int topLevelFunction3() {
throw 42;
}*/
@@ -67,6 +70,7 @@
external int topLevelFunction3();
/*member: topLevelFunction4:
+definitions:
augment dynamic topLevelFunction4() {
throw 42;
}*/
@@ -74,6 +78,7 @@
external topLevelFunction4();
/*member: topLevelFunction5:
+definitions:
augment Random topLevelFunction5() {
throw 42;
}*/
@@ -81,6 +86,7 @@
external math.Random topLevelFunction5();
/*member: topLevelFunction6:
+definitions:
augment List<int> topLevelFunction6() {
throw 42;
}*/
@@ -88,6 +94,7 @@
external List<int> topLevelFunction6();
/*member: topLevelFunction7:
+definitions:
augment Map<Random, List<int>> topLevelFunction7() {
throw 42;
}*/
@@ -95,6 +102,7 @@
external Map<math.Random, List<int>> topLevelFunction7();
/*member: topLevelFunction8:
+definitions:
augment Map<int?, String>? topLevelFunction8() {
throw 42;
}*/
diff --git a/pkg/front_end/test/macros/application/data/tests/types.dart b/pkg/front_end/test/macros/application/data/tests/types.dart
index 6db0cf4..f6c2702 100644
--- a/pkg/front_end/test/macros/application/data/tests/types.dart
+++ b/pkg/front_end/test/macros/application/data/tests/types.dart
@@ -32,6 +32,7 @@
import 'package:macro/macro.dart';
/*member: topLevelFunction1:
+types:
class topLevelFunction1GeneratedClass {
external void method();
}*/
@@ -39,6 +40,7 @@
void topLevelFunction1() {}
/*member: topLevelFunction2:
+types:
class topLevelFunction2GeneratedClass {
external dynamic method();
}*/
@@ -46,6 +48,7 @@
dynamic topLevelFunction2() {}
/*member: topLevelFunction3:
+types:
class topLevelFunction3GeneratedClass {
external int method();
}*/
@@ -53,6 +56,7 @@
int topLevelFunction3() => 0;
/*member: topLevelFunction4:
+types:
class topLevelFunction4GeneratedClass {
external FunctionTypesMacro1? method();
}*/
@@ -60,6 +64,7 @@
FunctionTypesMacro1? topLevelFunction4() => null;
/*member: topLevelFunction5:
+types:
class topLevelFunction5GeneratedClass {
external dynamic method();
}*/
diff --git a/pkg/front_end/test/macros/application/macro_application_test.dart b/pkg/front_end/test/macros/application/macro_application_test.dart
index 1ce3c47..cf08dda 100644
--- a/pkg/front_end/test/macros/application/macro_application_test.dart
+++ b/pkg/front_end/test/macros/application/macro_application_test.dart
@@ -202,54 +202,82 @@
.dataForTesting!
.macroApplicationData;
StringBuffer sb = new StringBuffer();
- List<DeclarationCode> mergedClassAugmentations = [];
+
+ StringBuffer typesSources = new StringBuffer();
+ List<DeclarationCode> mergedClassTypes = [];
for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
in macroApplicationData.classTypesResults.entries) {
if (entry.key.cls == cls) {
for (MacroExecutionResult result in entry.value) {
if (result.libraryAugmentations.isNotEmpty) {
- sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+ if (result.libraryAugmentations.isNotEmpty) {
+ typesSources.write(
+ '\n${codeToString(result.libraryAugmentations.single)}');
+ }
+ mergedClassTypes
+ .addAll(result.classAugmentations[entry.key.name] ?? const []);
}
- mergedClassAugmentations
- .addAll(result.classAugmentations[entry.key.name] ?? const []);
}
}
}
- for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
- in macroApplicationData.classDeclarationsResults.entries) {
+ if (mergedClassTypes.isNotEmpty) {
+ typesSources.write('\naugment class ${cls.name} {');
+ for (var result in mergedClassTypes) {
+ typesSources.write('\n${codeToString(result)}');
+ }
+ typesSources.write('\n}');
+ }
+ if (typesSources.isNotEmpty) {
+ sb.write('types:');
+ sb.write(typesSources);
+ }
+
+ StringBuffer declarationsSources = new StringBuffer();
+ for (MapEntry<SourceClassBuilder, List<String>> entry
+ in macroApplicationData.classDeclarationsSources.entries) {
if (entry.key.cls == cls) {
- for (MacroExecutionResult result in entry.value) {
- if (result.libraryAugmentations.isNotEmpty) {
- sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+ for (String result in entry.value) {
+ if (result.isNotEmpty) {
+ declarationsSources.write('\n${result}');
}
- mergedClassAugmentations
- .addAll(result.classAugmentations[entry.key.name] ?? const []);
}
}
}
+ if (declarationsSources.isNotEmpty) {
+ sb.write('declarations:');
+ sb.write(declarationsSources);
+ }
+
+ StringBuffer definitionsSources = new StringBuffer();
+ List<DeclarationCode> mergedClassDefinitions = [];
for (MapEntry<SourceClassBuilder, List<MacroExecutionResult>> entry
in macroApplicationData.classDefinitionsResults.entries) {
if (entry.key.cls == cls) {
for (MacroExecutionResult result in entry.value) {
if (result.libraryAugmentations.isNotEmpty) {
- sb.write('\n${codeToString(result.libraryAugmentations.single)}');
+ definitionsSources
+ .write('\n${codeToString(result.libraryAugmentations.single)}');
}
- mergedClassAugmentations
+ mergedClassDefinitions
.addAll(result.classAugmentations[entry.key.name] ?? const []);
}
}
}
- if (mergedClassAugmentations.isNotEmpty) {
- sb.write('\naugment class ${cls.name} {');
- for (var result in mergedClassAugmentations) {
- sb.write('\n${codeToString(result)}');
+ if (mergedClassDefinitions.isNotEmpty) {
+ definitionsSources.write('\naugment class ${cls.name} {');
+ for (var result in mergedClassDefinitions) {
+ definitionsSources.write('\n${codeToString(result)}');
}
- sb.write('\n}');
+ definitionsSources.write('\n}');
}
+ if (definitionsSources.isNotEmpty) {
+ sb.write('definitions:');
+ sb.write(definitionsSources);
+ }
+
if (sb.isNotEmpty) {
Id id = new ClassId(cls.name);
- registry.registerValue(
- cls.fileUri, cls.fileOffset, id, sb.toString(), cls);
+ registry.registerValue(cls.fileUri, cls.fileOffset, id, '\n$sb', cls);
}
}
@@ -266,69 +294,64 @@
.dataForTesting!
.macroApplicationData;
StringBuffer sb = StringBuffer();
- List<DeclarationCode> mergedAugmentations = [];
+
+ StringBuffer typesSources = new StringBuffer();
for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
in macroApplicationData.memberTypesResults.entries) {
if (_isMember(entry.key, member)) {
for (MacroExecutionResult result in entry.value) {
if (result.libraryAugmentations.isNotEmpty) {
- sb.write('\n${codeToString(result.libraryAugmentations.single)}');
- }
- if (member.enclosingClass != null) {
- mergedAugmentations.addAll(
- result.classAugmentations[member.enclosingClass!.name] ??
- const []);
+ if (result.libraryAugmentations.isNotEmpty) {
+ typesSources.write(
+ '\n${codeToString(result.libraryAugmentations.single)}');
+ }
}
}
}
}
- for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
- in macroApplicationData.memberDeclarationsResults.entries) {
+ if (typesSources.isNotEmpty) {
+ sb.write('types:');
+ sb.write(typesSources);
+ }
+
+ StringBuffer declarationsSources = new StringBuffer();
+ for (MapEntry<MemberBuilder, List<String>> entry
+ in macroApplicationData.memberDeclarationsSources.entries) {
if (_isMember(entry.key, member)) {
- for (MacroExecutionResult result in entry.value) {
- if (result.libraryAugmentations.isNotEmpty) {
- sb.write('\n${codeToString(result.libraryAugmentations.single)}');
- }
- if (member.enclosingClass != null) {
- mergedAugmentations.addAll(
- result.classAugmentations[member.enclosingClass!.name] ??
- const []);
+ for (String result in entry.value) {
+ if (result.isNotEmpty) {
+ declarationsSources.write('\n${result}');
}
}
}
}
+ if (declarationsSources.isNotEmpty) {
+ sb.write('declarations:');
+ sb.write(declarationsSources);
+ }
+
+ StringBuffer definitionsSources = new StringBuffer();
for (MapEntry<MemberBuilder, List<MacroExecutionResult>> entry
in macroApplicationData.memberDefinitionsResults.entries) {
if (_isMember(entry.key, member)) {
for (MacroExecutionResult result in entry.value) {
if (result.libraryAugmentations.isNotEmpty) {
- sb.write('\n${codeToString(result.libraryAugmentations.single)}');
- }
- if (member.enclosingClass != null) {
- mergedAugmentations.addAll(
- result.classAugmentations[member.enclosingClass!.name] ??
- const []);
+ definitionsSources
+ .write('\n${codeToString(result.libraryAugmentations.single)}');
}
}
}
}
- if (mergedAugmentations.isNotEmpty) {
- if (member.enclosingClass != null) {
- sb.write('\naugment class ${member.enclosingClass!.name} {');
- }
- for (DeclarationCode augmentation in mergedAugmentations) {
- sb.write('\n${codeToString(augmentation)}');
- }
- if (member.enclosingClass != null) {
- sb.write('\n}');
- }
+ if (definitionsSources.isNotEmpty) {
+ sb.write('definitions:');
+ sb.write(definitionsSources);
}
if (sb.isNotEmpty) {
Id id = computeMemberId(member);
MemberBuilder memberBuilder =
lookupMemberBuilder(testResultData.compilerResult, member)!;
registry.registerValue(memberBuilder.fileUri!, memberBuilder.charOffset,
- id, sb.toString(), member);
+ id, '\n$sb', member);
}
}
}