Added pref panel for more EDC debugger settings.
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/EDCDebuggerPreferencePage.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/EDCDebuggerPreferencePage.java
new file mode 100644
index 0000000..65e42b7
--- /dev/null
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/EDCDebuggerPreferencePage.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Nokia 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nokia - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.edc.internal.ui;
+
+import org.eclipse.cdt.debug.edc.internal.EDCDebugger;
+import org.eclipse.cdt.debug.edc.internal.PersistentCache;
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.PlatformUI;
+
+public class EDCDebuggerPreferencePage extends FieldEditorPreferencePage
+ implements IWorkbenchPreferencePage {
+
+// private Button changeButton;
+
+ /**
+ * Create the preference page.
+ */
+ public EDCDebuggerPreferencePage() {
+ super(FLAT);
+ IPreferenceStore store = EDCDebugUI.getDefault().getPreferenceStore();
+ setPreferenceStore(store);
+ }
+
+ public void init(IWorkbench arg0) {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IEDCHelpContextIds.EDC_DEBUGGER_PREFERENCE_PAGE);
+ }
+
+ /**
+ * Create contents of the preference page.
+ */
+ @Override
+ protected void createFieldEditors() {
+ addField(new BooleanFieldEditor(PersistentCache.USE_PERSISTENT_CACHE,
+ Messages.EDCDebugger_EnableDebuggerCacheLabel,
+ getFieldEditorParent()));
+/* TODO "Clear Cache Button"
+ * getting the following into the fieldEditorPreferencesPage
+ * was not as utterly trivial as i thought. at the very least,
+ * someone needs to implement the "clearCachedNowPressed()",
+ * as well as the other minor details of positioning/gridLayout, etc.
+ */
+//
+// GridData gd = new GridData();
+// gd.horizontalAlignment = GridData.FILL;
+// int widthHint
+// = convertHorizontalDLUsToPixels(changeButton, IDialogConstants.BUTTON_WIDTH);
+// gd.widthHint = Math.max(widthHint, changeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x);
+// changeButton.setLayoutData(gd);
+// changeButton.setText(Messages.EDCDebugger_ClearDebuggerCacheNow);
+// changeButton.addSelectionListener(new SelectionAdapter() {
+// public void widgetSelected(SelectionEvent evt) {
+// clearCachedNowPressed();
+// }
+// });
+// changeButton.addDisposeListener(new DisposeListener() {
+// public void widgetDisposed(DisposeEvent event) {
+// changeButton = null;
+// }
+// });
+
+ addField(new BooleanFieldEditor(EDCDebugger.EDC_RESOLVE_OPAQUE_TYPES,
+ Messages.EDCDebugger_ResolveOpaqueTypesLabel,
+ getFieldEditorParent()));
+ addField(new BooleanFieldEditor(EDCDebugger.EDC_RESOLVE_RTTI_TYPES,
+ Messages.EDCDebugger_ResolveRTTITypesLabel,
+ getFieldEditorParent()));
+ }
+
+}
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/IEDCHelpContextIds.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/IEDCHelpContextIds.java
index 64091c1..ba6d161 100644
--- a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/IEDCHelpContextIds.java
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/IEDCHelpContextIds.java
@@ -15,6 +15,7 @@
public static final String PREFIX = EDCDebugUI.PLUGIN_ID + "."; //$NON-NLS-1$
+ public static final String EDC_DEBUGGER_PREFERENCE_PAGE = PREFIX + "edc_debugger_preference_page_context"; //$NON-NLS-1$
public static final String SNAPSHOT_PREFERENCE_PAGE = PREFIX + "snapshot_preference_page_context"; //$NON-NLS-1$
}
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.java
new file mode 100644
index 0000000..9513a4d
--- /dev/null
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Nokia 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Nokia - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.debug.edc.internal.ui;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages {
+ private static final String BUNDLE_NAME = "org.eclipse.cdt.debug.edc.internal.ui.Messages"; //$NON-NLS-1$
+
+ public static String EDCDebugger_EnableDebuggerCacheLabel;
+ public static String EDCDebugger_ResolveOpaqueTypesLabel;
+ public static String EDCDebugger_ResolveRTTITypesLabel;
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+ }
+
+ private Messages() {
+ }
+
+}
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.properties b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.properties
new file mode 100644
index 0000000..b7a91d6
--- /dev/null
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/Messages.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2011 Nokia 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
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+# Nokia - Initial implementation
+###############################################################################
+EDCDebugger_EnableDebuggerCacheLabel=Cache debug data from previous sessions
+EDCDebugger_ResolveOpaqueTypesLabel=Attempt to resolve opaque variable types
+EDCDebugger_ResolveRTTITypesLabel=Attempt to show the dynamic runtime types of objects
diff --git a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/SnapshotPreferencePage.java b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/SnapshotPreferencePage.java
index bfe7891..6062ebe 100644
--- a/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/SnapshotPreferencePage.java
+++ b/org.eclipse.cdt.debug.edc.ui/src/org/eclipse/cdt/debug/edc/internal/ui/SnapshotPreferencePage.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 Nokia and others.
+ * Copyright (c) 2010, 2011 Nokia 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
@@ -37,13 +37,23 @@
*/
@Override
protected void createFieldEditors() {
+
// Create the field editors
- addField(new ComboFieldEditor(Album.PREF_CREATION_CONTROL, "Create snapshots:", new String[][]{{"Manually", Album.CREATE_MANUAL}, {"When stopped", Album.CREATE_WHEN_STOPPED}, {"At breakpoints", Album.CREATE_AT_BEAKPOINTS}}, getFieldEditorParent()));
- {
- IntegerFieldEditor integerFieldEditor = new IntegerFieldEditor(Album.PREF_VARIABLE_CAPTURE_DEPTH, "Variable expansion level:", getFieldEditorParent());
- integerFieldEditor.setValidRange(1, 500);
- addField(integerFieldEditor);
- }
+ addField(new ComboFieldEditor(Album.PREF_CREATION_CONTROL, "Create snapshots:",
+ new String[][]{{"Manually", Album.CREATE_MANUAL},
+ {"When stopped", Album.CREATE_WHEN_STOPPED},
+ {"At breakpoints", Album.CREATE_AT_BEAKPOINTS}},
+ getFieldEditorParent()));
+ IntegerFieldEditor integerFieldEditor
+ = new IntegerFieldEditor(Album.PREF_VARIABLE_CAPTURE_DEPTH,
+ "Variable expansion level:",
+ getFieldEditorParent());
+ integerFieldEditor.setValidRange(1, 500);
+ addField(integerFieldEditor);
+
+// addField(new BooleanFieldEditor(Album.PREF_RESOLVE_OPAQUE_TYPE,
+// "Resolve Opaque Types",
+// getFieldEditorParent()));
}
@Override
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugPreferenceInitializer.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugPreferenceInitializer.java
index 5a78b25..4edacc4 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugPreferenceInitializer.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugPreferenceInitializer.java
@@ -25,6 +25,7 @@
node.putInt(Album.PREF_VARIABLE_CAPTURE_DEPTH, 5);
node.put(Album.PREF_CREATION_CONTROL, Album.CREATE_MANUAL);
node.putBoolean(FormatExtensionManager.VARIABLE_FORMATS_ENABLED, FormatExtensionManager.VARIABLE_FORMATS_ENABLED_DEFAULT);
+ node.putBoolean(PersistentCache.USE_PERSISTENT_CACHE, true);
}
}
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
index 2fd0805..4d7c046 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/EDCDebugger.java
@@ -17,9 +17,9 @@
import org.eclipse.cdt.debug.edc.tcf.extension.services.LoggingProxy;
import org.eclipse.cdt.debug.edc.tcf.extension.services.SettingsProxy;
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.scripting.ScriptingPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
@@ -31,6 +31,7 @@
import org.eclipse.tm.tcf.protocol.Protocol;
import org.eclipse.tm.tcf.protocol.Protocol.ChannelOpenListener;
import org.osgi.framework.BundleContext;
+import org.osgi.service.prefs.BackingStoreException;
import org.osgi.util.tracker.ServiceTracker;
/**
@@ -45,6 +46,9 @@
// The shared instance
private static EDCDebugger plugin;
+ public static final String EDC_RESOLVE_OPAQUE_TYPES = PLUGIN_ID + ".resolve_opaque_types"; //$NON-NLS-1$
+ public static final String EDC_RESOLVE_RTTI_TYPES = PLUGIN_ID + ".resolve_rtti_types"; //$NON-NLS-1$
+
/** Platform facility used to trace. Lock {@link #traceLock} before accessing. */
private volatile DebugTrace trace;
@@ -253,5 +257,49 @@
public static IEclipsePreferences getPrefs(String qualifier)
{
return InstanceScope.INSTANCE.getNode(qualifier);
+}
+ public static void setEnableDebuggerCache(boolean newSetting) {
+ IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
+ scope.putBoolean(PersistentCache.USE_PERSISTENT_CACHE, newSetting);
+ try {
+ scope.flush();
+ } catch (BackingStoreException e) {
+ EDCDebugger.getMessageLogger().logError(null, e);
+ }
+ }
+
+ public static boolean getEnableDebuggerCache() {
+ return Platform.getPreferencesService().getBoolean(EDCDebugger.PLUGIN_ID,
+ PersistentCache.USE_PERSISTENT_CACHE, true, null);
+ }
+
+ public static void setResolveOpaqueType(boolean newSetting) {
+ IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
+ scope.putBoolean(EDCDebugger.EDC_RESOLVE_OPAQUE_TYPES, newSetting);
+ try {
+ scope.flush();
+ } catch (BackingStoreException e) {
+ EDCDebugger.getMessageLogger().logError(null, e);
+ }
+ }
+
+ public static boolean getResolveOpaqueTypes() {
+ return Platform.getPreferencesService().getBoolean(EDCDebugger.PLUGIN_ID,
+ EDCDebugger.EDC_RESOLVE_OPAQUE_TYPES, false, null);
+ }
+
+ public static void setResolveRttiTypes(boolean newSetting) {
+ IEclipsePreferences scope = EDCDebugger.getPrefs(EDCDebugger.PLUGIN_ID);
+ scope.putBoolean(EDCDebugger.EDC_RESOLVE_RTTI_TYPES, newSetting);
+ try {
+ scope.flush();
+ } catch (BackingStoreException e) {
+ EDCDebugger.getMessageLogger().logError(null, e);
+ }
+ }
+
+ public static boolean getResolveRttiTypes() {
+ return Platform.getPreferencesService().getBoolean(EDCDebugger.PLUGIN_ID,
+ EDCDebugger.EDC_RESOLVE_RTTI_TYPES, false, null);
}
}
diff --git a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/PersistentCache.java b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/PersistentCache.java
index 4092cb6..b10dcf7 100644
--- a/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/PersistentCache.java
+++ b/org.eclipse.cdt.debug.edc/src/org/eclipse/cdt/debug/edc/internal/PersistentCache.java
@@ -27,6 +27,8 @@
public class PersistentCache {
+ public static final String USE_PERSISTENT_CACHE = "use_persistent_cache"; //$NON-NLS-1$
+
private class CacheEntry {
private String identifier;
@@ -120,7 +122,10 @@
}
synchronized public <T> T getCachedData(String cacheIdentifier, Class<T> expectedClass, long freshness) {
- // freshness = 0;
+
+ if (!EDCDebugger.getEnableDebuggerCache())
+ freshness = 0;
+
CacheEntry cache = caches.get(cacheIdentifier);
if (cache == null)