blob: 7604000efb3f7e5f04adb036800aebf645f46535 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2015 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.ui.monitors;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.model.IDebugElement;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.ITerminate;
/**
* Object used to display owning thread in the debug launch view.
* In this case, the thread is waiting for the contended monitor,
* and owns the parent monitor.
*/
public class JavaOwningThread extends PlatformObject implements IDebugElement, ITerminate {
/**
* The thread object in the thread and monitor model.
*/
private JavaMonitorThread fThread;
/**
* The monitor this thread is waiting for.
*/
private JavaContendedMonitor fContendedMonitor;
/**
* The parent, in the debug view tree.
*/
private JavaContendedMonitor fParent;
/**
* Constructor
* @param thread
* @param parent
*/
public JavaOwningThread(JavaMonitorThread thread, JavaContendedMonitor parent) {
fThread= thread;
thread.addElement(this);
fParent= parent;
}
/** Returns the <code>JavaMonitorThread</code> of this owning thread
* @return the <code>JavaMonitorThread</code> of this owning thread
*/
public JavaMonitorThread getThread() {
return fThread;
}
/**
* Returns the parent contended
* @return
*/
public JavaContendedMonitor getParent() {
return fParent;
}
public JavaContendedMonitor getContendedMonitor() {
JavaMonitor contendedMonitor= fThread.getContendedMonitor0();
if (contendedMonitor == null) {
fContendedMonitor= null;
} else if (fContendedMonitor == null || fContendedMonitor.getMonitor() != contendedMonitor) {
// create a new object only if the monitor from the model changed
fContendedMonitor= new JavaContendedMonitor(contendedMonitor, this);
}
return fContendedMonitor;
}
public void update() {
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier()
*/
@Override
public String getModelIdentifier() {
return fThread.getModelIdentifier();
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IDebugElement#getDebugTarget()
*/
@Override
public IDebugTarget getDebugTarget() {
return fThread.getDebugTarget();
}
/* (non-Javadoc)
* @see org.eclipse.debug.core.model.IDebugElement#getLaunch()
*/
@Override
public ILaunch getLaunch() {
return fThread.getLaunch();
}
/**
* @see org.eclipse.debug.core.model.ISuspendResume#isSuspended()
*/
public boolean isSuspended() {
return fThread.isSuspended();
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
*/
@Override
@SuppressWarnings("unchecked")
public <T> T getAdapter(Class<T> adapter) {
if(adapter == IDebugTarget.class) {
return (T) getDebugTarget();
}
//CONTEXTLAUNCHING
if(adapter.equals(ILaunchConfiguration.class)) {
return (T) getLaunch().getLaunchConfiguration();
}
return super.getAdapter(adapter);
}
/**
* @see org.eclipse.debug.core.model.ITerminate#canTerminate()
*/
@Override
public boolean canTerminate() {
return getDebugTarget().canTerminate();
}
/**
* @see org.eclipse.debug.core.model.ITerminate#isTerminated()
*/
@Override
public boolean isTerminated() {
return getDebugTarget().isTerminated();
}
/**
* @see org.eclipse.debug.core.model.ITerminate#terminate()
*/
@Override
public void terminate() throws DebugException {
getDebugTarget().terminate();
}
}