blob: 37fb559b7f5d5c4536c4efc3d437ee2145fcc9a2 [file]
// TARGET_BACKEND: JVM_IR
// ^Old backend reports CONFLICTING_JVM_DECLARATIONS on C1, K1 with IR is fine.
// FULL_JDK
// FILE: Remove.java
public interface Remove {
Boolean remove(Integer element);
}
// FILE: GetBoxed.java
public interface GetBoxed {
Character get(Integer i);
}
// FILE: GetPrimitive.java
public interface GetPrimitive {
Character get(int i);
}
// FILE: MyString.java
public abstract class MyString implements CharSequence {
@Override public char charAt(int i) { return 'j'; }
@Override public int length() { return 0; }
@Override public CharSequence subSequence(int start, int end) { return null; }
}
// FILE: box.kt
class RemoveOverridden : ArrayList<Int>(), Remove {
// Overrides Remove.remove but not ArrayList.remove
override fun remove(element: Int?): Boolean = false
}
class RemoveNotOverridden : ArrayList<Int>(), Remove {
}
class GetBoxedOverridden : MyString(), GetBoxed {
// Overrides GetBoxed.get but not MyString.charAt
override fun get(i: Int?): Char? = 'k'
}
class GetPrimitiveOverridden : MyString(), GetPrimitive {
// Overrides GetPrimitive.get and MyString.charAt
override fun get(i: Int): Char = 'k'
}
fun box(): String {
val r1 = RemoveOverridden()
r1.add(1)
r1.add(2)
r1.remove(1 as Int?)
(r1 as Remove).remove(1)
if (1 !in r1) return "FAIL 1"
r1.remove(1)
if (1 in r1) return "FAIL 2"
(r1 as ArrayList<Int>).remove(2)
if (2 in r1) return "FAIL 3"
val r2 = RemoveNotOverridden()
r2.add(1)
r2.add(2)
r2.add(3)
(r2 as Remove).remove(1)
if (1 in r2) return "FAIL 4"
r2.remove(2)
if (1 in r2) return "FAIL 5"
(r2 as ArrayList<Int>).remove(3)
if (2 in r2) return "FAIL 6"
val g1 = GetBoxedOverridden()
if (g1.get(1) != 'j') return "FAIL 7"
if ((g1 as MyString).get(1) != 'j') return "FAIL 8"
if ((g1 as GetBoxed).get(1) != 'k') return "FAIL 9"
val g2 = GetPrimitiveOverridden()
if (g2.get(1) != 'k') return "FAIL 10"
if ((g2 as MyString).get(1) != 'k') return "FAIL 11"
if ((g2 as GetPrimitive).get(1) != 'k') return "FAIL 12"
return "OK"
}