blob: e01b8742c4b6463eb18f1e476a79866deebaf955 [file] [log] [blame]
/*
* Copyright 2000-2013 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.ui;
import com.intellij.debugger.DebuggerManagerEx;
import com.intellij.debugger.actions.*;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.ui.breakpoints.Breakpoint;
import com.intellij.ide.DataManager;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.markup.GutterIconRenderer;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.xdebugger.AbstractDebuggerSession;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroupingRule;
import com.intellij.xdebugger.impl.DebuggerSupport;
import com.intellij.xdebugger.impl.actions.DebuggerActionHandler;
import com.intellij.xdebugger.impl.actions.DebuggerToggleActionHandler;
import com.intellij.xdebugger.impl.actions.EditBreakpointActionHandler;
import com.intellij.xdebugger.impl.actions.MarkObjectActionHandler;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointItem;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
import com.intellij.xdebugger.impl.evaluate.quick.common.QuickEvaluateHandler;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.util.Collection;
/**
* @author nik
*/
public class JavaDebuggerSupport extends DebuggerSupport {
private final JavaBreakpointPanelProvider myBreakpointPanelProvider = new JavaBreakpointPanelProvider();
private final StepOverActionHandler myStepOverActionHandler = new StepOverActionHandler();
private final StepIntoActionHandler myStepIntoActionHandler = new StepIntoActionHandler();
private final StepOutActionHandler myStepOutActionHandler = new StepOutActionHandler();
private final ForceStepOverActionHandler myForceStepOverActionHandler = new ForceStepOverActionHandler();
private final ForceStepIntoActionHandler myForceStepIntoActionHandler = new ForceStepIntoActionHandler();
private final RunToCursorActionHandler myRunToCursorActionHandler = new RunToCursorActionHandler();
private final ForceRunToCursorActionHandler myForceRunToCursorActionHandler = new ForceRunToCursorActionHandler();
private final ResumeActionHandler myResumeActionHandler = new ResumeActionHandler();
private final PauseActionHandler myPauseActionHandler = new PauseActionHandler();
private final ShowExecutionPointActionHandler myShowExecutionPointActionHandler = new ShowExecutionPointActionHandler();
//private final EvaluateActionHandler myEvaluateActionHandler = new EvaluateActionHandler();
//private final QuickEvaluateActionHandler myQuickEvaluateHandler = new QuickEvaluateActionHandler();
private final DebuggerActionHandler mySmartStepIntoHandler = new JvmSmartStepIntoActionHandler();
private final DebuggerActionHandler myAddToWatchedActionHandler = new AddToWatchActionHandler();
private final JavaMarkObjectActionHandler myMarkObjectActionHandler = new JavaMarkObjectActionHandler();
@Override
@NotNull
public BreakpointPanelProvider<?> getBreakpointPanelProvider() {
return myBreakpointPanelProvider;
}
@Override
@NotNull
public DebuggerActionHandler getStepOverHandler() {
return myStepOverActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getStepIntoHandler() {
return myStepIntoActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getSmartStepIntoHandler() {
return mySmartStepIntoHandler;
}
@Override
@NotNull
public DebuggerActionHandler getStepOutHandler() {
return myStepOutActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getForceStepOverHandler() {
return myForceStepOverActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getForceStepIntoHandler() {
return myForceStepIntoActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getRunToCursorHandler() {
return DISABLED;
}
@Override
@NotNull
public DebuggerActionHandler getForceRunToCursorHandler() {
return DISABLED;
}
@Override
@NotNull
public DebuggerActionHandler getResumeActionHandler() {
return myResumeActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getPauseHandler() {
return myPauseActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getToggleLineBreakpointHandler() {
return DISABLED;
}
@NotNull
@Override
public DebuggerActionHandler getToggleTemporaryLineBreakpointHandler() {
return DISABLED;
}
@Override
@NotNull
public DebuggerActionHandler getShowExecutionPointHandler() {
return myShowExecutionPointActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getEvaluateHandler() {
return DISABLED;
}
@NotNull
@Override
public DebuggerActionHandler getAddToWatchesActionHandler() {
return DISABLED;
}
private static final DebuggerToggleActionHandler DISABLED_TOGGLE_HANDLER = new DebuggerToggleActionHandler() {
@Override
public boolean isEnabled(@NotNull Project project, AnActionEvent event) {
return false;
}
@Override
public boolean isSelected(@NotNull Project project, AnActionEvent event) {
return false;
}
@Override
public void setSelected(@NotNull Project project, AnActionEvent event, boolean state) {
}
};
@Override
@NotNull
public DebuggerToggleActionHandler getMuteBreakpointsHandler() {
return DISABLED_TOGGLE_HANDLER;
}
@NotNull
@Override
public MarkObjectActionHandler getMarkObjectHandler() {
return myMarkObjectActionHandler;
}
@Override
public AbstractDebuggerSession getCurrentSession(@NotNull Project project) {
final DebuggerContextImpl context = (DebuggerManagerEx.getInstanceEx(project)).getContext();
return context != null ? context.getDebuggerSession() : null;
}
@NotNull
@Override
public EditBreakpointActionHandler getEditBreakpointAction() {
return X_EDIT;
}
private static class JavaBreakpointPanelProvider extends BreakpointPanelProvider<Breakpoint> {
//private final List<MyBreakpointManagerListener> myListeners = ContainerUtil.createLockFreeCopyOnWriteList();
@Override
public void createBreakpointsGroupingRules(Collection<XBreakpointGroupingRule> rules) {
//rules.add(new XBreakpointGroupingByCategoryRule());
rules.add(new XBreakpointGroupingByPackageRule());
rules.add(new XBreakpointGroupingByClassRule());
}
@Override
public void addListener(final BreakpointsListener listener, Project project, Disposable disposable) {
//BreakpointManager breakpointManager = DebuggerManagerEx.getInstanceEx(project).getBreakpointManager();
//final MyBreakpointManagerListener listener1 = new MyBreakpointManagerListener(listener, breakpointManager);
//breakpointManager.addBreakpointManagerListener(listener1);
//myListeners.add(listener1);
//Disposer.register(disposable, new Disposable() {
// @Override
// public void dispose() {
// removeListener(listener);
// }
//});
}
@Override
protected void removeListener(BreakpointsListener listener) {
//for (MyBreakpointManagerListener managerListener : myListeners) {
// if (managerListener.myListener == listener) {
// BreakpointManager manager = managerListener.myBreakpointManager;
// manager.removeBreakpointManagerListener(managerListener);
// myListeners.remove(managerListener);
// break;
// }
//}
}
@Override
public int getPriority() {
return 100;
}
@Override
public Breakpoint findBreakpoint(@NotNull final Project project, @NotNull final Document document, final int offset) {
return null;
//return DebuggerManagerEx.getInstanceEx(project).getBreakpointManager().findBreakpoint(document, offset, null);
}
@Override
public GutterIconRenderer getBreakpointGutterIconRenderer(Object breakpoint) {
//if (breakpoint instanceof BreakpointWithHighlighter) {
// final RangeHighlighter highlighter = ((BreakpointWithHighlighter)breakpoint).getHighlighter();
// if (highlighter != null) {
// return (GutterIconRenderer)highlighter.getGutterIconRenderer();
// }
//}
return null;
}
@Override
public void onDialogClosed(final Project project) {
//DebuggerManagerEx.getInstanceEx(project).getBreakpointManager().updateAllRequests();
}
@Override
public void provideBreakpointItems(Project project, Collection<BreakpointItem> items) {
//for (BreakpointFactory breakpointFactory : BreakpointFactory.getBreakpointFactories()) {
// Key<? extends Breakpoint> category = breakpointFactory.getBreakpointCategory();
// Breakpoint[] breakpoints = DebuggerManagerEx.getInstanceEx(project).getBreakpointManager().getBreakpoints(category);
// for (Breakpoint breakpoint : breakpoints) {
// items.add(breakpointFactory.createBreakpointItem(breakpoint));
// }
//}
}
//private static class AddJavaBreakpointAction extends AnAction {
// private BreakpointFactory myBreakpointFactory;
//
// public AddJavaBreakpointAction(BreakpointFactory breakpointFactory) {
// myBreakpointFactory = breakpointFactory;
// Presentation p = getTemplatePresentation();
// p.setIcon(myBreakpointFactory.getIcon());
// p.setText(breakpointFactory.getDisplayName());
// }
//
// @Override
// public void update(AnActionEvent e) {
// e.getPresentation().setVisible(myBreakpointFactory.canAddBreakpoints());
// }
//
// @Override
// public void actionPerformed(AnActionEvent e) {
// myBreakpointFactory.addBreakpoint(getEventProject(e));
// }
//}
//private static class MyBreakpointManagerListener implements BreakpointManagerListener {
//
// private final BreakpointsListener myListener;
// public BreakpointManager myBreakpointManager;
//
//
// public MyBreakpointManagerListener(BreakpointsListener listener, BreakpointManager breakpointManager) {
// myListener = listener;
// myBreakpointManager = breakpointManager;
// }
//
// @Override
// public void breakpointsChanged() {
// myListener.breakpointsChanged();
// }
//}
}
public static Project getContextProjectForEditorFieldsInDebuggerConfigurables() {
//todo[nik] improve
Project project = CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext());
if (project != null) {
return project;
}
return ProjectManager.getInstance().getDefaultProject();
}
private static final DebuggerActionHandler DISABLED = new DebuggerActionHandler() {
@Override
public void perform(@NotNull Project project, AnActionEvent event) {
}
@Override
public boolean isEnabled(@NotNull Project project, AnActionEvent event) {
return false;
}
};
private static final EditBreakpointActionHandler X_EDIT = new EditBreakpointActionHandler() {
@Override
protected void doShowPopup(Project project, JComponent component, Point whereToShow, Object breakpoint) {
DebuggerUIUtil.showXBreakpointEditorBalloon(project, whereToShow, component, false, (XBreakpoint)breakpoint);
}
@Override
public boolean isEnabled(@NotNull Project project, AnActionEvent event) {
return false;
}
};
}