Skip to content

Commit c222429

Browse files
datho7561mickaelistria
authored andcommitted
In type completion, filter by unique FQN
Should fix 6 cases without regressions, because one of the projects used to test completion has two classes called `SuperClass` in the default package. Signed-off-by: David Thompson <[email protected]>
1 parent a8a8635 commit c222429

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/codeassist/DOMCompletionEngine.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.Optional;
2828
import java.util.Queue;
2929
import java.util.Set;
30+
import java.util.concurrent.ConcurrentHashMap;
3031
import java.util.function.Predicate;
3132
import java.util.stream.Collectors;
3233
import java.util.stream.Stream;
@@ -94,6 +95,7 @@
9495
import org.eclipse.jdt.core.dom.MethodInvocation;
9596
import org.eclipse.jdt.core.dom.MethodRef;
9697
import org.eclipse.jdt.core.dom.Modifier;
98+
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
9799
import org.eclipse.jdt.core.dom.ModuleDeclaration;
98100
import org.eclipse.jdt.core.dom.Name;
99101
import org.eclipse.jdt.core.dom.NormalAnnotation;
@@ -126,7 +128,6 @@
126128
import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
127129
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
128130
import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
129-
import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
130131
import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
131132
import org.eclipse.jdt.core.search.IJavaSearchConstants;
132133
import org.eclipse.jdt.core.search.SearchEngine;
@@ -1452,6 +1453,7 @@ public void complete(org.eclipse.jdt.internal.compiler.env.ICompilationUnit sour
14521453
? IJavaSearchConstants.ANNOTATION_TYPE
14531454
: IJavaSearchConstants.TYPE;
14541455
if (!this.requestor.isIgnored(CompletionProposal.TYPE_REF)) {
1456+
final Set<String> alreadySuggestedFqn = ConcurrentHashMap.newKeySet();
14551457
findTypes(completeAfter, typeMatchRule, null)
14561458
.filter(type -> filterTypeBasedOnAccess(type, currentPackage, currentTypeBinding))
14571459
.filter(type -> {
@@ -1469,6 +1471,13 @@ public void complete(org.eclipse.jdt.internal.compiler.env.ICompilationUnit sour
14691471
.filter(type -> {
14701472
return filterBasedOnExtendsOrImplementsInfo(type, extendsOrImplementsInfo);
14711473
})
1474+
.filter(type -> {
1475+
if (alreadySuggestedFqn.contains(type.getFullyQualifiedName())) {
1476+
return false;
1477+
}
1478+
alreadySuggestedFqn.add(type.getFullyQualifiedName());
1479+
return true;
1480+
})
14721481
.map(this::toProposal).forEach(this.requestor::accept);
14731482
}
14741483
}

0 commit comments

Comments
 (0)