### Eclipse Workspace Patch 1.0 #P org.eclipse.mylyn.resources.ui Index: META-INF/MANIFEST.MF =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.resources.ui/META-INF/MANIFEST.MF,v retrieving revision 1.367 diff -u -r1.367 MANIFEST.MF --- META-INF/MANIFEST.MF 3 Nov 2008 04:38:04 -0000 1.367 +++ META-INF/MANIFEST.MF 11 Feb 2009 01:29:23 -0000 @@ -15,7 +15,8 @@ org.eclipse.mylyn.context.core;bundle-version="[3.0.0,4.0.0)", org.eclipse.mylyn.context.ui;bundle-version="[3.0.0,4.0.0)", org.eclipse.mylyn.monitor.ui;bundle-version="[3.0.0,4.0.0)", - org.eclipse.mylyn.monitor.core;bundle-version="[3.0.0,4.0.0)" + org.eclipse.mylyn.monitor.core;bundle-version="[3.0.0,4.0.0)", + org.eclipse.core.expressions Bundle-ActivationPolicy: lazy Bundle-Vendor: %Bundle-Vendor Export-Package: org.eclipse.mylyn.internal.resources.ui;x-internal:=true, Index: src/org/eclipse/mylyn/resources/ui/FocusCommonNavigatorAction.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.resources.ui/src/org/eclipse/mylyn/resources/ui/FocusCommonNavigatorAction.java,v retrieving revision 1.4 diff -u -r1.4 FocusCommonNavigatorAction.java --- src/org/eclipse/mylyn/resources/ui/FocusCommonNavigatorAction.java 5 Feb 2009 05:00:18 -0000 1.4 +++ src/org/eclipse/mylyn/resources/ui/FocusCommonNavigatorAction.java 11 Feb 2009 01:29:23 -0000 @@ -12,10 +12,13 @@ package org.eclipse.mylyn.resources.ui; import java.lang.reflect.Constructor; +import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import org.eclipse.core.expressions.Expression; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; @@ -26,15 +29,20 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; +import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.context.ui.AbstractAutoFocusViewAction; import org.eclipse.mylyn.context.ui.InterestFilter; +import org.eclipse.mylyn.internal.context.ui.ContextUiPlugin; import org.eclipse.mylyn.internal.resources.ui.ResourcesUiBridgePlugin; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IViewPart; import org.eclipse.ui.internal.navigator.NavigatorContentService; import org.eclipse.ui.internal.navigator.actions.LinkEditorAction; +import org.eclipse.ui.internal.navigator.filters.CommonFilterDescriptor; +import org.eclipse.ui.internal.navigator.filters.CommonFilterDescriptorManager; +import org.eclipse.ui.internal.navigator.filters.CoreExpressionFilter; import org.eclipse.ui.internal.navigator.filters.SelectFiltersAction; import org.eclipse.ui.navigator.CommonNavigator; import org.eclipse.ui.navigator.ILinkHelper; @@ -53,20 +61,49 @@ private CommonNavigator commonNavigator; + private CommonFilterDescriptor[] filterDescriptors; + + private Field filterExpressionField1; + + private Field filterExpressionField2; + public FocusCommonNavigatorAction(InterestFilter interestFilter, boolean manageViewer, boolean manageFilters, boolean manageLinking) { super(interestFilter, manageViewer, manageFilters, manageLinking); } @Override + protected boolean installInterestFilter(StructuredViewer viewer) { + if (commonNavigator == null) { + commonNavigator = (CommonNavigator) super.getPartForAction(); + } + + try { + // XXX: reflection + Class clazz2 = CoreExpressionFilter.class; + filterExpressionField1 = clazz2.getDeclaredField("filterExpression"); + filterExpressionField1.setAccessible(true); + + Class clazz1 = CommonFilterDescriptor.class; + filterExpressionField2 = clazz1.getDeclaredField("filterExpression"); + filterExpressionField2.setAccessible(true); + } catch (Exception e) { + StatusHandler.log(new Status(IStatus.ERROR, ResourcesUiBridgePlugin.ID_PLUGIN, + "Could not determine filter", e)); //$NON-NLS-1$ + } + + filterDescriptors = CommonFilterDescriptorManager.getInstance().findVisibleFilters( + commonNavigator.getNavigatorContentService()); + + return super.installInterestFilter(viewer); + } + + @Override protected ISelection resolveSelection(IEditorPart editor, ITextSelection changedSelection, StructuredViewer viewer) throws CoreException { if (resolveFailed) { return null; } - if (commonNavigator == null) { - commonNavigator = (CommonNavigator) super.getPartForAction(); - } if (linkServiceMethod == null) { // TODO e3.5 replace with call to CommonNavigator.getLinkHelperService() try { @@ -171,6 +208,40 @@ return false; } + @Override + protected boolean isPreservedFilter(ViewerFilter filter) { + if (filter instanceof CoreExpressionFilter) { + CoreExpressionFilter expressionFilter = (CoreExpressionFilter) filter; + + Set preservedIds = ContextUiPlugin.getDefault().getPreservedFilterIds(viewPart.getSite().getId()); + if (!preservedIds.isEmpty()) { + + Expression expression2; + try { + expression2 = (Expression) filterExpressionField1.get(expressionFilter); + + for (CommonFilterDescriptor commonFilterDescriptor : filterDescriptors) { + if (preservedIds.contains(commonFilterDescriptor.getId())) { + + Expression expression1 = (Expression) filterExpressionField2.get(commonFilterDescriptor); + + if (expression1 != null && expression1.equals(expression2)) { + return true; + } + } + } + } catch (IllegalArgumentException e) { + StatusHandler.log(new Status(IStatus.ERROR, ResourcesUiBridgePlugin.ID_PLUGIN, + "Could not determine filter", e)); //$NON-NLS-1$ + } catch (IllegalAccessException e) { + StatusHandler.log(new Status(IStatus.ERROR, ResourcesUiBridgePlugin.ID_PLUGIN, + "Could not determine filter", e)); //$NON-NLS-1$ + } + } + } + return false; + } + /** * Copied from * Index: .refactorings/2009/2/7/refactorings.history =================================================================== RCS file: .refactorings/2009/2/7/refactorings.history diff -N .refactorings/2009/2/7/refactorings.history --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .refactorings/2009/2/7/refactorings.history 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,3 @@ + + + Index: .refactorings/2009/2/7/refactorings.index =================================================================== RCS file: .refactorings/2009/2/7/refactorings.index diff -N .refactorings/2009/2/7/refactorings.index --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .refactorings/2009/2/7/refactorings.index 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,5 @@ +1234315572339 Rename local variable 'field1' +1234315580336 Rename local variable 'filterExpressionField1' +1234315592283 Rename local variable 'field2' +1234315657460 Convert local variable 'filterExpressionField2' to field +1234315664549 Convert local variable 'filterExpressionField1' to field #P org.eclipse.mylyn.context.ui Index: src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.context.ui/src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java,v retrieving revision 1.38 diff -u -r1.38 AbstractFocusViewAction.java --- src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java 3 Dec 2008 03:14:20 -0000 1.38 +++ src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java 11 Feb 2009 01:29:24 -0000 @@ -466,9 +466,10 @@ if (viewPart != null && manageFilters) { Set toAdd = new HashSet(); - Set> excludedFilters = getPreservedFilterClasses(); + Set> preservedFilterClasses = getPreservedFilterClasses(); + for (ViewerFilter filter : previousFilters.get(viewer)) { - if (excludedFilters.contains(filter.getClass())) { + if (preservedFilterClasses.contains(filter.getClass()) || isPreservedFilter(filter)) { toAdd.add(filter); } } @@ -493,6 +494,15 @@ return false; } + /** + * Subclasses can provide additional viewer filters that should not be removed when focusing. + * + * @since 3.1 + */ + protected boolean isPreservedFilter(ViewerFilter filter) { + return false; + } + protected void uninstallInterestFilter(StructuredViewer viewer) { if (viewer == null) { // FIXME Assert.isNotNull(viewer) Index: .refactorings/2009/2/7/refactorings.index =================================================================== RCS file: .refactorings/2009/2/7/refactorings.index diff -N .refactorings/2009/2/7/refactorings.index --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .refactorings/2009/2/7/refactorings.index 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,3 @@ +1234309089116 Rename local variable 'excludedFilters' +1234310374262 Rename local variable 'excludedFilterClasses' +1234314997161 Rename method 'isCustomFilter' Index: .refactorings/2009/2/7/refactorings.history =================================================================== RCS file: .refactorings/2009/2/7/refactorings.history diff -N .refactorings/2009/2/7/refactorings.history --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .refactorings/2009/2/7/refactorings.history 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,3 @@ + + +