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.core.CompilationUnit; 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; @SuppressWarnings("restriction") public class JavaApplicationLaunchServerShortcut extends JavaServerLaunchShortcut { 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( "ServerManageStart")); wc.setAttribute( IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "com.vci.rmip.framework.server.servermanagement.ServerManageStart"); 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; } }