package org.eclipse.emf.mwe2.launch.shortcut; import org.apache.log4j.Logger; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IDebugEventSetListener; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.RefreshUtil; import org.eclipse.debug.core.model.IProcess; import org.eclipse.jdt.launching.JavaLaunchDelegate; public class Mwe2LaunchDelegate extends JavaLaunchDelegate { private static final Logger logger = Logger.getLogger(Mwe2LaunchDelegate.class); private static final String ATTR_REFRESH_SCOPE = DebugPlugin.getUniqueIdentifier() + ".ATTR_REFRESH_SCOPE"; //$NON-NLS-1$ @Override public void launch(final ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { if (configuration.getAttribute(ATTR_REFRESH_SCOPE, (String) null) != null) { DebugPlugin.getDefault().addDebugEventListener(new IDebugEventSetListener() { public void handleDebugEvents(DebugEvent[] events) { for (int i = 0; i < events.length; i++) { DebugEvent event = events[i]; if (event.getSource() instanceof IProcess && event.getKind() == DebugEvent.TERMINATE) { IProcess process = (IProcess) event.getSource(); if (configuration == process.getLaunch().getLaunchConfiguration()) { DebugPlugin.getDefault().removeDebugEventListener(this); Job job = new Job(Messages.Mwe2LaunchDelegate_0) { public IStatus run(IProgressMonitor monitor) { try { RefreshUtil.refreshResources(configuration, monitor); } catch (CoreException e) { logger.error(e.getMessage(), e); return Status.OK_STATUS; } return Status.OK_STATUS; } }; job.schedule(); return; } } } } }); } super.launch(configuration, mode, launch, monitor); } }