|
89 | 89 | import org.eclipse.jdt.core.dom.IfStatement; |
90 | 90 | import org.eclipse.jdt.core.dom.ImportDeclaration; |
91 | 91 | import org.eclipse.jdt.core.dom.InfixExpression; |
| 92 | +import org.eclipse.jdt.core.dom.Initializer; |
92 | 93 | import org.eclipse.jdt.core.dom.Javadoc; |
93 | 94 | import org.eclipse.jdt.core.dom.LambdaExpression; |
94 | 95 | import org.eclipse.jdt.core.dom.MarkerAnnotation; |
|
98 | 99 | import org.eclipse.jdt.core.dom.MethodInvocation; |
99 | 100 | import org.eclipse.jdt.core.dom.MethodRef; |
100 | 101 | import org.eclipse.jdt.core.dom.Modifier; |
| 102 | +import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword; |
101 | 103 | import org.eclipse.jdt.core.dom.ModuleDeclaration; |
102 | 104 | import org.eclipse.jdt.core.dom.Name; |
103 | 105 | import org.eclipse.jdt.core.dom.NormalAnnotation; |
|
131 | 133 | import org.eclipse.jdt.core.dom.VariableDeclarationExpression; |
132 | 134 | import org.eclipse.jdt.core.dom.VariableDeclarationFragment; |
133 | 135 | import org.eclipse.jdt.core.dom.VariableDeclarationStatement; |
134 | | -import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword; |
135 | 136 | import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants; |
136 | 137 | import org.eclipse.jdt.core.search.IJavaSearchConstants; |
137 | 138 | import org.eclipse.jdt.core.search.IJavaSearchScope; |
@@ -168,6 +169,7 @@ public class DOMCompletionEngine implements ICompletionEngine { |
168 | 169 | PrimitiveType.DOUBLE.toString().toCharArray(), |
169 | 170 | PrimitiveType.FLOAT.toString().toCharArray(), |
170 | 171 | PrimitiveType.CHAR.toString().toCharArray()); |
| 172 | + private static final String STATIC = "static"; |
171 | 173 |
|
172 | 174 | private final CompletionRequestor requestor; |
173 | 175 | private final SearchableEnvironment nameEnvironment; |
@@ -941,11 +943,14 @@ public void complete(org.eclipse.jdt.internal.compiler.env.ICompilationUnit sour |
941 | 943 | } |
942 | 944 | if (!(this.toComplete instanceof Type)) { |
943 | 945 | AbstractTypeDeclaration parentTypeDeclaration = DOMCompletionUtil.findParentTypeDeclaration(context); |
944 | | - if (parentTypeDeclaration != null) { |
| 946 | + MethodDeclaration methodDecl = (MethodDeclaration)DOMCompletionUtil.findParent(this.toComplete, new int[] { ASTNode.METHOD_DECLARATION }); |
| 947 | + if (parentTypeDeclaration != null && methodDecl != null && (methodDecl.getModifiers() & Flags.AccStatic) == 0) { |
945 | 948 | ITypeBinding currentTypeBinding = parentTypeDeclaration.resolveBinding(); |
946 | 949 | if (currentTypeBinding.isSubTypeCompatible(qualifierTypeBinding)) { |
947 | 950 | if (!isFailedMatch(this.prefix.toCharArray(), Keywords.THIS)) { |
948 | | - this.requestor.accept(createKeywordProposal(Keywords.THIS, startPos, endPos)); |
| 951 | + CompletionProposal res = createKeywordProposal(Keywords.THIS, startPos, endPos); |
| 952 | + res.setRelevance(res.getRelevance() + RelevanceConstants.R_NON_INHERITED); |
| 953 | + this.requestor.accept(res); |
949 | 954 | } |
950 | 955 | if (!isFailedMatch(this.prefix.toCharArray(), Keywords.SUPER)) { |
951 | 956 | this.requestor.accept(createKeywordProposal(Keywords.SUPER, startPos, endPos)); |
@@ -2028,6 +2033,12 @@ private void statementLikeKeywords() { |
2028 | 2033 | } |
2029 | 2034 | } |
2030 | 2035 | } |
| 2036 | + MethodDeclaration methodDecl = (MethodDeclaration) DOMCompletionUtil.findParent(this.toComplete, new int[] { ASTNode.METHOD_DECLARATION }); |
| 2037 | + Initializer initializer = (Initializer) DOMCompletionUtil.findParent(this.toComplete, new int[] { ASTNode.INITIALIZER }); |
| 2038 | + if (methodDecl != null && (methodDecl.getModifiers() & Flags.AccStatic) == 0 |
| 2039 | + || initializer != null && !STATIC.equals(this.textContent.substring(initializer.getStartPosition(), initializer.getStartPosition() + STATIC.length()))) { |
| 2040 | + keywords.add(Keywords.THIS); |
| 2041 | + } |
2031 | 2042 | for (char[] keyword : keywords) { |
2032 | 2043 | if (!isFailedMatch(this.toComplete.toString().toCharArray(), keyword)) { |
2033 | 2044 | this.requestor.accept(createKeywordProposal(keyword, this.toComplete.getStartPosition(), this.offset)); |
|
0 commit comments