// FIR_IDENTICAL // !LANGUAGE: +ProhibitConcurrentHashMapContains // FULL_JDK class A : java.util.concurrent.ConcurrentHashMap() { operator fun contains(x: Char): Boolean = true } class B : java.util.concurrent.ConcurrentHashMap() { override fun contains(value: Any?): Boolean { return super.contains(value) } } class C : java.util.concurrent.ConcurrentHashMap() { operator override fun contains(value: Any?): Boolean { return super.contains(value) } } open class D : java.util.concurrent.ConcurrentHashMap() class E : D() fun main() { run { // CHM test val hm = java.util.concurrent.ConcurrentHashMap() "" in hm "" !in hm 1 !in hm 2 in hm hm.contains("") hm.contains(1) "" in (hm as Map) "" !in (hm as Map) 1 in (hm as Map) 1 !in (hm as Map) } run { // A : CHM test val a = A() "" in a "" !in a 1 !in a 2 in a ' ' in a ' ' !in a a.contains("") a.contains(1) "" in (a as Map) "" !in (a as Map) 1 in (a as Map) 1 !in (a as Map) } run { // B : CHM test val b = B() "" in b "" !in b 1 !in b 2 in b b.contains("") b.contains(1) "" in (b as Map) "" !in (b as Map) 1 in (b as Map) 1 !in (b as Map) } run { // C : CHM // Actually, we could've allow calls here because the owner explicitly declared as operator, but semantics is still weird val c = C() "" in c "" !in c 1 !in c 2 in c c.contains("") c.contains(1) "" in (c as Map) "" !in (c as Map) 1 in (c as Map) 1 !in (c as Map) } run { // D : CHM val d = D() "" in d "" !in d 1 !in d 2 in d d.contains("") d.contains(1) "" in (d as Map) "" !in (d as Map) 1 in (d as Map) 1 !in (d as Map) } run { // E : D val e = E() "" in e "" !in e 1 !in e 2 in e e.contains("") e.contains(1) "" in (e as Map) "" !in (e as Map) 1 in (e as Map) 1 !in (e as Map) } }