Chromium Code Reviews| 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..de06cab7ca979d5d849a46856dd7eb20ee358bd0 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,11 +37,13 @@ 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; |
| import com.google.dart.engine.ast.VariableDeclarationList; |
| import com.google.dart.engine.ast.WithClause; |
| +import com.google.dart.engine.ast.visitor.RecursiveASTVisitor; |
| import com.google.dart.engine.element.ClassElement; |
| import com.google.dart.engine.element.Element; |
| import com.google.dart.engine.element.ExecutableElement; |
| @@ -174,6 +176,7 @@ public class TypeResolverVisitor extends ScopedVisitor { |
| } |
| } |
| classElement.setSupertype(superclassType); |
| + classElement.setReferencesSuper(isReferencesSuper(node)); |
| } |
| resolve(classElement, node.getWithClause(), node.getImplementsClause()); |
| return null; |
| @@ -222,16 +225,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); |
| @@ -249,6 +242,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 visitFieldFormalParameter(FieldFormalParameter node) { |
| super.visitFieldFormalParameter(node); |
| @@ -662,6 +665,21 @@ public class TypeResolverVisitor extends ScopedVisitor { |
| } |
| /** |
| + * @return {@code true} if the given class declaration references 'super' |
| + */ |
| + private boolean isReferencesSuper(ClassDeclaration node) { |
|
Brian Wilkerson
2013/05/09 20:41:37
I suspect that it would be more efficient to set a
scheglov
2013/05/09 21:23:50
Done.
|
| + final boolean result[] = {false}; |
| + node.accept(new RecursiveASTVisitor<Void>() { |
| + @Override |
| + public Void visitSuperExpression(SuperExpression node) { |
| + result[0] = true; |
| + return null; |
| + } |
| + }); |
| + return result[0]; |
| + } |
| + |
| + /** |
| * Record that the static type of the given node is the given type. |
| * |
| * @param expression the node whose type is to be recorded |