diff options
author | Michal Niewrzal | 2015-01-05 09:39:47 +0000 |
---|---|---|
committer | Michal Niewrzal | 2015-01-05 09:39:47 +0000 |
commit | 2b5e32345cfafe01c16200e6fe189a051ba06cd6 (patch) | |
tree | 94a6f40410a119bc1cdc7dddd3c2cc8211912375 | |
parent | afcf40b98b2cc2719b4b94088185e90ec6e2c7b4 (diff) | |
download | org.eclipse.dltk.core-2b5e32345cfafe01c16200e6fe189a051ba06cd6.tar.gz org.eclipse.dltk.core-2b5e32345cfafe01c16200e6fe189a051ba06cd6.tar.xz org.eclipse.dltk.core-2b5e32345cfafe01c16200e6fe189a051ba06cd6.zip |
Bug 456645 - ProblemTreeViewer contains obsolete code which is causing
invalid selection
Change-Id: I70a5ea1bc07a31fd2a93e74f68355380ff760049
Signed-off-by: Michal Niewrzal <michal.n@zend.com>
-rw-r--r-- | core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ProblemTreeViewer.java | 134 |
1 files changed, 70 insertions, 64 deletions
diff --git a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ProblemTreeViewer.java b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ProblemTreeViewer.java index a840a116e..74d0a208e 100644 --- a/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ProblemTreeViewer.java +++ b/core/plugins/org.eclipse.dltk.ui/src/org/eclipse/dltk/ui/viewsupport/ProblemTreeViewer.java @@ -18,11 +18,7 @@ import org.eclipse.dltk.core.IMember; import org.eclipse.dltk.internal.ui.IWorkingCopyProvider; import org.eclipse.dltk.ui.ProblemsLabelDecorator.ProblemsLabelChangedEvent; import org.eclipse.jface.viewers.IBaseLabelProvider; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITreeSelection; import org.eclipse.jface.viewers.LabelProviderChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.widgets.Composite; @@ -32,11 +28,12 @@ import org.eclipse.swt.widgets.Widget; /** - * Extends a TreeViewer to allow more performance when showing error ticks. - * A <code>ProblemItemMapper</code> is contained that maps all items in - * the tree to underlying resource + * Extends a TreeViewer to allow more performance when showing error ticks. A + * <code>ProblemItemMapper</code> is contained that maps all items in the tree + * to underlying resource */ -public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapper.IContentViewerAccessor { +public class ProblemTreeViewer extends TreeViewer implements + ResourceToItemsMapper.IContentViewerAccessor { protected ResourceToItemsMapper fResourceToItemsMapper; @@ -67,12 +64,11 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp public void doUpdateItem(Widget item) { doUpdateItem(item, item.getData(), true); } - + private void initMapper() { - fResourceToItemsMapper= new ResourceToItemsMapper(this); + fResourceToItemsMapper = new ResourceToItemsMapper(this); } - - + /* * @see StructuredViewer#mapElement(Object, Widget) */ @@ -89,7 +85,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp protected void unmapElement(Object element, Widget item) { if (item instanceof Item) { fResourceToItemsMapper.removeFromMap(element, (Item) item); - } + } super.unmapElement(element, item); } @@ -106,17 +102,17 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp */ protected void handleLabelProviderChanged(LabelProviderChangedEvent event) { if (event instanceof ProblemsLabelChangedEvent) { - ProblemsLabelChangedEvent e= (ProblemsLabelChangedEvent) event; + ProblemsLabelChangedEvent e = (ProblemsLabelChangedEvent) event; if (!e.isMarkerChange() && canIgnoreChangesFromAnnotionModel()) { return; } } - Object[] changed= addAditionalProblemParents(event.getElements()); - + Object[] changed = addAditionalProblemParents(event.getElements()); + if (changed != null && !fResourceToItemsMapper.isEmpty()) { - ArrayList others= new ArrayList(); - for (int i= 0; i < changed.length; i++) { - Object curr= changed[i]; + ArrayList others = new ArrayList(); + for (int i = 0; i < changed.length; i++) { + Object curr = changed[i]; if (curr instanceof IResource) { fResourceToItemsMapper.resourceChanged((IResource) curr); } else { @@ -126,44 +122,56 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp if (others.isEmpty()) { return; } - event= new LabelProviderChangedEvent((IBaseLabelProvider) event.getSource(), others.toArray()); + event = new LabelProviderChangedEvent( + (IBaseLabelProvider) event.getSource(), others.toArray()); } else { - // we have modified the list of changed elements via add additional parents. + // we have modified the list of changed elements via add additional + // parents. if (event.getElements() != changed) - event= new LabelProviderChangedEvent((IBaseLabelProvider) event.getSource(), changed); + event = new LabelProviderChangedEvent( + (IBaseLabelProvider) event.getSource(), changed); } super.handleLabelProviderChanged(event); } - + /** - * Answers whether this viewer can ignore label provider changes resulting from - * marker changes in annotation models + * Answers whether this viewer can ignore label provider changes resulting + * from marker changes in annotation models */ private boolean canIgnoreChangesFromAnnotionModel() { - Object contentProvider= getContentProvider(); - return contentProvider instanceof IWorkingCopyProvider && !((IWorkingCopyProvider)contentProvider).providesWorkingCopies(); + Object contentProvider = getContentProvider(); + return contentProvider instanceof IWorkingCopyProvider + && !((IWorkingCopyProvider) contentProvider) + .providesWorkingCopies(); } - - + /** - * Decides if {@link #isExpandable(Object)} should also test filters. The default behaviour is to - * do this only for IMembers. Implementors can replace this behaviour. - * @param parent the given element - * @return returns if if {@link #isExpandable(Object)} should also test filters for the given element. + * Decides if {@link #isExpandable(Object)} should also test filters. The + * default behaviour is to do this only for IMembers. Implementors can + * replace this behaviour. + * + * @param parent + * the given element + * @return returns if if {@link #isExpandable(Object)} should also test + * filters for the given element. */ protected boolean evaluateExpandableWithFilters(Object parent) { return parent instanceof IMember; } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.AbstractTreeViewer#isExpandable(java.lang.Object) + + /* + * (non-Javadoc) + * + * @see + * org.eclipse.jface.viewers.AbstractTreeViewer#isExpandable(java.lang.Object + * ) */ public boolean isExpandable(Object parent) { if (hasFilters() && evaluateExpandableWithFilters(parent)) { // workaround for 65762 - Object[] children= getRawChildren(parent); + Object[] children = getRawChildren(parent); if (children.length > 0) { - ViewerFilter[] filters= getFilters(); + ViewerFilter[] filters = getFilters(); for (int i = 0; i < children.length; i++) { if (!isFiltered(children[i], parent, filters)) { return true; @@ -174,7 +182,7 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp } return super.isExpandable(parent); } - + /** * method to test if a element has any children that passed the filters * @@ -183,13 +191,15 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp * @return return <code>true</code> if the element has at least a child that * passed the filters */ - protected final boolean hasFilteredChildren(Object parent) { + protected final boolean hasFilteredChildren(Object parent) { Object[] rawChildren = getRawChildren(parent); return containsNonFiltered(rawChildren, parent); } - /* - * @see org.eclipse.jface.viewers.AbstractTreeViewer#getFilteredChildren(java.lang.Object) + /* + * @see + * org.eclipse.jface.viewers.AbstractTreeViewer#getFilteredChildren(java + * .lang.Object) */ protected Object[] getFilteredChildren(Object parent) { return filter(getRawChildren(parent), parent); @@ -227,23 +237,30 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp return false; } - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.StructuredViewer#filter(java.lang.Object[]) + /* + * (non-Javadoc) + * + * @see + * org.eclipse.jface.viewers.StructuredViewer#filter(java.lang.Object[]) */ protected final Object[] filter(Object[] elements) { return filter(elements, getRoot()); } - + /** - * All element filter tests must go through this method. - * Can be overridden by subclasses. + * All element filter tests must go through this method. Can be overridden + * by subclasses. * - * @param object the object to filter - * @param parent the parent - * @param filters the filters to apply + * @param object + * the object to filter + * @param parent + * the parent + * @param filters + * the filters to apply * @return true if the element is filtered */ - protected boolean isFiltered(Object object, Object parent, ViewerFilter[] filters) { + protected boolean isFiltered(Object object, Object parent, + ViewerFilter[] filters) { for (int i = 0; i < filters.length; i++) { ViewerFilter filter = filters[i]; if (!filter.select(this, parent, object)) @@ -251,21 +268,10 @@ public class ProblemTreeViewer extends TreeViewer implements ResourceToItemsMapp } return false; } - + protected Object[] addAditionalProblemParents(Object[] elements) { return elements; } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.StructuredViewer#handleInvalidSelection(org.eclipse.jface.viewers.ISelection, org.eclipse.jface.viewers.ISelection) - */ - protected void handleInvalidSelection(ISelection invalidSelection, ISelection newSelection) { - // workaround for bug 125708: TODO: Remove when bug 125708 is fixed - if (!invalidSelection.isEmpty() && newSelection.isEmpty() && invalidSelection instanceof ITreeSelection) { - newSelection= new StructuredSelection(((IStructuredSelection) invalidSelection).toArray()); - setSelection(newSelection); - } - super.handleInvalidSelection(invalidSelection, newSelection); - } + } |