// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.debug.core.model; import org.chromium.debug.core.model.JavascriptThread.SuspendedState; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IDebugElement; /** * A generic IDebugElement implementation. It holds a familiy of more specialized * base classes. */ public abstract class DebugElementImpl extends PlatformObject implements IDebugElement { public abstract DebugTargetImpl getDebugTarget(); public ILaunch getLaunch() { return getDebugTarget().getLaunch(); } public String getModelIdentifier() { return getDebugTarget().getChromiumModelIdentifier(); } @Override public Object getAdapter(Class adapter) { if (adapter == IDebugElement.class) { return this; } return super.getAdapter(adapter); } /** * An abstract base class for debug element that refers to {@link ConnectedTargetData}. * It declares no data field. */ public static abstract class WithConnectedBase extends DebugElementImpl { @Override public DebugTargetImpl getDebugTarget() { return getConnectedData().getDebugTarget(); } public abstract ConnectedTargetData getConnectedData(); } /** * A base class for debug element that refers to {@link ConnectedTargetData}. */ public static class WithConnected extends WithConnectedBase { private final ConnectedTargetData connectedTargetData; public WithConnected(ConnectedTargetData connectedTargetData) { this.connectedTargetData = connectedTargetData; } @Override public ConnectedTargetData getConnectedData() { return connectedTargetData; } } /** * An abstract base class for debug element that refers to * {@link JavascriptThread.SuspendedState}. It declares no data field. */ public static abstract class WithSuspendedBase extends WithConnectedBase { public ConnectedTargetData getConnectedData() { return getSuspendedState().getThread().getConnectedData(); } public abstract JavascriptThread.SuspendedState getSuspendedState(); } /** * A base class for debug element that refers to {@link JavascriptThread.SuspendedState}. */ public static class WithSuspended extends WithSuspendedBase { private final JavascriptThread.SuspendedState suspendedState; public WithSuspended(JavascriptThread.SuspendedState suspendedState) { this.suspendedState = suspendedState; } @Override public SuspendedState getSuspendedState() { return suspendedState; } } /** * An abstract base class for debug element that refers to {@link EvaluateContext}. * It declares no data field. */ public static abstract class WithEvaluateBase extends WithSuspendedBase { @Override public SuspendedState getSuspendedState() { return getEvaluateContext().getThreadSuspendedState(); } public abstract EvaluateContext getEvaluateContext(); } /** * A base class for debug element that refers to {@link EvaluateContext}. */ public static class WithEvaluate extends WithEvaluateBase { private final EvaluateContext evaluateContext; public WithEvaluate(EvaluateContext evaluateContext) { this.evaluateContext = evaluateContext; } @Override public EvaluateContext getEvaluateContext() { return evaluateContext; } } }