// !LANGUAGE: -ProhibitConcurrentHashMapContains // !WITH_NEW_INFERENCE // 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) } } fun main() { 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) 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) 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) // 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) }