Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 67526 Details for
Bug 187200
[Viewers] Deleting filtered config doesn't reset filter + errors
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch
patch-187200.txt (text/plain), 8.83 KB, created by
Boris Bokowski
on 2007-05-16 17:01:06 EDT
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Boris Bokowski
Created:
2007-05-16 17:01:06 EDT
Size:
8.83 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.ui.workbench >Index: Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java,v >retrieving revision 1.21 >diff -u -r1.21 FilteredTree.java >--- Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java 30 Apr 2007 04:07:34 -0000 1.21 >+++ Eclipse UI/org/eclipse/ui/dialogs/FilteredTree.java 16 May 2007 21:00:31 -0000 >@@ -19,6 +19,7 @@ > import org.eclipse.jface.action.ToolBarManager; > import org.eclipse.jface.resource.ImageDescriptor; > import org.eclipse.jface.resource.JFaceResources; >+import org.eclipse.jface.viewers.IContentProvider; > import org.eclipse.jface.viewers.ISelection; > import org.eclipse.jface.viewers.TreeViewer; > import org.eclipse.swt.SWT; >@@ -282,6 +283,9 @@ > refreshJob.cancel(); > } > }); >+ if (treeViewer instanceof NotifyingTreeViewer) { >+ patternFilter.setUseCache(true); >+ } > treeViewer.addFilter(patternFilter); > return treeViewer.getControl(); > } >@@ -296,7 +300,7 @@ > * @since 3.3 > */ > protected TreeViewer doCreateTreeViewer(Composite parent, int style) { >- return new TreeViewer(parent, style); >+ return new NotifyingTreeViewer(parent, style); > } > > /** >@@ -757,4 +761,100 @@ > return null; > } > >+ /** >+ * Custom tree viewer subclass that clears the caches in patternFilter on >+ * any change to the tree. See bug 187200. >+ * >+ * @since 3.3 >+ * >+ */ >+ class NotifyingTreeViewer extends TreeViewer { >+ >+ /** >+ * @param parent >+ * @param style >+ */ >+ public NotifyingTreeViewer(Composite parent, int style) { >+ super(parent, style); >+ } >+ >+ public void add(Object parentElementOrTreePath, Object childElement) { >+ getPatternFilter().clearCaches(); >+ super.add(parentElementOrTreePath, childElement); >+ } >+ >+ public void add(Object parentElementOrTreePath, Object[] childElements) { >+ getPatternFilter().clearCaches(); >+ super.add(parentElementOrTreePath, childElements); >+ } >+ >+ protected void inputChanged(Object input, Object oldInput) { >+ getPatternFilter().clearCaches(); >+ super.inputChanged(input, oldInput); >+ } >+ >+ public void insert(Object parentElementOrTreePath, Object element, >+ int position) { >+ getPatternFilter().clearCaches(); >+ super.insert(parentElementOrTreePath, element, position); >+ } >+ >+ public void refresh() { >+ getPatternFilter().clearCaches(); >+ super.refresh(); >+ } >+ >+ public void refresh(boolean updateLabels) { >+ getPatternFilter().clearCaches(); >+ super.refresh(updateLabels); >+ } >+ >+ public void refresh(Object element) { >+ getPatternFilter().clearCaches(); >+ super.refresh(element); >+ } >+ >+ public void refresh(Object element, boolean updateLabels) { >+ getPatternFilter().clearCaches(); >+ super.refresh(element, updateLabels); >+ } >+ >+ public void remove(Object elementsOrTreePaths) { >+ getPatternFilter().clearCaches(); >+ super.remove(elementsOrTreePaths); >+ } >+ >+ public void remove(Object parent, Object[] elements) { >+ getPatternFilter().clearCaches(); >+ super.remove(parent, elements); >+ } >+ >+ public void remove(Object[] elementsOrTreePaths) { >+ getPatternFilter().clearCaches(); >+ super.remove(elementsOrTreePaths); >+ } >+ >+ public void replace(Object parentElementOrTreePath, int index, >+ Object element) { >+ getPatternFilter().clearCaches(); >+ super.replace(parentElementOrTreePath, index, element); >+ } >+ >+ public void setChildCount(Object elementOrTreePath, int count) { >+ getPatternFilter().clearCaches(); >+ super.setChildCount(elementOrTreePath, count); >+ } >+ >+ public void setContentProvider(IContentProvider provider) { >+ getPatternFilter().clearCaches(); >+ super.setContentProvider(provider); >+ } >+ >+ public void setHasChildren(Object elementOrTreePath, boolean hasChildren) { >+ getPatternFilter().clearCaches(); >+ super.setHasChildren(elementOrTreePath, hasChildren); >+ } >+ >+ } >+ > } >Index: Eclipse UI/org/eclipse/ui/dialogs/PatternFilter.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/dialogs/PatternFilter.java,v >retrieving revision 1.9 >diff -u -r1.9 PatternFilter.java >--- Eclipse UI/org/eclipse/ui/dialogs/PatternFilter.java 10 May 2007 16:13:06 -0000 1.9 >+++ Eclipse UI/org/eclipse/ui/dialogs/PatternFilter.java 16 May 2007 21:00:31 -0000 >@@ -45,6 +45,8 @@ > */ > private Map foundAnyCache = new HashMap(); > >+ private boolean useCache = false; >+ > /** > * Whether to include a leading wildcard for all provided patterns. A > * trailing wildcard is always included. >@@ -56,7 +58,7 @@ > */ > private StringMatcher matcher; > >- private boolean useFilterOptimization = true; >+ private boolean useEarlyReturnIfMatcherIsNull = true; > > private static Object[] EMPTY = new Object[0]; > >@@ -67,10 +69,14 @@ > // we don't want to optimize if we've extended the filter ... this > // needs to be addressed in 3.4 > // https://bugs.eclipse.org/bugs/show_bug.cgi?id=186404 >- if (matcher == null && useFilterOptimization) { >+ if (matcher == null && useEarlyReturnIfMatcherIsNull) { > return elements; > } > >+ if (!useCache) { >+ return super.filter(viewer, parent, elements); >+ } >+ > Object[] filtered = (Object[]) cache.get(parent); > if (filtered == null) { > Boolean foundAny = (Boolean) foundAnyCache.get(parent); >@@ -85,7 +91,10 @@ > } > > /** >- * Returns true if any of the elements makes it through the filter. >+ * Returns true if any of the elements makes it through the filter. >+ * This method uses caching if enabled; the computation is done in >+ * computeAnyVisible. >+ * > * @param viewer > * @param parent > * @param elements the elements (must not be an empty array) >@@ -96,22 +105,36 @@ > return true; > } > >+ if (!useCache) { >+ return computeAnyVisible(viewer, elements); >+ } >+ > Object[] filtered = (Object[]) cache.get(parent); > if (filtered != null) { > return filtered.length > 0; > } > Boolean foundAny = (Boolean) foundAnyCache.get(parent); > if (foundAny == null) { >- boolean elementFound = false; >- for (int i = 0; i < elements.length && !elementFound; i++) { >- Object element = elements[i]; >- elementFound = isElementVisible(viewer, element); >- } >- foundAny = elementFound ? Boolean.TRUE : Boolean.FALSE; >+ foundAny = computeAnyVisible(viewer, elements) ? Boolean.TRUE : Boolean.FALSE; > foundAnyCache.put(parent, foundAny); > } > return foundAny.booleanValue(); > } >+ >+ /** >+ * Returns true if any of the elements makes it through the filter. >+ * @param viewer >+ * @param elements >+ * @return >+ */ >+ private boolean computeAnyVisible(Viewer viewer, Object[] elements) { >+ boolean elementFound = false; >+ for (int i = 0; i < elements.length && !elementFound; i++) { >+ Object element = elements[i]; >+ elementFound = isElementVisible(viewer, element); >+ } >+ return elementFound; >+ } > > /* (non-Javadoc) > * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) >@@ -143,14 +166,13 @@ > // these 2 strings allow the PatternFilter to be extended in > // 3.3 - https://bugs.eclipse.org/bugs/show_bug.cgi?id=186404 > if ("org.eclipse.ui.keys.optimization.true".equals(patternString)) { //$NON-NLS-1$ >- useFilterOptimization = true; >+ useEarlyReturnIfMatcherIsNull = true; > return; > } else if ("org.eclipse.ui.keys.optimization.false".equals(patternString)) { //$NON-NLS-1$ >- useFilterOptimization = false; >+ useEarlyReturnIfMatcherIsNull = false; > return; > } >- cache.clear(); >- foundAnyCache.clear(); >+ clearCaches(); > if (patternString == null || patternString.equals("")) { //$NON-NLS-1$ > matcher = null; > } else { >@@ -162,6 +184,15 @@ > } > } > >+ /** >+ * Clears the caches used for optimizing this filter. Needs to be called whenever >+ * the tree content changes. >+ */ >+ /* package */ void clearCaches() { >+ cache.clear(); >+ foundAnyCache.clear(); >+ } >+ > /** > * Answers whether the given String matches the pattern. > * >@@ -311,5 +342,14 @@ > } > > return false; >+ } >+ >+ /** >+ * Can be called by the filtered tree to turn on caching. >+ * >+ * @param useCache The useCache to set. >+ */ >+ void setUseCache(boolean useCache) { >+ this.useCache = useCache; > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 187200
: 67526