Force resolve imports for elements in imports

This commit is contained in:
Nikolay Krasko
2013-06-13 16:52:18 +04:00
parent 32b04531f6
commit b6be094724
4 changed files with 34 additions and 1 deletions
@@ -123,7 +123,9 @@ public class ResolveSessionUtils {
@SuppressWarnings("unchecked")
PsiElement topmostCandidateForAdditionalResolve = JetPsiUtil.getTopmostParentOfTypes(expression,
JetNamedFunction.class, JetClassInitializer.class, JetProperty.class, JetDelegationSpecifierList.class);
JetNamedFunction.class, JetClassInitializer.class,
JetProperty.class, JetDelegationSpecifierList.class,
JetImportDirective.class);
if (topmostCandidateForAdditionalResolve != null) {
if (topmostCandidateForAdditionalResolve instanceof JetNamedFunction) {
@@ -139,6 +141,13 @@ public class ResolveSessionUtils {
delegationSpecifierAdditionalResolve(resolveSession, (JetDelegationSpecifierList) topmostCandidateForAdditionalResolve,
trace, file);
}
else if (topmostCandidateForAdditionalResolve instanceof JetImportDirective) {
JetImportDirective importDirective = (JetImportDirective) topmostCandidateForAdditionalResolve;
JetScope scope = resolveSession.getInjector().getScopeProvider().getFileScope((JetFile) importDirective.getContainingFile());
// Get all descriptors to force resolving all imports
scope.getAllDescriptors();
}
else {
assert false : "Invalid type of the topmost parent";
}
@@ -0,0 +1,7 @@
package testPackage.testOtherPackage
import testPackage.testOtherPackage.<caret>A
class A
// REF: (testPackage.testOtherPackage).A
@@ -0,0 +1,7 @@
package testPackage.testOtherPackage
import <caret>testPackage.testOtherPackage.A
class A
// REF: testPackage
@@ -36,11 +36,21 @@ public class ReferenceResolveTestGenerated extends AbstractResolveBaseTest {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("idea/testData/resolve/references"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("ClassReferenceInImport.kt")
public void testClassReferenceInImport() throws Exception {
doTest("idea/testData/resolve/references/ClassReferenceInImport.kt");
}
@TestMetadata("CtrlClickResolve.kt")
public void testCtrlClickResolve() throws Exception {
doTest("idea/testData/resolve/references/CtrlClickResolve.kt");
}
@TestMetadata("PackageReferenceInImport.kt")
public void testPackageReferenceInImport() throws Exception {
doTest("idea/testData/resolve/references/PackageReferenceInImport.kt");
}
@TestMetadata("ResolveClass.kt")
public void testResolveClass() throws Exception {
doTest("idea/testData/resolve/references/ResolveClass.kt");