package junit.extensions.eclipse.quick.internal.action;
import junit.extensions.eclipse.quick.JavaElements;
import junit.extensions.eclipse.quick.internal.Messages;
import junit.extensions.eclipse.quick.internal.QuickJUnitPlugin;
import org.eclipse.debug.ui.ILaunchShortcut;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
public class JUnitLaunchAction extends QuickJUnitAction {
private String mode;
private ILaunchShortcut launchShortcut;
public JUnitLaunchAction(ILaunchShortcut launchShortcut, String mode) {
this.launchShortcut = launchShortcut;
this.mode = mode;
}
private IJavaElement getTargetElement(IAction action) throws JavaModelException {
IJavaElement element = getSelectedElement();
if (element == null || element.getElementType() < IJavaElement.COMPILATION_UNIT)
return element;
IJavaElement testableElement = JavaElements.getTestMethodOrClass(element);
if (testableElement != null)
return testableElement;
IType type = JavaElements.getPrimaryTypeOf(element);
if (type == null)
return element;
openInformation(action, Messages.getString("JUnitLaunchAction.notJUnitElement")); //$NON-NLS-1$
return null;
}
private IJavaElement getSelectedElement() throws JavaModelException {
IJavaElement element = getElementOfJavaEditor();
return element == null ? javaElement : element;
}
public void run(IAction action) {
try {
IJavaElement element = getTargetElement(action);
if (element == null)
return;
ISelection sel = new StructuredSelection(new Object[] { element });
launchShortcut.launch(sel, mode);
} catch (JavaModelException e) {
QuickJUnitPlugin.getDefault().handleSystemError(e, this);
}
}
}