[FIR] Enhance getter overrides based on overridden properties

The following tests are failing with exceptions and will be fixed in the
following commits

j+k/testKjkPropertyAndExtensionProperty.kt
j+k/testKjkImplicitReturnType.kt

#KT-62118 Fixed
This commit is contained in:
Kirill Rakhman
2024-02-28 10:41:14 +01:00
committed by Space Team
parent 885ba11d97
commit 973e337bf5
42 changed files with 1140 additions and 1008 deletions
+40
View File
@@ -0,0 +1,40 @@
// ISSUE: KT-62118
// FILE: test.kt
class MyMutableEntry<K, V>(
override val key: K, override var value: V
) : MutableMap.MutableEntry<K, V> {
override fun setValue(newValue: V): V {
value = newValue
return value
}
}
class MyImmutableEntry<K, V>(
override val key: K, override val value: V
) : Map.Entry<K, V>
fun entries(map: HashMap<String, Int>) = map.entries
fun keys(map: HashMap<String, Int>) = map.keys
fun value(map: HashMap<String, Int>) = map.values
fun test() {
val map = HashMap<String, Int>()
entries(map).add(<!ARGUMENT_TYPE_MISMATCH!>MyMutableEntry(null, null)<!>)
entries(map).add(MyMutableEntry("", 1))
entries(map).add(<!ARGUMENT_TYPE_MISMATCH!>MyImmutableEntry("", 1)<!>)
keys(map).add(<!NULL_FOR_NONNULL_TYPE!>null<!>)
value(map).add(<!NULL_FOR_NONNULL_TYPE!>null<!>)
J().setX(null)
J().x = <!NULL_FOR_NONNULL_TYPE!>null<!>
}
open class K {
var x: String = ""
}
// FILE: J.java
public class J extends K {
@Override
public void setX(String value) {}
}
+40
View File
@@ -0,0 +1,40 @@
// ISSUE: KT-62118
// FILE: test.kt
class MyMutableEntry<K, V>(
override val key: K, override var value: V
) : MutableMap.MutableEntry<K, V> {
override fun setValue(newValue: V): V {
value = newValue
return value
}
}
class MyImmutableEntry<K, V>(
override val key: K, override val value: V
) : Map.Entry<K, V>
fun entries(map: HashMap<String, Int>) = map.entries
fun keys(map: HashMap<String, Int>) = map.keys
fun value(map: HashMap<String, Int>) = map.values
fun test() {
val map = HashMap<String, Int>()
entries(map).add(<!TYPE_MISMATCH, TYPE_MISMATCH!>MyMutableEntry(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)<!>)
entries(map).add(MyMutableEntry("", 1))
entries(map).add(<!TYPE_MISMATCH!>MyImmutableEntry("", 1)<!>)
keys(map).add(<!NULL_FOR_NONNULL_TYPE!>null<!>)
value(map).add(<!NULL_FOR_NONNULL_TYPE!>null<!>)
J().setX(null)
J().x = <!NULL_FOR_NONNULL_TYPE!>null<!>
}
open class K {
var x: String = ""
}
// FILE: J.java
public class J extends K {
@Override
public void setX(String value) {}
}