From 7dd4d3d0a545500149c061e52e0d23190b19cc1d Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 13 Oct 2011 20:16:30 +0200 Subject: [PATCH] suggest unresolved reference names only once --- .../JavaMemberNameCompletionContributor.java | 10 ++++++---- .../variables/locals/UnresolvedReference.java | 8 ++++++++ .../completion/VariablesCompletionTest.java | 5 +++++ 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedReference.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java index ee5ef7ab9f76..e2b6f17b247d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaMemberNameCompletionContributor.java @@ -191,7 +191,7 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor { private static String[] getUnresolvedReferences(final PsiElement parentOfType, final boolean referenceOnMethod) { if (parentOfType != null && parentOfType.getTextLength() > MAX_SCOPE_SIZE_TO_SEARCH_UNRESOLVED) return ArrayUtil.EMPTY_STRING_ARRAY; - final List unresolvedRefs = new ArrayList(); + final Set unresolvedRefs = new LinkedHashSet(); if (parentOfType != null) { parentOfType.accept(new JavaRecursiveElementWalkingVisitor() { @@ -200,10 +200,12 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor { if (parent instanceof PsiReference) return; if (referenceOnMethod && parent instanceof PsiMethodCallExpression && reference == ((PsiMethodCallExpression)parent).getMethodExpression()) { - if (reference.resolve() == null && reference.getReferenceName() != null) unresolvedRefs.add(reference.getReferenceName()); + if (reference.resolve() == null) { + ContainerUtil.addIfNotNull(unresolvedRefs, reference.getReferenceName()); + } } - else if (!referenceOnMethod && !(parent instanceof PsiMethodCallExpression) &&reference.resolve() == null && reference.getReferenceName() != null) { - unresolvedRefs.add(reference.getReferenceName()); + else if (!referenceOnMethod && !(parent instanceof PsiMethodCallExpression) &&reference.resolve() == null) { + ContainerUtil.addIfNotNull(unresolvedRefs, reference.getReferenceName()); } } }); diff --git a/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedReference.java b/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedReference.java new file mode 100644 index 000000000000..46b3c30437ac --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/variables/locals/UnresolvedReference.java @@ -0,0 +1,8 @@ +class Foo { + void foo() { + Object + System.out.println(psiClass); + System.out.println(psiClass); + System.out.println(psiClass); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/VariablesCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/VariablesCompletionTest.java index 4c560e028ab2..12751a819d1f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/VariablesCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/VariablesCompletionTest.java @@ -91,6 +91,11 @@ public class VariablesCompletionTest extends CompletionTestCase { doTest("TestSource8.java", "TestResult8.java"); } + public void testUnresolvedReference() throws Exception { + configureByFile(FILE_PREFIX + "locals/" + getTestName(false) + ".java"); + assertStringItems("o", "psiClass"); + } + public void testFieldNameCompletion1() throws Exception { configureByFileNoCompletion(FILE_PREFIX + "locals/" + "FieldNameCompletion1.java"); CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(myProject);