From 127a5b0b8ef89c39546e30a6be7d052f1f3fcd96 Mon Sep 17 00:00:00 2001 From: "peter.gromov" Date: Mon, 18 Oct 2010 20:02:21 +0400 Subject: [PATCH] make the statically imported suggestions obey the expected type (IDEA-59720) --- .../completion/JavaCompletionUtil.java | 4 ++- .../scope/JavaCompletionProcessor.java | 27 ++++++++++--------- .../smartType/CheckStaticImportsType.java | 11 ++++++++ .../completion/SmartTypeCompletionTest.java | 2 ++ 4 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/CheckStaticImportsType.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 68a03728e24a..8f70407b3ae0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -888,7 +888,9 @@ public class JavaCompletionUtil { memberProcessor.processMembersOfRegisteredClasses(matcher, new PairConsumer() { @Override public void consume(PsiMember member, PsiClass psiClass) { - set.add(memberProcessor.createLookupElement(member, psiClass, true)); + if (processor.satisfies(member, ResolveState.initial())) { + set.add(memberProcessor.createLookupElement(member, psiClass, true)); + } } }); } 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 c90b2197703a..409e7a09c886 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 @@ -132,18 +132,25 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme } } - if (myFilter.isClassAcceptable(element.getClass()) - && myFilter.isAcceptable(new CandidateInfo(element, state.get(PsiSubstitutor.KEY)), myElement)) { - final String name = PsiUtil.getName(element); - if (StringUtil.isNotEmpty(name) && (myMatcher == null || myMatcher.value(name))) { - if(isAccessible(element)){ - add(new CompletionElement(myQualifierType, element, state.get(PsiSubstitutor.KEY), myQualifierClass)); - } + if (satisfies(element, state) && isAccessible(element)) { + CompletionElement element1 = new CompletionElement(myQualifierType, element, state.get(PsiSubstitutor.KEY), myQualifierClass); + if (myResultNames.add(element1.getUniqueId())) { + myResults.add(element1); } } return true; } + public boolean satisfies(@NotNull PsiElement element, @NotNull ResolveState state) { + final String name = PsiUtil.getName(element); + if (StringUtil.isNotEmpty(name) && (myMatcher == null || myMatcher.value(name))) { + if (myFilter.isClassAcceptable(element.getClass()) && myFilter.isAcceptable(new CandidateInfo(element, state.get(PsiSubstitutor.KEY)), myElement)) { + return true; + } + } + return false; + } + @Nullable public PsiType getQualifierType() { return myQualifierType; @@ -156,12 +163,6 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme return JavaPsiFacade.getInstance(element.getProject()).getResolveHelper().isAccessible((PsiMember)element, myElement, myQualifierClass); } - private void add(CompletionElement element){ - if(myResultNames.add(element.getUniqueId())){ - myResults.add(element); - } - } - public void setCompletionElements(@NotNull Object[] elements) { for (Object element: elements) { myResults.add(new CompletionElement(null, element, PsiSubstitutor.EMPTY, myQualifierClass)); diff --git a/java/java-tests/testData/codeInsight/completion/smartType/CheckStaticImportsType.java b/java/java-tests/testData/codeInsight/completion/smartType/CheckStaticImportsType.java new file mode 100644 index 000000000000..a378e36496f0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/CheckStaticImportsType.java @@ -0,0 +1,11 @@ +import java.util.ArrayList; +import java.util.List; +import static java.lang.Math.*; + +public class TestClass { + private List testList; + + public void testMe() { + List newList = new ArrayList(at); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java index 49de63057161..392315a34795 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java @@ -968,6 +968,8 @@ public class SmartTypeCompletionTest extends LightCompletionTestCase { public void testWildcardedInstanceof2() throws Throwable { doTest(); } public void testWildcardedInstanceof3() throws Throwable { doTest(); } + public void testCheckStaticImportsType() throws Throwable { doAntiTest(); } + public void testTypeVariableInstanceOf() throws Throwable { configureByTestName(); performAction();