blob: 272e91630927b81593aaa16afdc286b84656bc40 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.debug.ui.console;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.debug.core.IJavaExceptionBreakpoint;
import org.eclipse.jdt.debug.core.JDIDebugModel;
import org.eclipse.jdt.internal.debug.core.JavaDebugUtils;
import org.eclipse.jdt.internal.debug.ui.BreakpointUtils;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.actions.JavaBreakpointPropertiesAction;
import org.eclipse.jdt.internal.debug.ui.breakpoints.AddExceptionAction;
import org.eclipse.jdt.internal.debug.ui.propertypages.JavaBreakpointPage;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.console.TextConsole;
/**
* A hyperlink that creates an exception breakpoint.
*/
public class JavaExceptionHyperLink extends JavaStackTraceHyperlink {
private String fExceptionName = null;
/**
* Constructs a new hyper link
*
* @param console
* the console the link is contained in
* @param exceptionName
* fully qualified name of the exception
*/
public JavaExceptionHyperLink(TextConsole console, String exceptionName) {
super(console);
fExceptionName = exceptionName;
}
/**
* @see org.eclipse.debug.ui.console.IConsoleHyperlink#linkActivated()
*/
@Override
public void linkActivated() {
try {
// check for an existing breakpoint
IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints(JDIDebugModel.getPluginIdentifier());
for (int i = 0; i < breakpoints.length; i++) {
IBreakpoint breakpoint = breakpoints[i];
if (breakpoint instanceof IJavaExceptionBreakpoint) {
IJavaExceptionBreakpoint exceptionBreakpoint = (IJavaExceptionBreakpoint) breakpoint;
if (fExceptionName.equals(exceptionBreakpoint.getTypeName())) {
showProperties(exceptionBreakpoint);
return;
}
}
}
// create a new exception breakpoint
startSourceSearch(fExceptionName, -1);
} catch (CoreException e) {
JDIDebugUIPlugin.statusDialog(e.getStatus());
return;
}
}
/**
* Show the properties dialog for the given breakpoint.
*
* @param exceptionBreakpoint
*/
private void showProperties(IJavaExceptionBreakpoint breakpoint) {
JavaBreakpointPropertiesAction action = new JavaBreakpointPropertiesAction();
action.selectionChanged(null, new StructuredSelection(breakpoint));
action.run(null);
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.debug.ui.console.JavaStackTraceHyperlink#processSearchResult(java.lang.Object, java.lang.String, int)
*/
@Override
protected void processSearchResult(Object source, String typeName, int lineNumber) {
try {
source = JavaDebugUtils.getJavaElement(source);
IResource res = ResourcesPlugin.getWorkspace().getRoot();
IType type = null;
if (source instanceof ICompilationUnit) {
type = ((ICompilationUnit) source).findPrimaryType();
} else if (source instanceof IClassFile) {
type = ((IClassFile) source).getType();
} else if (source instanceof IType) {
type = (IType) source;
}
Map<String, Object> map = new HashMap<>();
if (type != null) {
res = BreakpointUtils.getBreakpointResource(type);
BreakpointUtils.addJavaBreakpointAttributes(map, type);
}
map.put(JavaBreakpointPage.ATTR_DELETE_ON_CANCEL, JavaBreakpointPage.ATTR_DELETE_ON_CANCEL);
IJavaExceptionBreakpoint breakpoint = JDIDebugModel.createExceptionBreakpoint(res, fExceptionName, true, true, AddExceptionAction.isChecked(type), false, map);
showProperties(breakpoint);
} catch (CoreException e) {
JDIDebugUIPlugin.statusDialog(e.getStatus());
}
}
}