From 58678c09e84a1fb3c2b38f885455ecb6bf9d2963 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 7 Dec 2023 14:06:59 +0200 Subject: [PATCH] [FIR2IR] Include generated IR fields into Fir2IrCommonMemberStorage In case of HMPP structure with common JVM module (e.g. shared between JVM and Android) one can reference the same field from java code, so it should be shared between fir2ir sessions ^KT-63574 Fixed --- ...LFirBlackBoxCodegenBasedTestGenerated.java | 6 +++++ ...rsedBlackBoxCodegenBasedTestGenerated.java | 6 +++++ .../fir/backend/Fir2IrCommonMemberStorage.kt | 2 ++ .../fir/backend/Fir2IrDeclarationStorage.kt | 2 +- ...LightTreeBlackBoxCodegenTestGenerated.java | 6 +++++ ...hIrFakeOverrideGeneratorTestGenerated.java | 6 +++++ .../FirPsiBlackBoxCodegenTestGenerated.java | 6 +++++ .../k2/staticjavaFieldInCommonCode.kt | 23 +++++++++++++++++++ .../IrBlackBoxCodegenTestGenerated.java | 6 +++++ ...kBoxCodegenWithIrInlinerTestGenerated.java | 6 +++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ 11 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java index 6b73ebeac5d..5fe6a72df97 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirBlackBoxCodegenBasedTestGenerated.java @@ -35211,6 +35211,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); } + @Test + @TestMetadata("staticjavaFieldInCommonCode.kt") + public void testStaticjavaFieldInCommonCode() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java index a9b7f50433e..b8f040d673b 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirReversedBlackBoxCodegenBasedTestGenerated.java @@ -35211,6 +35211,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); } + @Test + @TestMetadata("staticjavaFieldInCommonCode.kt") + public void testStaticjavaFieldInCommonCode() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCommonMemberStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCommonMemberStorage.kt index 85e2f589bb5..811dbf68956 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCommonMemberStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrCommonMemberStorage.kt @@ -41,6 +41,8 @@ class Fir2IrCommonMemberStorage( val constructorCache: ConcurrentHashMap = ConcurrentHashMap() + val fieldCache: ConcurrentHashMap = ConcurrentHashMap() + val propertyCache: ConcurrentHashMap = ConcurrentHashMap() val getterForPropertyCache: ConcurrentHashMap = ConcurrentHashMap() val setterForPropertyCache: ConcurrentHashMap = ConcurrentHashMap() diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index b6661b8ed43..d428fba2201 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -166,7 +166,7 @@ class Fir2IrDeclarationStorage( private val delegatedReverseCache: ConcurrentHashMap = ConcurrentHashMap() - private val fieldCache: ConcurrentHashMap = ConcurrentHashMap() + private val fieldCache: ConcurrentHashMap = commonMemberStorage.fieldCache private data class FieldStaticOverrideKey(val lookupTag: ConeClassLikeLookupTag, val name: Name) diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java index d8b344ecf13..598c7755cf3 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenTestGenerated.java @@ -34792,6 +34792,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); } + @Test + @TestMetadata("staticjavaFieldInCommonCode.kt") + public void testStaticjavaFieldInCommonCode() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java index c25d7ff3186..d46523d8818 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated.java @@ -34792,6 +34792,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); } + @Test + @TestMetadata("staticjavaFieldInCommonCode.kt") + public void testStaticjavaFieldInCommonCode() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java index a0c5ea0cee7..37c9821432d 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirPsiBlackBoxCodegenTestGenerated.java @@ -34792,6 +34792,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); } + @Test + @TestMetadata("staticjavaFieldInCommonCode.kt") + public void testStaticjavaFieldInCommonCode() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt b/compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt new file mode 100644 index 00000000000..76650457c6d --- /dev/null +++ b/compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt @@ -0,0 +1,23 @@ +// TARGET_BACKEND: JVM_IR +// LANGUAGE: +MultiPlatformProjects +// FULL_JDK +// ISSUE: KT-63574 + +// MODULE: commonJvm +// FILE: common.kt +import java.nio.ByteOrder + +fun foo(): String = ByteOrder.LITTLE_ENDIAN.toString() + +// MODULE: platformJvm()()(commonJvm) +// FILE: platform.kt +import java.nio.ByteOrder + +fun bar(): String = ByteOrder.LITTLE_ENDIAN.toString() + +fun box(): String { + val expected = "LITTLE_ENDIAN" + if (foo() != expected) return "Fail 1" + if (bar() != expected) return "Fail 2" + return "OK" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 645aa906c26..4aa8db51ac8 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -34792,6 +34792,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); } + @Test + @TestMetadata("staticjavaFieldInCommonCode.kt") + public void testStaticjavaFieldInCommonCode() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java index b149d4c3229..2831e8f2ecd 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenWithIrInlinerTestGenerated.java @@ -34792,6 +34792,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); } + @Test + @TestMetadata("staticjavaFieldInCommonCode.kt") + public void testStaticjavaFieldInCommonCode() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt"); + } + @Nested @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 713e7fae102..3b7da5aedcb 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -29667,6 +29667,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt"); } + @TestMetadata("staticjavaFieldInCommonCode.kt") + public void testStaticjavaFieldInCommonCode() throws Exception { + runTest("compiler/testData/codegen/box/multiplatform/k2/staticjavaFieldInCommonCode.kt"); + } + @TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)