f924a5fb70a4fc0c2f9b04feebb89e2adff8b510
[idea/community.git] / platform / xdebugger-api / src / com / intellij / xdebugger / XDebugSession.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.intellij.xdebugger;
18
19 import com.intellij.execution.ExecutionException;
20 import com.intellij.execution.ui.RunContentDescriptor;
21 import com.intellij.execution.configurations.RunProfile;
22 import com.intellij.openapi.project.Project;
23 import com.intellij.xdebugger.breakpoints.XBreakpoint;
24 import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
25 import com.intellij.xdebugger.frame.XSuspendContext;
26 import com.intellij.xdebugger.frame.XStackFrame;
27 import com.intellij.xdebugger.stepping.XSmartStepIntoVariant;
28 import com.intellij.xdebugger.stepping.XSmartStepIntoHandler;
29 import org.jetbrains.annotations.NotNull;
30 import org.jetbrains.annotations.Nullable;
31
32 import javax.swing.*;
33
34 /**
35  * Instances of this class are created by the debugging subsystem when {@link XDebuggerManager#startSession} or
36  * {@link XDebuggerManager#startSessionAndShowTab} method is called. It isn't supposed to be implemented by a plugin.
37  *
38  * Instance of this class can be obtained from {@link XDebugProcess#getSession()} method and used to control debugging process
39  * @author nik
40  */
41 public interface XDebugSession extends AbstractDebuggerSession {
42
43   @NotNull
44   Project getProject();
45
46   @NotNull XDebugProcess getDebugProcess();
47
48   boolean isSuspended();
49
50   @Nullable
51   XStackFrame getCurrentStackFrame();
52   
53   XSuspendContext getSuspendContext();
54
55   @Nullable
56   XSourcePosition getCurrentPosition();
57
58   void stepOver(boolean ignoreBreakpoints);
59   void stepInto();
60   void stepOut();
61   void forceStepInto();
62   void runToPosition(@NotNull XSourcePosition position, final boolean ignoreBreakpoints);
63
64   void pause();
65   void resume();
66
67   void showExecutionPoint();
68
69   void setCurrentStackFrame(@NotNull XStackFrame frame);
70
71   /**
72    * Call this method to setup custom icon and/or error message (it will be shown in tooltip) for breakpoint
73    * @param breakpoint breakpoint
74    * @param icon icon (<code>null</code> if default icon should be used). You can use icons from {@link com.intellij.xdebugger.ui.DebuggerIcons}
75    * @param errorMessage an error message if breakpoint isn't successfully registered
76    */
77   void updateBreakpointPresentation(@NotNull XLineBreakpoint<?> breakpoint, @Nullable Icon icon, @Nullable String errorMessage);
78
79   /**
80    * Call this method when a breakpoint is reached. If the method returns <code>true</code> the underlying debugging process should be
81    * suspended.
82    *
83    * Note that this method should be called only if {@link XBreakpoint#getCondition()} evaluates to <code>true</code>.
84    * @param breakpoint reached breakpoint
85    * @param suspendContext context
86    * @return <code>true</code> if the debug process should be suspended
87    */
88   boolean breakpointReached(@NotNull XBreakpoint<?> breakpoint, @NotNull XSuspendContext suspendContext);
89
90   /**
91    * Call this method when a breakpoint is reached. If the method returns <code>true</code> the underlying debugging process should be
92    * suspended.
93    *
94    * Note that this method should be called only if {@link XBreakpoint#getCondition()} evaluates to <code>true</code>.
95    * @param breakpoint reached breakpoint
96    * @param evaluatedLogExpression value of {@link XBreakpoint#getLogExpression()} evaluated in the current context
97    * @param suspendContext context
98    * @return <code>true</code> if the debug process should be suspended
99    */
100   boolean breakpointReached(@NotNull XBreakpoint<?> breakpoint, @Nullable String evaluatedLogExpression, @NotNull XSuspendContext suspendContext);
101
102   /**
103    * Call this method when position is reached (e.g. after "Run to cursor" or "Step over" command)
104    * @param suspendContext context
105    */
106   void positionReached(@NotNull XSuspendContext suspendContext);
107
108   void stop();
109
110   void setBreakpointMuted(boolean muted);
111   boolean areBreakpointsMuted();
112
113
114   void addSessionListener(@NotNull XDebugSessionListener listener);
115   void removeSessionListener(@NotNull XDebugSessionListener listener);
116
117   void reportError(String message);
118
119   @NotNull
120   String getSessionName();
121
122   @NotNull
123   RunContentDescriptor getRunContentDescriptor();
124
125   @Nullable  
126   RunProfile getRunProfile();
127
128   void setPauseActionSupported(boolean isSupported);
129
130   void rebuildViews();
131
132   <V extends XSmartStepIntoVariant> void smartStepInto(XSmartStepIntoHandler<V> handler, V variant);
133 }