K2: don't generate Java overridden synthetics for Kotlin get/sets

#KT-59038 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-06-12 17:52:30 +02:00
committed by Space Team
parent 9e39b7ef87
commit d8a20f1975
23 changed files with 459 additions and 3 deletions
@@ -0,0 +1,20 @@
FILE: test.kt
public final class Base : R|kotlin/Any| {
public constructor(x: R|kotlin/Any|): R|Base| {
super<R|kotlin/Any|>()
}
public final val x: R|kotlin/Any| = R|<local>/x|
public get(): R|kotlin/Any|
public final fun <T> getFoo(): R|T| {
^getFoo (this@R|/Base|.R|/Base.x| as R|T|)
}
}
public final fun bar(some: R|Some|): R|kotlin/Unit| {
lval foo: <ERROR TYPE REF: Unresolved name: foo> = R|<local>/some|.<Unresolved name: foo>#
lval baz: <ERROR TYPE REF: Unresolved name: foo> = R|<local>/some|.<Unresolved name: foo>#<R|kotlin/String|>
lval getFoo: <ERROR TYPE REF: Cannot infer argument for type parameter T> = R|<local>/some|.R|/Base.getFoo<CS errors: /Base.getFoo>#|<<ERROR TYPE REF: Cannot infer argument for type parameter T>>()
lval getBaz: R|kotlin/String| = R|<local>/some|.R|/Base.getFoo|<R|kotlin/String|>()
}
@@ -0,0 +1,21 @@
// FILE: Some.java
public class Some extends Base {
public Some(Object o) {
super(o);
}
}
// FILE: test.kt
class Base(val x: Any) {
fun <T> getFoo(): T = x <!UNCHECKED_CAST!>as T<!>
}
fun bar(some: Some) {
val foo = some.<!UNRESOLVED_REFERENCE!>foo<!>
val baz = some.<!UNRESOLVED_REFERENCE!>foo<!><String>
val getFoo = some.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>getFoo<!>()
val getBaz = some.getFoo<String>()
}
@@ -0,0 +1,20 @@
FILE: test.kt
public final class Base : R|kotlin/Any| {
public constructor(foo: R|kotlin/Any|): R|Base| {
super<R|kotlin/Any|>()
}
internal final val foo: R|kotlin/Any| = R|<local>/foo|
internal get(): R|kotlin/Any|
public final fun <T> getFoo(): R|T| {
^getFoo (this@R|/Base|.R|/Base.foo| as R|T|)
}
}
public final fun bar(some: R|Some|): R|kotlin/Unit| {
lval foo: R|kotlin/Any| = R|<local>/some|.R|/Base.foo|
lval baz: R|kotlin/Any| = R|<local>/some|.R|/Base.foo|<R|kotlin/String|>
lval getFoo: <ERROR TYPE REF: Cannot infer argument for type parameter T> = R|<local>/some|.R|/Base.getFoo<CS errors: /Base.getFoo>#|<<ERROR TYPE REF: Cannot infer argument for type parameter T>>()
lval getBaz: R|kotlin/String| = R|<local>/some|.R|/Base.getFoo|<R|kotlin/String|>()
}
@@ -0,0 +1,21 @@
// FILE: Some.java
public class Some extends Base {
public Some(Object o) {
super(o);
}
}
// FILE: test.kt
class Base(internal val foo: Any) {
fun <T> getFoo(): T = foo <!UNCHECKED_CAST!>as T<!>
}
fun bar(some: Some) {
val foo = some.foo
val baz = some.<!EXPLICIT_TYPE_ARGUMENTS_IN_PROPERTY_ACCESS!>foo<!><String>
val getFoo = some.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>getFoo<!>()
val getBaz = some.getFoo<String>()
}
@@ -0,0 +1,7 @@
FILE: test.kt
public final fun bar(some: R|Some|): R|kotlin/Unit| {
lval foo: <ERROR TYPE REF: Unresolved name: foo> = R|<local>/some|.<Unresolved name: foo>#
lval baz: <ERROR TYPE REF: Unresolved name: foo> = R|<local>/some|.<Unresolved name: foo>#<R|kotlin/String|>
lval getFoo: <ERROR TYPE REF: Cannot infer argument for type parameter T> = R|<local>/some|.R|/Some.getFoo<CS errors: /Some.getFoo>#|<<ERROR TYPE REF: Cannot infer argument for type parameter T>>()
lval getBaz: R|kotlin/String!| = R|<local>/some|.R|/Some.getFoo|<R|kotlin/String|>()
}
@@ -0,0 +1,18 @@
// FIR_IDENTICAL
// FILE: Some.java
public class Some {
public <T> T getFoo() {
return null;
}
}
// FILE: test.kt
fun bar(some: Some) {
val foo = some.<!UNRESOLVED_REFERENCE!>foo<!>
val baz = some.<!UNRESOLVED_REFERENCE!>foo<!><String>
val getFoo = some.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>getFoo<!>()
val getBaz = some.getFoo<String>()
}