/******************************************************************************* * Copyright (c) 2007, 2011 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 * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.internal.debug.core; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.jdt.debug.core.IJavaDebugTarget; import org.osgi.service.prefs.BackingStoreException; /** * Controls preferences related to heap walking so that they are available in * java debug model code, but can be updated through the UI. * * @since 3.3 */ public class HeapWalkingManager { private static HeapWalkingManager fgSingleton; /** * Constructor. Intended to be called by getDefault() */ protected HeapWalkingManager() { } /** * Returns whether the given parent object is a debug element with a debug * target that supports retrieval of instance and reference information from * the VM. * * @param object * the object to test, can be <code>null</code> * @return whether the given object has a debug target that supports heap * walking */ public static boolean supportsHeapWalking(Object object) { if (object instanceof IDebugElement) { IDebugTarget target = ((IDebugElement) object).getDebugTarget(); if (target instanceof IJavaDebugTarget) { return ((IJavaDebugTarget) target).supportsInstanceRetrieval(); } else if (target != null) { Object adapter = target.getAdapter(IJavaDebugTarget.class); if (adapter instanceof IJavaDebugTarget) { return ((IJavaDebugTarget) adapter).supportsInstanceRetrieval(); } } } return false; } /** * @return the default singleton instance of the manager */ public static HeapWalkingManager getDefault() { if (fgSingleton == null) { fgSingleton = new HeapWalkingManager(); } return fgSingleton; } /** * @return preference dictating whether to display references as variables * in variables view. */ public boolean isShowReferenceInVarView() { return Platform.getPreferencesService().getBoolean( JDIDebugPlugin.getUniqueIdentifier(), JDIDebugPlugin.PREF_SHOW_REFERENCES_IN_VAR_VIEW, false, null); } /** * @return preference dictating the maximum number of references that should * be displayed to the user */ public int getAllReferencesMaxCount() { return Platform.getPreferencesService().getInt( JDIDebugPlugin.getUniqueIdentifier(), JDIDebugPlugin.PREF_ALL_REFERENCES_MAX_COUNT, 100, null); } /** * @return preference dictating the maximum number of instances that should * be displayed to the user */ public int getAllInstancesMaxCount() { return Platform.getPreferencesService().getInt( JDIDebugPlugin.getUniqueIdentifier(), JDIDebugPlugin.PREF_ALL_INSTANCES_MAX_COUNT, 100, null); } /** * Stores the passed vale in the preference store * * @param value * whether to display references as variables in the variables * view */ public void setShowReferenceInVarView(boolean value) { IEclipsePreferences node = InstanceScope.INSTANCE.getNode(JDIDebugPlugin.getUniqueIdentifier()); if(node != null) { node.putBoolean(JDIDebugPlugin.PREF_SHOW_REFERENCES_IN_VAR_VIEW, value); try { node.flush(); } catch (BackingStoreException e) { JDIDebugPlugin.log(e); } } } /** * Stores the passed value in the preference store * * @param max * the maximum number of references that should be displayed to * the user */ public void setAllReferencesMaxCount(int max) { IEclipsePreferences node = InstanceScope.INSTANCE.getNode(JDIDebugPlugin.getUniqueIdentifier()); if(node != null) { node.putInt(JDIDebugPlugin.PREF_ALL_REFERENCES_MAX_COUNT, max); try { node.flush(); } catch (BackingStoreException e) { JDIDebugPlugin.log(e); } } } /** * Stores the passed value in the preference store * * @param max * the maximum number of instances that should be displayed to * the user */ public void setAllInstancesMaxCount(int max) { IEclipsePreferences node = InstanceScope.INSTANCE.getNode(JDIDebugPlugin.getUniqueIdentifier()); if(node != null) { node.putInt(JDIDebugPlugin.PREF_ALL_INSTANCES_MAX_COUNT, max); try { node.flush(); } catch (BackingStoreException e) { JDIDebugPlugin.log(e); } } } /** * Resets the preferences controlled by this manager to their default * settings */ public void resetToDefaultSettings() { IEclipsePreferences node = InstanceScope.INSTANCE.getNode(JDIDebugPlugin.getUniqueIdentifier()); if(node != null) { node.putBoolean(JDIDebugPlugin.PREF_SHOW_REFERENCES_IN_VAR_VIEW, false); node.putInt(JDIDebugPlugin.PREF_ALL_REFERENCES_MAX_COUNT, 100); node.putInt(JDIDebugPlugin.PREF_ALL_INSTANCES_MAX_COUNT, 100); try { node.flush(); } catch (BackingStoreException e) { JDIDebugPlugin.log(e); } } } }