Index: pkg/compiler/lib/src/js_emitter/metadata_collector.dart |
diff --git a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart |
index 47c3484977f50633ba813cdf1af9aa6c03727136..7243791c5faaeb71d5f742058977bd8edba60a0a 100644 |
--- a/pkg/compiler/lib/src/js_emitter/metadata_collector.dart |
+++ b/pkg/compiler/lib/src/js_emitter/metadata_collector.dart |
@@ -7,11 +7,10 @@ library dart2js.js_emitter.metadata_collector; |
import 'package:js_ast/src/precedence.dart' as js_precedence; |
import '../common.dart'; |
-import '../compiler.dart' show Compiler; |
import '../constants/values.dart'; |
import '../elements/resolution_types.dart' |
show ResolutionDartType, ResolutionTypedefType; |
-import '../deferred_load.dart' show OutputUnit; |
+import '../deferred_load.dart' show DeferredLoadTask, OutputUnit; |
import '../elements/elements.dart' |
show |
ClassElement, |
@@ -27,8 +26,12 @@ import '../elements/elements.dart' |
ParameterElement; |
import '../js/js.dart' as jsAst; |
import '../js/js.dart' show js; |
-import '../js_backend/js_backend.dart' |
- show JavaScriptBackend, TypeVariableCodegenAnalysis; |
+import '../js_backend/backend.dart' show RuntimeTypesEncoder; |
+import '../js_backend/constant_handler_javascript.dart'; |
+import '../js_backend/mirrors_data.dart'; |
+import '../js_backend/type_variable_handler.dart' |
+ show TypeVariableCodegenAnalysis; |
+import '../options.dart'; |
import 'code_emitter_task.dart' show Emitter; |
@@ -135,8 +138,14 @@ class _MetadataList extends jsAst.DeferredExpression { |
} |
class MetadataCollector implements jsAst.TokenFinalizer { |
- final Compiler _compiler; |
+ final CompilerOptions _options; |
+ final DiagnosticReporter reporter; |
+ final DeferredLoadTask _deferredLoadTask; |
final Emitter _emitter; |
+ final JavaScriptConstantCompiler _constants; |
+ final TypeVariableCodegenAnalysis _typeVariableCodegenAnalysis; |
+ final MirrorsData _mirrorsData; |
+ final RuntimeTypesEncoder _rtiEncoder; |
/// A token for a list of expressions that represent metadata, parameter names |
/// and type variable types. |
@@ -160,34 +169,37 @@ class MetadataCollector implements jsAst.TokenFinalizer { |
Map<OutputUnit, Map<ResolutionDartType, _BoundMetadataEntry>> _typesMap = |
<OutputUnit, Map<ResolutionDartType, _BoundMetadataEntry>>{}; |
- MetadataCollector(this._compiler, this._emitter) { |
+ MetadataCollector( |
+ this._options, |
+ this.reporter, |
+ this._deferredLoadTask, |
+ this._emitter, |
+ this._constants, |
+ this._typeVariableCodegenAnalysis, |
+ this._mirrorsData, |
+ this._rtiEncoder) { |
_globalMetadataMap = new Map<String, _BoundMetadataEntry>(); |
} |
- JavaScriptBackend get _backend => _compiler.backend; |
- TypeVariableCodegenAnalysis get _typeVariableCodegenAnalysis => |
- _backend.typeVariableCodegenAnalysis; |
- DiagnosticReporter get reporter => _compiler.reporter; |
- |
jsAst.Fun buildLibraryMetadataFunction(LibraryElement element) { |
- if (!_backend.mirrorsData.mustRetainMetadata || |
- !_backend.mirrorsData.isLibraryReferencedFromMirrorSystem(element)) { |
+ if (!_mirrorsData.mustRetainMetadata || |
+ !_mirrorsData.isLibraryReferencedFromMirrorSystem(element)) { |
return null; |
} |
return _buildMetadataFunction(element); |
} |
jsAst.Fun buildClassMetadataFunction(ClassElement element) { |
- if (!_backend.mirrorsData.mustRetainMetadata || |
- !_backend.mirrorsData.isClassReferencedFromMirrorSystem(element)) { |
+ if (!_mirrorsData.mustRetainMetadata || |
+ !_mirrorsData.isClassReferencedFromMirrorSystem(element)) { |
return null; |
} |
return _buildMetadataFunction(element); |
} |
bool _mustEmitMetadataForMember(MemberElement element) { |
- return _backend.mirrorsData.mustRetainMetadata && |
- _backend.mirrorsData.isMemberReferencedFromMirrorSystem(element); |
+ return _mirrorsData.mustRetainMetadata && |
+ _mirrorsData.isMemberReferencedFromMirrorSystem(element); |
} |
jsAst.Fun buildFieldMetadataFunction(FieldElement element) { |
@@ -206,7 +218,7 @@ class MetadataCollector implements jsAst.TokenFinalizer { |
List<jsAst.Expression> metadata = <jsAst.Expression>[]; |
for (MetadataAnnotation annotation in element.metadata) { |
ConstantValue constant = |
- _backend.constants.getConstantValueForMetadata(annotation); |
+ _constants.getConstantValueForMetadata(annotation); |
if (constant == null) { |
reporter.internalError(annotation, 'Annotation value is null.'); |
} else { |
@@ -255,7 +267,7 @@ class MetadataCollector implements jsAst.TokenFinalizer { |
(targetParameterMap == null) ? element : targetParameterMap[element]; |
ConstantValue constant = (parameter == null) |
? null |
- : _backend.constants.getConstantValue(parameter.constant); |
+ : _constants.getConstantValue(parameter.constant); |
jsAst.Expression expression = (constant == null) |
? new jsAst.LiteralNull() |
: _emitter.constantReference(constant); |
@@ -299,8 +311,7 @@ class MetadataCollector implements jsAst.TokenFinalizer { |
} |
jsAst.Expression reifyMetadata(MetadataAnnotation annotation) { |
- ConstantValue constant = |
- _backend.constants.getConstantValueForMetadata(annotation); |
+ ConstantValue constant = _constants.getConstantValueForMetadata(annotation); |
if (constant == null) { |
reporter.internalError(annotation, 'Annotation value is null.'); |
return null; |
@@ -310,8 +321,7 @@ class MetadataCollector implements jsAst.TokenFinalizer { |
jsAst.Expression reifyType(ResolutionDartType type, |
{ignoreTypeVariables: false}) { |
- return reifyTypeForOutputUnit( |
- type, _compiler.deferredLoadTask.mainOutputUnit, |
+ return reifyTypeForOutputUnit(type, _deferredLoadTask.mainOutputUnit, |
ignoreTypeVariables: ignoreTypeVariables); |
} |
@@ -337,7 +347,7 @@ class MetadataCollector implements jsAst.TokenFinalizer { |
_MetadataEntry _addGlobalMetadata(jsAst.Node node) { |
String nameToKey(jsAst.Name name) => "${name.key}"; |
String printed = |
- jsAst.prettyPrint(node, _compiler, renamerForNames: nameToKey); |
+ jsAst.prettyPrint(node, _options, renamerForNames: nameToKey); |
return _globalMetadataMap.putIfAbsent(printed, () { |
return new _BoundMetadataEntry(node); |
}); |
@@ -346,12 +356,11 @@ class MetadataCollector implements jsAst.TokenFinalizer { |
jsAst.Expression _computeTypeRepresentation(ResolutionDartType type, |
{ignoreTypeVariables: false}) { |
jsAst.Expression representation = |
- _backend.rtiEncoder.getTypeRepresentation(type, (variable) { |
+ _rtiEncoder.getTypeRepresentation(_emitter, type, (variable) { |
if (ignoreTypeVariables) return new jsAst.LiteralNull(); |
return _typeVariableCodegenAnalysis.reifyTypeVariable(variable.element); |
}, (ResolutionTypedefType typedef) { |
- return _backend.mirrorsData |
- .isTypedefAccessibleByReflection(typedef.element); |
+ return _mirrorsData.isTypedefAccessibleByReflection(typedef.element); |
}); |
if (representation is jsAst.LiteralString) { |