| Index: pkg/compiler/lib/src/resolution/resolution_strategy.dart
|
| diff --git a/pkg/compiler/lib/src/resolution/resolution_strategy.dart b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
|
| index 98222e2b3d4407b423c6b27e680af21a11fc1b34..6449c155088bcc3002bc976d93ae6e684db58dae 100644
|
| --- a/pkg/compiler/lib/src/resolution/resolution_strategy.dart
|
| +++ b/pkg/compiler/lib/src/resolution/resolution_strategy.dart
|
| @@ -108,7 +108,8 @@ class ResolutionFrontEndStrategy extends FrontendStrategyBase
|
| new ResolutionNoSuchMethodResolver();
|
|
|
| MirrorsDataBuilder createMirrorsDataBuilder() {
|
| - return new MirrorsDataImpl(_compiler, _compiler.options, commonElements);
|
| + return new MirrorsDataImpl(
|
| + _compiler, _compiler.options, elementEnvironment, commonElements);
|
| }
|
|
|
| MirrorsResolutionAnalysis createMirrorsResolutionAnalysis(
|
| @@ -664,19 +665,47 @@ class _CompilerElementEnvironment implements ElementEnvironment {
|
| }
|
|
|
| @override
|
| - Iterable<ConstantValue> getMemberMetadata(covariant MemberElement element) {
|
| + Iterable<ConstantValue> getMemberMetadata(covariant MemberElement element,
|
| + {bool includeParameterMetadata: false}) {
|
| List<ConstantValue> values = <ConstantValue>[];
|
| + values.addAll(_getMetadataOf(element));
|
| + if (includeParameterMetadata) {
|
| + if (element.isFunction || element.isConstructor || element.isSetter) {
|
| + MethodElement function = element.implementation;
|
| + function.functionSignature.forEachParameter(
|
| + (parameter) => values.addAll(_getMetadataOf(parameter)));
|
| + }
|
| + }
|
| + return values;
|
| + }
|
| +
|
| + @override
|
| + Iterable<ConstantValue> getLibraryMetadata(covariant LibraryElement element) {
|
| + return _getMetadataOf(element);
|
| + }
|
| +
|
| + @override
|
| + Iterable<ConstantValue> getClassMetadata(covariant ClassElement element) {
|
| + return _getMetadataOf(element);
|
| + }
|
| +
|
| + @override
|
| + Iterable<ConstantValue> getTypedefMetadata(covariant TypedefElement element) {
|
| + return _getMetadataOf(element);
|
| + }
|
| +
|
| + Iterable<ConstantValue> _getMetadataOf(Element element) {
|
| + List<ConstantValue> constants = <ConstantValue>[];
|
| _compiler.reporter.withCurrentElement(element, () {
|
| for (MetadataAnnotation metadata in element.implementation.metadata) {
|
| metadata.ensureResolved(_compiler.resolution);
|
| assert(metadata.constant != null,
|
| failedAt(metadata, "Unevaluated metadata constant."));
|
| - ConstantValue value =
|
| - _compiler.constants.getConstantValue(metadata.constant);
|
| - values.add(value);
|
| + constants.add(
|
| + _compiler.backend.constants.getConstantValue(metadata.constant));
|
| }
|
| });
|
| - return values;
|
| + return constants;
|
| }
|
|
|
| @override
|
|
|