| Index: pkg/compiler/lib/src/js_backend/backend.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
|
| index e0311003aa1ea7cc2d8f6b729899b67a1b3e0e45..fbcbb0f49d601ea04a8f45557114bdc9e1c390ff 100644
|
| --- a/pkg/compiler/lib/src/js_backend/backend.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/backend.dart
|
| @@ -2313,8 +2313,7 @@ class JavaScriptBackend extends Backend {
|
| */
|
| bool matchesMirrorsMetaTarget(Element element) {
|
| if (metaTargetsUsed.isEmpty) return false;
|
| - for (Link link = element.metadata; !link.isEmpty; link = link.tail) {
|
| - MetadataAnnotation metadata = link.head;
|
| + for (MetadataAnnotation metadata in element.metadata) {
|
| // TODO(kasperl): It would be nice if we didn't have to resolve
|
| // all metadata but only stuff that potentially would match one
|
| // of the used meta targets.
|
| @@ -2625,7 +2624,7 @@ class JavaScriptBackend extends Backend {
|
| bool hasForceInline = false;
|
| bool hasNoThrows = false;
|
| bool hasNoSideEffects = false;
|
| - for (MetadataAnnotation metadata in element.metadata) {
|
| + for (MetadataAnnotation metadata in element.implementation.metadata) {
|
| metadata.ensureResolved(compiler);
|
| ConstantValue constantValue =
|
| compiler.constants.getConstantValue(metadata.constant);
|
| @@ -2894,19 +2893,21 @@ class Annotations {
|
| /// Returns `true` if [element] is annotated with [annotationClass].
|
| bool _hasAnnotation(Element element, ClassElement annotationClass) {
|
| if (annotationClass == null) return false;
|
| - for (Link<MetadataAnnotation> link = element.metadata;
|
| - !link.isEmpty;
|
| - link = link.tail) {
|
| - ConstantValue value =
|
| - compiler.constants.getConstantValue(link.head.constant);
|
| - if (value.isConstructedObject) {
|
| - ConstructedConstantValue constructedConstant = value;
|
| - if (constructedConstant.type.element == annotationClass) {
|
| - return true;
|
| + return compiler.withCurrentElement(element, () {
|
| + for (MetadataAnnotation metadata in element.metadata) {
|
| + assert(invariant(metadata, metadata.constant != null,
|
| + message: "Unevaluated metadata constant."));
|
| + ConstantValue value =
|
| + compiler.constants.getConstantValue(metadata.constant);
|
| + if (value.isConstructedObject) {
|
| + ConstructedConstantValue constructedConstant = value;
|
| + if (constructedConstant.type.element == annotationClass) {
|
| + return true;
|
| + }
|
| }
|
| }
|
| - }
|
| - return false;
|
| + return false;
|
| + });
|
| }
|
| }
|
|
|
|
|