don't suggest expression-keyword-named members in java completion (EA-90531, IDEA-CR-20701)

This commit is contained in:
peter
2017-05-02 20:30:59 +02:00
parent 78edeb5bb0
commit 6d7af764a1
3 changed files with 24 additions and 9 deletions
@@ -21,7 +21,7 @@ import com.intellij.codeInsight.lookup.VariableLookupItem;
import com.intellij.featureStatistics.FeatureUsageTracker;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -53,6 +53,10 @@ public class JavaStaticMemberProcessor extends StaticMemberProcessor {
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull final PsiClass containingClass, boolean shouldImport) {
shouldImport |= myOriginalPosition != null && PsiTreeUtil.isAncestor(containingClass, myOriginalPosition, false);
if (!PsiNameHelper.getInstance(member.getProject()).isIdentifier(member.getName(), PsiUtil.getLanguageLevel(getPosition()))) {
return null;
}
PsiReference ref = createReferenceToMemberName(member);
if (ref == null) return null;
@@ -74,13 +78,8 @@ public class JavaStaticMemberProcessor extends StaticMemberProcessor {
}
private PsiReference createReferenceToMemberName(@NotNull PsiMember member) {
try {
String exprText = member.getName() + (member instanceof PsiMethod ? "()" : "");
return JavaPsiFacade.getElementFactory(member.getProject()).createExpressionFromText(exprText, myOriginalPosition).findReferenceAt(0);
}
catch (IncorrectOperationException e) {
return null;
}
String exprText = member.getName() + (member instanceof PsiMethod ? "()" : "");
return JavaPsiFacade.getElementFactory(member.getProject()).createExpressionFromText(exprText, myOriginalPosition).findReferenceAt(0);
}
@Override
@@ -132,6 +132,10 @@ public abstract class StaticMemberProcessor {
return member.hasModifierProperty(PsiModifier.STATIC) && isAccessible(member) && !StaticImportMemberFix.isExcluded(member);
}
public PsiElement getPosition() {
return myPosition;
}
protected boolean isAccessible(PsiMember member) {
return myResolveHelper.isAccessible(member, myPosition, null);
}
@@ -15,7 +15,8 @@
*/
package org.jetbrains.plugins.groovy.completion
import com.intellij.codeInsight.completion.CompletionType;
import com.intellij.codeInsight.completion.CompletionType
import com.intellij.psi.PsiMethod;
/**
* @author peter
@@ -34,4 +35,15 @@ class Foo {
assert !(myFixture.lookupElementStrings.contains('const'))
assert !(myFixture.lookupElementStrings.contains('continue'))
}
void "test using java expression keywords in member names"() {
myFixture.addFileToProject 'a.groovy', '''
class Foo {
static void "this"() {}
}
'''
myFixture.configureByText 'a.java', 'class Bar {{ this<caret> }}'
myFixture.complete(CompletionType.BASIC, 2)
assert !myFixture.lookupElements.find { it.lookupString == 'this' && it.object instanceof PsiMethod }
}
}