Skip to main content
summaryrefslogtreecommitdiffstats
path: root/memory
diff options
context:
space:
mode:
authorRandy Rohrbach2011-02-24 18:15:13 +0000
committerRandy Rohrbach2011-02-24 18:15:13 +0000
commit21fb967107985deea0aaa4d7fcf2b4d1aba08191 (patch)
tree416fac8e34027409849af1ea7437f48a8ba16551 /memory
parent9749e711263b7778d88b5ffbd73c7001af3afe53 (diff)
downloadorg.eclipse.cdt-21fb967107985deea0aaa4d7fcf2b4d1aba08191.tar.gz
org.eclipse.cdt-21fb967107985deea0aaa4d7fcf2b4d1aba08191.tar.xz
org.eclipse.cdt-21fb967107985deea0aaa4d7fcf2b4d1aba08191.zip
Bug 337881 - Applied Alain Lee patch to deliniate saparate expression lists on a per user/launch basis, where the lists are stored in the launch.
Diffstat (limited to 'memory')
-rw-r--r--memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java237
-rw-r--r--memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java37
2 files changed, 222 insertions, 52 deletions
diff --git a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java
index 0264a0d1678..f860a3f4a8a 100644
--- a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java
+++ b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java
@@ -12,15 +12,24 @@
package org.eclipse.cdt.debug.ui.memory.memorybrowser;
import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
import java.util.StringTokenizer;
+import org.eclipse.cdt.debug.core.model.provisional.ITargetLabelProvider;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.fieldassist.ControlDecoration;
import org.eclipse.jface.fieldassist.FieldDecoration;
import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
-import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
@@ -34,6 +43,8 @@ import org.eclipse.ui.PlatformUI;
public class GoToAddressBarWidget {
+ private static String SEPARATOR = "<sperator>";
+ private static String UNKNOWN_TARGET_NAME = "Unknown";
private Combo fExpression;
private ControlDecoration fEmptyExpression;
private ControlDecoration fWrongExpression;
@@ -77,9 +88,9 @@ public class GoToAddressBarWidget {
}
private final static String SAVED_EXPRESSIONS = "saved_expressions"; //$NON-NLS-1$
- private final static int MAX_SAVED_EXPRESSIONS = 30 ;
+ private final static int MAX_SAVED_EXPRESSIONS = 15 ;
- private void saveExpression( String memorySpace, String expr ) {
+ private void saveExpression( String memorySpace, Object context, String expr ) {
/*
* Get the saved expressions if any.
*
@@ -87,21 +98,100 @@ public class GoToAddressBarWidget {
*
* expression,expression,.....,expression
*/
- IPreferenceStore store = MemoryBrowserPlugin.getDefault().getPreferenceStore();
- String currentExpressions = store.getString(SAVED_EXPRESSIONS);
- if ( currentExpressions != null && currentExpressions.length() != 0 ) {
- store.setValue(SAVED_EXPRESSIONS, currentExpressions + "," + expr);
+ ILaunch launch = getLaunch(context);
+ if(launch == null)
+ {
+ return;
}
- else {
- store.setValue(SAVED_EXPRESSIONS, expr);
+
+ String targetName = getTargetName(context);
+
+ ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
+ String currentExpressions = "";
+ if (launchConfiguration != null) {
+ try {
+ ILaunchConfigurationWorkingCopy wc = launchConfiguration.getWorkingCopy();
+ if (wc != null) {
+ currentExpressions = wc.getAttribute(getSaveExpressionKey(targetName,memorySpace), "");
+
+ StringTokenizer st = new StringTokenizer(currentExpressions, ","); //$NON-NLS-1$
+ /*
+ * Parse through the list creating an ordered array for display.
+ */
+ ArrayList<String> list = new ArrayList<String>();
+ while(st.hasMoreElements())
+ {
+ String expression = (String) st.nextElement();
+ list.add(expression);
+ }
+ if(!list.contains(expr))
+ {
+ list.add(expr);
+
+ while(list.size() > MAX_SAVED_EXPRESSIONS)
+ {
+ list.remove(0);
+ }
+
+ currentExpressions = "";
+ for ( int idx =0 ; idx < list.size(); idx ++ ) {
+ if(idx > 0)
+ {
+ currentExpressions += ",";
+ }
+ currentExpressions += list.get(idx);
+ }
+ wc.setAttribute(getSaveExpressionKey(targetName,memorySpace), currentExpressions);
+ wc.doSave();
+ }
+ }
+ }
+ catch(CoreException e) {
+ }
}
}
- public void deleteExpressions(String memorySpace) {
- MemoryBrowserPlugin.getDefault().getPreferenceStore().setValue(SAVED_EXPRESSIONS, "");
+ public void deleteExpressions(Object context) {
+
+ if(context == null)
+ {
+ return;
+ }
+
+ ILaunch launch = getLaunch(context);
+ if(launch == null)
+ {
+ return;
+ }
+ ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
+ if (launchConfiguration != null) {
+ try {
+ ILaunchConfigurationWorkingCopy wc = launchConfiguration.getWorkingCopy();
+ if (wc != null) {
+ @SuppressWarnings("unchecked")
+ Map<String,Object> attributes = (Map<String,Object>)wc.getAttributes();
+ if (attributes != null && !attributes.isEmpty()) {
+
+ Iterator<String> iterator = attributes.keySet().iterator();
+ while(iterator.hasNext())
+ {
+ String key = iterator.next();
+ if(key.startsWith(SAVED_EXPRESSIONS))
+ {
+ wc.removeAttribute(key);
+ }
+ }
+ wc.doSave();
+ }
+ }
+ }
+ catch(CoreException e) {
+ }
+ }
+
}
- private String[] getSavedExpressions(String memorySpace) {
+ private String[] getSavedExpressions(String memorySpace, Object context) {
/*
* Get the saved expressions if any.
*
@@ -109,9 +199,23 @@ public class GoToAddressBarWidget {
*
* expression,expression,.....,expression
*/
- IPreferenceStore store = MemoryBrowserPlugin.getDefault().getPreferenceStore();
- String expressions = store.getString(SAVED_EXPRESSIONS);
+ ILaunch launch = getLaunch(context);
+ if(launch == null)
+ {
+ return new String[0];
+ }
+
+ ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
+ String expressions = "";
+ if (launchConfiguration != null) {
+ try {
+ expressions = launchConfiguration.getAttribute(getSaveExpressionKey(getTargetName(context),memorySpace), "");
+ }
+ catch(CoreException e) {
+ }
+ }
+
StringTokenizer st = new StringTokenizer(expressions, ","); //$NON-NLS-1$
/*
* Parse through the list creating an ordered array for display.
@@ -125,26 +229,22 @@ public class GoToAddressBarWidget {
return list.toArray(new String[list.size()]);
}
- private String removeOldestExpression( String memorySpace ) {
- String[] currentSavedExpressions = getSavedExpressions(memorySpace);
- if ( currentSavedExpressions.length > 0 ) {
- /*
- * Remove all expressions and then repopulate the list.
- */
- deleteExpressions(memorySpace);
- /*
- * The first in the list is the oldest. So we will delete it by not
- * putting it back.
- */
- for ( int idx = 1 ; idx < currentSavedExpressions.length; idx ++ ) {
- saveExpression( memorySpace, currentSavedExpressions[idx]);
- }
- return currentSavedExpressions[0];
+ public void loadSavedExpressions(String memorySpace, Object context)
+ {
+ String[] expressions = getSavedExpressions(memorySpace, context);
+ String text = fExpression.getText();
+ fExpression.removeAll();
+ for(int idx=0; idx < expressions.length; idx++)
+ {
+ fExpression.add(expressions[idx]);
+ }
+ if(text != null)
+ {
+ fExpression.setText(text);
}
- return null;
}
- public void addExpressionToList( String memorySpace, String expr ) {
+ public void addExpressionToList( String memorySpace, Object context, String expr ) {
/*
* Make sure it does not already exist, we do not want to show duplicates.
*/
@@ -152,8 +252,8 @@ public class GoToAddressBarWidget {
/*
* Cap the size of the list.
*/
- if ( ( fExpression.getItemCount() + 1 ) > MAX_SAVED_EXPRESSIONS ) {
- fExpression.remove(removeOldestExpression(memorySpace));
+ while ( fExpression.getItemCount() >= MAX_SAVED_EXPRESSIONS ) {
+ fExpression.remove(0);
}
/*
@@ -161,14 +261,14 @@ public class GoToAddressBarWidget {
*/
fExpression.add(expr);
- /*
- * Add it to the persistense database.
- */
- saveExpression(memorySpace, expr);
}
+ /*
+ * Add it to the persistense database.
+ */
+ saveExpression(memorySpace, context, expr);
}
- public void clearExpressionsFromList(String memorySpace) {
+ public void clearExpressionsFromList(String[] memorySpaces, Object context) {
/*
* Clean up the combo list.
*/
@@ -178,7 +278,7 @@ public class GoToAddressBarWidget {
/*
* Clean out the expression persistense.
*/
- deleteExpressions(memorySpace);
+ deleteExpressions(context);
/*
* Make sure the status image indicator shows OK.
@@ -197,14 +297,6 @@ public class GoToAddressBarWidget {
}
});
- /*
- * Populate the list with the expressions from the last time the view was brought up.
- */
- String[] expressions = getSavedExpressions("");
- for ( String expr : expressions ) {
- combo.add( expr );
- }
-
fEmptyExpression = new ControlDecoration(combo, SWT.LEFT | SWT.CENTER);
fEmptyExpression.setDescriptionText(Messages.getString("GoToAddressBarWidget.EnterExpressionMessage")); //$NON-NLS-1$
FieldDecoration fieldDec = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED);
@@ -300,4 +392,55 @@ public class GoToAddressBarWidget {
{
return fExpressionStatus;
}
+
+ private ILaunch getLaunch(Object context)
+ {
+ IAdaptable adaptable = null;
+ ILaunch launch = null;
+ if(context instanceof IAdaptable)
+ {
+ adaptable = (IAdaptable) context;
+ launch = ((ILaunch) adaptable.getAdapter(ILaunch.class));
+ }
+
+ return launch;
+
+ }
+
+ private String getTargetName(Object context)
+ {
+ String targetName = null;
+ if(context instanceof IAdaptable)
+ {
+ IAdaptable adaptable = (IAdaptable) context;
+ ITargetLabelProvider labelProvider = (ITargetLabelProvider)adaptable.getAdapter(ITargetLabelProvider.class);
+ if(labelProvider != null)
+ {
+ try
+ {
+ targetName = labelProvider.getLabel();
+ }
+ catch(DebugException e)
+ {
+ }
+ }
+ }
+ if(targetName == null || targetName.trim().length() == 0)
+ {
+ targetName = UNKNOWN_TARGET_NAME;
+ }
+ return targetName;
+
+ }
+
+ private String getSaveExpressionKey(String targetName, String memorySpace)
+ {
+ String key = SAVED_EXPRESSIONS + SEPARATOR + targetName.trim();
+ if(memorySpace != null && memorySpace.trim().length() > 0)
+ {
+ key += SEPARATOR + memorySpace.trim();
+ }
+ return key;
+ }
+
}
diff --git a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java
index fef83f11fb4..0c5e710bf48 100644
--- a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java
+++ b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java
@@ -23,6 +23,7 @@ import java.util.Map;
import org.eclipse.cdt.debug.core.model.provisional.IMemoryRenderingViewportProvider;
import org.eclipse.cdt.debug.core.model.provisional.IMemorySpaceAwareMemoryBlockRetrieval;
+import org.eclipse.cdt.debug.core.model.provisional.ITargetLabelProvider;
import org.eclipse.cdt.debug.internal.core.CRequest;
import org.eclipse.cdt.debug.ui.provisional.IRepositionableMemoryRendering2;
import org.eclipse.core.runtime.CoreException;
@@ -36,6 +37,7 @@ import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.model.IDebugElement;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IMemoryBlock;
import org.eclipse.debug.core.model.IMemoryBlockExtension;
@@ -260,6 +262,20 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
}
});
+ fGotoMemorySpaceControl.addSelectionListener(new SelectionListener() {
+ public void widgetDefaultSelected(SelectionEvent e) {}
+ public void widgetSelected(SelectionEvent e) {
+ if(fGotoMemorySpaceControl.getItemCount() >= 2)
+ {
+ final CTabFolder activeFolder = (CTabFolder) fStackLayout.topControl;
+ if (activeFolder != null) {
+ final Object context = activeFolder.getData(KEY_CONTEXT);
+ fGotoAddressBar.loadSavedExpressions(fGotoMemorySpaceControl.getText(), context);
+ }
+ }
+ }
+ });
+
FormData data = new FormData();
data.top = new FormAttachment(0);
@@ -321,7 +337,11 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
}
public void clearExpressionsFromList(String memorySpace) {
- fGotoAddressBar.clearExpressionsFromList(memorySpace);
+ final CTabFolder activeFolder = (CTabFolder) fStackLayout.topControl;
+ if (activeFolder != null) {
+ final Object context = activeFolder.getData(KEY_CONTEXT);
+ fGotoAddressBar.clearExpressionsFromList(fGotoMemorySpaceControl.isVisible() ? fGotoMemorySpaceControl.getItems() : new String[]{""}, context);
+ }
}
/**
@@ -397,7 +417,12 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
String expression = fGotoAddressBar.getExpressionText();
if (expression.length() > 0) {
- fGotoAddressBar.addExpressionToList(memorySpace, expression);
+ final CTabFolder activeFolder = (CTabFolder) fStackLayout.topControl;
+ Object context = null;
+ if (activeFolder != null) {
+ context = activeFolder.getData(KEY_CONTEXT);
+ }
+ fGotoAddressBar.addExpressionToList(memorySpace, context, expression);
performGo(inNewTab, expression, memorySpace);
}
}
@@ -817,13 +842,13 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
IMemoryBlockRetrieval retrieval = null;
ILaunch launch = null;
- if(context instanceof IAdaptable)
+ if(context instanceof IAdaptable)
{
adaptable = (IAdaptable) context;
retrieval = ((IMemoryBlockRetrieval) adaptable.getAdapter(IMemoryBlockRetrieval.class));
launch = ((ILaunch) adaptable.getAdapter(ILaunch.class));
}
-
+
if(retrieval != null && launch != null && !launch.isTerminated()) {
if (retrieval instanceof IMemorySpaceAwareMemoryBlockRetrieval) {
final IMemoryBlockRetrieval _retrieval = retrieval;
@@ -884,6 +909,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
CTabItem tabItem = (CTabItem)e.item;
updateExpression(tabItem);
updateMemorySpaceControlSelection(tabItem);
+ fGotoAddressBar.loadSavedExpressions(fGotoMemorySpaceControl.isVisible() ? fGotoMemorySpaceControl.getText() : "", context);
getSite().getSelectionProvider().setSelection(new StructuredSelection(tabItem.getData(KEY_RENDERING)));
handleTabActivated(tabItem);
}
@@ -894,6 +920,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
fStackLayout.topControl = tabFolder;
// set empty initial expression
fGotoAddressBar.setExpressionText(""); //$NON-NLS-1$
+ fGotoAddressBar.loadSavedExpressions(fGotoMemorySpaceControl.isVisible() ? fGotoMemorySpaceControl.getText() : "", context);
}
// update debug context to the new selection
tabFolder.setData(KEY_CONTEXT, context);
@@ -928,6 +955,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
updateExpression(activeFolder.getSelection());
updateMemorySpaceControlSelection(activeFolder.getSelection());
+ fGotoAddressBar.loadSavedExpressions(fGotoMemorySpaceControl.isVisible() ? fGotoMemorySpaceControl.getText() : "", context);
fStackLayout.topControl.getParent().layout(true);
}
@@ -948,7 +976,6 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
}
}
-
protected final void handleTabActivated(CTabItem item) {
if (item != null) {
updateActiveRendering((IMemoryRendering) item.getData(KEY_RENDERING));

Back to the top