Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Side by Side Diff: pkg/compiler/lib/src/kernel/kernel_strategy.dart

Issue 2836323002: Add more factory methods to FrontEndStrategy. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.kernel.frontend_strategy; 5 library dart2js.kernel.frontend_strategy;
6 6
7 import '../closure.dart';
7 import '../common.dart'; 8 import '../common.dart';
8 import '../common_elements.dart'; 9 import '../common_elements.dart';
10 import '../common/backend_api.dart';
11 import '../common/resolution.dart';
9 import '../common/tasks.dart'; 12 import '../common/tasks.dart';
13 import '../common/work.dart';
14 import '../elements/elements.dart';
15 import '../elements/entities.dart';
16 import '../elements/types.dart';
10 import '../environment.dart' as env; 17 import '../environment.dart' as env;
18 import '../enqueue.dart';
11 import '../frontend_strategy.dart'; 19 import '../frontend_strategy.dart';
20 import '../js_backend/backend.dart';
21 import '../js_backend/backend_usage.dart';
22 import '../js_backend/custom_elements_analysis.dart';
23 import '../js_backend/mirrors_analysis.dart';
24 import '../js_backend/mirrors_data.dart';
12 import '../js_backend/native_data.dart'; 25 import '../js_backend/native_data.dart';
26 import '../js_backend/no_such_method_registry.dart';
13 import '../library_loader.dart'; 27 import '../library_loader.dart';
14 import '../native/resolver.dart'; 28 import '../native/resolver.dart';
15 import '../serialization/task.dart'; 29 import '../serialization/task.dart';
16 import '../patch_parser.dart'; 30 import '../patch_parser.dart';
17 import '../resolved_uri_translator.dart'; 31 import '../resolved_uri_translator.dart';
32 import '../universe/world_builder.dart';
33 import '../universe/world_impact.dart';
34 import '../world.dart';
18 import 'element_map.dart'; 35 import 'element_map.dart';
19 36
20 /// Front end strategy that loads '.dill' files and builds a resolved element 37 /// Front end strategy that loads '.dill' files and builds a resolved element
21 /// model from kernel IR nodes. 38 /// model from kernel IR nodes.
22 class KernelFrontEndStrategy implements FrontEndStrategy { 39 class KernelFrontEndStrategy implements FrontEndStrategy {
23 KernelToElementMap elementMap; 40 KernelToElementMap elementMap;
24 41
25 KernelAnnotationProcessor _annotationProcesser; 42 KernelAnnotationProcessor _annotationProcesser;
26 43
27 KernelFrontEndStrategy(DiagnosticReporter reporter) 44 KernelFrontEndStrategy(DiagnosticReporter reporter)
(...skipping 20 matching lines...) Expand all
48 @override 65 @override
49 AnnotationProcessor get annotationProcesser => 66 AnnotationProcessor get annotationProcesser =>
50 _annotationProcesser ??= new KernelAnnotationProcessor(elementMap); 67 _annotationProcesser ??= new KernelAnnotationProcessor(elementMap);
51 68
52 @override 69 @override
53 NativeClassResolver createNativeClassResolver( 70 NativeClassResolver createNativeClassResolver(
54 NativeBasicData nativeBasicData) { 71 NativeBasicData nativeBasicData) {
55 return new NativeClassResolverImpl(elementMap.elementEnvironment, 72 return new NativeClassResolverImpl(elementMap.elementEnvironment,
56 elementMap.commonElements, nativeBasicData); 73 elementMap.commonElements, nativeBasicData);
57 } 74 }
75
76 NoSuchMethodResolver createNoSuchMethodResolver() {
77 return new KernelNoSuchMethodResolver(elementMap);
78 }
79
80 CustomElementsResolutionAnalysis createCustomElementsResolutionAnalysis(
81 NativeBasicData nativeBasicData,
82 BackendUsageBuilder backendUsageBuilder) {
83 return new CustomElementsResolutionAnalysisImpl();
84 }
85
86 MirrorsDataBuilder createMirrorsDataBuilder() {
87 return new MirrorsDataBuilderImpl();
88 }
89
90 MirrorsResolutionAnalysis createMirrorsResolutionAnalysis(
91 JavaScriptBackend backend) {
92 return new MirrorsResolutionAnalysisImpl();
93 }
94
95 RuntimeTypesNeedBuilder createRuntimeTypesNeedBuilder() {
96 return new RuntimeTypesNeedBuilderImpl();
97 }
98
99 ResolutionWorldBuilder createResolutionWorldBuilder(
100 NativeBasicData nativeBasicData,
101 SelectorConstraintsStrategy selectorConstraintsStrategy) {
102 return new KernelResolutionWorldBuilder(
103 elementMap, nativeBasicData, selectorConstraintsStrategy);
104 }
105
106 WorkItemBuilder createResolutionWorkItemBuilder(
107 ImpactTransformer impactTransformer) {
108 return new KernelWorkItemBuilder(elementMap, impactTransformer);
109 }
58 } 110 }
111
112 class KernelWorkItemBuilder implements WorkItemBuilder {
113 final KernelToElementMap _elementMap;
114 final ImpactTransformer _impactTransformer;
115
116 KernelWorkItemBuilder(this._elementMap, this._impactTransformer);
117
118 @override
119 WorkItem createWorkItem(MemberEntity entity) {
120 return new KernelWorkItem(_elementMap, _impactTransformer, entity);
121 }
122 }
123
124 class KernelWorkItem implements ResolutionWorkItem {
125 final KernelToElementMap _elementMap;
126 final ImpactTransformer _impactTransformer;
127 final MemberEntity element;
128
129 KernelWorkItem(this._elementMap, this._impactTransformer, this.element);
130
131 @override
132 WorldImpact run() {
133 ResolutionImpact impact = _elementMap.computeWorldImpact(element);
134 return _impactTransformer.transformResolutionImpact(impact);
135 }
136 }
137
138 /// Mock implementation of [RuntimeTypesNeedBuilder].
139 class RuntimeTypesNeedBuilderImpl implements RuntimeTypesNeedBuilder {
140 @override
141 void registerClassUsingTypeVariableExpression(ClassEntity cls) {}
142
143 @override
144 RuntimeTypesNeed computeRuntimeTypesNeed(
145 ResolutionWorldBuilder resolutionWorldBuilder,
146 ClosedWorld closedWorld,
147 DartTypes types,
148 CommonElements commonElements,
149 BackendUsage backendUsage,
150 {bool enableTypeAssertions}) {
151 throw new UnimplementedError(
152 'RuntimeTypesNeedBuilderImpl.computeRuntimeTypesNeed');
153 }
154
155 @override
156 void registerRtiDependency(ClassEntity element, ClassEntity dependency) {}
157 }
158
159 /// Mock implementation of [MirrorsDataImpl].
160 class MirrorsDataBuilderImpl extends MirrorsDataImpl {
161 MirrorsDataBuilderImpl() : super(null, null, null);
162
163 @override
164 void registerUsedMember(MemberEntity member) {}
165
166 @override
167 void computeMembersNeededForReflection(
168 ResolutionWorldBuilder worldBuilder, ClosedWorld closedWorld) {}
169
170 @override
171 void maybeMarkClosureAsNeededForReflection(
172 ClosureClassElement globalizedElement,
173 FunctionElement callFunction,
174 FunctionElement function) {}
175
176 @override
177 void registerConstSymbol(String name) {}
178
179 @override
180 void registerMirrorUsage(
181 Set<String> symbols, Set<Element> targets, Set<Element> metaTargets) {}
182 }
183
184 /// Mock implementation of [CustomElementsResolutionAnalysis].
185 class CustomElementsResolutionAnalysisImpl
186 implements CustomElementsResolutionAnalysis {
187 @override
188 CustomElementsAnalysisJoin get join {
189 throw new UnimplementedError('CustomElementsResolutionAnalysisImpl.join');
190 }
191
192 @override
193 WorldImpact flush() {
194 // TODO(johnniwinther): Implement this.
195 return const WorldImpact();
196 }
197
198 @override
199 void registerStaticUse(MemberEntity element) {}
200
201 @override
202 void registerInstantiatedClass(ClassEntity classElement) {}
203
204 @override
205 void registerTypeLiteral(DartType type) {}
206 }
207
208 /// Mock implementation of [MirrorsResolutionAnalysis].
209 class MirrorsResolutionAnalysisImpl implements MirrorsResolutionAnalysis {
210 @override
211 void onQueueEmpty(Enqueuer enqueuer, Iterable<ClassEntity> recentClasses) {}
212
213 @override
214 MirrorsCodegenAnalysis close() {
215 throw new UnimplementedError('MirrorsResolutionAnalysisImpl.close');
216 }
217
218 @override
219 void onResolutionComplete() {}
220 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/runtime_types.dart ('k') | pkg/compiler/lib/src/resolution/resolution_strategy.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698