From 33154819a4473c55ed9a4e50cbed4981909d6d10 Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Thu, 25 Jun 2009 22:01:46 +0000 Subject: [281585] - [pda] Refactor of PDA's IAdapterFactory implementation. --- .../cdt/examples/dsf/pda/ui/PDAAdapterFactory.java | 209 +-------------------- 1 file changed, 4 insertions(+), 205 deletions(-) (limited to 'dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDAAdapterFactory.java') diff --git a/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDAAdapterFactory.java b/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDAAdapterFactory.java index ce756d66613..f0170f0a054 100644 --- a/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDAAdapterFactory.java +++ b/dsf/org.eclipse.cdt.examples.dsf.pda.ui/src/org/eclipse/cdt/examples/dsf/pda/ui/PDAAdapterFactory.java @@ -10,43 +10,14 @@ *******************************************************************************/ package org.eclipse.cdt.examples.dsf.pda.ui; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.WeakHashMap; - -import org.eclipse.cdt.dsf.concurrent.Immutable; import org.eclipse.cdt.dsf.concurrent.ThreadSafe; -import org.eclipse.cdt.dsf.debug.ui.actions.DsfResumeCommand; -import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepIntoCommand; -import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepOverCommand; -import org.eclipse.cdt.dsf.debug.ui.actions.DsfStepReturnCommand; -import org.eclipse.cdt.dsf.debug.ui.actions.DsfSuspendCommand; -import org.eclipse.cdt.dsf.debug.ui.sourcelookup.DsfSourceDisplayAdapter; -import org.eclipse.cdt.dsf.debug.ui.viewmodel.SteppingController; -import org.eclipse.cdt.dsf.debug.ui.viewmodel.launch.DefaultDsfModelSelectionPolicyFactory; import org.eclipse.cdt.dsf.service.DsfSession; -import org.eclipse.cdt.examples.dsf.pda.PDAPlugin; import org.eclipse.cdt.examples.dsf.pda.launch.PDALaunch; -import org.eclipse.cdt.examples.dsf.pda.ui.actions.PDATerminateCommand; -import org.eclipse.cdt.examples.dsf.pda.ui.viewmodel.PDAVMAdapter; import org.eclipse.core.runtime.IAdapterFactory; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchesListener2; -import org.eclipse.debug.core.commands.IResumeHandler; -import org.eclipse.debug.core.commands.IStepIntoHandler; -import org.eclipse.debug.core.commands.IStepOverHandler; -import org.eclipse.debug.core.commands.IStepReturnHandler; -import org.eclipse.debug.core.commands.ISuspendHandler; -import org.eclipse.debug.core.commands.ITerminateHandler; -import org.eclipse.debug.core.model.IDebugModelProvider; -import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector; import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory; -import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelSelectionPolicyFactory; -import org.eclipse.debug.ui.sourcelookup.ISourceDisplay; +import org.eclipse.debug.ui.contexts.ISuspendTrigger; /** * The adapter factory is the central point of control of view model and other @@ -61,146 +32,8 @@ import org.eclipse.debug.ui.sourcelookup.ISourceDisplay; */ @ThreadSafe @SuppressWarnings({"restriction"}) -public class PDAAdapterFactory implements IAdapterFactory, ILaunchesListener2 +public class PDAAdapterFactory implements IAdapterFactory { - /** - * Contains the set of adapters that are created for each launch instance. - */ - @Immutable - private static class LaunchAdapterSet { - // View Model adapter - final PDAVMAdapter fViewModelAdapter; - - // Source lookup and positioning adapter - final DsfSourceDisplayAdapter fSourceDisplayAdapter; - - // Command adapters - final DsfStepIntoCommand fStepIntoCommand; - final DsfStepOverCommand fStepOverCommand; - final DsfStepReturnCommand fStepReturnCommand; - final DsfSuspendCommand fSuspendCommand; - final DsfResumeCommand fResumeCommand; - final PDATerminateCommand fTerminateCommand; - - // Adapters for integration with other UI actions - final IDebugModelProvider fDebugModelProvider; - final PDALaunch fLaunch; - - final SteppingController fSteppingController; - - private IModelSelectionPolicyFactory fModelSelectionPolicyFactory; - - LaunchAdapterSet(PDALaunch launch) { - // Initialize launch and session. - fLaunch = launch; - DsfSession session = launch.getSession(); - - // register stepping controller - fSteppingController = new SteppingController(session); - session.registerModelAdapter(SteppingController.class, fSteppingController); - - // Initialize VM - fViewModelAdapter = new PDAVMAdapter(session, fSteppingController); - - // Initialize source lookup - fSourceDisplayAdapter = new DsfSourceDisplayAdapter(session, (ISourceLookupDirector)launch.getSourceLocator(), fSteppingController); - session.registerModelAdapter(ISourceDisplay.class, fSourceDisplayAdapter); - - // Default selection policy - fModelSelectionPolicyFactory = new DefaultDsfModelSelectionPolicyFactory(); - session.registerModelAdapter(IModelSelectionPolicyFactory.class, fModelSelectionPolicyFactory); - - // Initialize retargetable command handler. - fStepIntoCommand = new DsfStepIntoCommand(session, null); - fStepOverCommand = new DsfStepOverCommand(session, null); - fStepReturnCommand = new DsfStepReturnCommand(session); - fSuspendCommand = new DsfSuspendCommand(session); - fResumeCommand = new DsfResumeCommand(session); - fTerminateCommand = new PDATerminateCommand(session); - session.registerModelAdapter(IStepIntoHandler.class, fStepIntoCommand); - session.registerModelAdapter(IStepOverHandler.class, fStepOverCommand); - session.registerModelAdapter(IStepReturnHandler.class, fStepReturnCommand); - session.registerModelAdapter(ISuspendHandler.class, fSuspendCommand); - session.registerModelAdapter(IResumeHandler.class, fResumeCommand); - session.registerModelAdapter(ITerminateHandler.class, fTerminateCommand); - - // Initialize debug model provider - fDebugModelProvider = new IDebugModelProvider() { - public String[] getModelIdentifiers() { - return new String[] { PDAPlugin.ID_PDA_DEBUG_MODEL }; - } - }; - session.registerModelAdapter(IDebugModelProvider.class, fDebugModelProvider); - - // Register the launch as an adapter This ensures that the launch, - // and debug model ID will be associated with all DMContexts from this - // session. - session.registerModelAdapter(ILaunch.class, fLaunch); - } - - void dispose() { - DsfSession session = fLaunch.getSession(); - - fViewModelAdapter.dispose(); - - session.unregisterModelAdapter(ISourceDisplay.class); - if (fSourceDisplayAdapter != null) fSourceDisplayAdapter.dispose(); - - session.unregisterModelAdapter(SteppingController.class); - fSteppingController.dispose(); - - session.unregisterModelAdapter(IModelSelectionPolicyFactory.class); - - session.unregisterModelAdapter(IStepIntoHandler.class); - session.unregisterModelAdapter(IStepOverHandler.class); - session.unregisterModelAdapter(IStepReturnHandler.class); - session.unregisterModelAdapter(ISuspendHandler.class); - session.unregisterModelAdapter(IResumeHandler.class); - session.unregisterModelAdapter(ITerminateHandler.class); - fStepIntoCommand.dispose(); - fStepOverCommand.dispose(); - fStepReturnCommand.dispose(); - fSuspendCommand.dispose(); - fResumeCommand.dispose(); - fTerminateCommand.dispose(); - } - } - - /** - * Active adapter sets. They are accessed using the launch instance - * which owns the debug services session. - */ - private static Map fgLaunchAdapterSets = - Collections.synchronizedMap(new HashMap()); - - /** - * Map of launches for which adapter sets have already been disposed. - * This map (used as a set) is maintained in order to avoid re-creating an - * adapter set after the launch was removed from the launch manager, but - * while the launch is still being held by other classes which may - * request its adapters. A weak map is used to avoid leaking - * memory once the launches are no longer referenced. - *

- * Access to this map is synchronized using the fgLaunchAdapterSets - * instance. - *

- */ - private static Map fgDisposedLaunchAdapterSets = - new WeakHashMap(); - - static void disposeAdapterSet(ILaunch launch) { - synchronized(fgLaunchAdapterSets) { - if ( fgLaunchAdapterSets.containsKey(launch) ) { - fgLaunchAdapterSets.remove(launch).dispose(); - fgDisposedLaunchAdapterSets.put(launch, null); - } - } - } - - public PDAAdapterFactory() { - DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this); - } - // This IAdapterFactory method returns adapters for the PDA launch object only. @SuppressWarnings("unchecked") // IAdapterFactory is Java 1.3 public Object getAdapter(Object adaptableObject, Class adapterType) { @@ -215,26 +48,12 @@ public class PDAAdapterFactory implements IAdapterFactory, ILaunchesListener2 DsfSession session = launch.getSession(); if (session == null) return null; - // Find the correct set of adapters based on the launch. If not found - // it means that we have a new launch, and we have to create a - // new set of adapters. - LaunchAdapterSet adapterSet; - synchronized(fgLaunchAdapterSets) { - // The adapter set for the given launch was already disposed. - // Return a null adapter. - if (fgDisposedLaunchAdapterSets.containsKey(launch)) { - return null; - } - adapterSet = fgLaunchAdapterSets.get(launch); - if (adapterSet == null) { - adapterSet = new LaunchAdapterSet(launch); - fgLaunchAdapterSets.put(launch, adapterSet); - } - } + SessionAdapterSet adapterSet = PDAUIPlugin.getDefault().getAdapterSet(launch); // Returns the adapter type for the launch object. if (adapterType.equals(IElementContentProvider.class)) return adapterSet.fViewModelAdapter; else if (adapterType.equals(IModelProxyFactory.class)) return adapterSet.fViewModelAdapter; + else if (adapterType.equals(ISuspendTrigger.class)) return adapterSet.fSuspendTrigger; else return null; } @@ -243,24 +62,4 @@ public class PDAAdapterFactory implements IAdapterFactory, ILaunchesListener2 return new Class[] { IElementContentProvider.class, IModelProxyFactory.class, IColumnPresentationFactory.class }; } - public void launchesRemoved(ILaunch[] launches) { - // Dispose the set of adapters for a launch only after the launch is - // removed from the view. If the launch is terminated, the adapters - // are still needed to populate the contents of the view. - for (ILaunch launch : launches) { - if (launch instanceof PDALaunch) { - disposeAdapterSet(launch); - } - } - } - - public void launchesTerminated(ILaunch[] launches) { - } - - public void launchesAdded(ILaunch[] launches) { - } - - public void launchesChanged(ILaunch[] launches) { - } - } -- cgit v1.2.3