View | Details | Raw Unified | Return to bug 263870 | Differences between
and this patch

Collapse All | Expand All

(-)META-INF/MANIFEST.MF (-1 / +2 lines)
Lines 15-21 Link Here
15
 org.eclipse.mylyn.context.core;bundle-version="[3.0.0,4.0.0)",
15
 org.eclipse.mylyn.context.core;bundle-version="[3.0.0,4.0.0)",
16
 org.eclipse.mylyn.context.ui;bundle-version="[3.0.0,4.0.0)",
16
 org.eclipse.mylyn.context.ui;bundle-version="[3.0.0,4.0.0)",
17
 org.eclipse.mylyn.monitor.ui;bundle-version="[3.0.0,4.0.0)",
17
 org.eclipse.mylyn.monitor.ui;bundle-version="[3.0.0,4.0.0)",
18
 org.eclipse.mylyn.monitor.core;bundle-version="[3.0.0,4.0.0)"
18
 org.eclipse.mylyn.monitor.core;bundle-version="[3.0.0,4.0.0)",
19
 org.eclipse.core.expressions
19
Bundle-ActivationPolicy: lazy
20
Bundle-ActivationPolicy: lazy
20
Bundle-Vendor: %Bundle-Vendor
21
Bundle-Vendor: %Bundle-Vendor
21
Export-Package: org.eclipse.mylyn.internal.resources.ui;x-internal:=true,
22
Export-Package: org.eclipse.mylyn.internal.resources.ui;x-internal:=true,
(-)src/org/eclipse/mylyn/resources/ui/FocusCommonNavigatorAction.java (-3 / +74 lines)
Lines 12-21 Link Here
12
package org.eclipse.mylyn.resources.ui;
12
package org.eclipse.mylyn.resources.ui;
13
13
14
import java.lang.reflect.Constructor;
14
import java.lang.reflect.Constructor;
15
import java.lang.reflect.Field;
15
import java.lang.reflect.Method;
16
import java.lang.reflect.Method;
16
import java.util.ArrayList;
17
import java.util.ArrayList;
17
import java.util.List;
18
import java.util.List;
19
import java.util.Set;
18
20
21
import org.eclipse.core.expressions.Expression;
19
import org.eclipse.core.runtime.CoreException;
22
import org.eclipse.core.runtime.CoreException;
20
import org.eclipse.core.runtime.IStatus;
23
import org.eclipse.core.runtime.IStatus;
21
import org.eclipse.core.runtime.Status;
24
import org.eclipse.core.runtime.Status;
Lines 26-40 Link Here
26
import org.eclipse.jface.viewers.IStructuredSelection;
29
import org.eclipse.jface.viewers.IStructuredSelection;
27
import org.eclipse.jface.viewers.StructuredSelection;
30
import org.eclipse.jface.viewers.StructuredSelection;
28
import org.eclipse.jface.viewers.StructuredViewer;
31
import org.eclipse.jface.viewers.StructuredViewer;
32
import org.eclipse.jface.viewers.ViewerFilter;
29
import org.eclipse.mylyn.commons.core.StatusHandler;
33
import org.eclipse.mylyn.commons.core.StatusHandler;
30
import org.eclipse.mylyn.context.ui.AbstractAutoFocusViewAction;
34
import org.eclipse.mylyn.context.ui.AbstractAutoFocusViewAction;
31
import org.eclipse.mylyn.context.ui.InterestFilter;
35
import org.eclipse.mylyn.context.ui.InterestFilter;
36
import org.eclipse.mylyn.internal.context.ui.ContextUiPlugin;
32
import org.eclipse.mylyn.internal.resources.ui.ResourcesUiBridgePlugin;
37
import org.eclipse.mylyn.internal.resources.ui.ResourcesUiBridgePlugin;
33
import org.eclipse.ui.IEditorInput;
38
import org.eclipse.ui.IEditorInput;
34
import org.eclipse.ui.IEditorPart;
39
import org.eclipse.ui.IEditorPart;
35
import org.eclipse.ui.IViewPart;
40
import org.eclipse.ui.IViewPart;
36
import org.eclipse.ui.internal.navigator.NavigatorContentService;
41
import org.eclipse.ui.internal.navigator.NavigatorContentService;
37
import org.eclipse.ui.internal.navigator.actions.LinkEditorAction;
42
import org.eclipse.ui.internal.navigator.actions.LinkEditorAction;
43
import org.eclipse.ui.internal.navigator.filters.CommonFilterDescriptor;
44
import org.eclipse.ui.internal.navigator.filters.CommonFilterDescriptorManager;
45
import org.eclipse.ui.internal.navigator.filters.CoreExpressionFilter;
38
import org.eclipse.ui.internal.navigator.filters.SelectFiltersAction;
46
import org.eclipse.ui.internal.navigator.filters.SelectFiltersAction;
39
import org.eclipse.ui.navigator.CommonNavigator;
47
import org.eclipse.ui.navigator.CommonNavigator;
40
import org.eclipse.ui.navigator.ILinkHelper;
48
import org.eclipse.ui.navigator.ILinkHelper;
Lines 53-72 Link Here
53
61
54
	private CommonNavigator commonNavigator;
62
	private CommonNavigator commonNavigator;
55
63
64
	private CommonFilterDescriptor[] filterDescriptors;
65
66
	private Field filterExpressionField1;
67
68
	private Field filterExpressionField2;
69
56
	public FocusCommonNavigatorAction(InterestFilter interestFilter, boolean manageViewer, boolean manageFilters,
70
	public FocusCommonNavigatorAction(InterestFilter interestFilter, boolean manageViewer, boolean manageFilters,
57
			boolean manageLinking) {
71
			boolean manageLinking) {
58
		super(interestFilter, manageViewer, manageFilters, manageLinking);
72
		super(interestFilter, manageViewer, manageFilters, manageLinking);
59
	}
73
	}
60
74
61
	@Override
75
	@Override
76
	protected boolean installInterestFilter(StructuredViewer viewer) {
77
		if (commonNavigator == null) {
78
			commonNavigator = (CommonNavigator) super.getPartForAction();
79
		}
80
81
		try {
82
			// XXX: reflection
83
			Class<?> clazz2 = CoreExpressionFilter.class;
84
			filterExpressionField1 = clazz2.getDeclaredField("filterExpression");
85
			filterExpressionField1.setAccessible(true);
86
87
			Class<?> clazz1 = CommonFilterDescriptor.class;
88
			filterExpressionField2 = clazz1.getDeclaredField("filterExpression");
89
			filterExpressionField2.setAccessible(true);
90
		} catch (Exception e) {
91
			StatusHandler.log(new Status(IStatus.ERROR, ResourcesUiBridgePlugin.ID_PLUGIN,
92
					"Could not determine filter", e)); //$NON-NLS-1$
93
		}
94
95
		filterDescriptors = CommonFilterDescriptorManager.getInstance().findVisibleFilters(
96
				commonNavigator.getNavigatorContentService());
97
98
		return super.installInterestFilter(viewer);
99
	}
100
101
	@Override
62
	protected ISelection resolveSelection(IEditorPart editor, ITextSelection changedSelection, StructuredViewer viewer)
102
	protected ISelection resolveSelection(IEditorPart editor, ITextSelection changedSelection, StructuredViewer viewer)
63
			throws CoreException {
103
			throws CoreException {
64
		if (resolveFailed) {
104
		if (resolveFailed) {
65
			return null;
105
			return null;
66
		}
106
		}
67
		if (commonNavigator == null) {
68
			commonNavigator = (CommonNavigator) super.getPartForAction();
69
		}
70
		if (linkServiceMethod == null) {
107
		if (linkServiceMethod == null) {
71
			// TODO e3.5 replace with call to CommonNavigator.getLinkHelperService()
108
			// TODO e3.5 replace with call to CommonNavigator.getLinkHelperService()
72
			try {
109
			try {
Lines 171-176 Link Here
171
		return false;
208
		return false;
172
	}
209
	}
173
210
211
	@Override
212
	protected boolean isPreservedFilter(ViewerFilter filter) {
213
		if (filter instanceof CoreExpressionFilter) {
214
			CoreExpressionFilter expressionFilter = (CoreExpressionFilter) filter;
215
216
			Set<String> preservedIds = ContextUiPlugin.getDefault().getPreservedFilterIds(viewPart.getSite().getId());
217
			if (!preservedIds.isEmpty()) {
218
219
				Expression expression2;
220
				try {
221
					expression2 = (Expression) filterExpressionField1.get(expressionFilter);
222
223
					for (CommonFilterDescriptor commonFilterDescriptor : filterDescriptors) {
224
						if (preservedIds.contains(commonFilterDescriptor.getId())) {
225
226
							Expression expression1 = (Expression) filterExpressionField2.get(commonFilterDescriptor);
227
228
							if (expression1 != null && expression1.equals(expression2)) {
229
								return true;
230
							}
231
						}
232
					}
233
				} catch (IllegalArgumentException e) {
234
					StatusHandler.log(new Status(IStatus.ERROR, ResourcesUiBridgePlugin.ID_PLUGIN,
235
							"Could not determine filter", e)); //$NON-NLS-1$
236
				} catch (IllegalAccessException e) {
237
					StatusHandler.log(new Status(IStatus.ERROR, ResourcesUiBridgePlugin.ID_PLUGIN,
238
							"Could not determine filter", e)); //$NON-NLS-1$
239
				}
240
			}
241
		}
242
		return false;
243
	}
244
174
	/**
245
	/**
175
	 * Copied from
246
	 * Copied from
176
	 * 
247
	 * 
(-).refactorings/2009/2/7/refactorings.history (+3 lines)
Added Link Here
1
<?xml version="1.0" encoding="UTF-8"?>
2
<session version="1.0">&#x0A;<refactoring comment="Rename local variable &apos;field1&apos; in &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.isPreservedFilter(...)&apos; to &apos;filterExpressionField1&apos;&#x0D;&#x0A;- Original project: &apos;org.eclipse.mylyn.resources.ui&apos;&#x0D;&#x0A;- Original element: &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.isPreservedFilter(ViewerFilter).field1&apos;&#x0D;&#x0A;- Renamed element: &apos;field1&apos;&#x0D;&#x0A;- Update references to refactored element" description="Rename local variable &apos;field1&apos;" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylyn.resources.ui{FocusCommonNavigatorAction.java[FocusCommonNavigatorAction~isPreservedFilter~QViewerFilter;@field1!7728!7786!7734!7739!QField;" name="filterExpressionField1" references="true" stamp="1234315572339" version="1.0"/>&#x0A;<refactoring comment="Rename local variable &apos;filterExpressionField1&apos; in &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.isPreservedFilter(...)&apos; to &apos;filterExpressionField2&apos;&#x0D;&#x0A;- Original project: &apos;org.eclipse.mylyn.resources.ui&apos;&#x0D;&#x0A;- Original element: &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.isPreservedFilter(ViewerFilter).filterExpressionField1&apos;&#x0D;&#x0A;- Renamed element: &apos;filterExpressionField1&apos;&#x0D;&#x0A;- Update references to refactored element" description="Rename local variable &apos;filterExpressionField1&apos;" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylyn.resources.ui{FocusCommonNavigatorAction.java[FocusCommonNavigatorAction~isPreservedFilter~QViewerFilter;@filterExpressionField1!7728!7802!7734!7755!QField;" name="filterExpressionField2" references="true" stamp="1234315580336" version="1.0"/>&#x0A;<refactoring comment="Rename local variable &apos;field2&apos; in &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.isPreservedFilter(...)&apos; to &apos;filterExpressionField1&apos;&#x0D;&#x0A;- Original project: &apos;org.eclipse.mylyn.resources.ui&apos;&#x0D;&#x0A;- Original element: &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.isPreservedFilter(ViewerFilter).field2&apos;&#x0D;&#x0A;- Renamed element: &apos;field2&apos;&#x0D;&#x0A;- Update references to refactored element" description="Rename local variable &apos;field2&apos;" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylyn.resources.ui{FocusCommonNavigatorAction.java[FocusCommonNavigatorAction~isPreservedFilter~QViewerFilter;@field2!8032!8090!8038!8043!QField;" name="filterExpressionField1" references="true" stamp="1234315592283" version="1.0"/>&#x0A;<refactoring comment="Convert local variable &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.installInterestFilter().filterExpressionField2&apos; in &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.installInterestFilter()&apos; to field&#x0D;&#x0A;- Original project: &apos;org.eclipse.mylyn.resources.ui&apos;&#x0D;&#x0A;- Original element: &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.installInterestFilter().filterExpressionField2&apos;&#x0D;&#x0A;- Field name: &apos;filterExpressionField2&apos;&#x0D;&#x0A;- Initialize field in method&#x0D;&#x0A;- Declared visibility: &apos;private&apos;" description="Convert local variable &apos;filterExpressionField2&apos; to field" final="false" flags="2" id="org.eclipse.jdt.ui.promote.temp" initialize="1" input="/src&lt;org.eclipse.mylyn.resources.ui{FocusCommonNavigatorAction.java" name="filterExpressionField2" selection="3188 0" stamp="1234315657460" static="false" version="1.0" visibility="2"/>&#x0A;<refactoring comment="Convert local variable &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.installInterestFilter().filterExpressionField1&apos; in &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.installInterestFilter()&apos; to field&#x0D;&#x0A;- Original project: &apos;org.eclipse.mylyn.resources.ui&apos;&#x0D;&#x0A;- Original element: &apos;org.eclipse.mylyn.resources.ui.FocusCommonNavigatorAction.installInterestFilter().filterExpressionField1&apos;&#x0D;&#x0A;- Field name: &apos;filterExpressionField1&apos;&#x0D;&#x0A;- Initialize field in method&#x0D;&#x0A;- Declared visibility: &apos;private&apos;" description="Convert local variable &apos;filterExpressionField1&apos; to field" final="false" flags="2" id="org.eclipse.jdt.ui.promote.temp" initialize="1" input="/src&lt;org.eclipse.mylyn.resources.ui{FocusCommonNavigatorAction.java" name="filterExpressionField1" selection="3396 0" stamp="1234315664549" static="false" version="1.0" visibility="2"/>
3
</session>
(-).refactorings/2009/2/7/refactorings.index (+5 lines)
Added Link Here
1
1234315572339	Rename local variable 'field1'
2
1234315580336	Rename local variable 'filterExpressionField1'
3
1234315592283	Rename local variable 'field2'
4
1234315657460	Convert local variable 'filterExpressionField2' to field
5
1234315664549	Convert local variable 'filterExpressionField1' to field
(-)src/org/eclipse/mylyn/context/ui/AbstractFocusViewAction.java (-2 / +12 lines)
Lines 466-474 Link Here
466
466
467
			if (viewPart != null && manageFilters) {
467
			if (viewPart != null && manageFilters) {
468
				Set<ViewerFilter> toAdd = new HashSet<ViewerFilter>();
468
				Set<ViewerFilter> toAdd = new HashSet<ViewerFilter>();
469
				Set<Class<?>> excludedFilters = getPreservedFilterClasses();
469
				Set<Class<?>> preservedFilterClasses = getPreservedFilterClasses();
470
470
				for (ViewerFilter filter : previousFilters.get(viewer)) {
471
				for (ViewerFilter filter : previousFilters.get(viewer)) {
471
					if (excludedFilters.contains(filter.getClass())) {
472
					if (preservedFilterClasses.contains(filter.getClass()) || isPreservedFilter(filter)) {
472
						toAdd.add(filter);
473
						toAdd.add(filter);
473
					}
474
					}
474
				}
475
				}
Lines 493-498 Link Here
493
		return false;
494
		return false;
494
	}
495
	}
495
496
497
	/**
498
	 * Subclasses can provide additional viewer filters that should not be removed when focusing.
499
	 * 
500
	 * @since 3.1
501
	 */
502
	protected boolean isPreservedFilter(ViewerFilter filter) {
503
		return false;
504
	}
505
496
	protected void uninstallInterestFilter(StructuredViewer viewer) {
506
	protected void uninstallInterestFilter(StructuredViewer viewer) {
497
		if (viewer == null) {
507
		if (viewer == null) {
498
			// FIXME Assert.isNotNull(viewer)
508
			// FIXME Assert.isNotNull(viewer)
(-).refactorings/2009/2/7/refactorings.index (+3 lines)
Added Link Here
1
1234309089116	Rename local variable 'excludedFilters'
2
1234310374262	Rename local variable 'excludedFilterClasses'
3
1234314997161	Rename method 'isCustomFilter'
(-).refactorings/2009/2/7/refactorings.history (+3 lines)
Added Link Here
1
<?xml version="1.0" encoding="UTF-8"?>
2
<session version="1.0">&#x0A;<refactoring comment="Rename local variable &apos;excludedFilters&apos; in &apos;org.eclipse.mylyn.context.ui.AbstractFocusViewAction.installInterestFilter(...)&apos; to &apos;excludedFilterClasses&apos;&#x0D;&#x0A;- Original project: &apos;org.eclipse.mylyn.context.ui&apos;&#x0D;&#x0A;- Original element: &apos;org.eclipse.mylyn.context.ui.AbstractFocusViewAction.installInterestFilter(StructuredViewer).excludedFilters&apos;&#x0D;&#x0A;- Renamed element: &apos;excludedFilters&apos;&#x0D;&#x0A;- Update references to refactored element" description="Rename local variable &apos;excludedFilters&apos;" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylyn.context.ui{AbstractFocusViewAction.java[AbstractFocusViewAction~installInterestFilter~QStructuredViewer;@excludedFilters!14974!15033!14988!15002!QSet" name="excludedFilterClasses" references="true" stamp="1234309089116" version="1.0"/>&#x0A;<refactoring comment="Rename local variable &apos;excludedFilterClasses&apos; in &apos;org.eclipse.mylyn.context.ui.AbstractFocusViewAction.installInterestFilter(...)&apos; to &apos;preservedFilterClasses&apos;&#x0D;&#x0A;- Original project: &apos;org.eclipse.mylyn.context.ui&apos;&#x0D;&#x0A;- Original element: &apos;org.eclipse.mylyn.context.ui.AbstractFocusViewAction.installInterestFilter(StructuredViewer).excludedFilterClasses&apos;&#x0D;&#x0A;- Renamed element: &apos;excludedFilterClasses&apos;&#x0D;&#x0A;- Update references to refactored element" description="Rename local variable &apos;excludedFilterClasses&apos;" id="org.eclipse.jdt.ui.rename.local.variable" input="/src&lt;org.eclipse.mylyn.context.ui{AbstractFocusViewAction.java[AbstractFocusViewAction~installInterestFilter~QStructuredViewer;@excludedFilterClasses!15552!15617!15566!15586!QSet" name="preservedFilterClasses" references="true" stamp="1234310374262" version="1.0"/>&#x0A;<refactoring comment="Rename method &apos;org.eclipse.mylyn.context.ui.AbstractFocusViewAction.isCustomFilter(...)&apos; to &apos;isPreservedFilter&apos;&#x0D;&#x0A;- Original project: &apos;org.eclipse.mylyn.context.ui&apos;&#x0D;&#x0A;- Original element: &apos;org.eclipse.mylyn.context.ui.AbstractFocusViewAction.isCustomFilter(...)&apos;&#x0D;&#x0A;- Renamed element: &apos;org.eclipse.mylyn.context.ui.AbstractFocusViewAction.isPreservedFilter(...)&apos;&#x0D;&#x0A;- Update references to refactored element" delegate="false" deprecate="false" description="Rename method &apos;isCustomFilter&apos;" flags="589830" id="org.eclipse.jdt.ui.rename.method" input="/src&lt;org.eclipse.mylyn.context.ui{AbstractFocusViewAction.java[AbstractFocusViewAction~isCustomFilter~QViewerFilter;" name="isPreservedFilter" references="true" stamp="1234314997161" version="1.0"/>
3
</session>

Return to bug 263870