[FIR2IR] Allow symbolTable cache lookups for mapped JVM declarations
This commit is contained in:
committed by
Space Team
parent
0e92f98031
commit
85c2226335
+18
-3
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
|||||||
import org.jetbrains.kotlin.fir.descriptors.FirBuiltInsPackageFragment
|
import org.jetbrains.kotlin.fir.descriptors.FirBuiltInsPackageFragment
|
||||||
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
|
import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||||
|
import org.jetbrains.kotlin.fir.java.symbols.FirJavaOverriddenSyntheticPropertySymbol
|
||||||
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyClass
|
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyClass
|
||||||
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor
|
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor
|
||||||
import org.jetbrains.kotlin.fir.references.toResolvedValueParameterSymbol
|
import org.jetbrains.kotlin.fir.references.toResolvedValueParameterSymbol
|
||||||
@@ -1025,7 +1026,6 @@ class Fir2IrDeclarationStorage(
|
|||||||
fakeOverrideOwnerLookupTag ?: declaration.containingClassLookupTag()!!
|
fakeOverrideOwnerLookupTag ?: declaration.containingClassLookupTag()!!
|
||||||
)
|
)
|
||||||
irFakeOverridesForFirFakeOverrideMap[key] = cachedInSymbolTable
|
irFakeOverridesForFirFakeOverrideMap[key] = cachedInSymbolTable
|
||||||
return cachedInSymbolTable
|
|
||||||
}
|
}
|
||||||
configuration.useIrFakeOverrideBuilder -> {
|
configuration.useIrFakeOverrideBuilder -> {
|
||||||
/*
|
/*
|
||||||
@@ -1036,12 +1036,27 @@ class Fir2IrDeclarationStorage(
|
|||||||
* TODO: potentially this situation won't happen after migration from FIR2IR f/o generator to IR f/o generator (see KT-58861)
|
* TODO: potentially this situation won't happen after migration from FIR2IR f/o generator to IR f/o generator (see KT-58861)
|
||||||
*/
|
*/
|
||||||
cache[declaration] = cachedInSymbolTable
|
cache[declaration] = cachedInSymbolTable
|
||||||
return cachedInSymbolTable
|
}
|
||||||
|
declaration.initialSignatureAttr != null -> {
|
||||||
|
/*
|
||||||
|
* FIR creates remapped functions for builtin JVM classes based on use-site session, not declaration site
|
||||||
|
* It leads to the situations when we have two different mapped FIR functions for the same original function
|
||||||
|
* (and same IR function)
|
||||||
|
*/
|
||||||
|
cache[declaration] = cachedInSymbolTable
|
||||||
|
}
|
||||||
|
declaration.symbol is FirJavaOverriddenSyntheticPropertySymbol -> {
|
||||||
|
/*
|
||||||
|
* Synthetic properties for java classes, if those properties are based on real Kotlin properties are also session
|
||||||
|
* dependant
|
||||||
|
*/
|
||||||
|
cache[declaration] = cachedInSymbolTable
|
||||||
}
|
}
|
||||||
else -> {
|
else -> {
|
||||||
error("IR declaration with signature $signature found in SymbolTable and not found in declaration storage")
|
error("IR declaration with signature \"$signature\" found in SymbolTable and not found in declaration storage")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return cachedInSymbolTable
|
||||||
}
|
}
|
||||||
|
|
||||||
return null
|
return null
|
||||||
|
|||||||
+6
@@ -34044,6 +34044,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("jvmDeclarationsUpdatedMembersInCommonModule.kt")
|
||||||
|
public void testJvmDeclarationsUpdatedMembersInCommonModule() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+6
@@ -34044,6 +34044,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("jvmDeclarationsUpdatedMembersInCommonModule.kt")
|
||||||
|
public void testJvmDeclarationsUpdatedMembersInCommonModule() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+6
@@ -34044,6 +34044,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("jvmDeclarationsUpdatedMembersInCommonModule.kt")
|
||||||
|
public void testJvmDeclarationsUpdatedMembersInCommonModule() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
Vendored
+36
@@ -0,0 +1,36 @@
|
|||||||
|
// TARGET_BACKEND: JVM_IR
|
||||||
|
// LANGUAGE: +MultiPlatformProjects
|
||||||
|
// WITH_STDLIB
|
||||||
|
// FULL_JDK
|
||||||
|
|
||||||
|
// MODULE: common
|
||||||
|
// FILE: common.kt
|
||||||
|
/*
|
||||||
|
* During JVM compilation compiler creates mapped function for java.util.HashMap.contains twice (because they are session-dependant)
|
||||||
|
* The same happens with renamed synthetic properties based on real kotlin properties (LinkedHashMap.keySet() -> LinkedHashMap.keys)
|
||||||
|
*/
|
||||||
|
fun boxCommon(x: LinkedHashMap<Int, Int>?): String {
|
||||||
|
val res = hashSetOf<Int>().contains(12)
|
||||||
|
x?.keys
|
||||||
|
return if (res) {
|
||||||
|
"Error"
|
||||||
|
} else {
|
||||||
|
"O"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MODULE: platform()()(common)
|
||||||
|
// FILE: platform.kt
|
||||||
|
fun boxPlatform(x: LinkedHashMap<Int, Int>?): String {
|
||||||
|
val res = hashSetOf<Int>().contains(12)
|
||||||
|
x?.keys
|
||||||
|
return if (res) {
|
||||||
|
"Error"
|
||||||
|
} else {
|
||||||
|
"K"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
return boxCommon(null) + boxPlatform(null)
|
||||||
|
}
|
||||||
+6
@@ -34044,6 +34044,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("jvmDeclarationsUpdatedMembersInCommonModule.kt")
|
||||||
|
public void testJvmDeclarationsUpdatedMembersInCommonModule() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+6
@@ -34044,6 +34044,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("jvmDeclarationsUpdatedMembersInCommonModule.kt")
|
||||||
|
public void testJvmDeclarationsUpdatedMembersInCommonModule() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
|
|||||||
+5
@@ -29011,6 +29011,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
runTest("compiler/testData/codegen/box/multiplatform/k2/javaMethodWithTypeParameter.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jvmDeclarationsUpdatedMembersInCommonModule.kt")
|
||||||
|
public void testJvmDeclarationsUpdatedMembersInCommonModule() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/multiplatform/k2/jvmDeclarationsUpdatedMembersInCommonModule.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
@TestMetadata("compiler/testData/codegen/box/multiplatform/k2/annotations")
|
||||||
@TestDataPath("$PROJECT_ROOT")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
|
|||||||
Reference in New Issue
Block a user