blob: 7f8eda2a347f42e7cb0539992de9c7d31030137b [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.xdebugger.impl;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.project.Project;
import com.intellij.xdebugger.AbstractDebuggerSession;
import com.intellij.xdebugger.XDebugSession;
import com.intellij.xdebugger.XDebuggerManager;
import com.intellij.xdebugger.impl.actions.*;
import com.intellij.xdebugger.impl.actions.handlers.*;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointPanelProvider;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
import com.intellij.xdebugger.impl.evaluate.quick.XQuickEvaluateHandler;
import com.intellij.xdebugger.impl.evaluate.quick.common.QuickEvaluateHandler;
import org.jetbrains.annotations.NotNull;
/**
* @author nik
*/
public class XDebuggerSupport extends DebuggerSupport {
private final XBreakpointPanelProvider myBreakpointPanelProvider;
private final XToggleLineBreakpointActionHandler myToggleLineBreakpointActionHandler;
private final XToggleLineBreakpointActionHandler myToggleTemporaryLineBreakpointActionHandler;
private final XDebuggerSuspendedActionHandler myStepOverHandler;
private final XDebuggerSuspendedActionHandler myStepIntoHandler;
private final XDebuggerSuspendedActionHandler myStepOutHandler;
private final XDebuggerSuspendedActionHandler myForceStepOverHandler;
private final XDebuggerSuspendedActionHandler myForceStepIntoHandler;
private final XDebuggerRunToCursorActionHandler myRunToCursorHandler;
private final XDebuggerRunToCursorActionHandler myForceRunToCursor;
private final XDebuggerActionHandler myResumeHandler;
private final XDebuggerPauseActionHandler myPauseHandler;
private final XDebuggerSuspendedActionHandler myShowExecutionPointHandler;
private final XDebuggerEvaluateActionHandler myEvaluateHandler;
private final XQuickEvaluateHandler myQuickEvaluateHandler;
private final XAddToWatchesFromEditorActionHandler myAddToWatchesActionHandler;
private final DebuggerActionHandler myEvaluateInConsoleActionHandler = new XEvaluateInConsoleFromEditorActionHandler();
private final DebuggerToggleActionHandler myMuteBreakpointsHandler;
private final DebuggerActionHandler mySmartStepIntoHandler;
private final XMarkObjectActionHandler myMarkObjectActionHandler;
private final EditBreakpointActionHandler myEditBreakpointActionHandler;
public XDebuggerSupport() {
myBreakpointPanelProvider = new XBreakpointPanelProvider();
myToggleLineBreakpointActionHandler = new XToggleLineBreakpointActionHandler(false);
myToggleTemporaryLineBreakpointActionHandler = new XToggleLineBreakpointActionHandler(true);
myAddToWatchesActionHandler = new XAddToWatchesFromEditorActionHandler();
myStepOverHandler = new XDebuggerSuspendedActionHandler() {
@Override
protected void perform(@NotNull final XDebugSession session, final DataContext dataContext) {
session.stepOver(false);
}
};
myStepIntoHandler = new XDebuggerSuspendedActionHandler() {
@Override
protected void perform(@NotNull final XDebugSession session, final DataContext dataContext) {
session.stepInto();
}
};
myStepOutHandler = new XDebuggerSuspendedActionHandler() {
@Override
protected void perform(@NotNull final XDebugSession session, final DataContext dataContext) {
session.stepOut();
}
};
myForceStepOverHandler = new XDebuggerSuspendedActionHandler() {
@Override
protected void perform(@NotNull final XDebugSession session, final DataContext dataContext) {
session.stepOver(true);
}
};
myForceStepIntoHandler = new XDebuggerSuspendedActionHandler() {
@Override
protected void perform(@NotNull final XDebugSession session, final DataContext dataContext) {
session.forceStepInto();
}
};
mySmartStepIntoHandler = new XDebuggerSmartStepIntoHandler();
myRunToCursorHandler = new XDebuggerRunToCursorActionHandler(false);
myForceRunToCursor = new XDebuggerRunToCursorActionHandler(true);
myResumeHandler = new XDebuggerActionHandler() {
@Override
protected boolean isEnabled(@NotNull final XDebugSession session, final DataContext dataContext) {
return session.isPaused();
}
@Override
protected void perform(@NotNull final XDebugSession session, final DataContext dataContext) {
session.resume();
}
};
myPauseHandler = new XDebuggerPauseActionHandler();
myShowExecutionPointHandler = new XDebuggerSuspendedActionHandler() {
@Override
protected void perform(@NotNull final XDebugSession session, final DataContext dataContext) {
session.showExecutionPoint();
}
};
myMuteBreakpointsHandler = new XDebuggerMuteBreakpointsHandler();
myEvaluateHandler = new XDebuggerEvaluateActionHandler();
myQuickEvaluateHandler = new XQuickEvaluateHandler();
myMarkObjectActionHandler = new XMarkObjectActionHandler();
myEditBreakpointActionHandler = new XDebuggerEditBreakpointActionHandler();
}
@Override
@NotNull
public BreakpointPanelProvider<?> getBreakpointPanelProvider() {
return myBreakpointPanelProvider;
}
@Override
@NotNull
public DebuggerActionHandler getStepOverHandler() {
return myStepOverHandler;
}
@Override
@NotNull
public DebuggerActionHandler getStepIntoHandler() {
return myStepIntoHandler;
}
@Override
@NotNull
public DebuggerActionHandler getSmartStepIntoHandler() {
return mySmartStepIntoHandler;
}
@Override
@NotNull
public DebuggerActionHandler getStepOutHandler() {
return myStepOutHandler;
}
@Override
@NotNull
public DebuggerActionHandler getForceStepOverHandler() {
return myForceStepOverHandler;
}
@Override
@NotNull
public DebuggerActionHandler getForceStepIntoHandler() {
return myForceStepIntoHandler;
}
@Override
@NotNull
public DebuggerActionHandler getRunToCursorHandler() {
return myRunToCursorHandler;
}
@Override
@NotNull
public DebuggerActionHandler getForceRunToCursorHandler() {
return myForceRunToCursor;
}
@Override
@NotNull
public DebuggerActionHandler getResumeActionHandler() {
return myResumeHandler;
}
@Override
@NotNull
public DebuggerActionHandler getPauseHandler() {
return myPauseHandler;
}
@Override
@NotNull
public DebuggerActionHandler getToggleLineBreakpointHandler() {
return myToggleLineBreakpointActionHandler;
}
@NotNull
@Override
public DebuggerActionHandler getToggleTemporaryLineBreakpointHandler() {
return myToggleTemporaryLineBreakpointActionHandler;
}
@Override
@NotNull
public DebuggerActionHandler getShowExecutionPointHandler() {
return myShowExecutionPointHandler;
}
@Override
@NotNull
public DebuggerActionHandler getEvaluateHandler() {
return myEvaluateHandler;
}
@Override
@NotNull
public QuickEvaluateHandler getQuickEvaluateHandler() {
return myQuickEvaluateHandler;
}
@NotNull
@Override
public DebuggerActionHandler getAddToWatchesActionHandler() {
return myAddToWatchesActionHandler;
}
@NotNull
@Override
public DebuggerActionHandler getEvaluateInConsoleActionHandler() {
return myEvaluateInConsoleActionHandler;
}
@Override
@NotNull
public DebuggerToggleActionHandler getMuteBreakpointsHandler() {
return myMuteBreakpointsHandler;
}
@NotNull
@Override
public MarkObjectActionHandler getMarkObjectHandler() {
return myMarkObjectActionHandler;
}
@Override
public AbstractDebuggerSession getCurrentSession(@NotNull Project project) {
return XDebuggerManager.getInstance(project).getCurrentSession();
}
@NotNull
@Override
public EditBreakpointActionHandler getEditBreakpointAction() {
return myEditBreakpointActionHandler;
}
}