diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaStaticMemberProcessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaStaticMemberProcessor.java index 0be2eac0fa42..436751813144 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaStaticMemberProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaStaticMemberProcessor.java @@ -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 diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java index 503e5031e53c..de4830b1be52 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java @@ -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); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/JavaWithGroovyCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/JavaWithGroovyCompletionTest.groovy index 8c0e80856e10..ba4d15e19070 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/JavaWithGroovyCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/JavaWithGroovyCompletionTest.groovy @@ -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 }}' + myFixture.complete(CompletionType.BASIC, 2) + assert !myFixture.lookupElements.find { it.lookupString == 'this' && it.object instanceof PsiMethod } + } }