345fdc214b
Previously enhanced symbols were cached inside SignatureEnhancement, which is created independently for each enhancement scope. This may cause creation of multiple enhanced symbols for same java declaration in presence of multiple scope sessions (mutithread compiler, IDE, separate scope session for checkers) ^KT-50858 Fixed
80 lines
2.5 KiB
Kotlin
Vendored
80 lines
2.5 KiB
Kotlin
Vendored
// !LANGUAGE: -ProhibitConcurrentHashMapContains
|
|
// FULL_JDK
|
|
|
|
class A : java.util.concurrent.ConcurrentHashMap<String, Int>() {
|
|
operator fun contains(x: Char): Boolean = true
|
|
}
|
|
class B : java.util.concurrent.ConcurrentHashMap<String, Int>() {
|
|
override fun contains(value: Any?): Boolean {
|
|
return super.contains(value)
|
|
}
|
|
}
|
|
|
|
class C : java.util.concurrent.ConcurrentHashMap<String, Int>() {
|
|
operator override fun contains(value: Any?): Boolean {
|
|
return super.contains(value)
|
|
}
|
|
}
|
|
|
|
fun main() {
|
|
val hm = java.util.concurrent.ConcurrentHashMap<String, Int>()
|
|
"" <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>in<!> hm
|
|
"" <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>!in<!> hm
|
|
1 <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>!in<!> hm
|
|
2 <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>in<!> hm
|
|
|
|
hm.contains("")
|
|
hm.contains(1)
|
|
|
|
"" in (hm as Map<String, Int>)
|
|
"" !in (hm as Map<String, Int>)
|
|
1 in (hm as Map<String, Int>)
|
|
1 !in (hm as Map<String, Int>)
|
|
|
|
val a = A()
|
|
"" <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>in<!> a
|
|
"" <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>!in<!> a
|
|
1 <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>!in<!> a
|
|
2 <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>in<!> a
|
|
|
|
' ' in a
|
|
' ' !in a
|
|
a.contains("")
|
|
a.contains(1)
|
|
|
|
"" in (a as Map<String, Int>)
|
|
"" !in (a as Map<String, Int>)
|
|
1 in (a as Map<String, Int>)
|
|
1 !in (a as Map<String, Int>)
|
|
|
|
val b = B()
|
|
"" <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>in<!> b
|
|
"" <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>!in<!> b
|
|
1 <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>!in<!> b
|
|
2 <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>in<!> b
|
|
|
|
b.contains("")
|
|
b.contains(1)
|
|
|
|
"" in (b as Map<String, Int>)
|
|
"" !in (b as Map<String, Int>)
|
|
1 in (b as Map<String, Int>)
|
|
1 !in (b as Map<String, Int>)
|
|
|
|
// Actually, we could've allow calls here because the owner explicitly declared as operator, but semantics is still weird
|
|
val c = C()
|
|
"" <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>in<!> c
|
|
"" <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>!in<!> c
|
|
1 <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>!in<!> c
|
|
2 <!CONCURRENT_HASH_MAP_CONTAINS_OPERATOR_WARNING!>in<!> c
|
|
|
|
c.contains("")
|
|
c.contains(1)
|
|
|
|
"" in (c as Map<String, Int>)
|
|
"" !in (c as Map<String, Int>)
|
|
1 in (c as Map<String, Int>)
|
|
1 !in (c as Map<String, Int>)
|
|
}
|
|
|