Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/viewers/model/ViewerStateTracker.java212
1 files changed, 121 insertions, 91 deletions
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 e69c3dc53..b208e5af4 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Wind River Systems - initial API and implementation
+ * IBM Corporation - bug fixing
*******************************************************************************/
package org.eclipse.debug.internal.ui.viewers.model;
@@ -119,7 +120,7 @@ class ViewerStateTracker {
/**
* LRU cache for viewer states
*/
- class LRUMap extends LinkedHashMap {
+ class LRUMap<K, V> extends LinkedHashMap<K, V> {
private static final long serialVersionUID = 1L;
private int fMaxSize;
@@ -129,7 +130,8 @@ class ViewerStateTracker {
fMaxSize = maxSize;
}
- protected boolean removeEldestEntry(Entry eldest) {
+ @Override
+ protected boolean removeEldestEntry(Entry<K, V> eldest) {
return size() > fMaxSize;
}
}
@@ -146,7 +148,7 @@ class ViewerStateTracker {
/**
* Map of viewer states keyed by viewer input mementos
*/
- private Map fViewerStates = new LRUMap(20);
+ private Map<String, ModelDelta> fViewerStates = new LRUMap<String, ModelDelta>(20);
/**
* Pending viewer state to be restored
@@ -173,7 +175,7 @@ class ViewerStateTracker {
/**
* Set of IMementoManager's that are currently saving state
*/
- private Set fPendingStateSaves = new HashSet();
+ private Set<IElementMementoCollector> fPendingStateSaves = new HashSet<IElementMementoCollector>();
/**
* Used to queue a viewer input for state restore
@@ -193,7 +195,8 @@ class ViewerStateTracker {
TreePath fPath;
IModelDelta fDelta;
- public boolean equals(Object obj) {
+ @Override
+ public boolean equals(Object obj) {
if (obj instanceof CompareRequestKey) {
CompareRequestKey key = (CompareRequestKey) obj;
return key.fDelta.equals(fDelta) && key.fPath.equals(fPath);
@@ -201,7 +204,8 @@ class ViewerStateTracker {
return false;
}
- public int hashCode() {
+ @Override
+ public int hashCode() {
return fDelta.hashCode() + fPath.hashCode();
}
}
@@ -209,7 +213,7 @@ class ViewerStateTracker {
/**
* Compare requests that are currently running.
*/
- private Map fCompareRequestsInProgress = new LinkedHashMap();
+ private Map<CompareRequestKey, ElementCompareRequest> fCompareRequestsInProgress = new LinkedHashMap<CompareRequestKey, ElementCompareRequest>();
/**
@@ -217,14 +221,12 @@ class ViewerStateTracker {
*/
void dispose() {
Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
-
- for (Iterator itr = fPendingStateSaves.iterator(); itr.hasNext(); ) {
- ((IElementMementoCollector)itr.next()).cancel();
+ for (IElementMementoCollector emc : fPendingStateSaves) {
+ emc.cancel();
}
fStateUpdateListeners.clear();
-
- for (Iterator itr = fCompareRequestsInProgress.values().iterator(); itr.hasNext();) {
- ((ElementCompareRequest)itr.next()).cancel();
+ for (ElementCompareRequest ecr : fCompareRequestsInProgress.values()) {
+ ecr.cancel();
}
fCompareRequestsInProgress.clear();
@@ -261,8 +263,11 @@ class ViewerStateTracker {
* IMementoManager#requestComplete(org.eclipse.debug.internal.ui
* .viewers.model.provisional.IElementMementoRequest)
*/
- public void requestComplete(ElementMementoRequest request) {
- if (fContentProvider.isDisposed()) return;
+ @Override
+ public void requestComplete(ElementMementoRequest request) {
+ if (fContentProvider.isDisposed()) {
+ return;
+ }
notifyStateUpdate(input, TreeModelContentProvider.UPDATE_COMPLETE, request);
@@ -272,7 +277,7 @@ class ViewerStateTracker {
try {
keyMemento.save(writer);
final String keyMementoString = writer.toString();
- ModelDelta stateDelta = (ModelDelta) fViewerStates.get(keyMementoString);
+ ModelDelta stateDelta = fViewerStates.get(keyMementoString);
if (stateDelta != null) {
if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
DebugUIPlugin.trace("STATE RESTORE INPUT COMARE ENDED : " + fRequest + " - MATCHING STATE FOUND"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -281,9 +286,10 @@ 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() {
- public void run() {
+ @Override
+ public void run() {
if (!fContentProvider.isDisposed() && input.equals(fContentProvider.getViewer().getInput())) {
- ModelDelta stateDelta2 = (ModelDelta) fViewerStates.remove(keyMementoString);
+ 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$
@@ -321,7 +327,8 @@ class ViewerStateTracker {
* org.eclipse.debug.internal.ui.viewers.model.provisional.viewers
* .IMementoManager#processReqeusts()
*/
- public void processReqeusts() {
+ @Override
+ public void processReqeusts() {
notifyStateUpdate(input, STATE_RESTORE_SEQUENCE_BEGINS, null);
if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
DebugUIPlugin.trace("STATE RESTORE INPUT COMARE BEGIN : " + fRequest); //$NON-NLS-1$
@@ -339,11 +346,13 @@ class ViewerStateTracker {
* IMementoManager#addRequest(org.eclipse.debug.internal.ui.viewers
* .model.provisional.IElementMementoRequest)
*/
- public void addRequest(ElementMementoRequest req) {
+ @Override
+ public void addRequest(ElementMementoRequest req) {
fRequest = req;
}
- public void cancel() {
+ @Override
+ public void cancel() {
// not used
}
@@ -364,7 +373,10 @@ class ViewerStateTracker {
* @param path Path to subtree to restore.
*/
void appendToPendingStateDelta(final TreePath path) {
- if (fContentProvider.getViewer() == null) return; // Not initialized yet.
+ if (fContentProvider.getViewer() == null)
+ {
+ return; // Not initialized yet.
+ }
if (DebugUIPlugin.DEBUG_STATE_SAVE_RESTORE && DebugUIPlugin.DEBUG_TEST_PRESENTATION_ID(fContentProvider.getPresentationContext())) {
DebugUIPlugin.trace("STATE APPEND BEGIN: " + path.getLastSegment()); //$NON-NLS-1$
@@ -391,7 +403,8 @@ class ViewerStateTracker {
// markers are used by the restore logic to know when a delta node can
// be removed.
delta.accept(new IModelDeltaVisitor() {
- public boolean visit(IModelDelta d, int depth) {
+ @Override
+ public boolean visit(IModelDelta d, int depth) {
if ((d.getFlags() & IModelDelta.EXPAND) != 0) {
((ModelDelta) d).setFlags(d.getFlags() | IModelDelta.CONTENT);
}
@@ -415,7 +428,8 @@ class ViewerStateTracker {
// attributes into the pending delta.
if (path.getSegmentCount() > 0) {
fPendingState.accept( new IModelDeltaVisitor() {
- public boolean visit(IModelDelta pendingDeltaNode, int depth) {
+ @Override
+ public boolean visit(IModelDelta pendingDeltaNode, int depth) {
TreePath pendingDeltaPath = fContentProvider.getViewerTreePath(pendingDeltaNode);
if (path.startsWith(pendingDeltaPath, null))
{
@@ -432,7 +446,8 @@ class ViewerStateTracker {
// Copy the pending state into the new appended state.
fPendingState.accept( new IModelDeltaVisitor() {
- public boolean visit(IModelDelta pendingDeltaNode, int depth) {
+ @Override
+ public boolean visit(IModelDelta pendingDeltaNode, int depth) {
// Skip the top element
if (pendingDeltaNode.getParentDelta() == null) {
return true;
@@ -495,8 +510,8 @@ class ViewerStateTracker {
* @param input the {@link ModelDelta} input
*/
protected void saveViewerState(Object input) {
- for (Iterator itr = fCompareRequestsInProgress.values().iterator(); itr.hasNext();) {
- ((ElementCompareRequest) itr.next()).cancel();
+ for (Iterator<ElementCompareRequest> itr = fCompareRequestsInProgress.values().iterator(); itr.hasNext();) {
+ itr.next().cancel();
itr.remove();
}
@@ -548,7 +563,8 @@ class ViewerStateTracker {
}
IModelDeltaVisitor pendingStateVisitor = new IModelDeltaVisitor() {
- public boolean visit(IModelDelta pendingDeltaNode, int depth) {
+ @Override
+ public boolean visit(IModelDelta pendingDeltaNode, int depth) {
// Ignore the top element.
if (pendingDeltaNode.getParentDelta() == null) {
return true;
@@ -612,7 +628,8 @@ class ViewerStateTracker {
private void clearRevealFlag(ModelDelta saveRootDelta) {
IModelDeltaVisitor clearDeltaVisitor = new IModelDeltaVisitor() {
- public boolean visit(IModelDelta delta, int depth) {
+ @Override
+ public boolean visit(IModelDelta delta, int depth) {
if ((delta.getFlags() & IModelDelta.REVEAL) != 0) {
((ModelDelta) delta).setFlags(delta.getFlags() & ~IModelDelta.REVEAL);
}
@@ -624,7 +641,7 @@ class ViewerStateTracker {
private ModelDelta findSubDeltaParent(ModelDelta destinationDeltaRoot, IModelDelta subDelta) {
// Create a path of elements to the sub-delta.
- LinkedList deltaPath = new LinkedList();
+ LinkedList<IModelDelta> deltaPath = new LinkedList<IModelDelta>();
IModelDelta delta = subDelta;
while (delta.getParentDelta() != null) {
delta = delta.getParentDelta();
@@ -633,12 +650,12 @@ class ViewerStateTracker {
// For each element in the path of the sub-delta, find the corresponding
// element in the destination delta
- Iterator itr = deltaPath.iterator();
+ Iterator<IModelDelta> itr = deltaPath.iterator();
// Skip the root element
itr.next();
ModelDelta saveDelta = destinationDeltaRoot;
while (saveDelta != null && itr.hasNext()) {
- IModelDelta itrDelta = (IModelDelta) itr.next();
+ IModelDelta itrDelta = itr.next();
saveDelta = saveDelta.getChildDelta(itrDelta.getElement(), itrDelta.getIndex());
}
return saveDelta;
@@ -682,7 +699,7 @@ class ViewerStateTracker {
/**
* list of memento fRequests
*/
- private List fRequests = new ArrayList();
+ private List<IElementMementoRequest> fRequests = new ArrayList<IElementMementoRequest>();
/**
* Flag indicating whether the encoding of delta has been canceled.
@@ -698,7 +715,8 @@ class ViewerStateTracker {
* #requestComplete(org.eclipse.debug.internal.ui.viewers
* .model.provisional.IElementMementoRequest)
*/
- public void requestComplete(ElementMementoRequest request) {
+ @Override
+ public void requestComplete(ElementMementoRequest request) {
Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
notifyStateUpdate(input, TreeModelContentProvider.UPDATE_COMPLETE, request);
@@ -731,7 +749,8 @@ class ViewerStateTracker {
}
}
- public void cancel() {
+ @Override
+ public void cancel() {
Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
if (fCanceled) {
@@ -739,9 +758,7 @@ class ViewerStateTracker {
}
fCanceled = true;
- Iterator iterator = fRequests.iterator();
- while (iterator.hasNext()) {
- IElementMementoRequest req = (IElementMementoRequest) iterator.next();
+ for (IElementMementoRequest req : fRequests) {
req.cancel();
}
fRequests.clear();
@@ -758,32 +775,28 @@ class ViewerStateTracker {
* org.eclipse.debug.internal.ui.viewers.model.provisional.viewers
* .IMementoManager#processReqeusts()
*/
- public void processReqeusts() {
+ @Override
+ public void processReqeusts() {
Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
- Map providers = new HashMap();
- Iterator iterator = fRequests.iterator();
- while (iterator.hasNext()) {
- IElementMementoRequest request = (IElementMementoRequest) iterator.next();
+ Map<IElementMementoProvider, List<IElementMementoRequest>> providers = new HashMap<IElementMementoProvider, List<IElementMementoRequest>>();
+ for (IElementMementoRequest request : fRequests) {
notifyStateUpdate(input, TreeModelContentProvider.UPDATE_BEGINS, request);
IElementMementoProvider provider = ViewerAdapterService.getMementoProvider(request.getElement());
if (provider == null) {
provider = defaultProvider;
}
- List reqs = (List) providers.get(provider);
+ List<IElementMementoRequest> reqs = providers.get(provider);
if (reqs == null) {
- reqs = new ArrayList();
+ reqs = new ArrayList<IElementMementoRequest>();
providers.put(provider, reqs);
}
reqs.add(request);
}
- iterator = providers.entrySet().iterator();
- while (iterator.hasNext()) {
- Entry entry = (Entry) iterator.next();
- IElementMementoProvider provider = (IElementMementoProvider) entry.getKey();
- List reqs = (List) entry.getValue();
- provider.encodeElements((IElementMementoRequest[]) reqs.toArray(new IElementMementoRequest[reqs
- .size()]));
+ for (Entry<IElementMementoProvider, List<IElementMementoRequest>> entry : providers.entrySet()) {
+ IElementMementoProvider provider = entry.getKey();
+ List<IElementMementoRequest> reqs = entry.getValue();
+ provider.encodeElements(reqs.toArray(new IElementMementoRequest[reqs.size()]));
}
}
@@ -796,7 +809,8 @@ class ViewerStateTracker {
* #addRequest(org.eclipse.debug.internal.ui.viewers.
* model.provisional.IElementMementoRequest)
*/
- public void addRequest(ElementMementoRequest request) {
+ @Override
+ public void addRequest(ElementMementoRequest request) {
Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
fRequests.add(request);
@@ -804,7 +818,8 @@ class ViewerStateTracker {
};
IModelDeltaVisitor visitor = new IModelDeltaVisitor() {
- public boolean visit(IModelDelta delta, int depth) {
+ @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
@@ -918,7 +933,8 @@ 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() {
- public boolean visit(IModelDelta delta, int depth) {
+ @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())) {
@@ -935,7 +951,8 @@ class ViewerStateTracker {
final int mask = flags & ~(IModelDelta.SELECT | IModelDelta.REVEAL);
// For other flags (EXPAND/COLLAPSE), cancel only from the matching path.
fPendingState.accept(new IModelDeltaVisitor() {
- public boolean visit(IModelDelta delta, int depth) {
+ @Override
+ public boolean visit(IModelDelta delta, int depth) {
if (depth < path.getSegmentCount()) {
// Descend until we reach a matching depth.
TreePath deltaPath = fContentProvider.getViewerTreePath(delta);
@@ -1002,7 +1019,8 @@ class ViewerStateTracker {
}
IModelDeltaVisitor visitor = new IModelDeltaVisitor() {
- public boolean visit(final IModelDelta delta, int depth) {
+ @Override
+ public boolean visit(final IModelDelta delta, int depth) {
Object element = delta.getElement();
Object potentialMatch = depth != 0 ? path.getSegment(depth - 1) : fContentProvider.getViewer().getInput();
@@ -1015,7 +1033,7 @@ class ViewerStateTracker {
}
if (provider != null) {
CompareRequestKey key = new CompareRequestKey(path, delta);
- ElementCompareRequest existingRequest = (ElementCompareRequest) fCompareRequestsInProgress
+ ElementCompareRequest existingRequest = fCompareRequestsInProgress
.get(key);
if (existingRequest != null) {
// Check all the running compare updates for a
@@ -1085,7 +1103,8 @@ class ViewerStateTracker {
* #visit(org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta,
* int)
*/
- public boolean visit(IModelDelta delta, int depth) {
+ @Override
+ public boolean visit(IModelDelta delta, int depth) {
// Filter out the CONTENT flags from the delta flags, the content
// flag is only used as a marker indicating that all the sub-elements
// of a given delta have been retrieved.
@@ -1121,8 +1140,7 @@ class ViewerStateTracker {
}
private boolean areMementoUpdatesPending(IModelDelta delta) {
- for (Iterator itr = fCompareRequestsInProgress.keySet().iterator(); itr.hasNext();) {
- CompareRequestKey key = (CompareRequestKey) itr.next();
+ for (CompareRequestKey key : fCompareRequestsInProgress.keySet()) {
if (delta.getElement().equals(key.fDelta.getElement())) {
return true;
}
@@ -1136,7 +1154,8 @@ class ViewerStateTracker {
}
delta.accept(new IModelDeltaVisitor() {
- public boolean visit(IModelDelta _visitorDelta, int depth) {
+ @Override
+ public boolean visit(IModelDelta _visitorDelta, int depth) {
ModelDelta visitorDelta = (ModelDelta) _visitorDelta;
visitorDelta.setElement(ELEMENT_REMOVED);
visitorDelta.setFlags(IModelDelta.NO_CHANGE);
@@ -1315,7 +1334,8 @@ class ViewerStateTracker {
private int fCounter = 0;
private Object fModelInput = fPendingState.getElement();
- public void viewerUpdatesComplete() {
+ @Override
+ public void viewerUpdatesComplete() {
Assert.isTrue( fContentProvider.getViewer().getDisplay().getThread() == Thread.currentThread() );
IInternalTreeModelViewer viewer = fContentProvider.getViewer();
@@ -1345,9 +1365,12 @@ class ViewerStateTracker {
}
}
- public void viewerUpdatesBegin() {}
- public void updateStarted(IViewerUpdate update) {}
- public void updateComplete(IViewerUpdate update) {}
+ @Override
+ public void viewerUpdatesBegin() {}
+ @Override
+ public void updateStarted(IViewerUpdate update) {}
+ @Override
+ public void updateComplete(IViewerUpdate update) {}
/**
* Returns delta that is used to reveal the item.
@@ -1365,7 +1388,9 @@ class ViewerStateTracker {
fPendingSetTopItem = null;
IInternalTreeModelViewer viewer = fContentProvider.getViewer();
- if (viewer == null) return;
+ if (viewer == null) {
+ return;
+ }
// remove myself as viewer update listener
viewer.removeViewerUpdateListener(this);
@@ -1418,7 +1443,8 @@ class ViewerStateTracker {
private ModelDelta markRevealDelta(ModelDelta rootDelta) {
final ModelDelta[] revealDelta = new ModelDelta[1];
IModelDeltaVisitor visitor = new IModelDeltaVisitor() {
- public boolean visit(IModelDelta delta, int depth) {
+ @Override
+ public boolean visit(IModelDelta delta, int depth) {
if ( (delta.getFlags() & IModelDelta.REVEAL) != 0) {
revealDelta[0] = (ModelDelta)delta;
}
@@ -1475,10 +1501,10 @@ class ViewerStateTracker {
* @param path Path of element to cancel updates for.
*/
void cancelStateSubtreeUpdates(TreePath path) {
- for (Iterator itr = fCompareRequestsInProgress.keySet().iterator(); itr.hasNext();) {
- CompareRequestKey key = (CompareRequestKey) itr.next();
+ for (Iterator<CompareRequestKey> itr = fCompareRequestsInProgress.keySet().iterator(); itr.hasNext();) {
+ CompareRequestKey key = itr.next();
if (key.fPath.startsWith(path, null)) {
- ElementCompareRequest compareRequest = (ElementCompareRequest) fCompareRequestsInProgress.get(key);
+ ElementCompareRequest compareRequest = fCompareRequestsInProgress.get(key);
compareRequest.cancel();
itr.remove();
}
@@ -1525,30 +1551,34 @@ class ViewerStateTracker {
for (int i = 0; i < listeners.length; i++) {
final IStateUpdateListener listener = (IStateUpdateListener) listeners[i];
SafeRunner.run(new ISafeRunnable() {
- public void run() throws Exception {
+ @Override
+ public void run() throws Exception {
switch (type) {
- case STATE_SAVE_SEQUENCE_BEGINS:
- listener.stateSaveUpdatesBegin(input);
- break;
- case STATE_SAVE_SEQUENCE_COMPLETE:
- listener.stateSaveUpdatesComplete(input);
- break;
- case STATE_RESTORE_SEQUENCE_BEGINS:
- listener.stateRestoreUpdatesBegin(input);
- break;
- case STATE_RESTORE_SEQUENCE_COMPLETE:
- listener.stateRestoreUpdatesComplete(input);
- break;
- case TreeModelContentProvider.UPDATE_BEGINS:
- listener.stateUpdateStarted(input, update);
- break;
- case TreeModelContentProvider.UPDATE_COMPLETE:
- listener.stateUpdateComplete(input, update);
- break;
+ case STATE_SAVE_SEQUENCE_BEGINS:
+ listener.stateSaveUpdatesBegin(input);
+ break;
+ case STATE_SAVE_SEQUENCE_COMPLETE:
+ listener.stateSaveUpdatesComplete(input);
+ break;
+ case STATE_RESTORE_SEQUENCE_BEGINS:
+ listener.stateRestoreUpdatesBegin(input);
+ break;
+ case STATE_RESTORE_SEQUENCE_COMPLETE:
+ listener.stateRestoreUpdatesComplete(input);
+ break;
+ case TreeModelContentProvider.UPDATE_BEGINS:
+ listener.stateUpdateStarted(input, update);
+ break;
+ case TreeModelContentProvider.UPDATE_COMPLETE:
+ listener.stateUpdateComplete(input, update);
+ break;
+ default:
+ break;
}
}
- public void handleException(Throwable exception) {
+ @Override
+ public void handleException(Throwable exception) {
DebugUIPlugin.log(exception);
}
});

Back to the top