From ae769918228c76a1707670795b762b029bd5de18 Mon Sep 17 00:00:00 2001 From: aboyko Date: Wed, 21 Aug 2024 14:11:45 -0400 Subject: [PATCH] CRON reconciling with EOF fixed --- .../vscode/boot/java/cron/CronReconciler.java | 6 +++-- .../data/jpa/queries/AntlrReconciler.java | 6 +++-- .../boot/java/cron/CronReconcilerTest.java | 2 +- .../boot/java/cron/JdtCronReconcilerTest.java | 25 +++++++++++++++++++ .../vscode-spring-boot/package.json | 4 +-- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronReconciler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronReconciler.java index f551357e6..8d074fe33 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronReconciler.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/cron/CronReconciler.java @@ -149,11 +149,13 @@ public class CronReconciler implements Reconciler { public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { int offset = 0; - int length = 1; + int length = 0; if (offendingSymbol instanceof Token) { Token token = (Token) offendingSymbol; offset = token.getStartIndex(); - length = token.getText().length(); + if (token.getStartIndex() <= token.getStopIndex()) { + length = token.getText() == null ? token.getStopIndex() + 1 - token.getStartIndex() : token.getText().length(); + } } else { DefaultLineTracker lt = lineTrackerRef.get(); if (lt == null) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/AntlrReconciler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/AntlrReconciler.java index e008c345e..f8e152b87 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/AntlrReconciler.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/data/jpa/queries/AntlrReconciler.java @@ -73,11 +73,13 @@ public class AntlrReconciler implements Reconciler { public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { int offset = 0; - int length = 1; + int length = 0; if (offendingSymbol instanceof Token) { Token token = (Token) offendingSymbol; offset = token.getStartIndex(); - length = token.getText().length(); + if (token.getStartIndex() <= token.getStopIndex()) { + length = token.getText() == null ? token.getStopIndex() + 1 - token.getStartIndex() : token.getText().length(); + } } else { DefaultLineTracker lt = lineTrackerRef.get(); if (lt == null) { diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/cron/CronReconcilerTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/cron/CronReconcilerTest.java index 842e4ba0c..d682933ce 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/cron/CronReconcilerTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/cron/CronReconcilerTest.java @@ -64,7 +64,7 @@ public class CronReconcilerTest { void syntax_problems_3() { reconciler.reconcile("10/2. * * ? * MON-5", 0, collector); assertEquals(1, problems.size()); - assertReconcileProblem(problems.get(0), CronProblemType.SYNTAX, 4, 1); + assertReconcileProblem(problems.get(0), CronProblemType.SYNTAX, 4, 0); } static void assertReconcileProblem(ReconcileProblem p, ProblemType type, int offset, int length) { diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/cron/JdtCronReconcilerTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/cron/JdtCronReconcilerTest.java index ddd66066b..9fa7b8bd0 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/cron/JdtCronReconcilerTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/cron/JdtCronReconcilerTest.java @@ -132,4 +132,29 @@ public class JdtCronReconcilerTest { "?|CRON: Number expected" ); } + + @Test + void errorsReported_3() throws Exception { + String source = """ + package example.demo; + + import org.springframework.scheduling.annotation.Scheduled; + + public class A { + + @Scheduled(cron = "*/ * * ? * MON-5") + void foo() {} + + } + """; + String docUri = directory.toPath().resolve("src/main/java/example/demo/A.java").toUri() + .toString(); + Editor editor = harness.newEditor(LanguageId.JAVA, source, docUri); + editor.assertProblems( + " |CRON: extraneous input ' '", + "?|CRON: Number expected", + "MON-5|CRON: Error at index 0", + "\"|CRON: mismatched input ''" + ); + } } diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json index 88e0f7677..f9434caf3 100644 --- a/vscode-extensions/vscode-spring-boot/package.json +++ b/vscode-extensions/vscode-spring-boot/package.json @@ -1304,12 +1304,12 @@ }, "devDependencies": { "@types/node": "^18.8.0", - "@types/vscode": "1.92.0", "@types/semver": "^7.5.8", + "@types/vscode": "1.92.0", "@vscode/vsce": "^2.22.0", "typescript": "^4.8.0" }, "extensionDependencies": [ "redhat.java" ] -} \ No newline at end of file +}