blob: 75897417bd2e4e563a73d13125354e2f4140584f [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.debugger.engine;
import com.intellij.debugger.engine.events.DebuggerCommandImpl;
import com.intellij.debugger.ui.breakpoints.*;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.xdebugger.breakpoints.XBreakpointHandler;
import com.intellij.xdebugger.breakpoints.XBreakpointType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author egor
*/
public class JavaBreakpointHandler extends XBreakpointHandler {
protected final DebugProcessImpl myProcess;
public JavaBreakpointHandler(@NotNull Class<? extends XBreakpointType<?, ?>> breakpointTypeClass, DebugProcessImpl process) {
super(breakpointTypeClass);
myProcess = process;
}
@Nullable
protected Breakpoint createJavaBreakpoint(@NotNull XBreakpoint xBreakpoint) {
return null;
}
@Override
public void registerBreakpoint(@NotNull XBreakpoint breakpoint) {
Breakpoint javaBreakpoint = BreakpointManager.getJavaBreakpoint(breakpoint);
if (javaBreakpoint == null) {
javaBreakpoint = createJavaBreakpoint(breakpoint);
breakpoint.putUserData(Breakpoint.DATA_KEY, javaBreakpoint);
}
if (javaBreakpoint != null) {
final Breakpoint bpt = javaBreakpoint;
BreakpointManager.addBreakpoint(bpt);
// use schedule not to block initBreakpoints
myProcess.getManagerThread().schedule(new DebuggerCommandImpl() {
@Override
protected void action() throws Exception {
bpt.createRequest(myProcess);
}
@Override
public Priority getPriority() {
return Priority.HIGH;
}
});
}
}
@Override
public void unregisterBreakpoint(@NotNull final XBreakpoint breakpoint, boolean temporary) {
final Breakpoint javaBreakpoint = BreakpointManager.getJavaBreakpoint(breakpoint);
if (javaBreakpoint != null) {
// use schedule not to block initBreakpoints
myProcess.getManagerThread().schedule(new DebuggerCommandImpl() {
@Override
protected void action() throws Exception {
javaBreakpoint.delete();
}
@Override
public Priority getPriority() {
return Priority.HIGH;
}
});
}
}
public static class JavaLineBreakpointHandler extends JavaBreakpointHandler {
public JavaLineBreakpointHandler(DebugProcessImpl process) {
super(JavaLineBreakpointType.class, process);
}
}
public static class JavaExceptionBreakpointHandler extends JavaBreakpointHandler {
public JavaExceptionBreakpointHandler(DebugProcessImpl process) {
super(JavaExceptionBreakpointType.class, process);
}
}
public static class JavaMethodBreakpointHandler extends JavaBreakpointHandler {
public JavaMethodBreakpointHandler(DebugProcessImpl process) {
super(JavaMethodBreakpointType.class, process);
}
}
public static class JavaWildcardBreakpointHandler extends JavaBreakpointHandler {
public JavaWildcardBreakpointHandler(DebugProcessImpl process) {
super(JavaWildcardMethodBreakpointType.class, process);
}
}
public static class JavaFieldBreakpointHandler extends JavaBreakpointHandler {
public JavaFieldBreakpointHandler(DebugProcessImpl process) {
super(JavaFieldBreakpointType.class, process);
}
}
}