Fix backend issue related to JvmStatic val with accessor

Do not treat accessors to JvmStatic properties as having dispatch receiver

 #KT-11585 Fixed
This commit is contained in:
Denis Zharkov
2016-10-04 16:46:38 +03:00
parent 543cf7b265
commit 194853b5c2
5 changed files with 75 additions and 2 deletions
@@ -46,7 +46,9 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem
boolean setterAccessorRequired
) {
this(property, property.getType(), DescriptorUtils.getReceiverParameterType(property.getExtensionReceiverParameter()),
property.getDispatchReceiverParameter(), containingDeclaration, superCallTarget, nameSuffix,
/* dispatchReceiverParameter = */
CodegenUtilKt.isJvmStaticInObjectOrClass(property) ? null : property.getDispatchReceiverParameter(),
containingDeclaration, superCallTarget, nameSuffix,
getterAccessorRequired, setterAccessorRequired);
}
@@ -62,7 +64,7 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem
this(original, propertyType, receiverType, dispatchReceiverParameter, containingDeclaration, superCallTarget, nameSuffix, true, true);
}
protected AccessorForPropertyDescriptor(
private AccessorForPropertyDescriptor(
@NotNull PropertyDescriptor original,
@NotNull KotlinType propertyType,
@Nullable KotlinType receiverType,
@@ -0,0 +1,15 @@
// WITH_RUNTIME
var result = "fail 1"
object Foo {
@JvmStatic
private val a = "OK"
fun foo() = run { result = a }
}
fun box(): String {
Foo.foo()
return result
}
@@ -0,0 +1,20 @@
// WITH_RUNTIME
var result = "fail 2"
class Foo {
val b = { a }
val c = Runnable { result = a }
companion object {
@JvmStatic
private val a = "OK"
}
}
fun box(): String {
if (Foo().b() != "OK") return "fail 1"
Foo().c.run()
return result
}
@@ -0,0 +1,18 @@
// WITH_RUNTIME
var result = "fail 2"
object Foo {
@JvmStatic
private val a = "OK"
val b = { a }
val c = Runnable { result = a }
}
fun box(): String {
if (Foo.b() != "OK") return "fail 1"
Foo.c.run()
return result
}
@@ -8485,6 +8485,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("inlinePropertyAccessors.kt")
public void testInlinePropertyAccessors() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/inlinePropertyAccessors.kt");
doTest(fileName);
}
@TestMetadata("kt9897_static.kt")
public void testKt9897_static() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/kt9897_static.kt");
@@ -8527,6 +8533,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("propertyAccessorsCompanion.kt")
public void testPropertyAccessorsCompanion() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/propertyAccessorsCompanion.kt");
doTest(fileName);
}
@TestMetadata("propertyAccessorsObject.kt")
public void testPropertyAccessorsObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/propertyAccessorsObject.kt");
doTest(fileName);
}
@TestMetadata("propertyAsDefault.kt")
public void testPropertyAsDefault() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmStatic/propertyAsDefault.kt");