| // TARGET_BACKEND: JVM | |
| // ^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" | |
| } |