Skip to content

Commit 877bfdd

Browse files
iloveeclipsepraveen-skp
authored andcommitted
File search: show "results filtered" message also in the tree mode
This change unifies "filter" label handling for tree/table mode in the file search, we show now that the matches are filtered in both cases. See eclipse-platform#2279
1 parent bbf0026 commit 877bfdd

File tree

5 files changed

+86
-45
lines changed

5 files changed

+86
-45
lines changed

bundles/org.eclipse.search/newsearch/org/eclipse/search/ui/text/AbstractTextSearchResult.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,18 @@ public Object[] getElements() {
351351
return fElementsToMatches.keySet().toArray();
352352
}
353353

354+
/**
355+
* Returns a number of all elements that have matches. Note that count of
356+
* all elements that contain matches are returned. The filter state of the
357+
* matches is not relevant.
358+
*
359+
* @return the number of elements in this search result
360+
* @since 3.17
361+
*/
362+
public int getElementsCount() {
363+
return fElementsToMatches.size();
364+
}
365+
354366
/**
355367
* Sets the active match filters for this result. If set to non-null, the match filters will be used to update the filter
356368
* state ({@link Match#isFiltered()} of matches and the {@link AbstractTextSearchViewPage} will only

bundles/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileSearchPage.java

Lines changed: 38 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,24 @@
2525
import java.util.Objects;
2626
import java.util.Set;
2727

28+
import org.eclipse.swt.dnd.DND;
29+
import org.eclipse.swt.dnd.Transfer;
30+
import org.eclipse.swt.widgets.Display;
31+
import org.eclipse.swt.widgets.Item;
32+
import org.eclipse.swt.widgets.Table;
33+
import org.eclipse.swt.widgets.Tree;
34+
35+
import org.eclipse.core.runtime.IAdaptable;
36+
37+
import org.eclipse.core.resources.IContainer;
38+
import org.eclipse.core.resources.IFile;
39+
import org.eclipse.core.resources.IResource;
40+
2841
import org.eclipse.core.filebuffers.FileBuffers;
2942
import org.eclipse.core.filebuffers.ITextFileBuffer;
3043
import org.eclipse.core.filebuffers.ITextFileBufferManager;
3144
import org.eclipse.core.filebuffers.LocationKind;
32-
import org.eclipse.core.resources.IContainer;
33-
import org.eclipse.core.resources.IFile;
34-
import org.eclipse.core.resources.IResource;
35-
import org.eclipse.core.runtime.IAdaptable;
45+
3646
import org.eclipse.jface.action.IMenuManager;
3747
import org.eclipse.jface.action.MenuManager;
3848
import org.eclipse.jface.dialogs.ErrorDialog;
@@ -50,21 +60,7 @@
5060
import org.eclipse.jface.viewers.TreeViewer;
5161
import org.eclipse.jface.viewers.Viewer;
5262
import org.eclipse.jface.viewers.ViewerComparator;
53-
import org.eclipse.search.internal.ui.Messages;
54-
import org.eclipse.search.internal.ui.SearchMessages;
55-
import org.eclipse.search.ui.IContextMenuConstants;
56-
import org.eclipse.search.ui.ISearchResultViewPart;
57-
import org.eclipse.search.ui.NewSearchUI;
58-
import org.eclipse.search.ui.text.AbstractTextSearchResult;
59-
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
60-
import org.eclipse.search.ui.text.Match;
61-
import org.eclipse.search2.internal.ui.OpenSearchPreferencesAction;
62-
import org.eclipse.swt.dnd.DND;
63-
import org.eclipse.swt.dnd.Transfer;
64-
import org.eclipse.swt.widgets.Display;
65-
import org.eclipse.swt.widgets.Item;
66-
import org.eclipse.swt.widgets.Table;
67-
import org.eclipse.swt.widgets.Tree;
63+
6864
import org.eclipse.ui.IMemento;
6965
import org.eclipse.ui.IPageLayout;
7066
import org.eclipse.ui.IWorkbenchPage;
@@ -77,6 +73,17 @@
7773
import org.eclipse.ui.part.ResourceTransfer;
7874
import org.eclipse.ui.part.ShowInContext;
7975

76+
import org.eclipse.search.internal.ui.Messages;
77+
import org.eclipse.search.internal.ui.SearchMessages;
78+
import org.eclipse.search.ui.IContextMenuConstants;
79+
import org.eclipse.search.ui.ISearchResultViewPart;
80+
import org.eclipse.search.ui.NewSearchUI;
81+
import org.eclipse.search.ui.text.AbstractTextSearchResult;
82+
import org.eclipse.search.ui.text.AbstractTextSearchViewPage;
83+
import org.eclipse.search.ui.text.Match;
84+
85+
import org.eclipse.search2.internal.ui.OpenSearchPreferencesAction;
86+
8087

8188
public class FileSearchPage extends AbstractTextSearchViewPage implements IAdaptable {
8289

@@ -432,29 +439,22 @@ private boolean isQueryRunning() {
432439
@Override
433440
public String getLabel() {
434441
String label= super.getLabel();
435-
StructuredViewer viewer= getViewer();
436442
AbstractTextSearchResult result = getInput();
437443
String msg = label;
438444
if (result != null) {
439-
if (viewer instanceof TableViewer) {
440-
TableViewer tv = (TableViewer) viewer;
441-
442-
int itemCount = ((FileTableContentProvider) tv.getContentProvider())
443-
.getUnfilteredElements(getInput()).length;
444-
if (showLineMatches()) {
445-
int matchCount= getInput().getMatchCount();
446-
if (itemCount < matchCount) {
447-
msg = Messages.format(SearchMessages.FileSearchPage_limited_format_matches,
448-
new Object[] { label, Integer.valueOf(itemCount), Integer.valueOf(matchCount) });
449-
}
450-
} else {
451-
int fileCount= getInput().getElements().length;
452-
if (itemCount < fileCount) {
453-
msg = Messages.format(SearchMessages.FileSearchPage_limited_format_files,
454-
new Object[] { label, Integer.valueOf(itemCount), Integer.valueOf(fileCount) });
455-
}
445+
int itemCount = fContentProvider.getLeafCount(result);
446+
if (showLineMatches()) {
447+
int matchCount = result.getMatchCount();
448+
if (itemCount < matchCount) {
449+
msg = Messages.format(SearchMessages.FileSearchPage_limited_format_matches,
450+
new Object[] { label, Integer.valueOf(itemCount), Integer.valueOf(matchCount) });
451+
}
452+
} else {
453+
int fileCount = result.getElementsCount();
454+
if (itemCount < fileCount) {
455+
msg = Messages.format(SearchMessages.FileSearchPage_limited_format_files,
456+
new Object[] { label, Integer.valueOf(itemCount), Integer.valueOf(fileCount) });
456457
}
457-
458458
}
459459
if (result.getActiveMatchFilters() != null && result.getActiveMatchFilters().length > 0) {
460460
if (isQueryRunning()) {

bundles/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileTableContentProvider.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.eclipse.jface.viewers.IStructuredContentProvider;
2121
import org.eclipse.jface.viewers.TableViewer;
2222
import org.eclipse.jface.viewers.Viewer;
23+
2324
import org.eclipse.search.ui.text.AbstractTextSearchResult;
2425

2526
public class FileTableContentProvider implements IStructuredContentProvider, IFileSearchContentProvider {
@@ -37,15 +38,17 @@ public void dispose() {
3738
// nothing to do
3839
}
3940

40-
public Object[] getUnfilteredElements(AbstractTextSearchResult searchResult) {
41+
@Override
42+
public int getLeafCount(Object parentElement) {
43+
if (!(parentElement instanceof AbstractTextSearchResult searchResult)) {
44+
return 0;
45+
}
4146
int elementLimit = getElementLimit();
42-
Object[] elements = searchResult.getElements();
43-
if (elementLimit != -1 && elements.length > elementLimit) {
44-
Object[] shownElements = new Object[elementLimit];
45-
System.arraycopy(elements, 0, shownElements, 0, elementLimit);
46-
return shownElements;
47+
int elementsCount = searchResult.getElementsCount();
48+
if (elementLimit != -1 && elementsCount > elementLimit) {
49+
return elementLimit;
4750
}
48-
return elements;
51+
return elementsCount;
4952
}
5053

5154
@Override

bundles/org.eclipse.search/search/org/eclipse/search/internal/ui/text/FileTreeContentProvider.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public class FileTreeContentProvider implements ITreeContentProvider, IFileSearc
5454
FileTreeContentProvider(FileSearchPage page, AbstractTreeViewer viewer) {
5555
fPage= page;
5656
fTreeViewer= viewer;
57+
fChildrenMap = new HashMap<>();
5758
}
5859

5960
@Override
@@ -218,6 +219,24 @@ public Object[] getChildren(Object parentElement) {
218219
return children.toArray();
219220
}
220221

222+
@Override
223+
public int getLeafCount(Object parentElement) {
224+
Object[] children = getChildren(parentElement);
225+
if (children.length == 0) {
226+
return 0;
227+
}
228+
int count = 0;
229+
for (Object object : children) {
230+
boolean leaf = !hasChildren(object);
231+
if (leaf) {
232+
count++;
233+
} else {
234+
count += getLeafCount(object);
235+
}
236+
}
237+
return count;
238+
}
239+
221240
@Override
222241
public boolean hasChildren(Object element) {
223242
Set<Object> children = fChildrenMap.get(element);

bundles/org.eclipse.search/search/org/eclipse/search/internal/ui/text/IFileSearchContentProvider.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,11 @@ public interface IFileSearchContentProvider {
1919

2020
public abstract void clear();
2121

22+
/**
23+
* @param parentElement
24+
* parent element or input
25+
* @return number of leaf elements in the tree maintained by the provider
26+
*/
27+
public abstract int getLeafCount(Object parentElement);
28+
2229
}

0 commit comments

Comments
 (0)