diff --git a/pdex/src/processing/mode/experimental/ASTGenerator.java b/pdex/src/processing/mode/experimental/ASTGenerator.java index f8d2771fa..7f8753be9 100644 --- a/pdex/src/processing/mode/experimental/ASTGenerator.java +++ b/pdex/src/processing/mode/experimental/ASTGenerator.java @@ -2081,37 +2081,49 @@ public class ASTGenerator { // I need to store the pde and java offsets beforehand because once // the replace starts, all offsets returned are affected - int offsetsMap[][][] = new int[defCU.getChildCount()][2][]; + //int offsetsMap[][][] = new int[defCU.getChildCount()][2][]; + int pdeOffsets[][] = new int[defCU.getChildCount()][3]; for (int i = 0; i < defCU.getChildCount(); i++) { ASTNodeWrapper awrap = (ASTNodeWrapper) ((DefaultMutableTreeNode) (defCU .getChildAt(i))).getUserObject(); - offsetsMap[i][0] = awrap.getPDECodeOffsets(errorCheckerService); - offsetsMap[i][1] = awrap.getJavaCodeOffsets(errorCheckerService); - log(getNodeAsString(awrap.getNode()) + ", " - + awrap.getPDECodeOffsetForSN(this)); +// offsetsMap[i][0] = awrap.getPDECodeOffsets(errorCheckerService); +// offsetsMap[i][1] = awrap.getJavaCodeOffsets(errorCheckerService); + int ans[] = errorCheckerService.calculateTabIndexAndLineNumber(awrap + .getLineNumber()); + pdeOffsets[i][0] = ans[0]; + pdeOffsets[i][1] = ans[1]; + pdeOffsets[i][2] = awrap.getPDECodeOffsetForSN(this); +// logE(getNodeAsString(awrap.getNode()) + ", " +// + pdeOffsets[i][2]); } - /* + for (int i = 0; i < defCU.getChildCount(); i++) { - int pdeoffsets[] = offsetsMap[i][0]; - int javaoffsets[] = offsetsMap[i][1]; + ASTNodeWrapper awrap = (ASTNodeWrapper) ((DefaultMutableTreeNode) (defCU + .getChildAt(i))).getUserObject(); // correction for pde enhancements related displacement on a line int off = 0; - if (lineOffsetDisplacement.get(javaoffsets[0]) != null) { - off = lineOffsetDisplacement.get(javaoffsets[0]); + if (lineOffsetDisplacement.get(awrap.getLineNumber()) != null) { + off = lineOffsetDisplacement.get(awrap.getLineNumber()); - lineOffsetDisplacement.put(javaoffsets[0], + lineOffsetDisplacement.put(awrap.getLineNumber(), lineOffsetDisplacementConst + off); } else { - lineOffsetDisplacement.put(javaoffsets[0], + lineOffsetDisplacement.put(awrap.getLineNumber(), lineOffsetDisplacementConst); } - ErrorCheckerService.scrollToErrorLine(editor, pdeoffsets[0], - pdeoffsets[1], - javaoffsets[1] + off, - javaoffsets[2]); - //int k = JOptionPane.showConfirmDialog(new JFrame(), "Rename?","", JOptionPane.INFORMATION_MESSAGE)); + logE(getNodeAsString(awrap.getNode()) + ", T:" + pdeOffsets[i][0] + + ", L:" + pdeOffsets[i][1] + ", O:" + pdeOffsets[i][2]); +// ErrorCheckerService.scrollToErrorLine(editor, pdeOffsets[i][0], +// pdeOffsets[i][1] - 1, pdeOffsets[i][2] +// + off, awrap.getNode() +// .toString().length()); + highlightPDECode(pdeOffsets[i][0], + pdeOffsets[i][1], pdeOffsets[i][2] + + off, awrap.getNode() + .toString().length()); + //int k = JOptionPane.showConfirmDialog(new JFrame(), "Rename?","", JOptionPane.INFORMATION_MESSAGE); editor.ta.setSelectedText(newName); - }*/ + } errorCheckerService.resumeThread(); // for (Integer lineNum : lineOffsetDisplacement.keySet()) { // log(lineNum + "line, disp" @@ -2125,6 +2137,21 @@ public class ASTGenerator { lastClickedWordNode = null; } + /** + * Highlights text in the editor + * @param tab + * @param lineNumber + * @param lineStartWSOffset - line start offset including initial white space + * @param length + */ + public void highlightPDECode(int tab, int lineNumber, int lineStartWSOffset, + int length) { + editor.toFront(); + editor.getSketch().setCurrentCode(tab); + lineStartWSOffset += editor.ta.getLineStartOffset(lineNumber); + editor.ta.select(lineStartWSOffset, lineStartWSOffset + length); + } + public void handleShowUsage(){ log("Last clicked word:" + lastClickedWord); if(lastClickedWord == null && editor.ta.getSelectedText() == null){ diff --git a/pdex/src/processing/mode/experimental/ASTNodeWrapper.java b/pdex/src/processing/mode/experimental/ASTNodeWrapper.java index 450dfb667..9798f3e8f 100644 --- a/pdex/src/processing/mode/experimental/ASTNodeWrapper.java +++ b/pdex/src/processing/mode/experimental/ASTNodeWrapper.java @@ -654,7 +654,7 @@ public class ASTNodeWrapper { public int getPDECodeOffsetForSN(ASTGenerator astGen){ if (Node instanceof SimpleName) { Element lineElement = astGen.getJavaSourceCodeElement(lineNumber); - + log("Line element off " + lineElement.getStartOffset()); OffsetMatcher ofm = new OffsetMatcher( astGen .getPDESourceCodeLine(lineNumber), diff --git a/pdex/src/processing/mode/experimental/OffsetMatcher.java b/pdex/src/processing/mode/experimental/OffsetMatcher.java index 5161808f8..af48dfed2 100644 --- a/pdex/src/processing/mode/experimental/OffsetMatcher.java +++ b/pdex/src/processing/mode/experimental/OffsetMatcher.java @@ -61,6 +61,7 @@ public class OffsetMatcher { } public int getPdeOffForJavaOff(int start, int length) { + log("PDE :" + pdeCodeLine + "\nJAVA:" + javaCodeLine); if(!matchingNeeded) return start; int ans = getPdeOffForJavaOff(start), end = getPdeOffForJavaOff(start + length - 1); log(start + " java start off, pde start off "