package org.erlide.backend.debug; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IMarkerDelta; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.IBreakpointsListener; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchesListener; import org.eclipse.debug.core.model.IBreakpoint; import org.erlide.util.ErlLogger; public class ErlangDebugOptionsManager implements ILaunchesListener, IBreakpointsListener { public ErlangDebugOptionsManager() { } public void start() { // lazy initialization will occur on the first launch final DebugPlugin debugPlugin = DebugPlugin.getDefault(); debugPlugin.getLaunchManager().addLaunchListener(this); debugPlugin.getBreakpointManager().addBreakpointListener(this); // EvaluationContextManager.startup(); } public void shutdown() { final DebugPlugin debugPlugin = DebugPlugin.getDefault(); debugPlugin.getLaunchManager().removeLaunchListener(this); debugPlugin.getBreakpointManager().removeBreakpointListener(this); } @Override public void launchesRemoved(final ILaunch[] launches) { } @Override public void launchesAdded(final ILaunch[] launches) { } @Override public void launchesChanged(final ILaunch[] launches) { } /** * Updates message attributes on the given erlang breakpoints. */ private void updateBreakpointsMessages(final IBreakpoint[] breakpoints) { final IWorkspaceRunnable runnable = new IWorkspaceRunnable() { @Override public void run(final IProgressMonitor monitor) throws CoreException { for (final IBreakpoint breakpoint : breakpoints) { if (breakpoint instanceof IErlangBreakpoint) { final IErlangBreakpoint erlangBreakpoint = (IErlangBreakpoint) breakpoint; final String message = erlangBreakpoint.getMessage(); breakpoint.getMarker().setAttribute(IMarker.MESSAGE, message); } } } }; try { ResourcesPlugin.getWorkspace().run(runnable, null, 0, null); } catch (final CoreException e) { ErlLogger.error(e); } } @Override public void breakpointsAdded(final IBreakpoint[] breakpoints) { updateBreakpointsMessages(breakpoints); } @Override public void breakpointsRemoved(final IBreakpoint[] breakpoints, final IMarkerDelta[] deltas) { } @Override public void breakpointsChanged(final IBreakpoint[] breakpoints, final IMarkerDelta[] deltas) { updateBreakpointsMessages(breakpoints); } }