code: @Override
  	public Object execute(ExecutionEvent event) throws ExecutionException {
  		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
  		
  		for (Iterator<?> iterator = selection.iterator(); iterator.hasNext(); ) {
  			Object object = iterator.next();
  			IProject project;
  			
  			if (object instanceof IProject) {
  				project = (IProject) object;
  			} else if (object instanceof IJavaProject) {
  				project = ((IJavaProject) object).getProject();
  			} else {
  				continue;
  			}
  			
  			try {
  				ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
  				ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
  				ILaunchConfigurationWorkingCopy configuration = type.newInstance(null, "Gig Shell");
  				configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_DEFAULT_CLASSPATH, true);
  				configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_ALLOW_TERMINATE, true);
  				configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, project.getName());
  				configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, Main.class.getName());
  				configuration.setAttribute(IJavaLaunchConfigurationConstants.ATTR_VM_ARGUMENTS, "-Djline.terminal=none");
  				configuration.launch(ILaunchManager.RUN_MODE, new NullProgressMonitor());
  			} catch (CoreException e) {
  				IStatus status = new Status(IStatus.ERROR,
  						GigUIPlugin.PLUGIN_ID, e.getMessage(), e);
  				ErrorDialog.openError(HandlerUtil.getActiveShell(event), 
  						"Gig", "Failed to start shell in " 
  								+ project.getName() + " project", status);
  			}
  			
  			return null;
  		}
  		
  		return null;
  	}
docs: /* (non-Javadoc)
  @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)