diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index 003337da0b8..e1a3804767b 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/diagnosticProvider/Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -52,6 +52,12 @@ public class Fe10IdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated ex runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/declarationErrors.kt"); } + @Test + @TestMetadata("incompleteFor.kt") + public void testIncompleteFor() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.kt"); + } + @Test @TestMetadata("resolutionErrors.kt") public void testResolutionErrors() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index 468e73667b9..c86df063d98 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/diagnosticProvider/FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -52,6 +52,12 @@ public class FirIdeNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated ext runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/declarationErrors.kt"); } + @Test + @TestMetadata("incompleteFor.kt") + public void testIncompleteFor() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.kt"); + } + @Test @TestMetadata("resolutionErrors.kt") public void testResolutionErrors() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java index 45411bcf7e9..4269aa24d16 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/diagnosticProvider/FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenerated.java @@ -52,6 +52,12 @@ public class FirStandaloneNormalAnalysisSourceModuleCollectDiagnosticsTestGenera runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/declarationErrors.kt"); } + @Test + @TestMetadata("incompleteFor.kt") + public void testIncompleteFor() throws Exception { + runTest("analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.kt"); + } + @Test @TestMetadata("resolutionErrors.kt") public void testResolutionErrors() throws Exception { diff --git a/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.descriptors.txt b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.descriptors.txt new file mode 100644 index 00000000000..9f370a89565 --- /dev/null +++ b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.descriptors.txt @@ -0,0 +1 @@ +Diagnostics from elements: diff --git a/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.kt b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.kt new file mode 100644 index 00000000000..446f054399c --- /dev/null +++ b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.kt @@ -0,0 +1,3 @@ +fun someFun() { + for (i i) +} diff --git a/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.txt b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.txt new file mode 100644 index 00000000000..308ab57864b --- /dev/null +++ b/analysis/analysis-api/testData/components/diagnosticsProvider/diagnostics/incompleteFor.txt @@ -0,0 +1,4 @@ +Diagnostics from elements: + for PSI element of type KtForExpression at (2,5) - (3,1) + ITERATOR_MISSING text ranges: [(20,30)] + PSI: KtForExpression at (2,5) - (3,1) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt index 3411886523a..3829e9aa6cf 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt @@ -1156,7 +1156,7 @@ class LightTreeRawFirExpressionBuilder( val calculatedRangeExpression = rangeExpression ?: buildErrorExpression(null, ConeSyntaxDiagnostic("No range in for loop")) val fakeSource = forLoop.toFirSourceElement(KtFakeSourceElementKind.DesugaredForLoop) - val rangeSource = calculatedRangeExpression.source?.fakeElement(KtFakeSourceElementKind.DesugaredForLoop) + val rangeSource = calculatedRangeExpression.source?.fakeElement(KtFakeSourceElementKind.DesugaredForLoop) ?: fakeSource val target: FirLoopTarget // NB: FirForLoopChecker relies on this block existence and structure return buildBlock { @@ -1168,7 +1168,7 @@ class LightTreeRawFirExpressionBuilder( buildFunctionCall { source = rangeSource calleeReference = buildSimpleNamedReference { - source = rangeSource ?: fakeSource + source = rangeSource name = OperatorNameConventions.ITERATOR } explicitReceiver = calculatedRangeExpression @@ -1180,7 +1180,7 @@ class LightTreeRawFirExpressionBuilder( condition = buildFunctionCall { source = rangeSource calleeReference = buildSimpleNamedReference { - source = rangeSource ?: fakeSource + source = rangeSource name = OperatorNameConventions.HAS_NEXT } explicitReceiver = generateResolvedAccessExpression(rangeSource, iteratorVal) @@ -1200,7 +1200,7 @@ class LightTreeRawFirExpressionBuilder( buildFunctionCall { source = rangeSource calleeReference = buildSimpleNamedReference { - source = rangeSource ?: fakeSource + source = rangeSource name = OperatorNameConventions.NEXT } explicitReceiver = generateResolvedAccessExpression(rangeSource, iteratorVal) diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt index db695421b95..cb938b07d13 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt @@ -2606,7 +2606,7 @@ open class PsiRawFirBuilder( val rangeExpression = expression.loopRange.toFirExpression("No range in for loop") val ktParameter = expression.loopParameter val fakeSource = expression.toKtPsiSourceElement(KtFakeSourceElementKind.DesugaredForLoop) - val rangeSource = expression.loopRange?.toFirSourceElement(KtFakeSourceElementKind.DesugaredForLoop) + val rangeSource = expression.loopRange?.toFirSourceElement(KtFakeSourceElementKind.DesugaredForLoop) ?: fakeSource val target: FirLoopTarget // NB: FirForLoopChecker relies on this block existence and structure @@ -2617,7 +2617,7 @@ open class PsiRawFirBuilder( buildFunctionCall { source = rangeSource calleeReference = buildSimpleNamedReference { - source = rangeSource ?: fakeSource + source = rangeSource name = OperatorNameConventions.ITERATOR } explicitReceiver = rangeExpression @@ -2629,7 +2629,7 @@ open class PsiRawFirBuilder( condition = buildFunctionCall { source = rangeSource calleeReference = buildSimpleNamedReference { - source = rangeSource ?: fakeSource + source = rangeSource name = OperatorNameConventions.HAS_NEXT } explicitReceiver = generateResolvedAccessExpression(rangeSource, iteratorVal) @@ -2648,7 +2648,7 @@ open class PsiRawFirBuilder( source = expression.loopParameter?.toFirSourceElement(), name = if (multiDeclaration != null) SpecialNames.DESTRUCT else ktParameter.nameAsSafeName, initializer = buildFunctionCall { - source = rangeSource ?: fakeSource + source = rangeSource calleeReference = buildSimpleNamedReference { source = rangeSource name = OperatorNameConventions.NEXT diff --git a/compiler/testData/diagnostics/tests/declarationChecks/destructuringDeclarations/ForLoopMissingLoopParameter.fir.kt b/compiler/testData/diagnostics/tests/declarationChecks/destructuringDeclarations/ForLoopMissingLoopParameter.fir.kt index 2b3da9eb8d8..fc85c6e12d7 100644 --- a/compiler/testData/diagnostics/tests/declarationChecks/destructuringDeclarations/ForLoopMissingLoopParameter.fir.kt +++ b/compiler/testData/diagnostics/tests/declarationChecks/destructuringDeclarations/ForLoopMissingLoopParameter.fir.kt @@ -1,14 +1,14 @@ fun useDeclaredVariables() { - for ((a, b)) { + for ((a, b)) { a b - } + } } fun checkersShouldRun() { - for ((@A a, _)) { + for ((@A a, _)) { - } + } } annotation class A diff --git a/compiler/testData/diagnostics/tests/incompleteCode/checkNothingIsSubtype.fir.kt b/compiler/testData/diagnostics/tests/incompleteCode/checkNothingIsSubtype.fir.kt index d0d3510e621..3084208e3ab 100644 --- a/compiler/testData/diagnostics/tests/incompleteCode/checkNothingIsSubtype.fir.kt +++ b/compiler/testData/diagnostics/tests/incompleteCode/checkNothingIsSubtype.fir.kt @@ -10,6 +10,6 @@ fun test(nothing: Nothing?) { } fun sum(a : IntArray) : Int { -for (n -return "?" +for (n +return "?" } diff --git a/compiler/tests-spec/testData/diagnostics/linked/statements/assignments/p-1/neg/2.1.fir.kt b/compiler/tests-spec/testData/diagnostics/linked/statements/assignments/p-1/neg/2.1.fir.kt index b5a51786f6e..f9820e76106 100644 --- a/compiler/tests-spec/testData/diagnostics/linked/statements/assignments/p-1/neg/2.1.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/linked/statements/assignments/p-1/neg/2.1.fir.kt @@ -16,7 +16,7 @@ * NOTE: right-hand side of an assignment must be expression */ fun case1() { - val x = for () { } + val x = for () { } val y = for (x in 1..2) { } val a = while () { } @@ -29,7 +29,7 @@ fun case1() { * NOTE: right-hand side of an assignment must be expression */ fun case2() { - var x = for () { } + var x = for () { } var y = for (x in 1..2) { } var a = while () { } @@ -49,7 +49,7 @@ fun case3() { var b :Any? var c :Any? - x = for () { } + x = for () { } y = for (x in 1..2) { } a = while () { }