From 826c20643d7afc90b6bb205518198a9d6a1b2e5a Mon Sep 17 00:00:00 2001 From: while1do Date: Mon, 27 Jan 2025 20:45:44 +0300 Subject: [PATCH] Fix wrong errors' line numbers for .java files --- .../processing/mode/java/ErrorChecker.java | 25 +++++++++++++++---- .../processing/mode/java/PreprocSketch.java | 10 ++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/java/src/processing/mode/java/ErrorChecker.java b/java/src/processing/mode/java/ErrorChecker.java index 512d71d573..4424d111ce 100644 --- a/java/src/processing/mode/java/ErrorChecker.java +++ b/java/src/processing/mode/java/ErrorChecker.java @@ -194,14 +194,29 @@ static private boolean isIgnorableProblem(IProblem iproblem) { static private JavaProblem convertIProblem(IProblem iproblem, PreprocSketch ps) { - SketchInterval in = ps.mapJavaToSketch(iproblem); - if (in != SketchInterval.BEFORE_START) { - String badCode = ps.getPdeCode(in); - int line = ps.tabOffsetToTabLine(in.tabIndex, in.startTabOffset); - JavaProblem p = JavaProblem.fromIProblem(iproblem, in.tabIndex, line, badCode); + String originalFileName = new String(iproblem.getOriginatingFileName()); + boolean isJavaTab = ps.isJavaTab(originalFileName); + + // Java tabs' content isn't stored in a sketch's combined source code file, + // so they are processed differently + if (!isJavaTab) { + SketchInterval in = ps.mapJavaToSketch(iproblem); + if (in != SketchInterval.BEFORE_START) { + String badCode = ps.getPdeCode(in); + int line = ps.tabOffsetToTabLine(in.tabIndex, in.startTabOffset); + JavaProblem p = JavaProblem.fromIProblem(iproblem, in.tabIndex, line, badCode); + p.setPDEOffsets(0, -1); + return p; + } + } else { + int tabIndex = ps.getJavaTabIndex(originalFileName); + int line = iproblem.getSourceLineNumber() - 1; + + JavaProblem p = JavaProblem.fromIProblem(iproblem, tabIndex, line, ""); p.setPDEOffsets(0, -1); return p; } + return null; } diff --git a/java/src/processing/mode/java/PreprocSketch.java b/java/src/processing/mode/java/PreprocSketch.java index 8082a5964b..d3c39cf7b6 100644 --- a/java/src/processing/mode/java/PreprocSketch.java +++ b/java/src/processing/mode/java/PreprocSketch.java @@ -72,6 +72,16 @@ public SketchInterval mapJavaToSketch(ASTNode node) { } + public boolean isJavaTab(String fileName) { + return javaFileMapping.containsKey(fileName); + } + + + public int getJavaTabIndex(String fileName) { + return javaFileMapping.get(fileName); + } + + public SketchInterval mapJavaToSketch(IProblem iproblem) { String originalFile = new String(iproblem.getOriginatingFileName()); boolean isJavaTab = javaFileMapping.containsKey(originalFile);