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");
+ }
}
}