From 53e279172051805bcbbc137939b1cc6cc66bd101 Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 11 Oct 2012 20:20:22 +0200 Subject: [PATCH] method ref completion: allow non static methods (IDEA-92705) --- .../scope/JavaCompletionProcessor.java | 34 +++++++++++-------- .../psi/scope/util/PsiScopesUtil.java | 2 +- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java index 2eee1b2de31a..375af91b5b90 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java @@ -199,6 +199,25 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme return true; } + final PsiElement elementParent = myElement.getParent(); + if (!(elementParent instanceof PsiMethodReferenceExpression) && checkStaticFlag(element)) return true; + + if (element instanceof PsiPackage && myScope instanceof PsiClass) { + if (!(elementParent instanceof PsiQualifiedReference && ((PsiQualifiedReference)elementParent).getQualifier() != null)) { + return true; + } + } + + if (satisfies(element, state) && isAccessible(element)) { + CompletionElement element1 = new CompletionElement((PsiNamedElement)element, state.get(PsiSubstitutor.KEY)); + if (myResultNames.add(element1.getUniqueId())) { + myResults.add(element1); + } + } + return true; + } + + private boolean checkStaticFlag(PsiElement element) { if (!(element instanceof PsiClass) && element instanceof PsiModifierListOwner) { PsiModifierListOwner modifierListOwner = (PsiModifierListOwner)element; if (myStatic) { @@ -216,20 +235,7 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme } } } - final PsiElement elementParent = myElement.getParent(); - if (element instanceof PsiPackage && myScope instanceof PsiClass) { - if (!(elementParent instanceof PsiQualifiedReference && ((PsiQualifiedReference)elementParent).getQualifier() != null)) { - return true; - } - } - - if (satisfies(element, state) && isAccessible(element)) { - CompletionElement element1 = new CompletionElement((PsiNamedElement)element, state.get(PsiSubstitutor.KEY)); - if (myResultNames.add(element1.getUniqueId())) { - myResults.add(element1); - } - } - return true; + return false; } public boolean satisfies(@NotNull PsiElement element, @NotNull ResolveState state) { diff --git a/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java b/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java index 2a1a6f65301d..c1fce0e27bc0 100644 --- a/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/scope/util/PsiScopesUtil.java @@ -199,7 +199,7 @@ public class PsiScopesUtil { substitutor = substitutor.putAll((PsiClass)target, types); } } - else if (target instanceof PsiClass && !(ref instanceof PsiMethodReferenceExpression)) { + else if (target instanceof PsiClass) { processor.handleEvent(JavaScopeProcessorEvent.START_STATIC, null); } }