[FIR] Implement deprecation warning for synthetic without java base getter

Also implement new resolution behavior under language feature

^KT-63076 Fixed
^KT-64358
This commit is contained in:
Dmitriy Novozhilov
2023-12-15 17:08:53 +02:00
committed by Space Team
parent d5b0a5b220
commit fa33c5dc79
23 changed files with 384 additions and 35 deletions
@@ -36,22 +36,22 @@ fun test_1(a: A) {
}
fun test_2(b: B) {
b.x1
b.x2
b.x3
b.x4
b.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x1<!>
b.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x2<!>
b.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x3<!>
b.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x4<!>
}
fun test_3(c: C) {
c.x1
c.x2
c.x3
c.x4
c.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x1<!>
c.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x2<!>
c.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x3<!>
c.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x4<!>
}
fun test_4(d: D) {
d.x1
d.x2
d.x3
d.x4
d.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x1<!>
d.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x2<!>
d.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x3<!>
d.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>x4<!>
}
@@ -0,0 +1,28 @@
// FIR_IDENTICAL
// LANGUAGE: +ForbidSyntheticPropertiesWithoutBaseJavaGetter
// FILE: Base.kt
open class Base {
fun getFoo(): String = ""
fun setFoo(value: String) {}
fun getBar(): String = ""
}
// FILE: Derived.java
public class Derived extends Base {
public void setBar(String value) {}
}
// FILE: main.kt
class Impl : Derived()
fun test_1(x: Impl) {
x.<!UNRESOLVED_REFERENCE!>foo<!>
x.<!UNRESOLVED_REFERENCE!>foo<!> = "a"
}
fun test_2(x: Impl) {
x.<!UNRESOLVED_REFERENCE!>bar<!>
x.<!UNRESOLVED_REFERENCE!>bar<!> = "a"
}
@@ -0,0 +1,27 @@
// LANGUAGE: -ForbidSyntheticPropertiesWithoutBaseJavaGetter
// FILE: Base.kt
open class Base {
fun getFoo(): String = ""
fun setFoo(value: String) {}
fun getBar(): String = ""
}
// FILE: Derived.java
public class Derived extends Base {
public void setBar(String value) {}
}
// FILE: main.kt
class Impl : Derived()
fun test_1(x: Impl) {
x.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN("fun getFoo(): String; getFoo")!>foo<!>
x.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN("fun setFoo(value: String): Unit; setFoo")!>foo<!> = "a"
}
fun test_2(x: Impl) {
x.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN("fun getBar(): String; getBar")!>bar<!>
x.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN("fun setBar(value: String!): Unit; setBar")!>bar<!> = "a"
}
@@ -0,0 +1,27 @@
// LANGUAGE: -ForbidSyntheticPropertiesWithoutBaseJavaGetter
// FILE: Base.kt
open class Base {
fun getFoo(): String = ""
fun setFoo(value: String) {}
fun getBar(): String = ""
}
// FILE: Derived.java
public class Derived extends Base {
public void setBar(String value) {}
}
// FILE: main.kt
class Impl : Derived()
fun test_1(x: Impl) {
x.<!UNRESOLVED_REFERENCE!>foo<!>
x.<!UNRESOLVED_REFERENCE!>foo<!> = "a"
}
fun test_2(x: Impl) {
x.<!UNRESOLVED_REFERENCE!>bar<!>
x.<!UNRESOLVED_REFERENCE!>bar<!> = "a"
}
@@ -0,0 +1,19 @@
// ISSUE: KT-59550
// FILE: Base.kt
abstract class Base(private val foo: String) {
fun getFoo(): String = foo
}
// FILE: Intermediate.java
public class Intermediate extends Base {
public Intermediate(String foo) {
super(foo);
}
}
// FILE: main.kt
class Final(val i: Intermediate) : Intermediate(i.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>foo<!>)
fun test(x: Final) {
x.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>foo<!>
}
@@ -0,0 +1,19 @@
// ISSUE: KT-59550
// FILE: Base.kt
abstract class Base(private val foo: String) {
fun getFoo(): String = foo
}
// FILE: Intermediate.java
public class Intermediate extends Base {
public Intermediate(String foo) {
super(foo);
}
}
// FILE: main.kt
class Final(val i: Intermediate) : Intermediate(i.foo)
fun test(x: Final) {
x.foo
}
@@ -14,7 +14,7 @@ fun foo(k: KotlinClass2) {
useInt(k.something2)
useInt(k.getSomethingKotlin1())
useInt(k.getSomethingKotlin2())
k.somethingKotlin1
k.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>somethingKotlin1<!>
k.<!UNRESOLVED_REFERENCE!>somethingKotlin2<!>
}
@@ -8,7 +8,7 @@ open class KotlinClass {
fun foo(javaClass: JavaClass) {
useInt(javaClass.getSomething1())
useInt(javaClass.something1)
useInt(javaClass.<!SYNTHETIC_PROPERTY_WITHOUT_JAVA_ORIGIN!>something1<!>)
javaClass.setSomething2(javaClass.getSomething2() + 1)
javaClass.something2 = javaClass.something2 + 1