diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt index 15f18873378..2f34402d08a 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/scopes/JavaOverrideChecker.kt @@ -28,16 +28,23 @@ class JavaOverrideChecker internal constructor( private fun isEqualTypes(candidateType: ConeKotlinType, baseType: ConeKotlinType, substitutor: ConeSubstitutor): Boolean { if (candidateType is ConeFlexibleType) return isEqualTypes(candidateType.lowerBound, baseType, substitutor) if (baseType is ConeFlexibleType) return isEqualTypes(candidateType, baseType.lowerBound, substitutor) - return if (candidateType is ConeClassLikeType && baseType is ConeClassLikeType) { - candidateType.lookupTag.classId.let { it.readOnlyToMutable() ?: it } == baseType.lookupTag.classId.let { it.readOnlyToMutable() ?: it } - } else { - with(context) { - isEqualTypeConstructors( - substitutor.substituteOrSelf(candidateType).typeConstructor(), - substitutor.substituteOrSelf(baseType).typeConstructor() - ) + if (candidateType is ConeClassLikeType && baseType is ConeClassLikeType) { + return candidateType.lookupTag.classId.let { it.readOnlyToMutable() ?: it } == baseType.lookupTag.classId.let { it.readOnlyToMutable() ?: it } + } + if (candidateType is ConeClassLikeType && baseType is ConeTypeParameterType) { + val boundType = baseType.lookupTag.typeParameterSymbol.fir.bounds.singleOrNull()?.toNotNullConeKotlinType( + session, javaTypeParameterStack + ) + if (boundType != null) { + return isEqualTypes(candidateType, boundType, substitutor) } } + return with(context) { + isEqualTypeConstructors( + substitutor.substituteOrSelf(candidateType).typeConstructor(), + substitutor.substituteOrSelf(baseType).typeConstructor() + ) + } } override fun isEqualTypes(candidateTypeRef: FirTypeRef, baseTypeRef: FirTypeRef, substitutor: ConeSubstitutor) = diff --git a/compiler/fir/resolve/testData/resolve/stdlib/j+k/MyMap.txt b/compiler/fir/resolve/testData/resolve/stdlib/j+k/MyMap.txt index e6008bb7b71..bde692821a1 100644 --- a/compiler/fir/resolve/testData/resolve/stdlib/j+k/MyMap.txt +++ b/compiler/fir/resolve/testData/resolve/stdlib/j+k/MyMap.txt @@ -4,7 +4,7 @@ FILE: test.kt ^ String(value) } ) - lval otherResult: R|ft!| = R|/map|.R|FakeOverride!|>|(String(key), String(value)) + lval otherResult: R|ft!| = R|/map|.R|FakeOverride!|>|(String(key), String(value)) lval anotherResult: R|kotlin/String?| = R|/map|.R|FakeOverride|(String(key), String(value)) R|/map|.R|FakeOverride|( = forEach@fun (key: R|ft!|, value: R|ft!|): R|kotlin/Unit| { R|kotlin/io/println|((R|/key|.R|kotlin/Any.toString|(), String(: ), R|/value|.R|kotlin/Any.toString|())) diff --git a/compiler/fir/resolve/testData/resolve/stdlib/problems/weakHashMap.kt b/compiler/fir/resolve/testData/resolve/stdlib/problems/weakHashMap.kt index 0c028cadf13..ffca85a60ce 100644 --- a/compiler/fir/resolve/testData/resolve/stdlib/problems/weakHashMap.kt +++ b/compiler/fir/resolve/testData/resolve/stdlib/problems/weakHashMap.kt @@ -5,6 +5,6 @@ import java.util.* val someMap = WeakHashMap() fun foo() { - someMap[""] + someMap[""] } diff --git a/compiler/fir/resolve/testData/resolve/stdlib/problems/weakHashMap.txt b/compiler/fir/resolve/testData/resolve/stdlib/problems/weakHashMap.txt index a1f45ce9e1e..2126aea0844 100644 --- a/compiler/fir/resolve/testData/resolve/stdlib/problems/weakHashMap.txt +++ b/compiler/fir/resolve/testData/resolve/stdlib/problems/weakHashMap.txt @@ -2,5 +2,5 @@ FILE: weakHashMap.kt public final val someMap: R|java/util/WeakHashMap| = R|java/util/WeakHashMap.WeakHashMap|() public get(): R|java/util/WeakHashMap| public final fun foo(): R|kotlin/Unit| { - R|/someMap|.#(String()) + R|/someMap|.R|FakeOverride|(String()) } diff --git a/compiler/fir/resolve/testData/resolve/stdlib/removeOnAbstractMap.txt b/compiler/fir/resolve/testData/resolve/stdlib/removeOnAbstractMap.txt index 943b6c1626e..e24e4aabaeb 100644 --- a/compiler/fir/resolve/testData/resolve/stdlib/removeOnAbstractMap.txt +++ b/compiler/fir/resolve/testData/resolve/stdlib/removeOnAbstractMap.txt @@ -1,5 +1,5 @@ FILE: removeOnAbstractMap.kt public final fun test(map: R|java/util/AbstractMap|): R|kotlin/Unit| { R|/map|.R|FakeOverride|(String(), Null(null)) - R|/map|.R|FakeOverride|(Null(null)) + R|/map|.R|FakeOverride|(Null(null)) } diff --git a/compiler/testData/codegen/box/when/whenArgumentIsEvaluatedOnlyOnce.kt b/compiler/testData/codegen/box/when/whenArgumentIsEvaluatedOnlyOnce.kt index 31866812756..665d10d7d3a 100644 --- a/compiler/testData/codegen/box/when/whenArgumentIsEvaluatedOnlyOnce.kt +++ b/compiler/testData/codegen/box/when/whenArgumentIsEvaluatedOnlyOnce.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // KJS_WITH_FULL_RUNTIME var x = 0 fun inc(): Int { diff --git a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/removeAtInt.fir.kt b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/removeAtInt.fir.kt index ff15421906f..90ecc2b0a35 100644 --- a/compiler/testData/diagnostics/tests/j+k/collectionOverrides/removeAtInt.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/collectionOverrides/removeAtInt.fir.kt @@ -18,6 +18,6 @@ fun main(a: A, b: B, c: ArrayList) { a.removeAt(0) b.remove(1) b.removeAt(0) - c.remove(1) + c.remove(1) c.removeAt(0) } diff --git a/compiler/testData/diagnostics/tests/regressions/DoubleDefine.fir.kt b/compiler/testData/diagnostics/tests/regressions/DoubleDefine.fir.kt index 8e63f0f3c10..222207164de 100644 --- a/compiler/testData/diagnostics/tests/regressions/DoubleDefine.fir.kt +++ b/compiler/testData/diagnostics/tests/regressions/DoubleDefine.fir.kt @@ -14,7 +14,7 @@ fun evaluateArg(expr: CharSequence, numbers: ArrayList): Int { if (c >= '0' && c <= '9') { val n = c - '0' if (!numbers.contains(n)) throw Exception("You used incorrect number: " + n) - numbers.remove(n) + numbers.remove(n) return n } throw Exception("Syntax error: Unrecognized character " + c) diff --git a/compiler/testData/diagnostics/testsWithStdLib/inference/annotationsForResolve/onlyInputTypesAndTopLevelCapturedTypes.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/inference/annotationsForResolve/onlyInputTypesAndTopLevelCapturedTypes.fir.kt index 0d977f24be4..d421514ddbb 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/inference/annotationsForResolve/onlyInputTypesAndTopLevelCapturedTypes.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/inference/annotationsForResolve/onlyInputTypesAndTopLevelCapturedTypes.fir.kt @@ -39,9 +39,9 @@ fun test2(value: Any?) { // From KT-32116 fun test3(h: HashMap<*, *>) { - val a = h["str"] - val b = h[1] - val c = h["other"] as? Double + val a = h["str"] + val b = h[1] + val c = h["other"] as? Double } // From KT-32218