mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-05-17 08:31:29 +00:00
This change is to fill the gap between Kotlin Collection classes(immutable) and Java Collection classes(mutable), to avoid calling an unsupported operation like remove() on an immutable class in jvm.
34 lines
1002 B
Kotlin
Vendored
34 lines
1002 B
Kotlin
Vendored
// TARGET_BACKEND: JVM
|
|
|
|
class MyCollection<T>: Collection<T> {
|
|
override val size: Int get() = 0
|
|
override fun isEmpty(): Boolean = true
|
|
override fun contains(o: T): Boolean = false
|
|
override fun iterator(): Iterator<T> = throw UnsupportedOperationException()
|
|
override fun containsAll(c: Collection<T>): Boolean = false
|
|
override fun hashCode(): Int = 0
|
|
override fun equals(other: Any?): Boolean = false
|
|
}
|
|
|
|
fun expectUoe(block: () -> Any) {
|
|
try {
|
|
block()
|
|
throw AssertionError()
|
|
} catch (e: UnsupportedOperationException) {
|
|
}
|
|
}
|
|
|
|
fun box(): String {
|
|
val myCollection = MyCollection<String>()
|
|
val collection = myCollection as java.util.Collection<String>
|
|
|
|
expectUoe { collection.add("") }
|
|
expectUoe { collection.remove("") }
|
|
expectUoe { collection.addAll(myCollection) }
|
|
expectUoe { collection.removeAll(myCollection) }
|
|
expectUoe { collection.retainAll(myCollection) }
|
|
expectUoe { collection.clear() }
|
|
|
|
return "OK"
|
|
}
|