diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForAnonymousDeclaration.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForAnonymousDeclaration.java index df549c8d7ba..e4ed0a187b1 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForAnonymousDeclaration.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForAnonymousDeclaration.java @@ -47,6 +47,12 @@ class KtLightClassForAnonymousDeclaration extends KtLightClassForExplicitDeclara return JavaPsiFacade.getElementFactory(getClassOrObject().getProject()).createReferenceElementByType(getBaseClassType()); } + @Nullable + @Override + public PsiClass getContainingClass() { + return getDelegate().getContainingClass(); + } + @NotNull private String getFirstSupertypeFQName() { ClassDescriptor descriptor = getDescriptor(); diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt index 4d3ce6609eb..890539e5782 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForExplicitDeclaration.kt @@ -230,6 +230,13 @@ public open class KtLightClassForExplicitDeclaration( override fun getContainingClass(): PsiClass? { if (classOrObject.parent === classOrObject.containingFile) return null + + val containingClassOrObject = (classOrObject.parent as? KtClassBody)?.parent as? KtClassOrObject + if (containingClassOrObject != null) { + return create(containingClassOrObject) + } + + // TODO: should return null return super.getContainingClass() } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForInterfaceDefaultImpls.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForInterfaceDefaultImpls.kt index 782f0dd3cd4..10b28c865bb 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForInterfaceDefaultImpls.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KtLightClassForInterfaceDefaultImpls.kt @@ -46,4 +46,6 @@ public open class KtLightClassForInterfaceDefaultImpls( override fun setName(name: String): PsiElement { throw IncorrectOperationException("Impossible to rename DefaultImpls") } + + override fun getContainingClass() = KtLightClassForExplicitDeclaration.create(classOrObject) } diff --git a/idea/idea-completion/testData/injava/NestedNoImport.java b/idea/idea-completion/testData/injava/NestedNoImport.java new file mode 100644 index 00000000000..729819161b2 --- /dev/null +++ b/idea/idea-completion/testData/injava/NestedNoImport.java @@ -0,0 +1,12 @@ +package test; + +import mockLib.foo + +public class Testing { + public static void test() { + Nest + } +} + +// EXIST: Nested +// EXIST: NestedObject \ No newline at end of file diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompiledKotlinInJavaCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompiledKotlinInJavaCompletionTestGenerated.java index 6540e32a801..1045dfa7508 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompiledKotlinInJavaCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/CompiledKotlinInJavaCompletionTestGenerated.java @@ -137,6 +137,12 @@ public class CompiledKotlinInJavaCompletionTestGenerated extends AbstractCompile doTest(fileName); } + @TestMetadata("NestedNoImport.java") + public void testNestedNoImport() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/injava/NestedNoImport.java"); + doTest(fileName); + } + @TestMetadata("NestedObjectInstance.java") public void testNestedObjectInstance() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/injava/NestedObjectInstance.java"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/KotlinSourceInJavaCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/KotlinSourceInJavaCompletionTestGenerated.java index 8e4941a7530..3fadf2e8549 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/KotlinSourceInJavaCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/KotlinSourceInJavaCompletionTestGenerated.java @@ -137,6 +137,12 @@ public class KotlinSourceInJavaCompletionTestGenerated extends AbstractKotlinSou doTest(fileName); } + @TestMetadata("NestedNoImport.java") + public void testNestedNoImport() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/injava/NestedNoImport.java"); + doTest(fileName); + } + @TestMetadata("NestedObjectInstance.java") public void testNestedObjectInstance() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/injava/NestedObjectInstance.java");