From b6be09472462358553639f6f90e2c219a1862303 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 13 Jun 2013 16:52:18 +0400 Subject: [PATCH] Force resolve imports for elements in imports --- .../jet/lang/resolve/lazy/ResolveSessionUtils.java | 11 ++++++++++- .../resolve/references/ClassReferenceInImport.kt | 7 +++++++ .../resolve/references/PackageReferenceInImport.kt | 7 +++++++ .../jet/resolve/ReferenceResolveTestGenerated.java | 10 ++++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 idea/testData/resolve/references/ClassReferenceInImport.kt create mode 100644 idea/testData/resolve/references/PackageReferenceInImport.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java index f4874104c70..c00cc815285 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSessionUtils.java @@ -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"; } diff --git a/idea/testData/resolve/references/ClassReferenceInImport.kt b/idea/testData/resolve/references/ClassReferenceInImport.kt new file mode 100644 index 00000000000..70e7a9f50e2 --- /dev/null +++ b/idea/testData/resolve/references/ClassReferenceInImport.kt @@ -0,0 +1,7 @@ +package testPackage.testOtherPackage + +import testPackage.testOtherPackage.A + +class A + +// REF: (testPackage.testOtherPackage).A \ No newline at end of file diff --git a/idea/testData/resolve/references/PackageReferenceInImport.kt b/idea/testData/resolve/references/PackageReferenceInImport.kt new file mode 100644 index 00000000000..1dbebc49ad4 --- /dev/null +++ b/idea/testData/resolve/references/PackageReferenceInImport.kt @@ -0,0 +1,7 @@ +package testPackage.testOtherPackage + +import testPackage.testOtherPackage.A + +class A + +// REF: testPackage \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java index 3bc6fc3fc4a..7a6ebec4a6f 100644 --- a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java @@ -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");