Index: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/TypeResolverVisitor.java |
diff --git a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/TypeResolverVisitor.java b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/TypeResolverVisitor.java |
index b9bd7f5dc24eb94b138085e06e2a00483b123dd8..8bc7792f0999151e1e7e638d6fa587a00ff98f81 100644 |
--- a/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/TypeResolverVisitor.java |
+++ b/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/TypeResolverVisitor.java |
@@ -37,6 +37,7 @@ import com.google.dart.engine.ast.NodeList; |
import com.google.dart.engine.ast.PrefixedIdentifier; |
import com.google.dart.engine.ast.SimpleFormalParameter; |
import com.google.dart.engine.ast.SimpleIdentifier; |
+import com.google.dart.engine.ast.SuperExpression; |
import com.google.dart.engine.ast.TypeArgumentList; |
import com.google.dart.engine.ast.TypeName; |
import com.google.dart.engine.ast.VariableDeclaration; |
@@ -96,6 +97,11 @@ public class TypeResolverVisitor extends ScopedVisitor { |
private Type dynamicType; |
/** |
+ * The flag specifying if currently visited class references 'super' expression. |
+ */ |
+ private boolean hasReferenceToSuper; |
+ |
+ /** |
* Initialize a newly created visitor to resolve the nodes in a compilation unit. |
* |
* @param library the library containing the compilation unit being resolved |
@@ -154,6 +160,7 @@ public class TypeResolverVisitor extends ScopedVisitor { |
@Override |
public Void visitClassDeclaration(ClassDeclaration node) { |
+ hasReferenceToSuper = false; |
super.visitClassDeclaration(node); |
ClassElementImpl classElement = getClassElement(node.getName()); |
InterfaceType superclassType = null; |
@@ -174,6 +181,7 @@ public class TypeResolverVisitor extends ScopedVisitor { |
} |
} |
classElement.setSupertype(superclassType); |
+ classElement.setHasReferenceToSuper(hasReferenceToSuper); |
} |
resolve(classElement, node.getWithClause(), node.getImplementsClause()); |
return null; |
@@ -222,16 +230,6 @@ public class TypeResolverVisitor extends ScopedVisitor { |
return null; |
} |
-// @Override |
-// public Void visitFunctionExpression(FunctionExpression node) { |
-// super.visitFunctionExpression(node); |
-// ExecutableElementImpl element = (ExecutableElementImpl) node.getElement(); |
-// FunctionTypeImpl type = new FunctionTypeImpl(element); |
-// setTypeInformation(type, null, element.getParameters()); |
-// element.setType(type); |
-// return null; |
-// } |
- |
@Override |
public Void visitDefaultFormalParameter(DefaultFormalParameter node) { |
super.visitDefaultFormalParameter(node); |
@@ -270,6 +268,16 @@ public class TypeResolverVisitor extends ScopedVisitor { |
return null; |
} |
+// @Override |
+// public Void visitFunctionExpression(FunctionExpression node) { |
+// super.visitFunctionExpression(node); |
+// ExecutableElementImpl element = (ExecutableElementImpl) node.getElement(); |
+// FunctionTypeImpl type = new FunctionTypeImpl(element); |
+// setTypeInformation(type, null, element.getParameters()); |
+// element.setType(type); |
+// return null; |
+// } |
+ |
@Override |
public Void visitFunctionDeclaration(FunctionDeclaration node) { |
super.visitFunctionDeclaration(node); |
@@ -341,6 +349,12 @@ public class TypeResolverVisitor extends ScopedVisitor { |
} |
@Override |
+ public Void visitSuperExpression(SuperExpression node) { |
+ hasReferenceToSuper = true; |
+ return super.visitSuperExpression(node); |
+ } |
+ |
+ @Override |
public Void visitTypeName(TypeName node) { |
super.visitTypeName(node); |
Identifier typeName = node.getName(); |