suggest unresolved reference names only once

This commit is contained in:
peter
2011-10-13 20:16:30 +02:00
parent d57d8de5d8
commit 7dd4d3d0a5
3 changed files with 19 additions and 4 deletions

View File

@@ -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<String> unresolvedRefs = new ArrayList<String>();
final Set<String> unresolvedRefs = new LinkedHashSet<String>();
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());
}
}
});

View File

@@ -0,0 +1,8 @@
class Foo {
void foo() {
Object <caret>
System.out.println(psiClass);
System.out.println(psiClass);
System.out.println(psiClass);
}
}

View File

@@ -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);