// 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(), Remove { // Overrides Remove.remove but not ArrayList.remove override fun remove(element: Int?): Boolean = false } class RemoveNotOverridden : ArrayList(), 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).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).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" }