| // TARGET_BACKEND: JVM |
| // WITH_STDLIB |
| |
| // See also: KT-42083 |
| |
| var removed = "" |
| |
| class MyCharSequenceSet1 : Set<CharSequence> { |
| override val size: Int get() = TODO() |
| override fun contains(element: CharSequence): Boolean = TODO() |
| override fun containsAll(elements: Collection<CharSequence>): Boolean = TODO() |
| override fun isEmpty(): Boolean = TODO() |
| override fun iterator(): Iterator<CharSequence> = TODO() |
| |
| fun <Q : CharSequence> remove(cs: Q): Boolean { |
| removed = cs.toString() |
| return false |
| } |
| } |
| |
| class MyCharSequenceSet2 : Set<CharSequence> { |
| override val size: Int get() = TODO() |
| override fun contains(element: CharSequence): Boolean = TODO() |
| override fun containsAll(elements: Collection<CharSequence>): Boolean = TODO() |
| override fun isEmpty(): Boolean = TODO() |
| override fun iterator(): Iterator<CharSequence> = TODO() |
| |
| fun <Q : CharSequence> remove(cs: Q?): Boolean { |
| removed = cs.toString() |
| return false |
| } |
| } |
| |
| fun box(): String { |
| val s1 = MyCharSequenceSet1() |
| s1.remove("OK") |
| if (removed != "OK") throw AssertionError() |
| |
| try { |
| (s1 as java.util.Set<CharSequence>).remove("OK") |
| throw AssertionError("(s1 as java.util.Set<CharSequence>) should throw UnsupportedOperationException") |
| } catch (e: UnsupportedOperationException) { |
| } catch (e: Throwable) { |
| throw AssertionError("(s1 as java.util.Set<CharSequence>) should throw UnsupportedOperationException") |
| } |
| |
| removed = "" |
| |
| val s2 = MyCharSequenceSet2() |
| s2.remove("OK") |
| if (removed != "OK") throw AssertionError() |
| |
| try { |
| (s2 as java.util.Set<CharSequence>).remove("OK") |
| throw AssertionError("(s2 as java.util.Set<CharSequence>) should throw UnsupportedOperationException") |
| } catch (e: UnsupportedOperationException) { |
| } catch (e: Throwable) { |
| throw AssertionError("(s2 as java.util.Set<CharSequence>) should throw UnsupportedOperationException") |
| } |
| |
| return "OK" |
| } |