diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/extendedResolutionApi.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/extendedResolutionApi.kt index 9f3bb3206e6..0ffdadad0bb 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/extendedResolutionApi.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/caches/resolve/extendedResolutionApi.kt @@ -39,6 +39,9 @@ fun KtDeclaration.resolveToDescriptorIfAny( val context = analyze(resolutionFacade, bodyResolveMode) return if (this is KtParameter && hasValOrVar()) { context.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, this) + // It is incorrect to have `val/var` parameters outside the primary constructor (e.g., `fun foo(val x: Int)`) + // but we still want to try to resolve in such cases. + ?: context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, this) } else { context.get(BindingContext.DECLARATION_TO_DESCRIPTOR, this) } diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/FirKotlinHighlightingPassTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/FirKotlinHighlightingPassTestGenerated.java index c85c7b94d27..a4fee864c51 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/FirKotlinHighlightingPassTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/checkers/FirKotlinHighlightingPassTestGenerated.java @@ -795,5 +795,10 @@ public class FirKotlinHighlightingPassTestGenerated extends AbstractFirKotlinHig public void testOperatorCallDiagnosticsOnInOperator() throws Exception { runTest("idea/testData/checker/diagnosticsMessage/operatorCallDiagnosticsOnInOperator.kt"); } + + @TestMetadata("valOrVarOnParameter.kt") + public void testValOrVarOnParameter() throws Exception { + runTest("idea/testData/checker/diagnosticsMessage/valOrVarOnParameter.kt"); + } } } diff --git a/idea/testData/checker/diagnosticsMessage/valOrVarOnParameter.fir.kt b/idea/testData/checker/diagnosticsMessage/valOrVarOnParameter.fir.kt new file mode 100644 index 00000000000..0998b6a7ee9 --- /dev/null +++ b/idea/testData/checker/diagnosticsMessage/valOrVarOnParameter.fir.kt @@ -0,0 +1,14 @@ +// WITH_RUNTIME + +class A { + constructor(val x: Int) { + for (val z in 1..4) {} + } + + fun foo(var y: Int) { + try { + for (var (i, j) in listOf(1 to 4)) {} + } catch (val e: Exception) { + } + } +} \ No newline at end of file diff --git a/idea/testData/checker/diagnosticsMessage/valOrVarOnParameter.kt b/idea/testData/checker/diagnosticsMessage/valOrVarOnParameter.kt new file mode 100644 index 00000000000..6d0e3613da4 --- /dev/null +++ b/idea/testData/checker/diagnosticsMessage/valOrVarOnParameter.kt @@ -0,0 +1,14 @@ +// WITH_RUNTIME + +class A { + constructor(val x: Int) { + for (val z in 1..4) {} + } + + fun foo(var y: Int) { + try { + for (var (i, j) in listOf(1 to 4)) {} + } catch (val e: Exception) { + } + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/checkers/KotlinHighlightingPassTestGenerated.java b/idea/tests/org/jetbrains/kotlin/checkers/KotlinHighlightingPassTestGenerated.java index fd8c7c4397c..f3a9ccdd3ce 100644 --- a/idea/tests/org/jetbrains/kotlin/checkers/KotlinHighlightingPassTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/checkers/KotlinHighlightingPassTestGenerated.java @@ -940,5 +940,10 @@ public class KotlinHighlightingPassTestGenerated extends AbstractKotlinHighlight public void testOperatorCallDiagnosticsOnInOperator() throws Exception { runTest("idea/testData/checker/diagnosticsMessage/operatorCallDiagnosticsOnInOperator.kt"); } + + @TestMetadata("valOrVarOnParameter.kt") + public void testValOrVarOnParameter() throws Exception { + runTest("idea/testData/checker/diagnosticsMessage/valOrVarOnParameter.kt"); + } } }