// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.debug.core.model;
import org.chromium.debug.core.ChromiumDebugPlugin;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.Breakpoint;
import org.eclipse.debug.core.model.IBreakpoint;
/**
* JavaScript exception breakpoint. It always stops for uncaught breakpoints,
* and optionally stops on caught breakpoints (see 'include caught' property).
*/
public class ChromiumExceptionBreakpoint extends Breakpoint {
/** Include caught */
private static final String INCLUDE_CAUGHT_ATTR =
ChromiumDebugPlugin.PLUGIN_ID + ".includeCaught"; //$NON-NLS-1$
public ChromiumExceptionBreakpoint() {
}
public ChromiumExceptionBreakpoint(final IResource resource,
final boolean includingCaught, final String modelId) throws DebugException {
IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
public void run(IProgressMonitor monitor) throws CoreException {
IMarker marker = resource.createMarker(ChromiumDebugPlugin.EXCEPTION_BP_MARKER);
setMarker(marker);
marker.setAttribute(IBreakpoint.ENABLED, Boolean.TRUE);
marker.setAttribute(IBreakpoint.ID, modelId);
marker.setAttribute(IMarker.MESSAGE,
Messages.ChromiumExceptionBreakpoint_MessageMarkerFormat);
}
};
run(getMarkerRule(resource), runnable);
}
public void setIncludeCaught(boolean value) throws CoreException {
try {
setAttribute(INCLUDE_CAUGHT_ATTR, value);
} catch (CoreException e) {
ChromiumDebugPlugin.log(e);
}
}
public boolean getIncludeCaught() {
return getMarker().getAttribute(INCLUDE_CAUGHT_ATTR, false);
}
@Override
public String getModelIdentifier() {
return getMarker().getAttribute(IBreakpoint.ID, ""); //$NON-NLS-1$
}
public static ChromiumExceptionBreakpoint tryCastBreakpoint(IBreakpoint breakpoint) {
if (breakpoint instanceof ChromiumExceptionBreakpoint == false) {
return null;
}
return (ChromiumExceptionBreakpoint) breakpoint;
}
}