diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt index e158e6fff56..cce17b5ce37 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt @@ -317,7 +317,12 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC override fun getOwnInnerClasses(): List { val result = ArrayList() - classOrObject.declarations.filterIsInstance().mapNotNullTo(result) { create(it) } + classOrObject.declarations.filterIsInstance() + // workaround for ClassInnerStuffCache not supporting classes with null names, see KT-13927 + // inner classes with null names can't be searched for and can't be used from java anyway + // we can't prohibit creating light classes with null names either since they can contain members + .filter { it.name != null } + .mapNotNullTo(result) { create(it) } if (classOrObject.hasInterfaceDefaultImpls) { result.add(KtLightClassForInterfaceDefaultImpls(classOrObject)) diff --git a/idea/testData/kotlinAndJavaChecker/javaWithKotlin/InnerClassWithoutName.java b/idea/testData/kotlinAndJavaChecker/javaWithKotlin/InnerClassWithoutName.java new file mode 100644 index 00000000000..80692f6202b --- /dev/null +++ b/idea/testData/kotlinAndJavaChecker/javaWithKotlin/InnerClassWithoutName.java @@ -0,0 +1,6 @@ +public class InnerClassWithoutName { + public void uses() { + Test5 test5 = new Test5(); + Test5.In1 in1 = test5.new In1(); + } +} \ No newline at end of file diff --git a/idea/testData/kotlinAndJavaChecker/javaWithKotlin/InnerClassWithoutName.kt b/idea/testData/kotlinAndJavaChecker/javaWithKotlin/InnerClassWithoutName.kt new file mode 100644 index 00000000000..7f8c569012f --- /dev/null +++ b/idea/testData/kotlinAndJavaChecker/javaWithKotlin/InnerClassWithoutName.kt @@ -0,0 +1,4 @@ +class Test5 { + inner class In1 {} + inner class +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/checkers/JavaAgainstKotlinSourceCheckerTestGenerated.java b/idea/tests/org/jetbrains/kotlin/checkers/JavaAgainstKotlinSourceCheckerTestGenerated.java index 4027c9c677d..42c695faf5b 100644 --- a/idea/tests/org/jetbrains/kotlin/checkers/JavaAgainstKotlinSourceCheckerTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/checkers/JavaAgainstKotlinSourceCheckerTestGenerated.java @@ -148,6 +148,12 @@ public class JavaAgainstKotlinSourceCheckerTestGenerated extends AbstractJavaAga KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/kotlinAndJavaChecker/javaWithKotlin"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("InnerClassWithoutName.kt") + public void testInnerClassWithoutName() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/kotlinAndJavaChecker/javaWithKotlin/InnerClassWithoutName.kt"); + doTest(fileName); + } + @TestMetadata("NoNotNullOnParameterInOverride.kt") public void testNoNotNullOnParameterInOverride() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/kotlinAndJavaChecker/javaWithKotlin/NoNotNullOnParameterInOverride.kt");