diff --git a/java/src/processing/mode/java/ErrorChecker.java b/java/src/processing/mode/java/ErrorChecker.java index 015673ed3..1302dd773 100644 --- a/java/src/processing/mode/java/ErrorChecker.java +++ b/java/src/processing/mode/java/ErrorChecker.java @@ -277,9 +277,16 @@ public class ErrorChecker { String q = matcher.group(); int tabStart = in.startTabOffset + offset; int tabStop = tabStart + 1; + int line = ps.tabOffsetToTabLine(in.tabIndex, tabStart); + // Prevent duplicate problems - if (problems.stream().noneMatch(p -> p.getStartOffset() == tabStart)) { - int line = ps.tabOffsetToTabLine(in.tabIndex, tabStart); + boolean isDupe = problems.stream() + .filter(p -> p.getTabIndex() == in.tabIndex) + .filter(p -> p.getLineNumber() == line) + .findAny() + .isPresent(); + + if (isDupe) { String message; if (iproblem.getID() == IProblem.UnterminatedString) { message = Language.interpolate("editor.status.unterm_string_curly", q); diff --git a/java/src/processing/mode/java/lsp/PdeAdapter.java b/java/src/processing/mode/java/lsp/PdeAdapter.java index 24dc2e1d6..9e8942e27 100644 --- a/java/src/processing/mode/java/lsp/PdeAdapter.java +++ b/java/src/processing/mode/java/lsp/PdeAdapter.java @@ -233,13 +233,13 @@ class PdeAdapter { new Position( prob.getLineNumber(), PdeAdapter - .toLineCol(code.getProgram(), prob.getStartOffset()) + .toLineCol(code.getProgram(), prob.getTabStartOffset().get()) .col - 1 ), new Position( prob.getLineNumber(), PdeAdapter - .toLineCol(code.getProgram(), prob.getStopOffset()) + .toLineCol(code.getProgram(), prob.getTabStopOffset().get()) .col - 1 ) ),