Skip to content

Commit 8eb4a2f

Browse files
authored
Merge pull request #3738 from 1c-syntax/copilot/fix-null-pointer-exception
Fix NullPointerException in DeletingCollectionItemDiagnostic for incomplete forEach statements
2 parents 6acf373 + 68c53c9 commit 8eb4a2f

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/main/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnostic.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,12 @@ private static boolean namesEqual(CallStatementContext callStatement, String col
6767
@Override
6868
public ParseTree visitForEachStatement(BSLParser.ForEachStatementContext ctx) {
6969

70-
String collectionExpression = ctx.expression().getText();
70+
var expression = ctx.expression();
71+
if (expression == null) {
72+
return super.visitForEachStatement(ctx);
73+
}
74+
75+
String collectionExpression = expression.getText();
7176
Trees.findAllRuleNodes(ctx.codeBlock(), BSLParser.RULE_methodCall)
7277
.stream()
7378
.filter(MethodCallContext.class::isInstance)

src/test/java/com/github/_1c_syntax/bsl/languageserver/diagnostics/DeletingCollectionItemDiagnosticTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@
2121
*/
2222
package com.github._1c_syntax.bsl.languageserver.diagnostics;
2323

24+
import com.github._1c_syntax.bsl.languageserver.util.TestUtils;
2425
import org.eclipse.lsp4j.Diagnostic;
2526
import org.junit.jupiter.api.Test;
2627

2728
import java.util.List;
2829

2930
import static com.github._1c_syntax.bsl.languageserver.util.Assertions.assertThat;
31+
import static org.assertj.core.api.Assertions.assertThatCode;
3032

3133

3234
class DeletingCollectionItemDiagnosticTest extends AbstractDiagnosticTest<DeletingCollectionItemDiagnostic> {
@@ -50,4 +52,19 @@ void test() {
5052
.hasRange(55, 4, 55, 39);
5153
}
5254

55+
@Test
56+
void testIncompleteForEachStatement() {
57+
// Test that incomplete forEach statement doesn't cause NullPointerException
58+
String module = """
59+
Процедура Тест()
60+
Для Каждого
61+
КонецПроцедуры
62+
""";
63+
64+
var documentContext = TestUtils.getDocumentContext(module);
65+
66+
assertThatCode(() -> getDiagnostics(documentContext))
67+
.doesNotThrowAnyException();
68+
}
69+
5370
}

0 commit comments

Comments
 (0)