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

Unified Diff: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java

Issue 8395013: DartC User Warning Framework (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Use new ErrorCode enums in single onError() method. Created 9 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
Index: compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
diff --git a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
index 02364a6d1f203aaebc8cd1590f1810b6e45d5e4a..3a70d88ccc8a285b0d0fe375b3922020b8b0566b 100644
--- a/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
+++ b/compiler/java/com/google/dart/compiler/type/TypeAnalyzer.java
@@ -10,7 +10,6 @@ import com.google.common.collect.Multimap;
import com.google.dart.compiler.DartCompilationError;
import com.google.dart.compiler.DartCompilationPhase;
import com.google.dart.compiler.DartCompilerContext;
-import com.google.dart.compiler.DartCompilerErrorCode;
import com.google.dart.compiler.ErrorCode;
import com.google.dart.compiler.ast.DartArrayAccess;
import com.google.dart.compiler.ast.DartArrayLiteral;
@@ -101,6 +100,8 @@ import com.google.dart.compiler.resolver.Elements;
import com.google.dart.compiler.resolver.EnclosingElement;
import com.google.dart.compiler.resolver.FieldElement;
import com.google.dart.compiler.resolver.MethodElement;
+import com.google.dart.compiler.resolver.ResolverErrorCode;
+import com.google.dart.compiler.resolver.TypeErrorCode;
import com.google.dart.compiler.resolver.VariableElement;
import com.google.dart.compiler.type.InterfaceType.Member;
@@ -207,17 +208,17 @@ public class TypeAnalyzer implements DartCompilationPhase {
}
private DynamicType typeError(DartNode node, ErrorCode code, Object... arguments) {
- context.typeError(new DartCompilationError(node, code, arguments));
+ onError(node, code, arguments);
return dynamicType;
}
- private void resolutionError(DartNode node, ErrorCode code, Object... arguments) {
- context.compilationError(new DartCompilationError(node, code, arguments));
+ private void onError(DartNode node, ErrorCode code, Object... arguments) {
+ context.onError(new DartCompilationError(node, code, arguments));
}
AssertionError internalError(DartNode node, String message, Object... arguments) {
message = String.format(message, arguments);
- context.compilationError(new DartCompilationError(node, DartCompilerErrorCode.INTERNAL_ERROR,
+ context.onError(new DartCompilationError(node, TypeErrorCode.INTERNAL_ERROR,
message));
return new AssertionError("Internal error: " + message);
}
@@ -427,7 +428,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
}
Member member = itype.lookupMember(methodName);
if (member == null) {
- typeError(diagnosticNode, DartCompilerErrorCode.INTERFACE_HAS_NO_METHOD_NAMED,
+ typeError(diagnosticNode, TypeErrorCode.INTERFACE_HAS_NO_METHOD_NAMED,
receiver, methodName);
return null;
}
@@ -438,7 +439,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
t.getClass(); // Null check.
s.getClass(); // Null check.
if (!types.isAssignable(t, s)) {
- typeError(node, DartCompilerErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE, s, t);
+ typeError(node, TypeErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE, s, t);
}
}
@@ -459,7 +460,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
case METHOD: {
MethodElement method = (MethodElement) element;
if (method.getModifiers().isStatic()) {
- return typeError(diagnosticNode, DartCompilerErrorCode.IS_STATIC_METHOD_IN,
+ return typeError(diagnosticNode, TypeErrorCode.IS_STATIC_METHOD_IN,
name, receiver);
}
ftype = (FunctionType) member.getType();
@@ -468,7 +469,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
case FIELD: {
FieldElement field = (FieldElement) element;
if (field.getModifiers().isStatic()) {
- return typeError(diagnosticNode, DartCompilerErrorCode.IS_STATIC_FIELD_IN,
+ return typeError(diagnosticNode, TypeErrorCode.IS_STATIC_FIELD_IN,
name, receiver);
}
switch (TypeKind.of(member.getType())) {
@@ -481,13 +482,13 @@ public class TypeAnalyzer implements DartCompilationPhase {
case DYNAMIC:
return member.getType();
default:
- return typeError(diagnosticNode, DartCompilerErrorCode.NOT_A_METHOD_IN,
+ return typeError(diagnosticNode, TypeErrorCode.NOT_A_METHOD_IN,
name, receiver);
}
break;
}
default:
- return typeError(diagnosticNode, DartCompilerErrorCode.NOT_A_METHOD_IN, name, receiver);
+ return typeError(diagnosticNode, TypeErrorCode.NOT_A_METHOD_IN, name, receiver);
}
return checkArguments(diagnosticNode, argumentNodes, argumentTypes.iterator(), ftype);
}
@@ -508,7 +509,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
throw internalError(node, "type is null");
case VOID:
- return typeError(node, DartCompilerErrorCode.VOID);
+ return typeError(node, TypeErrorCode.VOID);
default:
throw internalError(node, type.getKind().name());
@@ -525,7 +526,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
checkAssignable(argumentNodes.get(argumentCount), parameterType, argumentTypes.next());
argumentCount++;
} else {
- typeError(diagnosticNode, DartCompilerErrorCode.MISSING_ARGUMENT, parameterType);
+ typeError(diagnosticNode, TypeErrorCode.MISSING_ARGUMENT, parameterType);
}
}
Map<String, Type> namedParameterTypes = ftype.getNamedParameterTypes();
@@ -540,7 +541,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
}
while (argumentTypes.hasNext()) {
argumentTypes.next();
- typeError(argumentNodes.get(argumentCount), DartCompilerErrorCode.EXTRA_ARGUMENT);
+ typeError(argumentNodes.get(argumentCount), TypeErrorCode.EXTRA_ARGUMENT);
argumentCount++;
}
return ftype.getReturnType();
@@ -555,7 +556,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
Type type = node.getType(); // Already calculated by resolver.
switch (TypeKind.of(type)) {
case NONE:
- return typeError(node, DartCompilerErrorCode.INTERNAL_ERROR,
+ return typeError(node, TypeErrorCode.INTERNAL_ERROR,
String.format("type \"%s\" is null", node));
case INTERFACE: {
@@ -591,11 +592,11 @@ public class TypeAnalyzer implements DartCompilationPhase {
Type s = arguments.get(i);
if (!types.isAssignable(t, s)) {
if (badBoundIsError) {
- resolutionError(diagnosticNodes.get(i),
- DartCompilerErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE, s, t);
+ onError(diagnosticNodes.get(i),
+ ResolverErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE, s, t);
} else {
- typeError(diagnosticNodes.get(i),
- DartCompilerErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE, s, t);
+ onError(diagnosticNodes.get(i),
+ TypeErrorCode.TYPE_NOT_ASSIGNMENT_COMPATIBLE, s, t);
}
}
}
@@ -612,7 +613,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
private Type nonVoidTypeOf(DartNode node) {
Type type = typeOf(node);
if (type.getKind().equals(TypeKind.VOID)) {
- return typeError(node, DartCompilerErrorCode.VOID);
+ return typeError(node, TypeErrorCode.VOID);
}
return type;
}
@@ -632,7 +633,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
FunctionType ftype = (FunctionType) condition;
Type returnType = ftype.getReturnType();
if (returnType.getKind().equals(TypeKind.VOID)) {
- typeError(conditionNode, DartCompilerErrorCode.VOID);
+ typeError(conditionNode, TypeErrorCode.VOID);
}
checkAssignable(conditionNode, boolType, returnType);
break;
@@ -822,12 +823,12 @@ public class TypeAnalyzer implements DartCompilationPhase {
InterfaceType expectedIteratorType = dynamicIteratorType.subst(
Arrays.asList(variableType), dynamicIteratorType.getElement().getTypeParameters());
typeError(iterableExpression,
- DartCompilerErrorCode.FOR_IN_WITH_INVALID_ITERATOR_RETURN_TYPE,
+ TypeErrorCode.FOR_IN_WITH_INVALID_ITERATOR_RETURN_TYPE,
expectedIteratorType);
}
} else {
// Not a function
- typeError(iterableExpression, DartCompilerErrorCode.FOR_IN_WITH_ITERATOR_FIELD);
+ typeError(iterableExpression, TypeErrorCode.FOR_IN_WITH_ITERATOR_FIELD);
}
}
@@ -881,7 +882,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
break;
case NONE:
- return typeError(node, DartCompilerErrorCode.CANNOT_BE_RESOLVED, node.getTargetName());
+ return typeError(node, TypeErrorCode.CANNOT_BE_RESOLVED, node.getTargetName());
case DYNAMIC:
return element.getType();
@@ -1023,15 +1024,13 @@ public class TypeAnalyzer implements DartCompilationPhase {
}
DartNode clsNode = cls.getNode();
if (clsNode != null) {
- typeError(typeName, DartCompilerErrorCode.CANNOT_INSTATIATE_ABSTRACT_CLASS,
- cls.getName());
- typeError(clsNode, DartCompilerErrorCode.ABSTRACT_CLASS, cls.getName(), sb);
+ typeError(typeName, TypeErrorCode.CANNOT_INSTATIATE_ABSTRACT_CLASS, cls.getName());
+ typeError(clsNode, TypeErrorCode.ABSTRACT_CLASS, cls.getName(), sb);
} else {
- typeError(typeName, DartCompilerErrorCode.ABSTRACT_CLASS, cls.getName(), sb);
+ typeError(typeName, TypeErrorCode.ABSTRACT_CLASS, cls.getName(), sb);
}
} else {
- typeError(typeName, DartCompilerErrorCode.CANNOT_INSTATIATE_ABSTRACT_CLASS,
- cls.getName());
+ typeError(typeName, TypeErrorCode.CANNOT_INSTATIATE_ABSTRACT_CLASS, cls.getName());
}
}
FunctionType ftype = (FunctionType) element.getType();
@@ -1088,19 +1087,19 @@ public class TypeAnalyzer implements DartCompilationPhase {
String name = node.getPropertyName();
InterfaceType.Member member = cls.lookupMember(name);
if (member == null) {
- return typeError(node.getName(), DartCompilerErrorCode.NOT_A_MEMBER_OF, name, cls);
+ return typeError(node.getName(), TypeErrorCode.NOT_A_MEMBER_OF, name, cls);
}
element = member.getElement();
node.setReferencedElement(element);
Modifiers modifiers = element.getModifiers();
if (modifiers.isStatic()) {
return typeError(node.getName(),
- DartCompilerErrorCode.STATIC_MEMBER_ACCESSED_THROUGH_INSTANCE,
+ TypeErrorCode.STATIC_MEMBER_ACCESSED_THROUGH_INSTANCE,
name, element.getName());
}
switch (element.getKind()) {
case CONSTRUCTOR:
- return typeError(node.getName(), DartCompilerErrorCode.MEMBER_IS_A_CONSTRUCTOR,
+ return typeError(node.getName(), TypeErrorCode.MEMBER_IS_A_CONSTRUCTOR,
name, element.getName());
case METHOD:
@@ -1118,13 +1117,13 @@ public class TypeAnalyzer implements DartCompilationPhase {
Type type;
if (value == null) {
if (!types.isSubtype(voidType, expected)) {
- typeError(node, DartCompilerErrorCode.MISSING_RETURN_VALUE, expected);
+ typeError(node, TypeErrorCode.MISSING_RETURN_VALUE, expected);
}
} else {
type = typeOf(value);
if (expected.equals(voidType)) {
if (value != null) {
- typeError(value, DartCompilerErrorCode.VOID_CANNOT_RETURN_VALUE);
+ typeError(value, TypeErrorCode.VOID_CANNOT_RETURN_VALUE);
return voidType;
}
}
@@ -1165,8 +1164,8 @@ public class TypeAnalyzer implements DartCompilationPhase {
@Override
public Type visitThrowStatement(DartThrowStatement node) {
if (catchDepth == 0 && node.getException() == null) {
- context.compilationError(new DartCompilationError(node,
- DartCompilerErrorCode.RETHROW_NOT_IN_CATCH));
+ context.onError(new DartCompilationError(node,
+ ResolverErrorCode.RETHROW_NOT_IN_CATCH));
}
return typeAsVoid(node);
}
@@ -1226,7 +1225,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
String operatorMethodName = methodNameForUnaryOperator(node, operator);
Member member = itype.lookupMember(operatorMethodName);
if (member == null) {
- return typeError(expression, DartCompilerErrorCode.CANNOT_BE_RESOLVED,
+ return typeError(expression, TypeErrorCode.CANNOT_BE_RESOLVED,
operatorMethodName);
}
MethodElement element = ((MethodElement) member.getElement());
@@ -1237,7 +1236,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
// respectively. Check that the resolved operator has a compatible parameter type.
Iterator<VariableElement> it = element.getParameters().iterator();
if (!types.isAssignable(numType, it.next().getType())) {
- typeError(node, DartCompilerErrorCode.OPERATOR_WRONG_OPERAND_TYPE,
+ typeError(node, TypeErrorCode.OPERATOR_WRONG_OPERAND_TYPE,
operatorMethodName, numType.toString());
}
// Check that the return type of the operator is compatible with the receiver.
@@ -1268,7 +1267,7 @@ public class TypeAnalyzer implements DartCompilationPhase {
type = typeAsMemberOf(element, currentClass);
break;
case NONE:
- return typeError(target, DartCompilerErrorCode.NOT_A_METHOD_IN, name, currentClass);
+ return typeError(target, TypeErrorCode.NOT_A_METHOD_IN, name, currentClass);
default:
type = element.getType();
break;
@@ -1296,9 +1295,9 @@ public class TypeAnalyzer implements DartCompilationPhase {
// A subtype of interface Function.
return dynamicType;
} else if (name == null) {
- return typeError(diagnosticNode, DartCompilerErrorCode.NOT_A_FUNCTION, type);
+ return typeError(diagnosticNode, TypeErrorCode.NOT_A_FUNCTION, type);
} else {
- return typeError(diagnosticNode, DartCompilerErrorCode.NOT_A_METHOD_IN, name,
+ return typeError(diagnosticNode, TypeErrorCode.NOT_A_METHOD_IN, name,
currentClass);
}
}
@@ -1460,7 +1459,6 @@ public class TypeAnalyzer implements DartCompilationPhase {
return typeAsVoid(node);
}
- @SuppressWarnings("hiding")
private class AbstractMethodFinder extends DartNodeTraverser<Void> {
private final InterfaceType currentClass;
private final Multimap<String, Element> superMembers;
@@ -1543,12 +1541,12 @@ public class TypeAnalyzer implements DartCompilationPhase {
checkOverride(node.getName(), field, element);
break;
case METHOD:
- typeError(node, DartCompilerErrorCode.SUPERTYPE_HAS_METHOD, name,
+ typeError(node, TypeErrorCode.SUPERTYPE_HAS_METHOD, name,
element.getEnclosingElement().getName());
break;
default:
- typeError(node, DartCompilerErrorCode.INTERNAL_ERROR, element);
+ typeError(node, TypeErrorCode.INTERNAL_ERROR, element);
break;
}
}
@@ -1571,12 +1569,12 @@ public class TypeAnalyzer implements DartCompilationPhase {
break;
case FIELD:
- typeError(node, DartCompilerErrorCode.SUPERTYPE_HAS_FIELD, element.getName(),
+ typeError(node, TypeErrorCode.SUPERTYPE_HAS_FIELD, element.getName(),
element.getEnclosingElement().getName());
break;
default:
- typeError(node, DartCompilerErrorCode.INTERNAL_ERROR, element);
+ typeError(node, TypeErrorCode.INTERNAL_ERROR, element);
break;
}
}
@@ -1591,11 +1589,11 @@ public class TypeAnalyzer implements DartCompilationPhase {
*/
private boolean canOverride(DartExpression node, Modifiers modifiers, Element element) {
if (element.getModifiers().isStatic()) {
- resolutionError(node, DartCompilerErrorCode.CANNOT_OVERRIDE_STATIC_MEMBER,
+ onError(node, ResolverErrorCode.CANNOT_OVERRIDE_STATIC_MEMBER,
element.getName(), element.getEnclosingElement().getName());
return false;
} else if (modifiers.isStatic()) {
- resolutionError(node, DartCompilerErrorCode.CANNOT_OVERRIDE_INSTANCE_MEMBER,
+ onError(node, ResolverErrorCode.CANNOT_OVERRIDE_INSTANCE_MEMBER,
element.getName(), element.getEnclosingElement().getName());
return false;
}
@@ -1612,12 +1610,12 @@ public class TypeAnalyzer implements DartCompilationPhase {
if (member.getKind() == ElementKind.METHOD
&& superElement.getKind() == ElementKind.METHOD) {
if (!types.isSubtype(member.getType(), superMember)) {
- typeError(node, DartCompilerErrorCode.CANNOT_OVERRIDE_METHOD_NOT_SUBTYPE,
+ typeError(node, TypeErrorCode.CANNOT_OVERRIDE_METHOD_NOT_SUBTYPE,
name, superElement.getEnclosingElement().getName(),
member.getType(), superMember);
}
} else if (!types.isAssignable(superMember, member.getType())) {
- typeError(node, DartCompilerErrorCode.CANNOT_OVERRIDE_TYPED_MEMBER,
+ typeError(node, TypeErrorCode.CANNOT_OVERRIDE_TYPED_MEMBER,
name, superElement.getEnclosingElement().getName(),
member.getType(), superMember);
}

Powered by Google App Engine
This is Rietveld 408576698