Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Unified Diff: compiler/java/com/google/dart/compiler/resolver/Resolver.java

Issue 11280135: Issue 6836. Using undeclared identifier in static context is now warning. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: compiler/java/com/google/dart/compiler/resolver/Resolver.java
diff --git a/compiler/java/com/google/dart/compiler/resolver/Resolver.java b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
index 88b06e4a809b4e916536e34b866ca9553b952117..130e1ecdd96d8d60916d45e18a0edf8630c65b62 100644
--- a/compiler/java/com/google/dart/compiler/resolver/Resolver.java
+++ b/compiler/java/com/google/dart/compiler/resolver/Resolver.java
@@ -5,11 +5,13 @@
package com.google.dart.compiler.resolver;
import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.google.dart.compiler.DartCompilationPhase;
import com.google.dart.compiler.DartCompilerContext;
import com.google.dart.compiler.ErrorCode;
+import com.google.dart.compiler.Source;
import com.google.dart.compiler.ast.ASTNodes;
import com.google.dart.compiler.ast.ASTVisitor;
import com.google.dart.compiler.ast.DartArrayLiteral;
@@ -877,13 +879,51 @@ public class Resolver {
}
public VariableElement resolveVariable(DartVariable x, Modifiers modifiers) {
+ final DartIdentifier nameNode = x.getName();
+ final String name = nameNode.getName();
// Visit the initializer first.
- resolve(x.getValue());
- VariableElement element = Elements.variableElement(enclosingElement, x, x.getVariableName(), modifiers);
- getContext().declare(
- recordElement(x, element),
+ DartExpression value = x.getValue();
+ if (value != null) {
+ // It is a compile-time error if e refers to the name v or the name v=.
+ value.accept(new ASTVisitor<Void>() {
+ @Override
+ public Void visitIdentifier(DartIdentifier node) {
+ // ignore cases when name is used with some qualifier
+ if (node.getParent() instanceof DartPropertyAccess) {
+ DartPropertyAccess x = (DartPropertyAccess) node.getParent();
+ if (x.getName() == node) {
+ return null;
+ }
+ }
+ if (node.getParent() instanceof DartMethodInvocation) {
+ DartMethodInvocation x = (DartMethodInvocation) node.getParent();
+ if (x.getFunctionName() == node) {
+ return null;
+ }
+ }
+ // TODO(scheglov) remove this after http://code.google.com/p/dart/issues/detail?id=6869
+ {
+ Source source = node.getSourceInfo().getSource();
+ if (Elements.isSourceName(source, "dart://json/json.dart/json.dart")) {
+ return null;
+ }
+ }
+ if (Objects.equal(node.getName(), name)) {
+ onError(node, ResolverErrorCode.VARIABLE_REFERENCES_SAME_NAME_IN_INITIALIZER, name,
+ name);
+ node.markResolutionAlreadyReportedThatTheMethodCouldNotBeFound();
+ }
+ return null;
+ }
+ });
+ // do resolve
+ resolve(value);
+ }
+ // declare variable
+ VariableElement element = Elements.variableElement(enclosingElement, x, name, modifiers);
+ getContext().declare(recordElement(x, element),
ResolverErrorCode.DUPLICATE_LOCAL_VARIABLE_ERROR);
- recordElement(x.getName(), element);
+ recordElement(nameNode, element);
return element;
}
@@ -1265,8 +1305,10 @@ public class Resolver {
}
}
if (isStaticOrFactoryContextOrInitializer(x) && !isQualifier) {
- onError(x, ResolverErrorCode.CANNOT_BE_RESOLVED, name);
- x.markResolutionAlreadyReportedThatTheMethodCouldNotBeFound();
+ if (!x.isResolutionAlreadyReportedThatTheMethodCouldNotBeFound()) {
+ onError(x, TypeErrorCode.CANNOT_BE_RESOLVED, name);
+ x.markResolutionAlreadyReportedThatTheMethodCouldNotBeFound();
+ }
}
} else if (x.getParent() instanceof DartComment) {
} else {

Powered by Google App Engine
This is Rietveld 408576698