From 8a60bd84da137c220d114f40f699832ddcdabf61 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Tue, 10 Jun 2014 21:36:20 +0530 Subject: [PATCH] Precise error highlighting :D --- .../mode/experimental/ASTGenerator.java | 4 +- .../experimental/ErrorCheckerService.java | 41 ++++++++++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/pdex/src/processing/mode/experimental/ASTGenerator.java b/pdex/src/processing/mode/experimental/ASTGenerator.java index 83a659c74..d254db7c4 100644 --- a/pdex/src/processing/mode/experimental/ASTGenerator.java +++ b/pdex/src/processing/mode/experimental/ASTGenerator.java @@ -240,7 +240,7 @@ public class ASTGenerator { /** * Toggle AST View window */ - public static final boolean SHOWAST = !true; + public static final boolean SHOWAST = true; protected DefaultMutableTreeNode buildAST(String source, CompilationUnit cu) { if (cu == null) { @@ -2059,6 +2059,8 @@ public class ASTGenerator { */ public void highlightPDECode(int tab, int lineNumber, int lineStartWSOffset, int length) { + log("ASTGen.highlightPDECode: T " + tab + ",L: " + lineNumber + ",LSO: " + + lineStartWSOffset + ",Len: " + length); editor.toFront(); editor.getSketch().setCurrentCode(tab); lineStartWSOffset += editor.ta.getLineStartOffset(lineNumber); diff --git a/pdex/src/processing/mode/experimental/ErrorCheckerService.java b/pdex/src/processing/mode/experimental/ErrorCheckerService.java index de24f6d8b..5cdd29210 100644 --- a/pdex/src/processing/mode/experimental/ErrorCheckerService.java +++ b/pdex/src/processing/mode/experimental/ErrorCheckerService.java @@ -39,6 +39,7 @@ import java.util.regex.Pattern; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.table.DefaultTableModel; +import javax.swing.text.Element; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.compiler.IProblem; @@ -1404,7 +1405,7 @@ public class ErrorCheckerService implements Runnable{ } } - public void scrollToErrorLine(Problem p) { + /*public void scrollToErrorLine(Problem p) { if (editor == null) { return; } @@ -1429,6 +1430,44 @@ public class ErrorCheckerService implements Runnable{ e.printStackTrace(); } // log("---"); + }*/ + + public void scrollToErrorLine(Problem p) { + if (editor == null) { + return; + } + if (p == null) + return; + try { + int pkgNameOffset = ("package " + className + ";\n").length(); + int prbStart = p.getIProblem().getSourceStart() - pkgNameOffset, prbEnd = p + .getIProblem().getSourceEnd() - pkgNameOffset; + log("Scrolling to problem: " + p.toString()); + log("P start: " + prbStart + " to " + + prbEnd + " pkgOffset " + pkgNameOffset); + int lineNumber = p + .getIProblem().getSourceLineNumber(); + Element lineElement = astGenerator.getJavaSourceCodeElement(lineNumber); + log("Line element off " + lineElement.getStartOffset()); + OffsetMatcher ofm = new OffsetMatcher( + astGenerator + .getPDESourceCodeLine(lineNumber), + astGenerator + .getJavaSourceCodeLine(lineNumber)); + //log(""); + int pdeOffset = ofm.getPdeOffForJavaOff(prbStart + - lineElement.getStartOffset(), (prbEnd - p + .getIProblem().getSourceStart())); + astGenerator.highlightPDECode(p.getTabIndex(), p.getLineNumber(), + pdeOffset, (prbEnd - prbStart + 1)); + editor.getTextArea().scrollTo(p.getLineNumber() - 1, 0); + editor.repaint(); + } catch (Exception e) { + System.err.println(e + + " : Error while selecting text in scrollToErrorLine()"); + e.printStackTrace(); + } + // log("---"); } /**