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 d51959a0849..0c936e36a43 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 @@ -61,6 +61,7 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.debugText.getDebugText import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier +import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub import org.jetbrains.kotlin.resolve.DescriptorUtils import java.util.* @@ -340,7 +341,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC } fun createNoCache(classOrObject: KtClassOrObject): KtLightClassForSourceDeclaration? { - if (classOrObject.hasExpectModifier()) { + if (classOrObject.parentsWithSelf.filterIsInstance().any { it.hasExpectModifier() }) { return null } diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/ExpectClass.java b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectClass.java new file mode 100644 index 00000000000..a7ed8598c7c --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectClass.java @@ -0,0 +1 @@ + diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/ExpectClass.kt b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectClass.kt new file mode 100644 index 00000000000..eb57fed743c --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectClass.kt @@ -0,0 +1,4 @@ +// p.B +package p + +expect class B \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/ExpectObject.java b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectObject.java new file mode 100644 index 00000000000..c330f2fabf8 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectObject.java @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/ExpectObject.kt b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectObject.kt new file mode 100644 index 00000000000..c55b87e1708 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectObject.kt @@ -0,0 +1,4 @@ +// p.B +package p + +expect object B \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClass.java b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClass.java new file mode 100644 index 00000000000..a7ed8598c7c --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClass.java @@ -0,0 +1 @@ + diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClass.kt b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClass.kt new file mode 100644 index 00000000000..80349a316ce --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClass.kt @@ -0,0 +1,6 @@ +// p.B.Nested +package p + +expect class B { + class Nested {} +} \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClassInObject.java b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClassInObject.java new file mode 100644 index 00000000000..c330f2fabf8 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClassInObject.java @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClassInObject.kt b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClassInObject.kt new file mode 100644 index 00000000000..384e25d66c4 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClassInObject.kt @@ -0,0 +1,6 @@ +// p.B.Nested +package p + +expect object B { + class Nested {} +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java index 96582273fe4..000015b917e 100644 --- a/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java @@ -165,6 +165,30 @@ public class CompilerLightClassTestGenerated extends AbstractCompilerLightClassT doTest(fileName); } + @TestMetadata("ExpectClass.kt") + public void testExpectClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/ExpectClass.kt"); + doTest(fileName); + } + + @TestMetadata("ExpectObject.kt") + public void testExpectObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/ExpectObject.kt"); + doTest(fileName); + } + + @TestMetadata("ExpectedNestedClass.kt") + public void testExpectedNestedClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClass.kt"); + doTest(fileName); + } + + @TestMetadata("ExpectedNestedClassInObject.kt") + public void testExpectedNestedClassInObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClassInObject.kt"); + doTest(fileName); + } + @TestMetadata("PrivateInTrait.kt") public void testPrivateInTrait() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/PrivateInTrait.kt"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java index 3b2e67e6a59..769b8f955ea 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/IdeLightClassTestGenerated.java @@ -165,6 +165,30 @@ public class IdeLightClassTestGenerated extends AbstractIdeLightClassTest { doTest(fileName); } + @TestMetadata("ExpectClass.kt") + public void testExpectClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/ExpectClass.kt"); + doTest(fileName); + } + + @TestMetadata("ExpectObject.kt") + public void testExpectObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/ExpectObject.kt"); + doTest(fileName); + } + + @TestMetadata("ExpectedNestedClass.kt") + public void testExpectedNestedClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClass.kt"); + doTest(fileName); + } + + @TestMetadata("ExpectedNestedClassInObject.kt") + public void testExpectedNestedClassInObject() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/ExpectedNestedClassInObject.kt"); + doTest(fileName); + } + @TestMetadata("PrivateInTrait.kt") public void testPrivateInTrait() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/PrivateInTrait.kt");