JVM_IR KT-47739 recognize fake override external stubs

This commit is contained in:
Dmitry Petrov
2021-07-15 13:27:38 +03:00
committed by TeamCityServer
parent dd54338ec0
commit 8ea4916d64
11 changed files with 69 additions and 11 deletions
@@ -24482,6 +24482,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/jvmField/kt47328_var.kt");
}
@Test
@TestMetadata("kt47739.kt")
public void testKt47739() throws Exception {
runTest("compiler/testData/codegen/box/jvmField/kt47739.kt");
}
@Test
@TestMetadata("publicField.kt")
public void testPublicField() throws Exception {
@@ -153,7 +153,8 @@ abstract class DeclarationStubGenerator(
descriptor.name, descriptor.visibility, descriptor.modality,
descriptor.isVar, descriptor.isConst, descriptor.isLateInit,
descriptor.isDelegated, descriptor.isEffectivelyExternal(), descriptor.isExpect,
isFakeOverride = (origin == IrDeclarationOrigin.FAKE_OVERRIDE),
isFakeOverride = (origin == IrDeclarationOrigin.FAKE_OVERRIDE)
|| descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE,
stubGenerator = this, typeTranslator,
)
}
@@ -165,7 +166,9 @@ abstract class DeclarationStubGenerator(
return referenced.owner
}
return symbolTable.declareField(UNDEFINED_OFFSET, UNDEFINED_OFFSET, computeOrigin(descriptor), descriptor.original, descriptor.type.toIrType()) {
return symbolTable.declareField(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, computeOrigin(descriptor), descriptor.original, descriptor.type.toIrType()
) {
IrLazyField(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, computeOrigin(descriptor),
it, descriptor,
+32
View File
@@ -0,0 +1,32 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// MODULE: lib
// FILE: Value.kt
package vv
sealed class Value<T>(@JvmField val value: T) {
class StringValue(value: String) : Value<String>(value)
class BooleanValue(value: Boolean): Value<Boolean>(value)
}
// MODULE: main(lib)
// FILE: kt47739.kt
import kotlin.test.*
import vv.*
fun test(v: Value<*>) {
when (v) {
is Value.StringValue ->
assertEquals("a string", v.value)
is Value.BooleanValue ->
assertEquals(true, v.value)
}
}
fun box(): String {
test(Value.StringValue("a string"))
test(Value.BooleanValue(true))
return "OK"
}
@@ -85,7 +85,7 @@ FILE fqName:<root> fileName:/inlineCollectionOfInlineClass.kt
receiver: GET_VAR '<this>: <root>.InlineMutableSet declared in <root>.InlineMutableSet.<get-ms>' type=<root>.InlineMutableSet origin=null
PROPERTY name:size visibility:public modality:OPEN [val]
overridden:
public abstract size: kotlin.Int [val]
public abstract size: kotlin.Int [fake_override,val]
FUN name:<get-size> visibility:public modality:OPEN <> ($this:<root>.InlineMutableSet) returnType:kotlin.Int
correspondingProperty: PROPERTY name:size visibility:public modality:OPEN [val]
overridden:
+1 -1
View File
@@ -234,7 +234,7 @@ FILE fqName:<root> fileName:/kt30020.kt
VALUE_PARAMETER name:toIndex index:1 type:kotlin.Int
PROPERTY FAKE_OVERRIDE name:size visibility:public modality:ABSTRACT [fake_override,val]
overridden:
public abstract size: kotlin.Int [val]
public abstract size: kotlin.Int [fake_override,val]
FUN FAKE_OVERRIDE name:<get-size> visibility:public modality:ABSTRACT <> ($this:kotlin.collections.List<kotlin.Int>) returnType:kotlin.Int [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:ABSTRACT [fake_override,val]
overridden:
@@ -20,7 +20,7 @@ FILE fqName:<root> fileName:/AbstractMutableMap.kt
CONST Null type=kotlin.Nothing? value=null
PROPERTY name:entries visibility:public modality:OPEN [val]
overridden:
public abstract entries: kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K of kotlin.collections.AbstractMutableMap, V of kotlin.collections.AbstractMutableMap>> [val]
public abstract entries: kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K of kotlin.collections.AbstractMutableMap, V of kotlin.collections.AbstractMutableMap>> [fake_override,val]
FUN name:<get-entries> visibility:public modality:OPEN <> ($this:<root>.MyMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.collections.MutableSet<kotlin.collections.MutableMap.MutableEntry<K of <root>.MyMap, V of <root>.MyMap>>
correspondingProperty: PROPERTY name:entries visibility:public modality:OPEN [val]
overridden:
@@ -154,7 +154,7 @@ FILE fqName:<root> fileName:/AbstractMutableMap.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
PROPERTY FAKE_OVERRIDE name:keys visibility:public modality:OPEN [fake_override,val]
overridden:
public open keys: kotlin.collections.MutableSet<K of kotlin.collections.AbstractMutableMap> [val]
public open keys: kotlin.collections.MutableSet<K of kotlin.collections.AbstractMutableMap> [fake_override,val]
FUN FAKE_OVERRIDE name:<get-keys> visibility:public modality:OPEN <> ($this:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.collections.MutableSet<K of <root>.MyMap> [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:keys visibility:public modality:OPEN [fake_override,val]
overridden:
@@ -162,7 +162,7 @@ FILE fqName:<root> fileName:/AbstractMutableMap.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>
PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val]
overridden:
public open size: kotlin.Int [val]
public open size: kotlin.Int [fake_override,val]
FUN FAKE_OVERRIDE name:<get-size> visibility:public modality:OPEN <> ($this:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.Int [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:size visibility:public modality:OPEN [fake_override,val]
overridden:
@@ -170,7 +170,7 @@ FILE fqName:<root> fileName:/AbstractMutableMap.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Map<K of <root>.MyMap, V of <root>.MyMap>
PROPERTY FAKE_OVERRIDE name:values visibility:public modality:OPEN [fake_override,val]
overridden:
public open values: kotlin.collections.MutableCollection<V of kotlin.collections.AbstractMutableMap> [val]
public open values: kotlin.collections.MutableCollection<V of kotlin.collections.AbstractMutableMap> [fake_override,val]
FUN FAKE_OVERRIDE name:<get-values> visibility:public modality:OPEN <> ($this:kotlin.collections.MutableMap<K of <root>.MyMap, V of <root>.MyMap>) returnType:kotlin.collections.MutableCollection<V of <root>.MyMap> [fake_override]
correspondingProperty: PROPERTY FAKE_OVERRIDE name:values visibility:public modality:OPEN [fake_override,val]
overridden:
@@ -124,8 +124,8 @@ FILE fqName:<root> fileName:/DelegationAndInheritanceFromJava.kt
elements: GET_VAR 'elements: kotlin.collections.Collection<@[FlexibleNullability] kotlin.String?> declared in <root>.Impl.retainAll' type=kotlin.collections.Collection<@[FlexibleNullability] kotlin.String?> origin=null
PROPERTY DELEGATED_MEMBER name:size visibility:public modality:OPEN [val]
overridden:
public abstract size: kotlin.Int [val]
public abstract size: kotlin.Int [val]
public abstract size: kotlin.Int [fake_override,val]
public abstract size: kotlin.Int [fake_override,val]
FUN DELEGATED_MEMBER name:<get-size> visibility:public modality:OPEN <> ($this:<root>.Impl) returnType:kotlin.Int
correspondingProperty: PROPERTY DELEGATED_MEMBER name:size visibility:public modality:OPEN [val]
overridden:
+1 -1
View File
@@ -198,7 +198,7 @@ FILE fqName:<root> fileName:/MultiList.kt
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:SomeList modality:OPEN visibility:public superTypes:[<root>.MyList<T of <root>.SomeList>; java.util.ArrayList<<root>.Some<T of <root>.SomeList>>]'
PROPERTY FAKE_OVERRIDE name:modCount visibility:protected/*protected and package*/ modality:FINAL [fake_override,var]
overridden:
protected/*protected and package*/ final modCount: kotlin.Int [var]
protected/*protected and package*/ final modCount: kotlin.Int [fake_override,var]
FUN FAKE_OVERRIDE name:removeRange visibility:protected/*protected and package*/ modality:OPEN <> ($this:java.util.ArrayList<<root>.Some<T of <root>.SomeList>>, p0:kotlin.Int, p1:kotlin.Int) returnType:kotlin.Unit [fake_override]
overridden:
protected/*protected and package*/ open fun removeRange (p0: kotlin.Int, p1: kotlin.Int): kotlin.Unit declared in java.util.ArrayList
@@ -24440,6 +24440,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/jvmField/kt47328_var.kt");
}
@Test
@TestMetadata("kt47739.kt")
public void testKt47739() throws Exception {
runTest("compiler/testData/codegen/box/jvmField/kt47739.kt");
}
@Test
@TestMetadata("publicField.kt")
public void testPublicField() throws Exception {
@@ -24482,6 +24482,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/jvmField/kt47328_var.kt");
}
@Test
@TestMetadata("kt47739.kt")
public void testKt47739() throws Exception {
runTest("compiler/testData/codegen/box/jvmField/kt47739.kt");
}
@Test
@TestMetadata("publicField.kt")
public void testPublicField() throws Exception {
@@ -20589,6 +20589,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/jvmField/kt47328_var.kt");
}
@TestMetadata("kt47739.kt")
public void testKt47739() throws Exception {
runTest("compiler/testData/codegen/box/jvmField/kt47739.kt");
}
@TestMetadata("publicField.kt")
public void testPublicField() throws Exception {
runTest("compiler/testData/codegen/box/jvmField/publicField.kt");