diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt index a14eea94883..c2728e9e761 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt @@ -54,7 +54,8 @@ class KotlinCallCompleter( candidateForCompletion.prepareForCompletion(expectedType) runCompletion(candidateForCompletion.resolvedCall, ConstraintSystemCompletionMode.FULL, diagnosticHolder, candidateForCompletion.getSystem(), resolutionCallbacks) - return CallResolutionResult(CallResolutionResult.Type.ERROR, candidate?.resolvedCall, diagnosticHolder.getDiagnostics(), ConstraintStorage.Empty) + val systemStorage = candidate?.getSystem()?.asReadOnlyStorage() ?: ConstraintStorage.Empty + return CallResolutionResult(CallResolutionResult.Type.ERROR, candidate?.resolvedCall, diagnosticHolder.getDiagnostics(), systemStorage) } val completionType = candidate.prepareForCompletion(expectedType) diff --git a/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.kt b/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.kt new file mode 100644 index 00000000000..115caf5bcf6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.kt @@ -0,0 +1,9 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +fun test(a: Int, b: Boolean) { + bar(a.foo(b)) +} + +fun T.foo(l: (T) -> R): R = TODO() + +fun bar(a: S) {} diff --git a/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.txt b/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.txt new file mode 100644 index 00000000000..c4c4529675a --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.txt @@ -0,0 +1,5 @@ +package + +public fun bar(/*0*/ a: S): kotlin.Unit +public fun test(/*0*/ a: kotlin.Int, /*1*/ b: kotlin.Boolean): kotlin.Unit +public fun T.foo(/*0*/ l: (T) -> R): R diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index ae0f7acd0bf..fb45d247049 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -16708,6 +16708,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("correctResultSubstitutorForErrorCandidate.kt") + public void testCorrectResultSubstitutorForErrorCandidate() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/correctResultSubstitutorForErrorCandidate.kt"); + doTest(fileName); + } + @TestMetadata("delegationWithReceiver.kt") public void testDelegationWithReceiver() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/regressions/delegationWithReceiver.kt");