Chromium Code Reviews| Index: compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java |
| diff --git a/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java b/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java |
| index 06347840027002354d033f0aac19cbd542505763..7ff85abf1502873a3b6c99cbc3dbd7c27c7698e4 100644 |
| --- a/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java |
| +++ b/compiler/java/com/google/dart/compiler/resolver/ResolutionContext.java |
| @@ -109,7 +109,7 @@ public class ResolutionContext implements ResolutionErrorListener { |
| private boolean isClassType(Type type) { |
| return isInterfaceEquals(type, false); |
| } |
| - |
| + |
| /** |
| * Returns <code>true</code> if the type is a class or interface type. |
| */ |
| @@ -123,7 +123,7 @@ public class ResolutionContext implements ResolutionErrorListener { |
| return null; |
| } |
| - Type type = resolveType(node, isStatic); |
| + Type type = resolveType(node, isStatic, ResolverErrorCode.NO_SUCH_TYPE_EXTENDS); |
| if (!isClassType(type)) { |
| onError(node.getIdentifier(), ResolverErrorCode.NOT_A_CLASS, type); |
| type = typeProvider.getDynamicType(); |
| @@ -134,12 +134,8 @@ public class ResolutionContext implements ResolutionErrorListener { |
| } |
| InterfaceType resolveInterface(DartTypeNode node, boolean isStatic) { |
| - if (node == null) { |
| - return null; |
| - } |
| - |
| - Type type = resolveType(node, isStatic); |
| - if (!isClassOrInterfaceType(type)) { |
| + Type type = resolveType(node, isStatic, ResolverErrorCode.NO_SUCH_TYPE_IMPLEMENTS); |
| + if (type.getKind() != TypeKind.DYNAMIC && !isClassOrInterfaceType(type)) { |
| onError(node.getIdentifier(), ResolverErrorCode.NOT_A_CLASS_OR_INTERFACE, type); |
| type = typeProvider.getDynamicType(); |
| } |
| @@ -148,16 +144,16 @@ public class ResolutionContext implements ResolutionErrorListener { |
| return (InterfaceType) type; |
| } |
| - Type resolveType(DartTypeNode node, boolean isStatic) { |
| + Type resolveType(DartTypeNode node, boolean isStatic, ErrorCode errorCode) { |
| if (node == null) { |
| return null; |
| } else { |
| - return resolveType(node, node.getIdentifier(), node.getTypeArguments(), isStatic); |
| + return resolveType(node, node.getIdentifier(), node.getTypeArguments(), isStatic, errorCode); |
| } |
| } |
| Type resolveType(DartNode diagnosticNode, DartNode identifier, List<DartTypeNode> typeArguments, |
| - boolean isStatic) { |
| + boolean isStatic, ErrorCode errorCode) { |
| Element element = resolveName(identifier); |
| switch (ElementKind.of(element)) { |
| case TYPE_VARIABLE: { |
| @@ -178,13 +174,12 @@ public class ResolutionContext implements ResolutionErrorListener { |
| if (identifier.toString().equals("void")) { |
| return typeProvider.getVoidType(); |
| } |
| + if (identifier.toString().equals("Dynamic")) { |
| + return typeProvider.getDynamicType(); |
| + } |
| break; |
| } |
| - if (shouldWarnOnNoSuchType()) { |
| - onError(identifier, TypeErrorCode.NO_SUCH_TYPE, identifier); |
| - } else { |
| - onError(identifier, ResolverErrorCode.NO_SUCH_TYPE, identifier); |
| - } |
| + onError(identifier, errorCode, identifier); |
| return typeProvider.getDynamicType(); |
| } |
| @@ -204,7 +199,7 @@ public class ResolutionContext implements ResolutionErrorListener { |
| int index = 0; |
| if (typeArgumentNodes != null) { |
| for (DartTypeNode typeNode : typeArgumentNodes) { |
| - Type type = resolveType(typeNode, isStatic); |
| + Type type = resolveType(typeNode, isStatic, TypeErrorCode.NO_SUCH_TYPE_GENERICS_ARGUMENT); |
|
zundel
2011/11/01 13:54:37
Gilad clarified that instantiating a type requires
|
| typeNode.setType(type); |
| if (index < typeArguments.length) { |
| typeArguments[index] = type; |
| @@ -215,7 +210,11 @@ public class ResolutionContext implements ResolutionErrorListener { |
| } else { |
| typeArguments = new Type[typeArgumentNodes.size()]; |
| for (int i = 0; i < typeArguments.length; i++) { |
| - typeArguments[i] = resolveType(typeArgumentNodes.get(i), isStatic); |
| + typeArguments[i] = |
| + resolveType( |
| + typeArgumentNodes.get(i), |
| + isStatic, |
| + TypeErrorCode.NO_SUCH_TYPE_GENERICS_ARGUMENT); |
|
zundel
2011/11/01 13:54:37
ditto.
|
| typeArgumentNodes.get(i).setType(typeArguments[i]); |
| } |
| } |