From 76cdf97b6d2f682a20734bfe5481ab73fa11728a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 1 Oct 2020 16:25:42 +0300 Subject: [PATCH] [FIR2IR] Set facade class for backing field properly #KT-42384 Fixed --- .../kotlin/fir/backend/Fir2IrConverter.kt | 6 +++++- ...mpileKotlinAgainstKotlinTestGenerated.java | 18 +++++++++++++++++ .../fir/LibraryProperty.kt | 20 +++++++++++++++++++ ...mpileKotlinAgainstKotlinTestGenerated.java | 18 +++++++++++++++++ ...mpileKotlinAgainstKotlinTestGenerated.java | 18 +++++++++++++++++ .../ir/JvmIrAgainstOldBoxTestGenerated.java | 18 +++++++++++++++++ .../ir/JvmOldAgainstIrBoxTestGenerated.java | 18 +++++++++++++++++ 7 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 8c4f12a2ce6..59360293aa3 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -316,7 +316,11 @@ class Fir2IrConverter( val stubGenerator = irProviders.filterIsInstance().first() for (descriptor in symbolTable.wrappedTopLevelCallableDescriptors()) { val parentClass = stubGenerator.generateOrGetFacadeClass(descriptor as WrappedDeclarationDescriptor<*>) - descriptor.owner.parent = parentClass ?: continue + val owner = descriptor.owner + owner.parent = parentClass ?: continue + if (owner is IrProperty) { + owner.backingField?.parent = parentClass + } } evaluateConstants(irModuleFragment) diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java index 6d742f8b0dd..8ae42457ca5 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/FirCompileKotlinAgainstKotlinTestGenerated.java @@ -383,6 +383,24 @@ public class FirCompileKotlinAgainstKotlinTestGenerated extends AbstractFirCompi runTest("compiler/testData/compileKotlinAgainstKotlin/useDeserializedFunInterface.kt"); } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/fir") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Fir extends AbstractFirCompileKotlinAgainstKotlinTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTestWithCustomIgnoreDirective(this::doTest, TargetBackend.JVM_IR, testDataFilePath, "// IGNORE_BACKEND_FIR: "); + } + + public void testAllFilesPresentInFir() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @TestMetadata("LibraryProperty.kt") + public void testLibraryProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); + } + } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/jvm8") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt b/compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt new file mode 100644 index 00000000000..c211560a499 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt @@ -0,0 +1,20 @@ +// FILE: A.kt +// WITH_RUNTIME + +package first.second + +class FqName(val s: String) + +@JvmField +val VOLATILE_ANNOTATION_FQ_NAME = FqName("volatile") + +// FILE: B.kt + +import first.second.VOLATILE_ANNOTATION_FQ_NAME +import first.second.FqName + +fun foo() = hasAnnotation(VOLATILE_ANNOTATION_FQ_NAME) + +fun hasAnnotation(name: FqName): Boolean = true + +fun box() = if (foo()) "OK" else "FAIL" \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java index e68fbbc0d8a..e20e3f142c0 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstKotlinTestGenerated.java @@ -388,6 +388,24 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl runTest("compiler/testData/compileKotlinAgainstKotlin/useDeserializedFunInterface.kt"); } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/fir") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Fir extends AbstractCompileKotlinAgainstKotlinTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInFir() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @TestMetadata("LibraryProperty.kt") + public void testLibraryProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); + } + } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/jvm8") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java index a341496ae03..36f3025d839 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrCompileKotlinAgainstKotlinTestGenerated.java @@ -383,6 +383,24 @@ public class IrCompileKotlinAgainstKotlinTestGenerated extends AbstractIrCompile runTest("compiler/testData/compileKotlinAgainstKotlin/useDeserializedFunInterface.kt"); } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/fir") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Fir extends AbstractIrCompileKotlinAgainstKotlinTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_IR, testDataFilePath); + } + + public void testAllFilesPresentInFir() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); + } + + @TestMetadata("LibraryProperty.kt") + public void testLibraryProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); + } + } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/jvm8") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java index 0784cebbb36..a938377fcf6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmIrAgainstOldBoxTestGenerated.java @@ -383,6 +383,24 @@ public class JvmIrAgainstOldBoxTestGenerated extends AbstractJvmIrAgainstOldBoxT runTest("compiler/testData/compileKotlinAgainstKotlin/useDeserializedFunInterface.kt"); } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/fir") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Fir extends AbstractJvmIrAgainstOldBoxTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_MULTI_MODULE_IR_AGAINST_OLD, testDataFilePath); + } + + public void testAllFilesPresentInFir() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_MULTI_MODULE_IR_AGAINST_OLD, true); + } + + @TestMetadata("LibraryProperty.kt") + public void testLibraryProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); + } + } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/jvm8") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java index 0b6f74b0385..a75fed3a00d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/JvmOldAgainstIrBoxTestGenerated.java @@ -383,6 +383,24 @@ public class JvmOldAgainstIrBoxTestGenerated extends AbstractJvmOldAgainstIrBoxT runTest("compiler/testData/compileKotlinAgainstKotlin/useDeserializedFunInterface.kt"); } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/fir") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class Fir extends AbstractJvmOldAgainstIrBoxTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, TargetBackend.JVM_MULTI_MODULE_OLD_AGAINST_IR, testDataFilePath); + } + + public void testAllFilesPresentInFir() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/compileKotlinAgainstKotlin/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_MULTI_MODULE_OLD_AGAINST_IR, true); + } + + @TestMetadata("LibraryProperty.kt") + public void testLibraryProperty() throws Exception { + runTest("compiler/testData/compileKotlinAgainstKotlin/fir/LibraryProperty.kt"); + } + } + @TestMetadata("compiler/testData/compileKotlinAgainstKotlin/jvm8") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)