diff --git a/java.completion/nbproject/project.properties b/java.completion/nbproject/project.properties --- a/java.completion/nbproject/project.properties +++ b/java.completion/nbproject/project.properties @@ -38,7 +38,7 @@ is.autoload=true javac.source=1.7 javac.compilerargs=-Xlint -Xlint:-serial -spec.version.base=1.7.0 +spec.version.base=1.6.0 #test configs test.config.jet-main.includes=\ diff --git a/java.completion/src/org/netbeans/modules/java/completion/BaseTask.java b/java.completion/src/org/netbeans/modules/java/completion/BaseTask.java --- a/java.completion/src/org/netbeans/modules/java/completion/BaseTask.java +++ b/java.completion/src/org/netbeans/modules/java/completion/BaseTask.java @@ -79,18 +79,43 @@ protected final int caretOffset; protected final Callable cancel; + private int caretInSnapshot; protected BaseTask(int caretOffset, Callable cancel) { this.caretOffset = caretOffset; this.cancel = cancel; } + + final int getCaretInSnapshot() { + return caretInSnapshot; + } + + private CompilationController controller; + + final int snapshotPos(int pos) { + if (pos < 0) { + return pos; + } + int r = controller.getSnapshot().getEmbeddedOffset(pos); + if (r == -1) { + return pos; + } else { + return r; + } + } @Override public void run(ResultIterator resultIterator) throws Exception { Parser.Result result = resultIterator.getParserResult(caretOffset); CompilationController controller = result != null ? CompilationController.get(result) : null; if (controller != null && (cancel == null || !cancel.call())) { - resolve(controller); + try { + this.controller = controller; + caretInSnapshot = snapshotPos(caretOffset); + resolve(controller); + } finally { + this.controller = null; + } } } @@ -365,8 +390,8 @@ if (blockPath.getParentPath().getLeaf().getKind() == Tree.Kind.METHOD || TreeUtilities.CLASS_TREE_KINDS.contains(blockPath.getParentPath().getLeaf().getKind())) { final int blockPos = (int) sourcePositions.getStartPosition(root, blockPath.getLeaf()); - final String blockText = upToOffset && caretOffset > offset - ? controller.getText().substring(blockPos, offset) + whitespaceString(caretOffset - offset) + controller.getText().substring(caretOffset, (int) sourcePositions.getEndPosition(root, blockPath.getLeaf())) + final String blockText = upToOffset && getCaretInSnapshot() > offset + ? controller.getText().substring(blockPos, offset) + whitespaceString(getCaretInSnapshot() - offset) + controller.getText().substring(getCaretInSnapshot(), (int) sourcePositions.getEndPosition(root, blockPath.getLeaf())) : controller.getText().substring(blockPos, (int) sourcePositions.getEndPosition(root, blockPath.getLeaf())); final SourcePositions[] sp = new SourcePositions[1]; final StatementTree block = (((BlockTree) blockPath.getLeaf()).isStatic() ? tu.parseStaticBlock(blockText, sp) : tu.parseStatement(blockText, sp)); diff --git a/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java b/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java --- a/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java +++ b/java.completion/src/org/netbeans/modules/java/completion/JavaCompletionTask.java @@ -4241,19 +4241,19 @@ int nextMemberPos = (int) Diagnostic.NOPOS; for (Tree member : cls.getMembers()) { int pos = (int) sourcePositions.getStartPosition(root, member); - if (pos >= caretOffset) { + if (pos >= getCaretInSnapshot()) { nextMemberPos = pos; break; } pos = (int) sourcePositions.getEndPosition(root, member); - if (caretOffset < pos) { + if (getCaretInSnapshot() < pos) { currentMember = member; nextMemberPos = pos; break; } } - if (nextMemberPos > caretOffset) { - String text = controller.getText().substring(caretOffset, nextMemberPos); + if (nextMemberPos > getCaretInSnapshot()) { + String text = controller.getText().substring(getCaretInSnapshot(), nextMemberPos); int idx = text.indexOf('\n'); // NOI18N if (idx >= 0) { text = text.substring(0, idx);