diff options
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers')
10 files changed, 489 insertions, 574 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/AsynchronousModel.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/AsynchronousModel.java index 487a90747..3cdba4e9a 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/AsynchronousModel.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/AsynchronousModel.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2013 IBM Corporation and others. + * Copyright (c) 2006, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -608,17 +608,14 @@ public abstract class AsynchronousModel { //update viewer outside the lock final ModelNode[] finalUnmap = unmap; - preservingSelection(new Runnable() { - @Override - public void run() { - if (finalUnmap != null) { - for (int i = 0; i < finalUnmap.length; i++) { - viewer.unmapNode(finalUnmap[i]); - } - } - viewer.nodeChildrenChanged(parentNode); - } - }); + preservingSelection(() -> { + if (finalUnmap != null) { + for (int i = 0; i < finalUnmap.length; i++) { + viewer.unmapNode(finalUnmap[i]); + } + } + viewer.nodeChildrenChanged(parentNode); + }); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java index fa503d9c1..7fa402f14 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/breadcrumb/BreadcrumbViewer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008, 2016 IBM Corporation and others. + * Copyright (c) 2008, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -33,8 +33,6 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.MenuDetectEvent; import org.eclipse.swt.events.MenuDetectListener; -import org.eclipse.swt.events.TraverseEvent; -import org.eclipse.swt.events.TraverseListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; @@ -44,8 +42,6 @@ import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Widget; @@ -99,30 +95,22 @@ public abstract class BreadcrumbViewer extends StructuredViewer { fContainer= new Composite(parent, SWT.NONE); GridData layoutData= new GridData(SWT.FILL, SWT.TOP, true, false); fContainer.setLayoutData(layoutData); - fContainer.addTraverseListener(new TraverseListener() { - @Override - public void keyTraversed(TraverseEvent e) { - e.doit= true; - } - }); + fContainer.addTraverseListener(e -> e.doit = true); fContainer.setBackgroundMode(SWT.INHERIT_DEFAULT); - fContainer.addListener(SWT.Resize, new Listener() { - @Override - public void handleEvent(Event event) { - int height= fContainer.getClientArea().height; + fContainer.addListener(SWT.Resize, event -> { + int height = fContainer.getClientArea().height; - if (fGradientBackground == null || fGradientBackground.getBounds().height != height) { - Image image= height == 0 ? null : createGradientImage(height, event.display); - fContainer.setBackgroundImage(image); + if (fGradientBackground == null || fGradientBackground.getBounds().height != height) { + Image image = height == 0 ? null : createGradientImage(height, event.display); + fContainer.setBackgroundImage(image); - if (fGradientBackground != null) { - fGradientBackground.dispose(); - } - fGradientBackground= image; - } - } - }); + if (fGradientBackground != null) { + fGradientBackground.dispose(); + } + fGradientBackground = image; + } + }); hookControl(fContainer); @@ -138,12 +126,9 @@ public abstract class BreadcrumbViewer extends StructuredViewer { gridLayout.horizontalSpacing= 0; fContainer.setLayout(gridLayout); - fContainer.addListener(SWT.Resize, new Listener() { - @Override - public void handleEvent(Event event) { - updateSize(); - fContainer.layout(true, true); - } + fContainer.addListener(SWT.Resize, event -> { + updateSize(); + fContainer.layout(true, true); }); } @@ -266,12 +251,7 @@ public abstract class BreadcrumbViewer extends StructuredViewer { disableRedraw(); try { - preservingSelection(new Runnable() { - @Override - public void run() { - buildItemChain(input); - } - }); + preservingSelection(() -> buildItemChain(input)); } finally { enableRedraw(); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java index 86f697ee6..6ee5b3242 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ChildrenCountUpdate.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2013 IBM Corporation and others. + * Copyright (c) 2006, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -102,22 +102,14 @@ class ChildrenCountUpdate extends ViewerUpdateMonitor implements IChildrenCountU @Override protected void scheduleViewerUpdate() { - execInDisplayThread(new Runnable() { - @Override - public void run() { - if (!getContentProvider().isDisposed() && !isCanceled()) { - performUpdate(); - } - } - }); + execInDisplayThread(() -> { + if (!getContentProvider().isDisposed() && !isCanceled()) { + performUpdate(); + } + }); } }; - execInDisplayThread(new Runnable() { - @Override - public void run() { - fChildrenUpdate.startRequest(); - } - }); + execInDisplayThread(() -> fChildrenUpdate.startRequest()); return; } } else { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java index 433b8d38f..b9a1d88e4 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementCompareRequest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2011 IBM Corporation and others. + * Copyright (c) 2006, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -71,17 +71,19 @@ public class ElementCompareRequest extends MementoUpdate implements IElementComp @Override public void done() { ITreeModelViewer viewer = getContentProvider().getViewer(); - if (viewer == null) return; // disposed + if (viewer == null) + { + return; // disposed + } if (viewer.getDisplay().getThread() == Thread.currentThread()) { fProvider.getStateTracker().compareFinished(ElementCompareRequest.this, fDelta); } else { - viewer.getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - if (getContentProvider().isDisposed()) return; - fProvider.getStateTracker().compareFinished(ElementCompareRequest.this, fDelta); - } - }); + viewer.getDisplay().asyncExec(() -> { + if (getContentProvider().isDisposed()) { + return; + } + fProvider.getStateTracker().compareFinished(ElementCompareRequest.this, fDelta); + }); } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java index 6e53cf171..c9afa0360 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ElementMementoRequest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2011 IBM Corporation and others. + * Copyright (c) 2006, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -49,22 +49,22 @@ class ElementMementoRequest extends MementoUpdate implements IElementMementoRequ public void done() { ITreeModelViewer viewer = getContentProvider().getViewer(); - if (viewer == null) return; // disposed + if (viewer == null) + { + return; // disposed + } if (viewer.getDisplay().getThread() == Thread.currentThread()) { doComplete(); } else { - viewer.getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - doComplete(); - } - }); + viewer.getDisplay().asyncExec(() -> doComplete()); } } private void doComplete() { - if (getContentProvider().isDisposed()) return; + if (getContentProvider().isDisposed()) { + return; + } if (!isCanceled() && (getStatus() == null || getStatus().isOK())) { // replace the element with a memento diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java index ddf1c1f42..48df48089 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/InternalVirtualTreeModelViewer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2009, 2015 Wind River Systems and others. + * Copyright (c) 2009, 2018 Wind River Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -306,53 +306,48 @@ public class InternalVirtualTreeModelViewer extends Viewer @Override public void remove(final Object parentOrTreePath, final int index) { final List<TreePath> oldSelection = new LinkedList<>(Arrays.asList(((TreeSelection) getSelection()).getPaths())); - preservingSelection(new Runnable() { - @Override - public void run() { - TreePath removedPath = null; - VirtualItem[] parentItems = findItems(parentOrTreePath); - for (int i = 0; i < parentItems.length; i++) { - VirtualItem parentItem = parentItems[i]; - if (parentItem.isDisposed()) { - continue; + preservingSelection(() -> { + TreePath removedPath = null; + VirtualItem[] parentItems = findItems(parentOrTreePath); + for (int i = 0; i < parentItems.length; i++) { + VirtualItem parentItem = parentItems[i]; + if (parentItem.isDisposed()) { + continue; + } + + // Parent item is not expanded so just update its contents so that + // the plus sign gets refreshed. + if (!parentItem.getExpanded()) { + parentItem.setNeedsCountUpdate(); + parentItem.setItemCount(-1); + virtualLazyUpdateHasChildren(parentItem); + } + + if (index < parentItem.getItemCount()) { + VirtualItem item = parentItem.getItem(new VirtualItem.Index(index)); + + if (item.getData() != null) { + removedPath = getTreePathFromItem(item); + disassociate(item); } - - // Parent item is not expanded so just update its contents so that - // the plus sign gets refreshed. - if (!parentItem.getExpanded()) { - parentItem.setNeedsCountUpdate(); - parentItem.setItemCount(-1); - virtualLazyUpdateHasChildren(parentItem); - } - - if (index < parentItem.getItemCount()) { - VirtualItem item =parentItem.getItem(new VirtualItem.Index(index)); - - if (item.getData() != null) { - removedPath = getTreePathFromItem(item); - disassociate(item); - } - parentItem.remove(item.getIndex()); - } - } - - if (removedPath != null) { - boolean removed = false; - for (Iterator<TreePath> it = oldSelection.iterator(); it.hasNext();) { - TreePath path = it.next(); - if (path.startsWith(removedPath, null)) { - it.remove(); - removed = true; - } - } - if (removed) { - setSelection( - new TreeSelection(oldSelection.toArray(new TreePath[oldSelection.size()])), - false); - } - } - } - }); + parentItem.remove(item.getIndex()); + } + } + + if (removedPath != null) { + boolean removed = false; + for (Iterator<TreePath> it = oldSelection.iterator(); it.hasNext();) { + TreePath path = it.next(); + if (path.startsWith(removedPath, null)) { + it.remove(); + removed = true; + } + } + if (removed) { + setSelection(new TreeSelection(oldSelection.toArray(new TreePath[oldSelection.size()])), false); + } + } + }); } @Override @@ -551,15 +546,12 @@ public class InternalVirtualTreeModelViewer extends Viewer private void validate() { if (fValidateRunnable == null) { - fValidateRunnable = new Runnable() { - @Override - public void run() { - if (!fTree.isDisposed()) { - fValidateRunnable = null; - fTree.validate(); - } - } - }; + fValidateRunnable = () -> { + if (!fTree.isDisposed()) { + fValidateRunnable = null; + fTree.validate(); + } + }; getDisplay().asyncExec(fValidateRunnable); } } @@ -630,54 +622,48 @@ public class InternalVirtualTreeModelViewer extends Viewer @Override public void setChildCount(final Object elementOrTreePath, final int count) { - preservingSelection(new Runnable() { - @Override - public void run() { - VirtualItem[] items = findItems(elementOrTreePath); - for (int i = 0; i < items.length; i++) { - VirtualItem[] children = items[i].getItems(); - for (int j = 0; j < children.length; j++) { - if (children[j].getData() != null && children[j].getIndex().intValue() >= count) { - disassociate(children[j]); - } - } + preservingSelection(() -> { + VirtualItem[] items = findItems(elementOrTreePath); + for (int i = 0; i < items.length; i++) { + VirtualItem[] children = items[i].getItems(); + for (int j = 0; j < children.length; j++) { + if (children[j].getData() != null && children[j].getIndex().intValue() >= count) { + disassociate(children[j]); + } + } - items[i].setItemCount(count); - } - } - }); + items[i].setItemCount(count); + } + }); validate(); } @Override public void setHasChildren(final Object elementOrTreePath, final boolean hasChildren) { - preservingSelection(new Runnable() { - @Override - public void run() { - VirtualItem[] items = findItems(elementOrTreePath); - for (int i = 0; i < items.length; i++) { - VirtualItem item = items[i]; - - if (!hasChildren) { - VirtualItem[] children = item.getItems(); - for (int j = 0; j < children.length; j++) { - if (children[j].getData() != null) { - disassociate(children[j]); - } - } - } - - item.setHasItems(hasChildren); - if (hasChildren) { - if (!item.getExpanded()) { - item.setItemCount(-1); - } else { - virtualLazyUpdateChildCount(item); - } - } - } - } - }); + preservingSelection(() -> { + VirtualItem[] items = findItems(elementOrTreePath); + for (int i = 0; i < items.length; i++) { + VirtualItem item = items[i]; + + if (!hasChildren) { + VirtualItem[] children = item.getItems(); + for (int j = 0; j < children.length; j++) { + if (children[j].getData() != null) { + disassociate(children[j]); + } + } + } + + item.setHasItems(hasChildren); + if (hasChildren) { + if (!item.getExpanded()) { + item.setItemCount(-1); + } else { + virtualLazyUpdateChildCount(item); + } + } + } + }); } @Override diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java index 128101422..64e77ee96 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TimeTriggeredProgressMonitorDialog.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010 IBM Corporation and others. + * Copyright (c) 2010, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -207,18 +207,15 @@ public class TimeTriggeredProgressMonitorDialog extends ProgressMonitorDialog { InterruptedException { final InvocationTargetException[] invokes = new InvocationTargetException[1]; final InterruptedException[] interrupt = new InterruptedException[1]; - Runnable dialogWaitRunnable = new Runnable() { - @Override - public void run() { - try { - TimeTriggeredProgressMonitorDialog.super.run(fork, cancelable, runnable); - } catch (InvocationTargetException e) { - invokes[0] = e; - } catch (InterruptedException e) { - interrupt[0]= e; - } - } - }; + Runnable dialogWaitRunnable = () -> { + try { + TimeTriggeredProgressMonitorDialog.super.run(fork, cancelable, runnable); + } catch (InvocationTargetException e1) { + invokes[0] = e1; + } catch (InterruptedException e2) { + interrupt[0] = e2; + } + }; final Display display = PlatformUI.getWorkbench().getDisplay(); if (display == null) { return; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java index f37bfefbe..48ba3468d 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelContentProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2016 IBM Corporation and others. + * Copyright (c) 2006, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -759,56 +759,54 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon } // Wait a single cycle to allow viewer to queue requests triggered by completed updates. - getViewer().getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - if (isDisposed()) { - return; + getViewer().getDisplay().asyncExec(() -> { + if (isDisposed()) { + return; + } + + for (int i = 0; i < updates.size(); i++) { + ViewerUpdateMonitor update = updates.get(i); + + // Search for update in list using identity test. Otherwise a completed canceled + // update may trigger removal of up-to-date running update on the same element. + List<ViewerUpdateMonitor> requests = fRequestsInProgress.get(update.getSchedulingPath()); + boolean found = false; + if (requests != null) { + for (int j = 0; j < requests.size(); j++) { + if (requests.get(j) == update) { + found = true; + requests.remove(j); + break; + } + } } - for (int i = 0; i < updates.size(); i++) { - ViewerUpdateMonitor update = updates.get(i); - - // Search for update in list using identity test. Otherwise a completed canceled - // update may trigger removal of up-to-date running update on the same element. - List<ViewerUpdateMonitor> requests = fRequestsInProgress.get(update.getSchedulingPath()); - boolean found = false; - if (requests != null) { - for (int j = 0; j < requests.size(); j++) { - if (requests.get(j) == update) { - found = true; - requests.remove(j); - break; - } - } - } - - if (found) { - // Trigger may initiate new updates, so wait to remove requests array from - // fRequestsInProgress map. This way updateStarted() will not send a - // redundant "UPDATE SEQUENCE STARTED" notification. - trigger(update.getSchedulingPath()); - } else { - // Update may be removed from in progress list if it was canceled by schedule(). - Assert.isTrue( update.isCanceled() ); - } - if (requests != null && requests.isEmpty()) { - fRequestsInProgress.remove(update.getSchedulingPath()); - } - } - if (fRequestsInProgress.isEmpty() && fWaitingRequests.isEmpty() && fModelSequenceRunning) { - fModelSequenceRunning = false; - if (fRevealPath != null) { - getViewer().reveal(fRevealPath, fRevealIndex); - fRevealPath = null; - } - if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) { - DebugUIPlugin.trace("MODEL SEQUENCE ENDS"); //$NON-NLS-1$ - } - notifyUpdate(UPDATE_SEQUENCE_COMPLETE, null); - } - } - }); + if (found) { + // Trigger may initiate new updates, so wait to remove requests array from + // fRequestsInProgress map. This way updateStarted() will not send a + // redundant "UPDATE SEQUENCE STARTED" notification. + trigger(update.getSchedulingPath()); + } else { + // Update may be removed from in progress list if it was canceled by schedule(). + Assert.isTrue(update.isCanceled()); + } + if (requests != null && requests.isEmpty()) { + fRequestsInProgress.remove(update.getSchedulingPath()); + } + } + if (fRequestsInProgress.isEmpty() && fWaitingRequests.isEmpty() && fModelSequenceRunning) { + fModelSequenceRunning = false; + if (fRevealPath != null) { + getViewer().reveal(fRevealPath, fRevealIndex); + fRevealPath = null; + } + if (DebugUIPlugin.DEBUG_UPDATE_SEQUENCE + && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(getPresentationContext())) { + DebugUIPlugin.trace("MODEL SEQUENCE ENDS"); //$NON-NLS-1$ + } + notifyUpdate(UPDATE_SEQUENCE_COMPLETE, null); + } + }); } @@ -931,15 +929,12 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon } } if (inProgressList == null || inProgressList.isEmpty()) { - getViewer().getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - if (isDisposed()) { - return; - } - trigger(update.getSchedulingPath()); - } - }); + getViewer().getDisplay().asyncExec(() -> { + if (isDisposed()) { + return; + } + trigger(update.getSchedulingPath()); + }); } } else { // there are waiting requests: coalesce with existing request and add to list @@ -1776,14 +1771,11 @@ public class TreeModelContentProvider implements ITreeModelContentProvider, ICon display = getViewer().getDisplay(); fCompletedUpdates.add(update); if (fCompletedUpdatesRunnable == null) { - fCompletedUpdatesRunnable = new Runnable() { - @Override - public void run() { - if (!isDisposed()) { - performUpdates(); - } - } - }; + fCompletedUpdatesRunnable = () -> { + if (!isDisposed()) { + performUpdates(); + } + }; updateJob = fCompletedUpdatesRunnable; } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java index 19d2b3eb2..8d4f747fd 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/TreeModelLabelProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2016 IBM Corporation and others. + * Copyright (c) 2006, 2018 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -399,24 +399,21 @@ public class TreeModelLabelProvider extends ColumnLabelProvider if (fComplete == null) { fComplete = new LinkedList<>(); - fViewer.getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - if (isDisposed()) { - return; + fViewer.getDisplay().asyncExec(() -> { + if (isDisposed()) { + return; + } + List<ILabelUpdate> updates = null; + synchronized (TreeModelLabelProvider.this) { + updates = fComplete; + fComplete = null; + } + for (ILabelUpdate itrUpdate : updates) { + if (itrUpdate.isCanceled()) { + updateComplete(itrUpdate); + } else { + ((LabelUpdate) itrUpdate).performUpdate(); } - List<ILabelUpdate> updates = null; - synchronized (TreeModelLabelProvider.this) { - updates = fComplete; - fComplete = null; - } - for (ILabelUpdate itrUpdate : updates) { - if (itrUpdate.isCanceled()) { - updateComplete(itrUpdate); - } else { - ((LabelUpdate) itrUpdate).performUpdate(); - } - } } }); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java index 1423e60b3..6a2b8db9b 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2016 Wind River Systems and others. + * Copyright (c) 2011, 2018 Wind River Systems and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -285,28 +285,30 @@ class ViewerStateTracker { // Process start of restore in an async cycle because we may still be inside inputChanged() // call. I.e. the "input.equals(fContentProvider.getViewer().getInput())" test may fail. - fContentProvider.getViewer().getDisplay().asyncExec(new Runnable() { - @Override - public void run() { - if (!fContentProvider.isDisposed() && input.equals(fContentProvider.getViewer().getInput())) { - ModelDelta stateDelta2 = fViewerStates.remove(keyMementoString); - if (stateDelta2 != null) { - if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { - DebugUIPlugin.trace("STATE RESTORE BEGINS"); //$NON-NLS-1$ - DebugUIPlugin.trace("\tRESTORE: " + stateDelta2.toString()); //$NON-NLS-1$ - notifyStateUpdate(input, STATE_RESTORE_SEQUENCE_BEGINS, null); - } - stateDelta2.setElement(input); - fPendingState = stateDelta2; - doInitialRestore(fPendingState); - } - } else { - if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { - DebugUIPlugin.trace("STATE RESTORE CANCELED."); //$NON-NLS-1$ - } - } - } - }); + fContentProvider.getViewer().getDisplay().asyncExec(() -> { + if (!fContentProvider.isDisposed() + && input.equals(fContentProvider.getViewer().getInput())) { + ModelDelta stateDelta2 = fViewerStates.remove(keyMementoString); + if (stateDelta2 != null) { + if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE + && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID( + fContentProvider.getPresentationContext())) { + DebugUIPlugin.trace("STATE RESTORE BEGINS"); //$NON-NLS-1$ + DebugUIPlugin.trace("\tRESTORE: " + stateDelta2.toString()); //$NON-NLS-1$ + notifyStateUpdate(input, STATE_RESTORE_SEQUENCE_BEGINS, null); + } + stateDelta2.setElement(input); + fPendingState = stateDelta2; + doInitialRestore(fPendingState); + } + } else { + if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE + && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID( + fContentProvider.getPresentationContext())) { + DebugUIPlugin.trace("STATE RESTORE CANCELED."); //$NON-NLS-1$ + } + } + }); } else { if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { DebugUIPlugin.trace("STATE RESTORE INPUT COMARE ENDED : " + fRequest + " - NO MATCHING STATE"); //$NON-NLS-1$ //$NON-NLS-2$ @@ -402,15 +404,12 @@ class ViewerStateTracker { // EXPAND node. These // markers are used by the restore logic to know when a delta node can // be removed. - delta.accept(new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta d, int depth) { - if ((d.getFlags() & IModelDelta.EXPAND) != 0) { - ((ModelDelta) d).setFlags(d.getFlags() | IModelDelta.CONTENT); - } - return true; - } - }); + delta.accept((d, depth) -> { + if ((d.getFlags() & IModelDelta.EXPAND) != 0) { + ((ModelDelta) d).setFlags(d.getFlags() | IModelDelta.CONTENT); + } + return true; + }); if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { DebugUIPlugin.trace("\tAPPEND DELTA: " + appendDeltaRoot); //$NON-NLS-1$ @@ -427,66 +426,57 @@ class ViewerStateTracker { // If the append delta is generated for a sub-tree, copy the pending delta // attributes into the pending delta. if (path.getSegmentCount() > 0) { - fPendingState.accept( new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta pendingDeltaNode, int depth) { - TreePath pendingDeltaPath = fContentProvider.getViewerTreePath(pendingDeltaNode); - if (path.startsWith(pendingDeltaPath, null)) - { - ModelDelta appendDelta = findDeltaForPath(appendDeltaRoot, pendingDeltaPath); - appendDelta.setFlags(pendingDeltaNode.getFlags()); - appendDelta.setChildCount(pendingDeltaNode.getChildCount()); - appendDelta.setIndex(pendingDeltaNode.getIndex()); - return true; - } - return false; - } - }); + fPendingState.accept((pendingDeltaNode, depth) -> { + TreePath pendingDeltaPath = fContentProvider.getViewerTreePath(pendingDeltaNode); + if (path.startsWith(pendingDeltaPath, null)) { + ModelDelta appendDelta = findDeltaForPath(appendDeltaRoot, pendingDeltaPath); + appendDelta.setFlags(pendingDeltaNode.getFlags()); + appendDelta.setChildCount(pendingDeltaNode.getChildCount()); + appendDelta.setIndex(pendingDeltaNode.getIndex()); + return true; + } + return false; + }); } // Copy the pending state into the new appended state. - fPendingState.accept( new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta pendingDeltaNode, int depth) { - // Skip the top element - if (pendingDeltaNode.getParentDelta() == null) { - return true; - } - - // Find the node in the save delta which is the parent - // of to the current pending delta node. - // If the parent node cannot be found, it means that - // most likely the user collapsed the parent node before - // the children were ever expanded. - // If the pending state node already exists in the parent - // node, it is already processed and we can skip it. - // If the pending state node does not contain any flags, - // we can also skip it. - ModelDelta saveDeltaNode = findSubDeltaParent(appendDeltaRoot, pendingDeltaNode); - if (saveDeltaNode != null && - !isDeltaInParent(pendingDeltaNode, saveDeltaNode) && - pendingDeltaNode.getFlags() != IModelDelta.NO_CHANGE) - { - saveDeltaNode.setChildCount(pendingDeltaNode.getParentDelta().getChildCount()); - copyIntoDelta(pendingDeltaNode, saveDeltaNode); - } else { - if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { - DebugUIPlugin.trace("\tSKIPPED: " + pendingDeltaNode.getElement()); //$NON-NLS-1$ - } - } - - // If the pending delta node has a memento element, its - // children should also be mementos therefore the copy - // delta operation should have added all the children - // of this pending delta node into the save delta. - if (pendingDeltaNode.getElement() instanceof IMemento) { - return false; - } else { - return pendingDeltaNode.getChildCount() > 0; - } - } - - }); + fPendingState.accept((pendingDeltaNode, depth) -> { + // Skip the top element + if (pendingDeltaNode.getParentDelta() == null) { + return true; + } + + // Find the node in the save delta which is the parent + // of to the current pending delta node. + // If the parent node cannot be found, it means that + // most likely the user collapsed the parent node before + // the children were ever expanded. + // If the pending state node already exists in the parent + // node, it is already processed and we can skip it. + // If the pending state node does not contain any flags, + // we can also skip it. + ModelDelta saveDeltaNode = findSubDeltaParent(appendDeltaRoot, pendingDeltaNode); + if (saveDeltaNode != null && !isDeltaInParent(pendingDeltaNode, saveDeltaNode) + && pendingDeltaNode.getFlags() != IModelDelta.NO_CHANGE) { + saveDeltaNode.setChildCount(pendingDeltaNode.getParentDelta().getChildCount()); + copyIntoDelta(pendingDeltaNode, saveDeltaNode); + } else { + if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE + && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { + DebugUIPlugin.trace("\tSKIPPED: " + pendingDeltaNode.getElement()); //$NON-NLS-1$ + } + } + + // If the pending delta node has a memento element, its + // children should also be mementos therefore the copy + // delta operation should have added all the children + // of this pending delta node into the save delta. + if (pendingDeltaNode.getElement() instanceof IMemento) { + return false; + } else { + return pendingDeltaNode.getChildCount() > 0; + } + }); } if (appendDeltaRoot.getChildDeltas().length > 0) { @@ -562,55 +552,53 @@ class ViewerStateTracker { DebugUIPlugin.trace("\tSAVE OUTSTANDING RESTORE: " + fPendingState); //$NON-NLS-1$ } - IModelDeltaVisitor pendingStateVisitor = new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta pendingDeltaNode, int depth) { - // Ignore the top element. - if (pendingDeltaNode.getParentDelta() == null) { - return true; - } + IModelDeltaVisitor pendingStateVisitor = (pendingDeltaNode, depth) -> { + // Ignore the top element. + if (pendingDeltaNode.getParentDelta() == null) { + return true; + } - // Find the node in the save delta which is the parent - // of to the current pending delta node. - // If the parent node cannot be found, it means that - // most likely the user collapsed the parent node before - // the children were ever expanded. - // If the pending state node already exists in the - // parent - // node, it is already processed and we can skip it. - // If the pending state node does not contain any flags, - // we can also skip it. - ModelDelta saveDeltaNode = findSubDeltaParent(saveDeltaRoot, pendingDeltaNode); - if (saveDeltaNode != null && !isDeltaInParent(pendingDeltaNode, saveDeltaNode) - && pendingDeltaNode.getFlags() != IModelDelta.NO_CHANGE) { - // There should be only one delta element with - // the REVEAL flag in the entire save delta. The - // reveal flag in the pending delta trumps the one - // in the save delta because most likely the restore - // operation did not yet complete the reveal - // operation. - if ((pendingDeltaNode.getFlags() & IModelDelta.REVEAL) != 0) { - clearRevealFlag(saveDeltaRoot); - } - saveDeltaNode.setChildCount(pendingDeltaNode.getParentDelta().getChildCount()); - copyIntoDelta(pendingDeltaNode, saveDeltaNode); - } else { - if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { - DebugUIPlugin.trace("\tSKIPPED: " + pendingDeltaNode.getElement()); //$NON-NLS-1$ - } - } + // Find the node in the save delta which is the parent + // of to the current pending delta node. + // If the parent node cannot be found, it means that + // most likely the user collapsed the parent node before + // the children were ever expanded. + // If the pending state node already exists in the + // parent + // node, it is already processed and we can skip it. + // If the pending state node does not contain any flags, + // we can also skip it. + ModelDelta saveDeltaNode = findSubDeltaParent(saveDeltaRoot, pendingDeltaNode); + if (saveDeltaNode != null && !isDeltaInParent(pendingDeltaNode, saveDeltaNode) + && pendingDeltaNode.getFlags() != IModelDelta.NO_CHANGE) { + // There should be only one delta element with + // the REVEAL flag in the entire save delta. The + // reveal flag in the pending delta trumps the one + // in the save delta because most likely the restore + // operation did not yet complete the reveal + // operation. + if ((pendingDeltaNode.getFlags() & IModelDelta.REVEAL) != 0) { + clearRevealFlag(saveDeltaRoot); + } + saveDeltaNode.setChildCount(pendingDeltaNode.getParentDelta().getChildCount()); + copyIntoDelta(pendingDeltaNode, saveDeltaNode); + } else { + if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin + .DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { + DebugUIPlugin.trace("\tSKIPPED: " + pendingDeltaNode.getElement()); //$NON-NLS-1$ + } + } - // If the pending delta node has a memento element, its - // children should also be mementos therefore the copy - // delta operation should have added all the children - // of this pending delta node into the save delta. - if (pendingDeltaNode.getElement() instanceof IMemento) { - return false; - } else { - return pendingDeltaNode.getChildCount() > 0; - } - } - }; + // If the pending delta node has a memento element, its + // children should also be mementos therefore the copy + // delta operation should have added all the children + // of this pending delta node into the save delta. + if (pendingDeltaNode.getElement() instanceof IMemento) { + return false; + } else { + return pendingDeltaNode.getChildCount() > 0; + } + }; fPendingState.accept(pendingStateVisitor); } @@ -627,15 +615,12 @@ class ViewerStateTracker { } private void clearRevealFlag(ModelDelta saveRootDelta) { - IModelDeltaVisitor clearDeltaVisitor = new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta delta, int depth) { - if ((delta.getFlags() & IModelDelta.REVEAL) != 0) { - ((ModelDelta) delta).setFlags(delta.getFlags() & ~IModelDelta.REVEAL); - } - return true; - } - }; + IModelDeltaVisitor clearDeltaVisitor = (delta, depth) -> { + if ((delta.getFlags() & IModelDelta.REVEAL) != 0) { + ((ModelDelta) delta).setFlags(delta.getFlags() & ~IModelDelta.REVEAL); + } + return true; + }; saveRootDelta.accept(clearDeltaVisitor); } @@ -817,33 +802,29 @@ class ViewerStateTracker { } }; - IModelDeltaVisitor visitor = new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta delta, int depth) { - // Add the CONTENT flag to all nodes with an EXPAND flag. - // During restoring, this flag is used as a marker indicating - // whether all the content of a given element has been - // retrieved. - if ((delta.getFlags() | IModelDelta.EXPAND) != 0) { - ((ModelDelta)delta).setFlags(delta.getFlags() | IModelDelta.CONTENT); - } + IModelDeltaVisitor visitor = (delta, depth) -> { + // Add the CONTENT flag to all nodes with an EXPAND flag. + // During restoring, this flag is used as a marker indicating + // whether all the content of a given element has been + // retrieved. + if ((delta.getFlags() | IModelDelta.EXPAND) != 0) { + ((ModelDelta) delta).setFlags(delta.getFlags() | IModelDelta.CONTENT); + } - // This is the root element, save the root element memento in 'inputMemento'. - if (delta.getParentDelta() == null) { - manager.addRequest(new ElementMementoRequest(fContentProvider, input, manager, - delta.getElement(), fContentProvider.getViewerTreePath(delta), inputMemento, - (ModelDelta) delta)); - } else { - // If this is another node element, save the memento to a children memento. - if (!(delta.getElement() instanceof XMLMemento)) { - manager.addRequest(new ElementMementoRequest(fContentProvider, input, manager, - delta.getElement(), fContentProvider.getViewerTreePath(delta), childrenMemento - .createChild("CHILD_ELEMENT"), (ModelDelta) delta)); //$NON-NLS-1$ - } - } - return true; - } - }; + // This is the root element, save the root element memento in 'inputMemento'. + if (delta.getParentDelta() == null) { + manager.addRequest(new ElementMementoRequest(fContentProvider, input, manager, delta.getElement(), + fContentProvider.getViewerTreePath(delta), inputMemento, (ModelDelta) delta)); + } else { + // If this is another node element, save the memento to a children memento. + if (!(delta.getElement() instanceof XMLMemento)) { + manager.addRequest(new ElementMementoRequest(fContentProvider, input, manager, delta.getElement(), + fContentProvider.getViewerTreePath(delta), childrenMemento.createChild("CHILD_ELEMENT"), //$NON-NLS-1$ + (ModelDelta) delta)); + } + } + return true; + }; rootDelta.accept(visitor); stateSaveStarted(input, manager); manager.processReqeusts(); @@ -932,67 +913,66 @@ class ViewerStateTracker { // If we're canceling select or reveal, cancel it for all of pending deltas final int mask = flags & (IModelDelta.SELECT | IModelDelta.REVEAL); - fPendingState.accept(new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta delta, int depth) { - int deltaFlags = delta.getFlags(); - int newFlags = deltaFlags & ~mask; - if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { - if (deltaFlags != newFlags) { - DebugUIPlugin.trace("\tCANCEL: " + delta.getElement() + "(" + Integer.toHexString(deltaFlags & mask) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - } - ((ModelDelta)delta).setFlags(newFlags); - return true; - } - }); + fPendingState.accept((delta, depth) -> { + int deltaFlags = delta.getFlags(); + int newFlags = deltaFlags & ~mask; + if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE + && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { + if (deltaFlags != newFlags) { + DebugUIPlugin.trace( + "\tCANCEL: " + delta.getElement() + "(" + Integer.toHexString(deltaFlags & mask) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + } + } + ((ModelDelta) delta).setFlags(newFlags); + return true; + }); } if ((flags & ~(IModelDelta.SELECT | IModelDelta.REVEAL)) != 0) { final int mask = flags & ~(IModelDelta.SELECT | IModelDelta.REVEAL); // For other flags (EXPAND/COLLAPSE), cancel only from the matching path. - fPendingState.accept(new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta delta, int depth) { - if (depth < path.getSegmentCount()) { - // Descend until we reach a matching depth. - TreePath deltaPath = fContentProvider.getViewerTreePath(delta); - if (path.startsWith(deltaPath, null)) { - return true; - } else { - return false; - } - } - else if (depth == path.getSegmentCount()) { - TreePath deltaPath = fContentProvider.getViewerTreePath(delta); - if (deltaPath.equals(path)) { - int deltaFlags = delta.getFlags(); - int newFlags = deltaFlags & ~mask; - if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { - if (deltaFlags != newFlags) { - DebugUIPlugin.trace("\tCANCEL: " + delta.getElement() + "(" + Integer.toHexString(deltaFlags & mask) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - } - ((ModelDelta)delta).setFlags(newFlags); - if ((flags & IModelDelta.EXPAND) != 0) { - // Descend delta to clear the EXPAND flags of a canceled expand - return true; - } - } - return false; - } else { - // We're clearing out flags of a matching sub-tree - // assert (flags & IModelDelta.EXPAND) != 0; - - if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { - if (delta.getFlags() != IModelDelta.NO_CHANGE) { - DebugUIPlugin.trace("\tCANCEL: " + delta.getElement() + "(" + Integer.toHexString(delta.getFlags()) + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - } - } - ((ModelDelta)delta).setFlags(IModelDelta.NO_CHANGE); - return true; - } - } - }); + fPendingState.accept((delta, depth) -> { + if (depth < path.getSegmentCount()) { + // Descend until we reach a matching depth. + TreePath deltaPath1 = fContentProvider.getViewerTreePath(delta); + if (path.startsWith(deltaPath1, null)) { + return true; + } else { + return false; + } + } else if (depth == path.getSegmentCount()) { + TreePath deltaPath2 = fContentProvider.getViewerTreePath(delta); + if (deltaPath2.equals(path)) { + int deltaFlags = delta.getFlags(); + int newFlags = deltaFlags & ~mask; + if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin + .DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { + if (deltaFlags != newFlags) { + DebugUIPlugin.trace("\tCANCEL: " + delta.getElement() + "(" //$NON-NLS-1$ //$NON-NLS-2$ + + Integer.toHexString(deltaFlags & mask) + ")"); //$NON-NLS-1$ + } + } + ((ModelDelta) delta).setFlags(newFlags); + if ((flags & IModelDelta.EXPAND) != 0) { + // Descend delta to clear the EXPAND flags of a canceled expand + return true; + } + } + return false; + } else { + // We're clearing out flags of a matching sub-tree + // assert (flags & IModelDelta.EXPAND) != 0; + + if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE + && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { + if (delta.getFlags() != IModelDelta.NO_CHANGE) { + DebugUIPlugin.trace("\tCANCEL: " + delta.getElement() + "(" //$NON-NLS-1$ //$NON-NLS-2$ + + Integer.toHexString(delta.getFlags()) + ")"); //$NON-NLS-1$ + } + } + ((ModelDelta) delta).setFlags(IModelDelta.NO_CHANGE); + return true; + } + }); } } @@ -1018,56 +998,54 @@ class ViewerStateTracker { return; } - IModelDeltaVisitor visitor = new IModelDeltaVisitor() { - @Override - public boolean visit(final IModelDelta delta, int depth) { - - Object element = delta.getElement(); - Object potentialMatch = depth != 0 ? path.getSegment(depth - 1) : fContentProvider.getViewer().getInput(); - // Only process if the depth in the delta matches the tree path. - if (depth == path.getSegmentCount()) { - if (element instanceof IMemento) { - IElementMementoProvider provider = ViewerAdapterService.getMementoProvider(potentialMatch); - if (provider == null) { - provider = ViewerAdapterService.getMementoProvider(fContentProvider.getViewer().getInput()); - } - if (provider != null) { - CompareRequestKey key = new CompareRequestKey(path, delta); - ElementCompareRequest existingRequest = fCompareRequestsInProgress - .get(key); - if (existingRequest != null) { - // Check all the running compare updates for a - // matching tree path. - // If found, just update the flags. - existingRequest.setKnowsHasChildren(knowsHasChildren); - existingRequest.setKnowsChildCount(knowsChildCount); - existingRequest.setCheckChildrenRealized(checkChildrenRealized); - } else { - // Start a new compare request - ElementCompareRequest compareRequest = new ElementCompareRequest( - fContentProvider, fContentProvider.getViewer().getInput(), potentialMatch, path, - (IMemento) element, (ModelDelta) delta, modelIndex, knowsHasChildren, - knowsChildCount, checkChildrenRealized); - fCompareRequestsInProgress.put(key, compareRequest); - if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { - DebugUIPlugin.trace("\tSTATE BEGIN: " + compareRequest); //$NON-NLS-1$ - } - notifyStateUpdate(element, TreeModelContentProvider.UPDATE_BEGINS, compareRequest); - provider.compareElements(new IElementCompareRequest[] { compareRequest }); - } - } - } else if (element.equals(potentialMatch)) { - // Element comparison already succeeded, and it matches - // our element. - // Call restore with delta to process the delta flags. - restorePendingStateNode((ModelDelta) delta, knowsHasChildren, knowsChildCount, checkChildrenRealized); - } - return false; - } - // Only follow the paths that match the delta. - return element.equals(potentialMatch); - } - }; + IModelDeltaVisitor visitor = (delta, depth) -> { + + Object element = delta.getElement(); + Object potentialMatch = depth != 0 ? path.getSegment(depth - 1) : fContentProvider.getViewer().getInput(); + // Only process if the depth in the delta matches the tree path. + if (depth == path.getSegmentCount()) { + if (element instanceof IMemento) { + IElementMementoProvider provider = ViewerAdapterService.getMementoProvider(potentialMatch); + if (provider == null) { + provider = ViewerAdapterService.getMementoProvider(fContentProvider.getViewer().getInput()); + } + if (provider != null) { + CompareRequestKey key = new CompareRequestKey(path, delta); + ElementCompareRequest existingRequest = fCompareRequestsInProgress.get(key); + if (existingRequest != null) { + // Check all the running compare updates for a + // matching tree path. + // If found, just update the flags. + existingRequest.setKnowsHasChildren(knowsHasChildren); + existingRequest.setKnowsChildCount(knowsChildCount); + existingRequest.setCheckChildrenRealized(checkChildrenRealized); + } else { + // Start a new compare request + ElementCompareRequest compareRequest = new ElementCompareRequest(fContentProvider, + fContentProvider.getViewer().getInput(), potentialMatch, path, (IMemento) element, + (ModelDelta) delta, modelIndex, knowsHasChildren, knowsChildCount, + checkChildrenRealized); + fCompareRequestsInProgress.put(key, compareRequest); + if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin + .DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) { + DebugUIPlugin.trace("\tSTATE BEGIN: " + compareRequest); //$NON-NLS-1$ + } + notifyStateUpdate(element, TreeModelContentProvider.UPDATE_BEGINS, compareRequest); + provider.compareElements(new IElementCompareRequest[] { compareRequest }); + } + } + } else if (element.equals(potentialMatch)) { + // Element comparison already succeeded, and it matches + // our element. + // Call restore with delta to process the delta flags. + restorePendingStateNode((ModelDelta) delta, knowsHasChildren, knowsChildCount, + checkChildrenRealized); + } + return false; + } + // Only follow the paths that match the delta. + return element.equals(potentialMatch); + }; try { fInStateRestore = true; @@ -1153,15 +1131,12 @@ class ViewerStateTracker { DebugUIPlugin.trace("\tRESTORE REMOVED: " + delta.getElement()); //$NON-NLS-1$ } - delta.accept(new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta _visitorDelta, int depth) { - ModelDelta visitorDelta = (ModelDelta) _visitorDelta; - visitorDelta.setElement(ELEMENT_REMOVED); - visitorDelta.setFlags(IModelDelta.NO_CHANGE); - return true; - } - }); + delta.accept((_visitorDelta, depth) -> { + ModelDelta visitorDelta = (ModelDelta) _visitorDelta; + visitorDelta.setElement(ELEMENT_REMOVED); + visitorDelta.setFlags(IModelDelta.NO_CHANGE); + return true; + }); } } @@ -1442,16 +1417,13 @@ class ViewerStateTracker { */ private ModelDelta markRevealDelta(ModelDelta rootDelta) { final ModelDelta[] revealDelta = new ModelDelta[1]; - IModelDeltaVisitor visitor = new IModelDeltaVisitor() { - @Override - public boolean visit(IModelDelta delta, int depth) { - if ( (delta.getFlags() & IModelDelta.REVEAL) != 0) { - revealDelta[0] = (ModelDelta)delta; - } - // Keep recursing only if we haven't found our delta yet. - return revealDelta[0] == null; - } - }; + IModelDeltaVisitor visitor = (delta, depth) -> { + if ((delta.getFlags() & IModelDelta.REVEAL) != 0) { + revealDelta[0] = (ModelDelta) delta; + } + // Keep recursing only if we haven't found our delta yet. + return revealDelta[0] == null; + }; rootDelta.accept(visitor); if (revealDelta[0] != null) { |