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

Unified Diff: editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/resolver/TypeResolverVisitor.java

Issue 25505006: Report BUILT_IN_IDENTIFIER_AS_TYPE for formal parameters. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Report BUILT_IN_IDENTIFIER_AS_TYPE in type resolver. Created 7 years, 2 months 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
« no previous file with comments | « no previous file | editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5fdc4dbe903b4aa10eef810e3255e7834e714fb5..e27e881c74e7b13238302fe4e7842a5e8ad84dfa 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
@@ -75,6 +75,8 @@ import com.google.dart.engine.internal.type.InterfaceTypeImpl;
import com.google.dart.engine.internal.type.TypeImpl;
import com.google.dart.engine.internal.type.VoidTypeImpl;
import com.google.dart.engine.scanner.Keyword;
+import com.google.dart.engine.scanner.Token;
+import com.google.dart.engine.scanner.TokenType;
import com.google.dart.engine.source.Source;
import com.google.dart.engine.type.FunctionType;
import com.google.dart.engine.type.InterfaceType;
@@ -92,6 +94,31 @@ import java.util.ArrayList;
*/
public class TypeResolverVisitor extends ScopedVisitor {
/**
+ * @return {@code true} if the name of the given {@link TypeName} is an built-in identifier.
+ */
+ private static boolean isBuiltInIdentifier(TypeName node) {
+ Token token = node.getName().getBeginToken();
+ return token.getType() == TokenType.KEYWORD;
+ }
+
+ /**
+ * @return {@code true} if given {@link TypeName} is used as a type annotation.
+ */
+ private static boolean isTypeAnnotation(TypeName node) {
+ ASTNode parent = node.getParent();
+ if (parent instanceof VariableDeclarationList) {
+ return ((VariableDeclarationList) parent).getType() == node;
+ }
+ if (parent instanceof FieldFormalParameter) {
+ return ((FieldFormalParameter) parent).getType() == node;
+ }
+ if (parent instanceof SimpleFormalParameter) {
+ return ((SimpleFormalParameter) parent).getType() == node;
+ }
+ return false;
+ }
+
+ /**
* The type representing the type 'dynamic'.
*/
private Type dynamicType;
@@ -465,7 +492,9 @@ public class TypeResolverVisitor extends ScopedVisitor {
// from the ErrorVerifier, so that we don't have two errors on a built in identifier being
// used as a class name. See CompileTimeErrorCodeTest.test_builtInIdentifierAsType().
SimpleIdentifier typeNameSimple = getTypeSimpleIdentifier(typeName);
- if (typeNameSimple.getName().equals("boolean")) {
+ if (isBuiltInIdentifier(node) && isTypeAnnotation(node)) {
+ reportError(CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE, typeName, typeName.getName());
+ } else if (typeNameSimple.getName().equals("boolean")) {
reportError(StaticWarningCode.UNDEFINED_CLASS_BOOLEAN, typeNameSimple);
} else if (isTypeNameInCatchClause(node)) {
reportError(StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE, typeName, typeName.getName());
« no previous file with comments | « no previous file | editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/internal/verifier/ErrorVerifier.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698