Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java74
1 files changed, 49 insertions, 25 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
index f5896f6c3..40f047092 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java
@@ -14,10 +14,9 @@ package org.eclipse.debug.internal.ui.views.expression;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -108,6 +107,48 @@ public class ExpressionView extends VariablesView {
private boolean fAutoSelectnWorkingSets = true;
+ /**
+ * Object used for comparing xml mementos in a map.
+ */
+ private static class XMLMementoKey {
+ final XMLMemento fMemento;
+ private String fKeyString;
+
+ XMLMementoKey(XMLMemento memento) {
+ fMemento = memento;
+ }
+
+ String getMementoString() {
+ if (fKeyString == null) {
+ StringWriter writer = new StringWriter();
+
+ try {
+ fMemento.save(writer);
+ fKeyString = writer.toString();
+ } catch (IOException e) {
+ } finally {
+ }
+ fKeyString = fMemento.toString();
+ }
+ return fKeyString;
+ }
+
+ public boolean equals(Object obj) {
+ if (obj instanceof XMLMementoKey) {
+ return getMementoString().equals(((XMLMementoKey)obj).getMementoString());
+ }
+ return false;
+ }
+
+ public int hashCode() {
+ return getMementoString().hashCode();
+ }
+
+ public String toString() {
+ return getMementoString();
+ }
+ }
+
private Map fWorkingSetMementos = new LinkedHashMap(16, (float)0.75, true) {
private static final long serialVersionUID = 1L;
@@ -115,7 +156,7 @@ public class ExpressionView extends VariablesView {
return size() > MAX_WORKING_SETS_MEMENTOS;
}
};
-
+
private Set fPendingCompareRequests;
private ExpressionElementMementoRequest fPendingMementoRequest;
@@ -386,7 +427,7 @@ public class ExpressionView extends VariablesView {
InputStreamReader reader = new InputStreamReader(bin);
try {
XMLMemento workingSetsKey = XMLMemento.createReadRoot(reader);
- fWorkingSetMementos.put(workingSetsKey, workingSetNames);
+ fWorkingSetMementos.put( new XMLMementoKey(workingSetsKey), workingSetNames );
} catch (WorkbenchException e) {
} finally {
try {
@@ -418,30 +459,12 @@ public class ExpressionView extends VariablesView {
private void saveWorkingSetMementos(IMemento memento) {
for (Iterator itr = fWorkingSetMementos.entrySet().iterator(); itr.hasNext();) {
Map.Entry entry = (Map.Entry)itr.next();
- String keyMementoString = getMenentoString((XMLMemento)entry.getKey());
+ String keyMementoString = ((XMLMementoKey)entry.getKey()).getMementoString();
IMemento workingSetsForElementMemento = memento.createChild(PREF_ELEMENT_WORKINGSET_MEMENTOS, keyMementoString);
saveWorkingSets(workingSetsForElementMemento, (String[])entry.getValue());
}
}
- private String getMenentoString(XMLMemento memento) {
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- OutputStreamWriter writer = new OutputStreamWriter(bout);
-
- try {
- memento.save(writer);
- return bout.toString();
- } catch (IOException e) {
- } finally {
- try {
- writer.close();
- bout.close();
- } catch (IOException e) {
- }
- }
- return null;
- }
-
public void applyWorkingSets(IWorkingSet[] selectedWorkingSets) {
doApplyWorkingSets(selectedWorkingSets);
saveWorkingSetsForInput();
@@ -471,7 +494,7 @@ public class ExpressionView extends VariablesView {
void mementoRequestFinished(ExpressionElementMementoRequest request) {
if (!request.isCanceled()) {
- fWorkingSetMementos.put(request.getMemento(), request.getWorkingSets());
+ fWorkingSetMementos.put(new XMLMementoKey((XMLMemento)request.getMemento()), request.getWorkingSets());
}
}
@@ -528,7 +551,8 @@ public class ExpressionView extends VariablesView {
for (Iterator itr = fWorkingSetMementos.entrySet().iterator(); itr.hasNext();) {
Map.Entry entry = (Map.Entry)itr.next();
requests.add( new ExpressionElementCompareRequest(
- this, getPresentationContext(), source, (IMemento)entry.getKey(), (String[])entry.getValue()) );
+ this, getPresentationContext(), source, ((XMLMementoKey)entry.getKey()).fMemento,
+ (String[])entry.getValue()) );
}
// cancel any pending update

Back to the top