| OLD | NEW |
| 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 Loading... |
| 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 } |
| OLD | NEW |