Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix duplicate results when search for * #2547

Merged
merged 2 commits into from
Mar 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@
package org.eclipse.jdt.ls.core.internal.handlers;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.core.runtime.IProgressMonitor;
Expand Down Expand Up @@ -50,9 +52,9 @@ public static List<SymbolInformation> search(String query, String projectName, b
}

public static List<SymbolInformation> search(String query, int maxResults, String projectName, boolean sourceOnly, IProgressMonitor monitor) {
ArrayList<SymbolInformation> symbols = new ArrayList<>();
Set<SymbolInformation> symbols = new HashSet<>();
if (StringUtils.isBlank(query)) {
return symbols;
return new ArrayList<>(symbols);
}

try {
Expand Down Expand Up @@ -108,7 +110,7 @@ public static List<SymbolInformation> search(String query, int maxResults, Strin
monitor.done();
}

return symbols;
return new ArrayList<>(symbols);
}

private static IJavaSearchScope createSearchScope(String projectName, boolean sourceOnly) throws JavaModelException {
Expand Down Expand Up @@ -141,13 +143,13 @@ public SearchSymbolParams(String query, String projectName) {
}

private static class WorkspaceSymbolTypeRequestor extends TypeNameMatchRequestor {
private ArrayList<SymbolInformation> symbols;
private Set<SymbolInformation> symbols;
private int maxResults;
private boolean sourceOnly;
private boolean isSymbolTagSupported;
private IProgressMonitor monitor;

public WorkspaceSymbolTypeRequestor(ArrayList<SymbolInformation> symbols, int maxResults, boolean sourceOnly, boolean isSymbolTagSupported, IProgressMonitor monitor) {
public WorkspaceSymbolTypeRequestor(Set<SymbolInformation> symbols, int maxResults, boolean sourceOnly, boolean isSymbolTagSupported, IProgressMonitor monitor) {
this.symbols = symbols;
this.maxResults = maxResults;
this.sourceOnly = sourceOnly;
Expand Down Expand Up @@ -214,12 +216,12 @@ private SymbolKind mapKind(TypeNameMatch match) {
}

private static class WorkspaceSymbolMethodRequestor extends MethodNameMatchRequestor {
private ArrayList<SymbolInformation> symbols;
private Set<SymbolInformation> symbols;
private int maxResults;
private boolean isSymbolTagSupported;
private IProgressMonitor monitor;

public WorkspaceSymbolMethodRequestor(ArrayList<SymbolInformation> symbols, int maxResults, boolean isSymbolTagSupported, IProgressMonitor monitor) {
public WorkspaceSymbolMethodRequestor(Set<SymbolInformation> symbols, int maxResults, boolean isSymbolTagSupported, IProgressMonitor monitor) {
this.symbols = symbols;
this.maxResults = maxResults;
this.isSymbolTagSupported = isSymbolTagSupported;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
Expand Down Expand Up @@ -198,6 +200,13 @@ public void testSearchAllTypesOfPackage() {
assertTrue(results.stream().anyMatch(s -> "Exception".equals(s.getName()) && "java.lang".equals(s.getContainerName())));
}

@Test
public void testSearchWithoutDuplicate() {
List<SymbolInformation> results = WorkspaceSymbolHandler.search("*", monitor);
Set<SymbolInformation> resultsSet = new HashSet<>(results);
assertEquals(results.size(), resultsSet.size());
}

@Test
public void testSearchSourceMethodDeclarations() {
preferences.setIncludeSourceMethodDeclarations(true);
Expand Down