55import 'dart:io' show Directory, Platform;
66import 'package:front_end/src/fasta/builder/builder.dart' ;
77import 'package:front_end/src/fasta/kernel/kernel_builder.dart' ;
8- import 'package:front_end/src/fasta/kernel/kernel_library_builder.dart' ;
9- import 'package:front_end/src/fasta/source/source_library_builder.dart' ;
10- import 'package:front_end/src/fasta/source/source_loader.dart' ;
118import 'package:front_end/src/testing/id.dart' show ActualData, Id;
129import 'package:front_end/src/testing/features.dart' ;
1310import 'package:front_end/src/testing/id_testing.dart'
@@ -70,6 +67,9 @@ class Tags {
7067 static const String clsTypeParameters = 'cls-type-params' ;
7168 static const String clsSupertype = 'cls-supertype' ;
7269 static const String clsInterfaces = 'cls-interfaces' ;
70+
71+ static const String memberName = 'member-name' ;
72+ static const String memberTypeParameters = 'member-type-params' ;
7373}
7474
7575class ExtensionsDataExtractor extends CfeDataExtractor <Features > {
@@ -79,45 +79,41 @@ class ExtensionsDataExtractor extends CfeDataExtractor<Features> {
7979
8080 @override
8181 Features computeClassValue (Id id, Class cls) {
82- SourceLoader loader = compilerResult.kernelTargetForTesting.loader;
83- KernelLibraryBuilder builder =
84- loader.builders[cls.enclosingLibrary.importUri];
85- DeclarationBuilder <TypeBuilder > libraryBuilder = builder.libraryDeclaration;
86- ClassBuilder clsBuilder = libraryBuilder.members[cls.name];
87- if (clsBuilder.isExtension) {
88- Features features = new Features ();
89- features[Tags .builderName] = clsBuilder.name;
90- if (clsBuilder.typeVariables != null ) {
91- for (TypeVariableBuilder typeVariable in clsBuilder.typeVariables) {
92- features.addElement (Tags .builderTypeParameters,
93- typeVariableBuilderToText (typeVariable));
94- }
82+ ClassBuilder clsBuilder = lookupClassBuilder (compilerResult, cls);
83+ if (! clsBuilder.isExtension) {
84+ return null ;
85+ }
86+ Features features = new Features ();
87+ features[Tags .builderName] = clsBuilder.name;
88+ if (clsBuilder.typeVariables != null ) {
89+ for (TypeVariableBuilder typeVariable in clsBuilder.typeVariables) {
90+ features.addElement (Tags .builderTypeParameters,
91+ typeVariableBuilderToText (typeVariable));
9592 }
93+ }
9694
97- features[Tags .builderSupertype] = clsBuilder.supertype? .name;
98- if (clsBuilder.interfaces != null ) {
99- for (TypeBuilder superinterface in clsBuilder.interfaces) {
100- features.addElement (Tags .builderInterfaces, superinterface.name);
101- }
95+ features[Tags .builderSupertype] = clsBuilder.supertype? .name;
96+ if (clsBuilder.interfaces != null ) {
97+ for (TypeBuilder superinterface in clsBuilder.interfaces) {
98+ features.addElement (Tags .builderInterfaces, superinterface.name);
10299 }
103- if (clsBuilder.onTypes != null ) {
104- for ( TypeBuilder onType in clsBuilder.onTypes) {
105- features. addElement ( Tags .builderOnTypes, typeBuilderToText (onType));
106- }
100+ }
101+ if ( clsBuilder.onTypes != null ) {
102+ for ( TypeBuilder onType in clsBuilder.onTypes) {
103+ features. addElement ( Tags .builderOnTypes, typeBuilderToText (onType));
107104 }
105+ }
108106
109- features[Tags .clsName] = cls.name;
110- for (TypeParameter typeParameter in cls.typeParameters) {
111- features.addElement (
112- Tags .clsTypeParameters, typeParameterToText (typeParameter));
113- }
114- features[Tags .clsSupertype] = cls.supertype? .classNode? .name;
115- for (Supertype superinterface in cls.implementedTypes) {
116- features.addElement (Tags .clsInterfaces, superinterface.classNode.name);
117- }
118- return features;
107+ features[Tags .clsName] = cls.name;
108+ for (TypeParameter typeParameter in cls.typeParameters) {
109+ features.addElement (
110+ Tags .clsTypeParameters, typeParameterToText (typeParameter));
119111 }
120- return null ;
112+ features[Tags .clsSupertype] = cls.supertype? .classNode? .name;
113+ for (Supertype superinterface in cls.implementedTypes) {
114+ features.addElement (Tags .clsInterfaces, superinterface.classNode.name);
115+ }
116+ return features;
121117 }
122118
123119 @override
@@ -127,6 +123,31 @@ class ExtensionsDataExtractor extends CfeDataExtractor<Features> {
127123
128124 @override
129125 Features computeMemberValue (Id id, Member member) {
130- return null ;
126+ if (member.enclosingClass == null ) {
127+ return null ;
128+ }
129+ ClassBuilder clsBuilder =
130+ lookupClassBuilder (compilerResult, member.enclosingClass);
131+ if (! clsBuilder.isExtension) {
132+ return null ;
133+ }
134+ MemberBuilder memberBuilder = lookupMemberBuilder (compilerResult, member);
135+ Features features = new Features ();
136+ features[Tags .builderName] = memberBuilder.name;
137+ if (memberBuilder is ProcedureBuilder &&
138+ memberBuilder.typeVariables != null ) {
139+ for (TypeVariableBuilder typeVariable in memberBuilder.typeVariables) {
140+ features.addElement (Tags .builderTypeParameters,
141+ typeVariableBuilderToText (typeVariable));
142+ }
143+ }
144+ features[Tags .memberName] = getMemberName (member);
145+ if (member.function != null ) {
146+ for (TypeParameter typeParameter in member.function.typeParameters) {
147+ features.addElement (
148+ Tags .memberTypeParameters, typeParameterToText (typeParameter));
149+ }
150+ }
151+ return features;
131152 }
132153}
0 commit comments