Precise error highlighting :D

This commit is contained in:
Manindra Moharana
2014-06-10 21:36:20 +05:30
parent 4001a4324a
commit 8a60bd84da
2 changed files with 43 additions and 2 deletions

View File

@@ -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);

View File

@@ -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("---");
}
/**