FIR2IR: Fix mapping for intersection overrides of deserialized properties
This commit is contained in:
+1
-1
@@ -1065,7 +1065,7 @@ class Fir2IrDeclarationStorage(
|
||||
val irProperty = fir.convertWithOffsets { startOffset, endOffset ->
|
||||
symbolTable.declareProperty(signature, { symbol }) {
|
||||
val isFakeOverride =
|
||||
fir.isSubstitutionOverride &&
|
||||
fir.isSubstitutionOrIntersectionOverride &&
|
||||
firPropertySymbol.dispatchReceiverClassOrNull() !=
|
||||
firPropertySymbol.originalForSubstitutionOverride?.dispatchReceiverClassOrNull()
|
||||
Fir2IrLazyProperty(
|
||||
|
||||
+5
@@ -210,6 +210,11 @@ public class FirCompileKotlinAgainstKotlinTestGenerated extends AbstractFirCompi
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("intersectionOverrideProperies.kt")
|
||||
public void testIntersectionOverrideProperies() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jvmField.kt")
|
||||
public void testJvmField() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.kt");
|
||||
|
||||
@@ -32,6 +32,7 @@ var FirCallableDeclaration<*>.containingClassAttr: ConeClassLikeLookupTag? by Fi
|
||||
|
||||
val FirCallableDeclaration<*>.isIntersectionOverride get() = origin == FirDeclarationOrigin.IntersectionOverride
|
||||
val FirCallableDeclaration<*>.isSubstitutionOverride get() = origin == FirDeclarationOrigin.SubstitutionOverride
|
||||
val FirCallableDeclaration<*>.isSubstitutionOrIntersectionOverride get() = isSubstitutionOverride || isIntersectionOverride
|
||||
|
||||
inline val <reified D : FirCallableDeclaration<*>> D.originalForSubstitutionOverride: D?
|
||||
get() = if (isSubstitutionOverride) originalForSubstitutionOverrideAttr else null
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// DONT_TARGET_EXACT_BACKEND: WASM
|
||||
// WASM_MUTE_REASON: STDLIB_COLLECTIONS
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// IGNORE_BACKEND: NATIVE
|
||||
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// FILE: A.kt
|
||||
package a
|
||||
|
||||
interface IrSymbol {
|
||||
val owner: Any
|
||||
}
|
||||
|
||||
interface IrFunction
|
||||
interface IrSimpleFunction : IrFunction {
|
||||
val name: String
|
||||
}
|
||||
|
||||
interface IrFunctionSymbol : IrSymbol {
|
||||
override val owner: IrFunction
|
||||
}
|
||||
|
||||
interface IrBindableSymbol<B : Any> : IrSymbol {
|
||||
override val owner: B
|
||||
}
|
||||
|
||||
interface IrSimpleFunctionSymbol : IrFunctionSymbol, IrBindableSymbol<IrSimpleFunction>
|
||||
|
||||
// FILE: B.kt
|
||||
import a.*
|
||||
|
||||
fun foo(x: IrSimpleFunctionSymbol): String {
|
||||
return x.owner.name
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return foo(object : IrSimpleFunctionSymbol {
|
||||
override val owner: IrSimpleFunction
|
||||
get() = object : IrSimpleFunction {
|
||||
override val name: String
|
||||
get() = "OK"
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -261,7 +261,7 @@ FILE fqName:<root> fileName:/MultiList.kt
|
||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:ABSTRACT [fake_override,val]
|
||||
overridden:
|
||||
public abstract fun <get-size> (): kotlin.Int declared in kotlin.collections.List
|
||||
public abstract fun <get-size> (): kotlin.Int declared in java.util.ArrayList
|
||||
public abstract fun <get-size> (): kotlin.Int [fake_override] declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<E of kotlin.collections.List>
|
||||
FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:java.util.Collection<E of java.util.Collection>) returnType:@[FlexibleNullability] java.util.Spliterator<<root>.Some<T of <root>.SomeList>?> [fake_override]
|
||||
overridden:
|
||||
@@ -471,7 +471,7 @@ FILE fqName:<root> fileName:/MultiList.kt
|
||||
correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:ABSTRACT [fake_override,val]
|
||||
overridden:
|
||||
public abstract fun <get-size> (): kotlin.Int declared in kotlin.collections.List
|
||||
public abstract fun <get-size> (): kotlin.Int declared in java.util.ArrayList
|
||||
public abstract fun <get-size> (): kotlin.Int [fake_override] declared in java.util.ArrayList
|
||||
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.List<E of kotlin.collections.List>
|
||||
FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:java.util.Collection<E of java.util.Collection>) returnType:@[FlexibleNullability] java.util.Spliterator<<root>.Some<kotlin.String>?> [fake_override]
|
||||
overridden:
|
||||
|
||||
Generated
+5
@@ -209,6 +209,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("intersectionOverrideProperies.kt")
|
||||
public void testIntersectionOverrideProperies() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jvmField.kt")
|
||||
public void testJvmField() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.kt");
|
||||
|
||||
Generated
+5
@@ -210,6 +210,11 @@ public class IrCompileKotlinAgainstKotlinTestGenerated extends AbstractIrCompile
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("intersectionOverrideProperies.kt")
|
||||
public void testIntersectionOverrideProperies() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jvmField.kt")
|
||||
public void testJvmField() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.kt");
|
||||
|
||||
+5
@@ -210,6 +210,11 @@ public class JvmIrAgainstOldBoxTestGenerated extends AbstractJvmIrAgainstOldBoxT
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("intersectionOverrideProperies.kt")
|
||||
public void testIntersectionOverrideProperies() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jvmField.kt")
|
||||
public void testJvmField() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.kt");
|
||||
|
||||
+5
@@ -210,6 +210,11 @@ public class JvmOldAgainstIrBoxTestGenerated extends AbstractJvmOldAgainstIrBoxT
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/internalWithOtherModuleName.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("intersectionOverrideProperies.kt")
|
||||
public void testIntersectionOverrideProperies() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/intersectionOverrideProperies.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("jvmField.kt")
|
||||
public void testJvmField() throws Exception {
|
||||
runTest("compiler/testData/compileKotlinAgainstKotlin/jvmField.kt");
|
||||
|
||||
Reference in New Issue
Block a user