Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland Grunberg2019-12-18 17:54:38 +0000
committerRoland Grunberg2020-01-02 20:58:21 +0000
commit422776726fc734124f6f19ee3d4931a0d18a14cf (patch)
treeaaed64bb23ee7f2aecb8da78ee0d34aeaa3f8528
parent1c4e623f9e8b390fd8e3dc21dbad3afcd2f841db (diff)
downloadeclipse.jdt.ui-422776726fc734124f6f19ee3d4931a0d18a14cf.tar.gz
eclipse.jdt.ui-422776726fc734124f6f19ee3d4931a0d18a14cf.tar.xz
eclipse.jdt.ui-422776726fc734124f6f19ee3d4931a0d18a14cf.zip
Bug 558434 - Use NodeFinder.perform(..) to get ASTNode from IJavaElement
- Instead of using ASTParser.createBindings(..) to go from IJavaElement to IBinding, and then passing the binding key to CompilationUnit.findDeclaringNode(..), simply use NodeFinder.perform(..) - Attempt to use SharedASTProviderCore.getAST(..) when fetching the CompilationUnit Change-Id: I99a269e85e63c6949b090307cba0474af1ae1830
-rw-r--r--org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java28
1 files changed, 16 insertions, 12 deletions
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java
index ed9fc64a13..bc7e3bc22c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/PostfixCompletionProposalComputer.java
@@ -28,6 +28,8 @@ import org.eclipse.jdt.core.CompletionContext;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.ASTParser;
@@ -36,13 +38,14 @@ import org.eclipse.jdt.core.dom.BooleanLiteral;
import org.eclipse.jdt.core.dom.ClassInstanceCreation;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.ExpressionStatement;
-import org.eclipse.jdt.core.dom.IBinding;
import org.eclipse.jdt.core.dom.InfixExpression;
+import org.eclipse.jdt.core.dom.NodeFinder;
import org.eclipse.jdt.core.dom.ParenthesizedExpression;
import org.eclipse.jdt.core.dom.QualifiedName;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.SimpleType;
import org.eclipse.jdt.core.dom.StringLiteral;
+import org.eclipse.jdt.core.manipulation.SharedASTProviderCore;
import org.eclipse.jdt.internal.corext.dom.IASTSharedValues;
import org.eclipse.jdt.internal.corext.template.java.JavaPostfixContextType;
@@ -138,22 +141,23 @@ public class PostfixCompletionProposalComputer extends AbstractTemplateCompletio
}
ICompilationUnit cu= (ICompilationUnit) enclosingElement.getAncestor(IJavaElement.COMPILATION_UNIT);
- ASTParser parser= createParser(cu);
- IBinding[] res;
- try {
- res= parser.createBindings(new IJavaElement[] { enclosingElement }, null);
- } catch (Exception e) {
- return;
+ CompilationUnit cuRoot= SharedASTProviderCore.getAST(cu, SharedASTProviderCore.WAIT_NO, null);
+ if (cuRoot == null) {
+ cuRoot= (CompilationUnit) createParser(cu).createAST(null);
}
- if (res.length > 0 && res[0] != null) {
- parser= createParser(cu);
- CompilationUnit cuRoot= (CompilationUnit) parser.createAST(null);
- ASTNode completionNode= cuRoot.findDeclaringNode(res[0].getKey());
- if (completionNode == null) {
+ if (enclosingElement instanceof IMember) {
+ ISourceRange sr;
+ try {
+ sr= ((IMember) enclosingElement).getSourceRange();
+ if (sr == null) {
+ return;
+ }
+ } catch (JavaModelException e) {
return;
}
+ ASTNode completionNode= NodeFinder.perform(cuRoot, sr);
ASTNode[] bestNode= new ASTNode[] { completionNode };
int tokenLength= context.getToken() != null ? context.getToken().length : 0;
int invOffset= context.getOffset() - tokenLength - 1;

Back to the top