From 27cf6507a298be6296e55297d63e30d9f82fb47a Mon Sep 17 00:00:00 2001 From: Manindra Moharana Date: Sat, 5 Apr 2014 02:14:41 +0530 Subject: [PATCH] does it work? Or does it not? idk --- .../mode/experimental/ASTGenerator.java | 38 +++++++++++++++++-- .../mode/experimental/ASTNodeWrapper.java | 26 +++++++------ .../experimental/ErrorCheckerService.java | 23 ++++++++++- 3 files changed, 71 insertions(+), 16 deletions(-) diff --git a/pdex/src/processing/mode/experimental/ASTGenerator.java b/pdex/src/processing/mode/experimental/ASTGenerator.java index 8a58ae2a2..1188b7677 100644 --- a/pdex/src/processing/mode/experimental/ASTGenerator.java +++ b/pdex/src/processing/mode/experimental/ASTGenerator.java @@ -53,6 +53,8 @@ import javax.swing.UIManager; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.text.BadLocationException; +import javax.swing.text.Element; +import javax.swing.text.PlainDocument; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.MutableTreeNode; @@ -1680,10 +1682,10 @@ public class ASTGenerator { logE("FINAL String label: " + getNodeAsString(simpName2)); //errorCheckerService.highlightNode(simpName2); ASTNodeWrapper declWrap = new ASTNodeWrapper(simpName2,nodeLabel); - errorCheckerService.highlightNode(declWrap); -// if (!declWrap.highlightNode(this)) { -// logE("Highlighting failed."); -// } + //errorCheckerService.highlightNode(declWrap); + if (!declWrap.highlightNode(this)) { + logE("Highlighting failed."); + } } return new ASTNodeWrapper(decl,nodeLabel); @@ -1812,6 +1814,34 @@ public class ASTGenerator { if (tnode.getUserObject() instanceof ASTNodeWrapper) { ASTNodeWrapper awrap = (ASTNodeWrapper) tnode.getUserObject(); errorCheckerService.highlightNode(awrap); + + //-- + try { + int javaLineNumber = getLineNumber(awrap.getNode()); + int pdeOffs[] = errorCheckerService + .calculateTabIndexAndLineNumber(javaLineNumber); + PlainDocument javaSource = new PlainDocument(); + javaSource.insertString(0, errorCheckerService.sourceCode, null); + Element lineElement = javaSource.getDefaultRootElement() + .getElement(javaLineNumber-1); + if(lineElement == null) { + return; + } + + String javaLine = javaSource.getText(lineElement.getStartOffset(), + lineElement.getEndOffset() + - lineElement.getStartOffset()); + editor.getSketch().setCurrentCode(pdeOffs[0]); + String pdeLine = editor.getLineText(pdeOffs[1]); + //String lookingFor = nodeName.toString(); + //log(lookingFor + ", " + nodeName.getStartPosition()); + log("JL " + javaLine + " LSO " + lineElement.getStartOffset() + "," + + lineElement.getEndOffset()); + log("PL " + pdeLine); + } catch (BadLocationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } } }; diff --git a/pdex/src/processing/mode/experimental/ASTNodeWrapper.java b/pdex/src/processing/mode/experimental/ASTNodeWrapper.java index 3ad8bb16c..c0cb491d0 100644 --- a/pdex/src/processing/mode/experimental/ASTNodeWrapper.java +++ b/pdex/src/processing/mode/experimental/ASTNodeWrapper.java @@ -546,29 +546,33 @@ public class ASTNodeWrapper { String pdeLine = astGenerator.editor.getLineText(pdeOffs[1]); String lookingFor = nodeName.toString(); log(lookingFor + ", " + nodeName.getStartPosition()); - log("JL " + javaLine + " LSO " + lineElement.getStartOffset() + "," + log(javaLineNumber +" JL " + javaLine + " LSO " + lineElement.getStartOffset() + "," + lineElement.getEndOffset()); - log("PL " + pdeLine); + log(pdeOffs[1] + " PL " + pdeLine); if (!javaLine.contains(lookingFor) || !pdeLine.contains(lookingFor)) { logE("Logical error in highLightNode(). Please file a bug report."); return false; } Pattern toFind = Pattern.compile("\\b" + nodeName.toString() + "\\b"); Matcher matcher = toFind.matcher(javaLine); + int count = 0, index = 0; int lsto = lineElement.getStartOffset(); while(matcher.find()){ + count++; System.out.println(matcher.start() + lsto); + if(lsto + matcher.start() == nodeName.getStartPosition()) + break; } // find the count of the name in the java code - int count = 0, index = 0; - do { - index = javaLine.indexOf(lookingFor, index); - if (index != -1) { - count++; - index += lookingFor.length(); - } else - break; - } while (true); + +// do { +// index = javaLine.indexOf(lookingFor, index); +// if (index != -1) { +// count++; +// index += lookingFor.length(); +// } else +// break; +// } while (true); log("count=" + count); // find the offset of the name of that index in the pde code index = 0; diff --git a/pdex/src/processing/mode/experimental/ErrorCheckerService.java b/pdex/src/processing/mode/experimental/ErrorCheckerService.java index 86588100a..ec77f9173 100644 --- a/pdex/src/processing/mode/experimental/ErrorCheckerService.java +++ b/pdex/src/processing/mode/experimental/ErrorCheckerService.java @@ -434,7 +434,7 @@ public class ErrorCheckerService implements Runnable{ // log(sourceCode); // log("--------------------------"); compileCheck(); - astGenerator.buildAST(cu); + //astGenerator.buildAST(cu); log(editor.getSketch().getName() + "2 MCO " + mainClassOffset); } @@ -535,6 +535,27 @@ public class ErrorCheckerService implements Runnable{ protected URLClassLoader classLoader; protected void compileCheck() { + + // CU needs to be updated coz before compileCheck xqpreprocessor is run on the source code which makes some further changes + //TODO Check if this breaks things + + parser.setSource(sourceCode.toCharArray()); + parser.setKind(ASTParser.K_COMPILATION_UNIT); + + Map options = JavaCore.getOptions(); + + JavaCore.setComplianceOptions(JavaCore.VERSION_1_6, options); + options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_6); + options.put(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, JavaCore.ENABLED); + parser.setCompilerOptions(options); + + if (cu == null) + cu = (CompilationUnit) parser.createAST(null); + else { + synchronized (cu) { + cu = (CompilationUnit) parser.createAST(null); + } + } // Currently (Sept, 2012) I'm using Java's reflection api to load the // CompilationChecker class(from CompilationChecker.jar) that houses the