From 225642a9a4b3d791ecdfbc6bd6684bffb124e0f0 Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Tue, 10 Jun 2014 21:59:15 +0530 Subject: [PATCH] err underline, nearly there.. --- .../experimental/ErrorCheckerService.java | 40 +++++++++++++++++++ .../processing/mode/experimental/Problem.java | 9 +++++ 2 files changed, 49 insertions(+) diff --git a/pdex/src/processing/mode/experimental/ErrorCheckerService.java b/pdex/src/processing/mode/experimental/ErrorCheckerService.java index 5cdd29210..888542b3a 100644 --- a/pdex/src/processing/mode/experimental/ErrorCheckerService.java +++ b/pdex/src/processing/mode/experimental/ErrorCheckerService.java @@ -39,7 +39,9 @@ import java.util.regex.Pattern; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.table.DefaultTableModel; +import javax.swing.text.BadLocationException; import javax.swing.text.Element; +import javax.swing.text.PlainDocument; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.compiler.IProblem; @@ -740,6 +742,44 @@ public class ErrorCheckerService implements Runnable{ // log("Compilecheck, Done."); } + private void calcPDEOffsetsForProbList() { + PlainDocument javaSource = new PlainDocument(); + try { + javaSource.insertString(0, sourceCode, null); + int pkgNameOffset = ("package " + className + ";\n").length(); + for (Problem p : problemsList) { + int javaLineNumber = p.getIProblem().getSourceLineNumber(); + Element lineElement = javaSource.getDefaultRootElement() + .getElement(javaLineNumber - 1); + if (lineElement == null) { + log("calcPDEOffsetsForProbList(): Couldn't fetch javalinenum " + + javaLineNumber); + continue; + } + String javaLine = javaSource + .getText(lineElement.getStartOffset(), lineElement.getEndOffset() + - lineElement.getStartOffset()); + int prbStart = p.getIProblem().getSourceStart() - pkgNameOffset, prbEnd = p + .getIProblem().getSourceEnd() - pkgNameOffset; + + OffsetMatcher ofm = new OffsetMatcher( + astGenerator + .getPDESourceCodeLine(javaLineNumber), + javaLine); + //log(""); + int pdeOffset = ofm.getPdeOffForJavaOff(prbStart + - lineElement.getStartOffset(), (prbEnd - p + .getIProblem().getSourceStart())); +// astGenerator.highlightPDECode(p.getTabIndex(), p.getLineNumber(), +// pdeOffset, (prbEnd - prbStart + 1)); + p.setPDEOffsets(pdeOffset, prbEnd - prbStart); + } + } catch (BadLocationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + public CompilationUnit getLastCorrectCU(){ return lastCorrectCU; } diff --git a/pdex/src/processing/mode/experimental/Problem.java b/pdex/src/processing/mode/experimental/Problem.java index e7c907ae9..174c4894d 100644 --- a/pdex/src/processing/mode/experimental/Problem.java +++ b/pdex/src/processing/mode/experimental/Problem.java @@ -49,6 +49,10 @@ public class Problem { * Line number(pde code) of the error */ private int lineNumber; + + private int lineStartOffset; + + private int lineStopOffset; /** * Error Message. Processed form of IProblem.getMessage() @@ -80,6 +84,11 @@ public class Problem { this.lineNumber = lineNumber; this.message = process(iProblem); } + + public void setPDEOffsets(int startOffset, int stopOffset){ + lineStartOffset = startOffset; + lineStopOffset = stopOffset; + } public String toString() { return new String("TAB " + tabIndex + ",LN " + lineNumber + ",PROB: "