~ Fix KT-78832 ^KT-78832 Fixed
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/LanguageVersionUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/LanguageVersionUtils.kt index 2b1699c..4281f49 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/LanguageVersionUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/LanguageVersionUtils.kt
@@ -9,5 +9,9 @@ context(c: SessionHolder) fun LanguageFeature.isEnabled(): Boolean { - return c.session.languageVersionSettings.supportsFeature(this) + return this.isEnabled(c.session) +} + +fun LanguageFeature.isEnabled(session: FirSession): Boolean { + return session.languageVersionSettings.supportsFeature(this) } \ No newline at end of file
diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/stages/ResolutionStages.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/stages/ResolutionStages.kt index a7c3733..a87c679 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/stages/ResolutionStages.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/stages/ResolutionStages.kt
@@ -22,9 +22,7 @@ import org.jetbrains.kotlin.fir.references.symbol import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.* -import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext import org.jetbrains.kotlin.fir.resolve.calls.candidate.* -import org.jetbrains.kotlin.fir.resolve.calls.candidate.CheckerSink import org.jetbrains.kotlin.fir.resolve.inference.csBuilder import org.jetbrains.kotlin.fir.resolve.inference.isAnyOfDelegateOperators import org.jetbrains.kotlin.fir.resolve.inference.model.ConeExplicitTypeParameterConstraintPosition @@ -753,6 +751,8 @@ internal fun Candidate.shouldHaveLowPriorityDueToSAM(bodyResolveComponents: BodyResolveComponents): Boolean { if (!usesSamConversion || isJavaApplicableCandidate()) return false + if (LanguageFeature.NoLowerPriorityForSamConversionOnJavaInterfaces.isEnabled(callInfo.session)) return false + return argumentMapping.values.any { val coneType = it.returnTypeRef.coneType bodyResolveComponents.samResolver.isSamType(coneType) &&
diff --git a/compiler/testData/diagnostics/tests/j+k/sam/compatibilityResolveToOuterScopeForKotlinFunctions.fir.kt b/compiler/testData/diagnostics/tests/j+k/sam/compatibilityResolveToOuterScopeForKotlinFunctions.fir.kt index 423d51c..a5e66e7 100644 --- a/compiler/testData/diagnostics/tests/j+k/sam/compatibilityResolveToOuterScopeForKotlinFunctions.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/sam/compatibilityResolveToOuterScopeForKotlinFunctions.fir.kt
@@ -42,7 +42,7 @@ fun test(f: () -> Unit) { val result = foo(1, f) - <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>result<!> + <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int")!>result<!> } } @@ -54,7 +54,7 @@ fun test() { val result = foo(1, ::bar) - <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.String")!>result<!> + <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Int")!>result<!> } }
diff --git a/compiler/testData/diagnostics/tests/j+k/sam/javaKotlinSamConflict.fir.kt b/compiler/testData/diagnostics/tests/j+k/sam/javaKotlinSamConflict.fir.kt new file mode 100644 index 0000000..75325d9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/sam/javaKotlinSamConflict.fir.kt
@@ -0,0 +1,24 @@ +// RUN_PIPELINE_TILL: FRONTEND +// ISSUE: KT-48323 + +// FILE: Jerry.java +public interface Jerry { + void call(int i); +} + +// FILE: Tom.kt +fun interface Tom { + fun tom(i: Int) +} + +fun foo(m: Tom) = 1 +fun foo(j: Jerry) = "2" +fun test() { + val result = <!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!> { <!CANNOT_INFER_VALUE_PARAMETER_TYPE!>i<!> -> + val j = i + 1 + } + <!DEBUG_INFO_EXPRESSION_TYPE("ERROR CLASS: Ambiguity: foo, [/foo, /foo]")!>result<!> +} + +/* GENERATED_FIR_TAGS: additiveExpression, funInterface, functionDeclaration, integerLiteral, interfaceDeclaration, +javaType, lambdaLiteral, localProperty, propertyDeclaration, samConversion, stringLiteral */
diff --git a/compiler/testData/diagnostics/tests/j+k/sam/javaKotlinSamConflict.kt b/compiler/testData/diagnostics/tests/j+k/sam/javaKotlinSamConflict.kt index 0e38e21..2d64041 100644 --- a/compiler/testData/diagnostics/tests/j+k/sam/javaKotlinSamConflict.kt +++ b/compiler/testData/diagnostics/tests/j+k/sam/javaKotlinSamConflict.kt
@@ -1,5 +1,4 @@ -// RUN_PIPELINE_TILL: BACKEND -// FIR_IDENTICAL +// RUN_PIPELINE_TILL: FRONTEND // ISSUE: KT-48323 // FILE: Jerry.java
diff --git a/compiler/testData/diagnostics/tests/j+k/sam/samVsGenericOverloads.fir.kt b/compiler/testData/diagnostics/tests/j+k/sam/samVsGenericOverloads.fir.kt deleted file mode 100644 index 61cde3e..0000000 --- a/compiler/testData/diagnostics/tests/j+k/sam/samVsGenericOverloads.fir.kt +++ /dev/null
@@ -1,34 +0,0 @@ -// LANGUAGE: +DisableCompatibilityModeForNewInference -// RUN_PIPELINE_TILL: FRONTEND -// ISSUE: KT-78832 -// FILE: JavaTransformer.java - -public interface JavaTransformer<OUT, IN> { - OUT foo(IN i); -} - -// FILE: main.kt -fun interface Transformer<OUT, IN> { - fun foo(i: IN): OUT -} - -class MyProvider<T> - -fun <T> bar(value: T): MyProvider<T> = null!! // (1) -fun <T> bar(valueTransformer: Transformer<MyProvider<out T>, Any>): MyProvider<T> = null!! // (2) - -fun <T> baz(value: T): MyProvider<T> = null!! // (3) -fun <T> baz(valueTransformer: JavaTransformer<MyProvider<out T>, Any>): MyProvider<T> = null!! // (4) - -fun boo(hoo: MyProvider<String>) {} - -fun foo(x: MyProvider<String>) { - val barRes = bar { x } // resolved to (2) both in K1 & K2 - boo(barRes) - - val bazRes = baz { x } // resolved to (3) in K2 and to (4) in K1 with +DisableCompatibilityModeForNewInference - boo(<!ARGUMENT_TYPE_MISMATCH!>bazRes<!>) // Error only in K2 -} - -/* GENERATED_FIR_TAGS: checkNotNullCall, classDeclaration, funInterface, functionDeclaration, interfaceDeclaration, -javaType, lambdaLiteral, localProperty, nullableType, outProjection, propertyDeclaration, samConversion, typeParameter */
diff --git a/compiler/testData/diagnostics/tests/j+k/sam/samVsGenericOverloads.kt b/compiler/testData/diagnostics/tests/j+k/sam/samVsGenericOverloads.kt index a664346..c20adb0 100644 --- a/compiler/testData/diagnostics/tests/j+k/sam/samVsGenericOverloads.kt +++ b/compiler/testData/diagnostics/tests/j+k/sam/samVsGenericOverloads.kt
@@ -1,5 +1,6 @@ +// FIR_IDENTICAL // LANGUAGE: +DisableCompatibilityModeForNewInference -// RUN_PIPELINE_TILL: FRONTEND +// RUN_PIPELINE_TILL: BACKEND // ISSUE: KT-78832 // FILE: JavaTransformer.java
diff --git a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.fir.kt b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.fir.kt similarity index 81% rename from compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.fir.kt rename to compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.fir.kt index d0d6b6d..b003a76 100644 --- a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.fir.kt +++ b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.fir.kt
@@ -1,5 +1,4 @@ -// RUN_PIPELINE_TILL: BACKEND -// LANGUAGE: +DisableCompatibilityModeForNewInference +// RUN_PIPELINE_TILL: FRONTEND // SKIP_TXT // FULL_JDK @@ -10,7 +9,7 @@ fun main() { val x = bar() { foo() } // OK with default current 1.5/1.6, Error with DisableCompatibilityModeForNewInference enabled, Ok in K2 - x.length + x.<!UNRESOLVED_REFERENCE!>length<!> } /* GENERATED_FIR_TAGS: functionDeclaration, functionalType, lambdaLiteral, localProperty, nullableType,
diff --git a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.kt b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.kt index 7c41497..b7d521d 100644 --- a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.kt +++ b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGeneric.kt
@@ -1,5 +1,4 @@ -// RUN_PIPELINE_TILL: BACKEND -// FIR_IDENTICAL +// RUN_PIPELINE_TILL: FRONTEND // SKIP_TXT // FULL_JDK
diff --git a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.kt b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.kt index 8a5207f..852087e 100644 --- a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.kt +++ b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.kt
@@ -1,4 +1,5 @@ -// RUN_PIPELINE_TILL: BACKEND +// FIR_IDENTICAL +// RUN_PIPELINE_TILL: FRONTEND // LANGUAGE: +DisableCompatibilityModeForNewInference // SKIP_TXT // FULL_JDK
diff --git a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.fir.kt b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityEnabled.fir.kt similarity index 77% copy from compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.fir.kt copy to compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityEnabled.fir.kt index d0d6b6d..f76b31a 100644 --- a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityDisabled.fir.kt +++ b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityEnabled.fir.kt
@@ -1,5 +1,5 @@ -// RUN_PIPELINE_TILL: BACKEND -// LANGUAGE: +DisableCompatibilityModeForNewInference +// RUN_PIPELINE_TILL: FRONTEND +// LANGUAGE: -DisableCompatibilityModeForNewInference // SKIP_TXT // FULL_JDK @@ -10,7 +10,7 @@ fun main() { val x = bar() { foo() } // OK with default current 1.5/1.6, Error with DisableCompatibilityModeForNewInference enabled, Ok in K2 - x.length + x.<!UNRESOLVED_REFERENCE!>length<!> } /* GENERATED_FIR_TAGS: functionDeclaration, functionalType, lambdaLiteral, localProperty, nullableType,
diff --git a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityEnabled.kt b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityEnabled.kt index 5498a8c..6f3b0fb 100644 --- a/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityEnabled.kt +++ b/compiler/testData/diagnostics/tests/samConversions/samPriorityVsGenericCompatibilityEnabled.kt
@@ -1,5 +1,4 @@ -// RUN_PIPELINE_TILL: BACKEND -// FIR_IDENTICAL +// RUN_PIPELINE_TILL: FRONTEND // LANGUAGE: -DisableCompatibilityModeForNewInference // SKIP_TXT // FULL_JDK
diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 58c762f..653e451 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt
@@ -412,6 +412,8 @@ // Even though this LF is not expected to be necessarily released via 2.2.x. CapturedTypeApproximationReworked(KOTLIN_2_2, "KT-79451"), + NoLowerPriorityForSamConversionOnJavaInterfaces(KOTLIN_2_2, "KT-78832"), + // 2.3 ForbidCompanionInLocalInnerClass(KOTLIN_2_3, enabledInProgressiveMode = true, "KT-47289"),