package qq.builder;
|
|
import java.lang.reflect.InvocationTargetException;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
import org.eclipse.debug.core.ILaunchConfigurationType;
|
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
|
import org.eclipse.debug.core.ILaunchManager;
|
import org.eclipse.jdt.core.IJavaElement;
|
import org.eclipse.jdt.core.IMember;
|
import org.eclipse.jdt.core.IMethod;
|
import org.eclipse.jdt.core.IType;
|
import org.eclipse.jdt.core.JavaModelException;
|
import org.eclipse.jdt.core.search.IJavaSearchScope;
|
import org.eclipse.jdt.core.search.SearchEngine;
|
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
|
import org.eclipse.jdt.internal.debug.ui.launcher.LauncherMessages;
|
import org.eclipse.jdt.internal.debug.ui.launcher.MainMethodSearchEngine;
|
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
|
import org.eclipse.jface.dialogs.MessageDialog;
|
import org.eclipse.jface.operation.IRunnableContext;
|
|
public class JavaApplicationLaunchClientShortcut extends
|
JavaClientLaunchShortcut {
|
protected IJavaElement[] getJavaElements(Object[] objects) {
|
List list = new ArrayList(objects.length);
|
for (int i = 0; i < objects.length; ++i) {
|
Object object = objects[i];
|
if (object instanceof IAdaptable) {
|
IJavaElement element = (IJavaElement) ((IAdaptable) object)
|
.getAdapter(IJavaElement.class);
|
if (element != null) {
|
if (element instanceof IMember) {
|
IJavaElement type = ((IMember) element)
|
.getDeclaringType();
|
if (type != null) {
|
element = type;
|
}
|
}
|
list.add(element);
|
}
|
}
|
}
|
return ((IJavaElement[]) list.toArray(new IJavaElement[list.size()]));
|
}
|
|
protected ILaunchConfiguration createConfiguration(IType type) {
|
ILaunchConfiguration config = null;
|
ILaunchConfigurationWorkingCopy wc = null;
|
try {
|
ILaunchConfigurationType configType = getConfigurationType();
|
wc = configType.newInstance(null, getLaunchManager()
|
.generateLaunchConfigurationName("LogonApplication"));
|
wc.setAttribute(
|
IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME,
|
"com.vci.rmip.logon.client.LogonApplication");
|
wc.setAttribute(
|
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME,
|
getJavaProject());
|
wc.setMappedResources(new IResource[] { null });
|
config = wc.doSave();
|
} catch (CoreException exception) {
|
MessageDialog.openError(JDIDebugUIPlugin.getActiveWorkbenchShell(),
|
LauncherMessages.JavaLaunchShortcut_3, exception
|
.getStatus().getMessage());
|
}
|
return config;
|
}
|
|
protected ILaunchConfigurationType getConfigurationType() {
|
return getLaunchManager().getLaunchConfigurationType(
|
IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
|
}
|
|
private ILaunchManager getLaunchManager() {
|
return DebugPlugin.getDefault().getLaunchManager();
|
}
|
|
protected IType[] findTypes(Object[] elements, IRunnableContext context)
|
throws InterruptedException, CoreException {
|
try {
|
if (elements.length == 1) {
|
IType type = isMainMethod(elements[0]);
|
if (type != null) {
|
return new IType[] { type };
|
}
|
}
|
IJavaElement[] javaElements = getJavaElements(elements);
|
MainMethodSearchEngine engine = new MainMethodSearchEngine();
|
int constraints = 1;
|
constraints |= 2;
|
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(
|
javaElements, constraints);
|
return engine.searchMainMethods(context, scope, true);
|
} catch (InvocationTargetException e) {
|
throw ((CoreException) e.getTargetException());
|
}
|
}
|
|
private IType isMainMethod(Object o) {
|
if (o instanceof IAdaptable) {
|
IAdaptable adapt = (IAdaptable) o;
|
IJavaElement element = (IJavaElement) adapt
|
.getAdapter(IJavaElement.class);
|
if ((element != null) && (element.getElementType() == 9))
|
try {
|
IMethod method = (IMethod) element;
|
if (!(method.isMainMethod())) {
|
return method.getDeclaringType();
|
|
}
|
} catch (JavaModelException jme) {
|
JDIDebugUIPlugin.log(jme);
|
}
|
}
|
return null;
|
}
|
|
protected String getTypeSelectionTitle() {
|
return LauncherMessages.JavaApplicationLaunchShortcut_0;
|
}
|
|
protected String getEditorEmptyMessage() {
|
return LauncherMessages.JavaApplicationLaunchShortcut_1;
|
}
|
|
protected String getSelectionEmptyMessage() {
|
return LauncherMessages.JavaApplicationLaunchShortcut_2;
|
}
|
}
|