diff options
author | Roland Grunberg | 2019-12-18 17:54:38 +0000 |
---|---|---|
committer | Roland Grunberg | 2020-01-02 20:58:21 +0000 |
commit | 422776726fc734124f6f19ee3d4931a0d18a14cf (patch) | |
tree | aaed64bb23ee7f2aecb8da78ee0d34aeaa3f8528 | |
parent | 1c4e623f9e8b390fd8e3dc21dbad3afcd2f841db (diff) | |
download | eclipse.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.java | 28 |
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; |