| Index: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ResolverVisitor.java
|
| diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ResolverVisitor.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ResolverVisitor.java
|
| index b1bb4729f45a427bc44793022cff23a3be13a330..8af880a1aae6d7a591f5e09fb76d624958cd812b 100644
|
| --- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ResolverVisitor.java
|
| +++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/ResolverVisitor.java
|
| @@ -912,6 +912,11 @@ public class ResolverVisitor extends ScopedVisitor {
|
| protected void promote(Expression expression, Type potentialType) {
|
| VariableElement element = getPromotionStaticElement(expression);
|
| if (element != null) {
|
| + // may be mutated somewhere in closure
|
| + if (((VariableElementImpl) element).isPotentiallyMutatedInClosure()) {
|
| + return;
|
| + }
|
| + // prepare current variable type
|
| Type type = expression.getStaticType();
|
| // Declared type should not be "dynamic".
|
| if (type == null || type.isDynamic()) {
|
| @@ -1042,7 +1047,7 @@ public class ResolverVisitor extends ScopedVisitor {
|
| */
|
| private void clearTypePromotionsIfAccessedInScopeAndProtentiallyMutated(ASTNode target) {
|
| for (Element element : promoteManager.getPromotedElements()) {
|
| - if (((VariableElementImpl) element).isPotentiallyMutated()) {
|
| + if (((VariableElementImpl) element).isPotentiallyMutatedInScope()) {
|
| if (isVariableAccessedInClosure(element, target)) {
|
| promoteManager.setType(element, null);
|
| }
|
|
|