JVM: support JVM-specific primitive/wrapper type overridability check

#KT-62045 Fixed
This commit is contained in:
Alexander Udalov
2023-09-08 17:50:00 +02:00
committed by Space Team
parent 39327a37cb
commit b2c30921e4
28 changed files with 848 additions and 1 deletions
@@ -0,0 +1,36 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_LIGHT_ANALYSIS
// FILE: box.kt
class E : D()
fun box(): String =
E().foo(0)
// FILE: A.java
public interface A {
default String foo(Integer value) {
return "Fail: A";
}
}
// FILE: K.kt
interface K : A
// FILE: B.java
public abstract class B implements K {
public String foo(int value) {
return "OK";
}
}
// FILE: C.kt
open class C : B()
// FILE: D.java
public class D extends C {
@Override
public String foo(Integer value) {
return "Fail: D";
}
}
@@ -0,0 +1,39 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_LIGHT_ANALYSIS
// FILE: box.kt
class E : D()
fun box(): String =
E().foo(0)
// FILE: A.java
public interface A {
default String foo(Integer value) {
return "Fail: A";
}
}
// FILE: B.java
public interface B extends A {
default String foo(int value) {
return "OK";
}
}
// FILE: AImpl.java
public abstract class AImpl implements A {}
// FILE: BImpl.java
public abstract class BImpl extends AImpl implements B {}
// FILE: C.kt
open class C : BImpl()
// FILE: D.java
public class D extends C {
@Override
public String foo(Integer value) {
return "Fail: D";
}
}
@@ -0,0 +1,33 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_LIGHT_ANALYSIS
// FILE: box.kt
class E : D()
fun box(): String =
E().foo(0.0)
// FILE: A.java
public interface A {
default String foo(Double value) {
return "Fail: A";
}
}
// FILE: B.java
public abstract class B implements A {
public String foo(double value) {
return "OK";
}
}
// FILE: C.kt
open class C : B()
// FILE: D.java
public class D extends C {
@Override
public String foo(Double value) {
return "Fail: D";
}
}
@@ -0,0 +1,33 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_LIGHT_ANALYSIS
// FILE: box.kt
class E : D()
fun box(): String =
E().foo(0.0)
// FILE: A.java
public interface A<T> {
default String foo(T value) {
return "Fail: A";
}
}
// FILE: B.java
public abstract class B implements A<Double> {
public String foo(double value) {
return "OK";
}
}
// FILE: C.kt
open class C : B()
// FILE: D.java
public class D extends C {
@Override
public String foo(Double value) {
return "Fail: D";
}
}
@@ -0,0 +1,33 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_LIGHT_ANALYSIS
// FILE: box.kt
class E : D()
fun box(): String =
E().foo(0)
// FILE: A.java
public interface A {
default String foo(Integer value) {
return "Fail: A";
}
}
// FILE: B.java
public abstract class B implements A {
public String foo(int value) {
return "OK";
}
}
// FILE: C.kt
open class C : B()
// FILE: D.java
public class D extends C {
@Override
public String foo(Integer value) {
return "Fail: D";
}
}
@@ -0,0 +1,37 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// IGNORE_LIGHT_ANALYSIS
// FILE: box.kt
class E : D()
fun box(): String =
E().foo(0)
// FILE: A.java
import org.jetbrains.annotations.Nullable;
public interface A {
default String foo(@Nullable Integer value) {
return "Fail: A";
}
}
// FILE: B.java
public abstract class B implements A {
public String foo(int value) {
return "OK";
}
}
// FILE: C.kt
open class C : B()
// FILE: D.java
import org.jetbrains.annotations.Nullable;
public class D extends C {
@Override
public String foo(@Nullable Integer value) {
return "Fail: D";
}
}