diff --git a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
index 4200d1378ff..703f05c0e76 100644
--- a/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
+++ b/idea/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java
@@ -12,7 +12,8 @@ import org.jetbrains.jet.lang.JetSemanticServices;
import org.jetbrains.jet.lang.cfg.JetFlowInformationProvider;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
-import org.jetbrains.jet.lang.types.*;
+import org.jetbrains.jet.lang.types.JetType;
+import org.jetbrains.jet.lang.types.JetTypeInferrer;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.*;
@@ -133,7 +134,39 @@ public class TopDownAnalyzer {
}
}
} else {
- throw new UnsupportedOperationException();
+ ClassifierDescriptor classifierDescriptor = null;
+ JetSimpleNameExpression referenceExpression = null;
+
+ JetExpression importedReference = importDirective.getImportedReference();
+ if (importedReference instanceof JetDotQualifiedExpression) {
+ JetDotQualifiedExpression reference = (JetDotQualifiedExpression) importedReference;
+ JetType type = semanticServices.getTypeInferrer(trace, JetFlowInformationProvider.THROW_EXCEPTION).getTypeWithNamespaces(namespaceScope, reference.getReceiverExpression(), false);
+ JetExpression selectorExpression = reference.getSelectorExpression();
+ if (selectorExpression != null) {
+ referenceExpression = (JetSimpleNameExpression) selectorExpression;
+ String referencedName = referenceExpression.getReferencedName();
+ if (type != null && referencedName != null) {
+ classifierDescriptor = type.getMemberScope().getClassifier(referencedName);
+ }
+ }
+ }
+ else {
+ assert importedReference instanceof JetSimpleNameExpression;
+ referenceExpression = (JetSimpleNameExpression) importedReference;
+
+ String referencedName = referenceExpression.getReferencedName();
+ if (referencedName != null) {
+ classifierDescriptor = outerScope.getClassifier(referencedName);
+ }
+ }
+
+ if (classifierDescriptor != null) {
+ trace.recordReferenceResolution(referenceExpression, classifierDescriptor);
+
+ String aliasName = importDirective.getAliasName();
+ String importedClassifierName = aliasName != null ? aliasName : classifierDescriptor.getName();
+ namespaceScope.addClassifierAlias(importedClassifierName, classifierDescriptor);
+ }
}
}
diff --git a/idea/testData/checker/ResolveToJava.jet b/idea/testData/checker/ResolveToJava.jet
index 428be3e3d62..99907a0d7cc 100644
--- a/idea/testData/checker/ResolveToJava.jet
+++ b/idea/testData/checker/ResolveToJava.jet
@@ -2,6 +2,9 @@ import java.*
import util.*
import utils.*
+import java.io.PrintStream
+import java.lang.Comparable as Com
+
val l : List = new ArrayList()
fun test(l : java.util.List) {
@@ -34,4 +37,9 @@ fun test(l : java.util.List) {
System.out?.println(e.getMessage())
}
+ new PrintStream("sdf")
+
+ val c : Com? = null
+
+ c : java.lang.Comparable?
}