diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java index c8e80f544042..dd27cbe3dc66 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java @@ -31,7 +31,6 @@ import com.intellij.psi.filters.getters.ExpectedTypesGetter; import com.intellij.psi.filters.getters.JavaMembersGetter; import com.intellij.psi.filters.types.AssignableFromFilter; import com.intellij.psi.filters.types.AssignableToFilter; -import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.*; @@ -125,7 +124,8 @@ public class JavaSmartCompletionContributor extends CompletionContributor { if (SmartCastProvider.shouldSuggestCast(parameters)) return; final PsiElement element = parameters.getPosition(); - final PsiReference reference = element.getContainingFile().findReferenceAt(parameters.getOffset()); + final PsiJavaCodeReferenceElement reference = + PsiTreeUtil.findElementOfClassAtOffset(element.getContainingFile(), parameters.getOffset(), PsiJavaCodeReferenceElement.class, false); if (reference != null) { ElementFilter filter = getClassReferenceFilter(element); if (filter != null) { @@ -274,44 +274,34 @@ public class JavaSmartCompletionContributor extends CompletionContributor { } static Set completeReference(final PsiElement element, - PsiReference reference, + PsiJavaCodeReferenceElement reference, final ElementFilter filter, final boolean acceptClasses, final boolean acceptMembers, CompletionParameters parameters, final PrefixMatcher matcher) { - if (reference instanceof PsiMultiReference) { - reference = ContainerUtil.findInstance(((PsiMultiReference) reference).getReferences(), PsiJavaReference.class); - } + ElementFilter checkClass = new ElementFilter() { + @Override + public boolean isAcceptable(Object element, PsiElement context) { + return filter.isAcceptable(element, context); + } - if (reference instanceof PsiJavaReference) { - final PsiJavaReference javaReference = (PsiJavaReference)reference; - - ElementFilter checkClass = new ElementFilter() { - @Override - public boolean isAcceptable(Object element, PsiElement context) { - return filter.isAcceptable(element, context); + @Override + public boolean isClassAcceptable(Class hintClass) { + if (ReflectionUtil.isAssignable(PsiClass.class, hintClass)) { + return acceptClasses; } - @Override - public boolean isClassAcceptable(Class hintClass) { - if (ReflectionUtil.isAssignable(PsiClass.class, hintClass)) { - return acceptClasses; - } - - if (ReflectionUtil.isAssignable(PsiVariable.class, hintClass) || - ReflectionUtil.isAssignable(PsiMethod.class, hintClass) || - ReflectionUtil.isAssignable(CandidateInfo.class, hintClass)) { - return acceptMembers; - } - return false; + if (ReflectionUtil.isAssignable(PsiVariable.class, hintClass) || + ReflectionUtil.isAssignable(PsiMethod.class, hintClass) || + ReflectionUtil.isAssignable(CandidateInfo.class, hintClass)) { + return acceptMembers; } - }; - JavaCompletionProcessor.Options options = - JavaCompletionProcessor.Options.DEFAULT_OPTIONS.withFilterStaticAfterInstance(parameters.getInvocationCount() <= 1); - return JavaCompletionUtil.processJavaReference(element, javaReference, checkClass, options, matcher, parameters); - } - - return Collections.emptySet(); + return false; + } + }; + JavaCompletionProcessor.Options options = + JavaCompletionProcessor.Options.DEFAULT_OPTIONS.withFilterStaticAfterInstance(parameters.getInvocationCount() <= 1); + return JavaCompletionUtil.processJavaReference(element, reference, checkClass, options, matcher, parameters); } @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ReferenceExpressionCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/ReferenceExpressionCompletionContributor.java index 515f2b16ec6f..7db3f1e6a1ab 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ReferenceExpressionCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ReferenceExpressionCompletionContributor.java @@ -124,7 +124,7 @@ public class ReferenceExpressionCompletionContributor { if (JavaKeywordCompletion.isAfterPrimitiveOrArrayType(element)) return null; final int offset = parameters.getParameters().getOffset(); - final PsiReference reference = element.getContainingFile().findReferenceAt(offset); + final PsiJavaCodeReferenceElement reference = PsiTreeUtil.findElementOfClassAtOffset(element.getContainingFile(), offset, PsiJavaCodeReferenceElement.class, false); if (reference != null) { final ElementFilter filter = getReferenceFilter(element, false); for (final LookupElement item : completeFinalReference(element, reference, filter, parameters)) { @@ -168,7 +168,7 @@ public class ReferenceExpressionCompletionContributor { return null; } - private static Set completeFinalReference(final PsiElement element, PsiReference reference, ElementFilter filter, + private static Set completeFinalReference(final PsiElement element, PsiJavaCodeReferenceElement reference, ElementFilter filter, final JavaSmartCompletionParameters parameters) { final Set used = parameters.getParameters().getInvocationCount() < 2 ? findConstantsUsedInSwitch(element) : Collections.emptySet();