diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java index 69d5d3313c0..e92fe4f22c1 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/TypeResolver.java @@ -174,6 +174,17 @@ public class TypeResolver { @Nullable public ClassifierDescriptor resolveClass(JetScope scope, JetUserType userType) { + ClassifierDescriptor classifierDescriptor = resolveClassWithoutErrorReporting(scope, userType); + + if (classifierDescriptor == null) { + semanticServices.getErrorHandler().unresolvedReference(userType.getReferenceExpression()); + } + + return classifierDescriptor; + } + + @Nullable + private ClassifierDescriptor resolveClassWithoutErrorReporting(JetScope scope, JetUserType userType) { JetSimpleNameExpression expression = userType.getReferenceExpression(); if (expression == null) { return null; @@ -192,21 +203,16 @@ public class TypeResolver { scope = resolveClassLookupScope(scope, qualifier); } if (scope == null) { - return null; + return ErrorUtils.getErrorClass(); } classifierDescriptor = scope.getClassifier(referencedName); } - - if (classifierDescriptor == null) { - semanticServices.getErrorHandler().unresolvedReference(expression); - } - return classifierDescriptor; } @Nullable private JetScope resolveClassLookupScope(JetScope scope, JetUserType userType) { - ClassifierDescriptor classifierDescriptor = resolveClass(scope, userType); + ClassifierDescriptor classifierDescriptor = resolveClassWithoutErrorReporting(scope, userType); if (classifierDescriptor instanceof ClassDescriptor) { List typeArguments = resolveTypeProjections(scope, classifierDescriptor.getTypeConstructor(), userType.getTypeArguments()); return ((ClassDescriptor) classifierDescriptor).getMemberScope(typeArguments); @@ -214,6 +220,7 @@ public class TypeResolver { NamespaceDescriptor namespaceDescriptor = resolveNamespace(scope, userType); if (namespaceDescriptor == null) { + semanticServices.getErrorHandler().unresolvedReference(userType.getReferenceExpression()); return null; } return namespaceDescriptor.getMemberScope(); diff --git a/idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java b/idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java index e4cbb6797f9..350ac27a007 100644 --- a/idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java +++ b/idea/src/org/jetbrains/jet/lang/types/ErrorUtils.java @@ -140,6 +140,10 @@ public class ErrorUtils { return type instanceof ErrorTypeImpl; } + public static ClassifierDescriptor getErrorClass() { + return ERROR_CLASS; + } + private static class ErrorTypeImpl implements JetType { private final TypeConstructor constructor; diff --git a/idea/testData/checker/ResolveToJava.jet b/idea/testData/checker/ResolveToJava.jet new file mode 100644 index 00000000000..54bff6ea596 --- /dev/null +++ b/idea/testData/checker/ResolveToJava.jet @@ -0,0 +1,11 @@ +import java.* +import util.* +import utils.* + +fun test(l : java.util.List) { + val x : java.List + val y : java.util.List + val b : java.lang.Object + val a : util.List + val z : java.utils.List +}