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? }