Index: pkg/compiler/lib/src/resolution/resolution.dart |
diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart |
index 0676ba66c21f9a3d7eb36b9cfc922aac72e042be..14068d2e860f82b96243349aaed6e132868001e0 100644 |
--- a/pkg/compiler/lib/src/resolution/resolution.dart |
+++ b/pkg/compiler/lib/src/resolution/resolution.dart |
@@ -418,20 +418,23 @@ class ResolverTask extends CompilerTask { |
} |
void resolveRedirectionChain( |
- ConstructorElementX constructor, Spannable node) { |
- ConstructorElementX target = constructor; |
+ ConstructorElement constructor, Spannable node) { |
+ ConstructorElement target = constructor; |
InterfaceType targetType; |
List<Element> seen = new List<Element>(); |
bool isMalformed = false; |
// Follow the chain of redirections and check for cycles. |
while (target.isRedirectingFactory || target.isPatched) { |
- if (target.effectiveTargetInternal != null) { |
+ if (target.hasEffectiveTarget) { |
// We found a constructor that already has been processed. |
- targetType = target.effectiveTargetType; |
+ // TODO(johnniwinther): Should `effectiveTargetType` be part of the |
+ // interface? |
+ targetType = target.computeEffectiveTargetType( |
+ target.enclosingClass.thisType); |
assert(invariant(target, targetType != null, |
message: 'Redirection target type has not been computed for ' |
'$target')); |
- target = target.effectiveTargetInternal; |
+ target = target.effectiveTarget; |
break; |
} |