reregistering exceptions removed
[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.configurations.RunProfile;
20 import com.intellij.execution.ui.RunContentDescriptor;
21 import com.intellij.openapi.project.Project;
22 import com.intellij.xdebugger.breakpoints.XBreakpoint;
23 import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
24 import com.intellij.xdebugger.frame.XStackFrame;
25 import com.intellij.xdebugger.frame.XSuspendContext;
26 import com.intellij.xdebugger.stepping.XSmartStepIntoHandler;
27 import com.intellij.xdebugger.stepping.XSmartStepIntoVariant;
28 import org.jetbrains.annotations.NotNull;
29 import org.jetbrains.annotations.Nullable;
30
31 import javax.swing.*;
32
33 /**
34  * Instances of this class are created by the debugging subsystem when {@link XDebuggerManager#startSession} or
35  * {@link XDebuggerManager#startSessionAndShowTab} method is called. It isn't supposed to be implemented by a plugin.
36  *
37  * Instance of this class can be obtained from {@link XDebugProcess#getSession()} method and used to control debugging process
38  * @author nik
39  */
40 public interface XDebugSession extends AbstractDebuggerSession {
41
42   @NotNull
43   Project getProject();
44
45   @NotNull XDebugProcess getDebugProcess();
46
47   boolean isSuspended();
48
49   @Nullable
50   XStackFrame getCurrentStackFrame();
51   
52   XSuspendContext getSuspendContext();
53
54   @Nullable
55   XSourcePosition getCurrentPosition();
56
57   void stepOver(boolean ignoreBreakpoints);
58   void stepInto();
59   void stepOut();
60   void forceStepInto();
61   void runToPosition(@NotNull XSourcePosition position, final boolean ignoreBreakpoints);
62
63   void pause();
64   void resume();
65
66   void showExecutionPoint();
67
68   void setCurrentStackFrame(@NotNull XStackFrame frame);
69
70   /**
71    * Call this method to setup custom icon and/or error message (it will be shown in tooltip) for breakpoint
72    * @param breakpoint breakpoint
73    * @param icon icon (<code>null</code> if default icon should be used). You can use icons from {@link com.intellij.xdebugger.ui.DebuggerIcons}
74    * @param errorMessage an error message if breakpoint isn't successfully registered
75    */
76   void updateBreakpointPresentation(@NotNull XLineBreakpoint<?> breakpoint, @Nullable Icon icon, @Nullable String errorMessage);
77
78   /**
79    * Call this method when a breakpoint is reached. If the method returns <code>true</code> the underlying debugging process should be
80    * suspended.
81    *
82    * Note that this method should be called only if {@link XBreakpoint#getCondition()} evaluates to <code>true</code>.
83    * @param breakpoint reached breakpoint
84    * @param suspendContext context
85    * @return <code>true</code> if the debug process should be suspended
86    */
87   boolean breakpointReached(@NotNull XBreakpoint<?> breakpoint, @NotNull XSuspendContext suspendContext);
88
89   /**
90    * Call this method when a breakpoint is reached. If the method returns <code>true</code> the underlying debugging process should be
91    * suspended.
92    *
93    * Note that this method should be called only if {@link XBreakpoint#getCondition()} evaluates to <code>true</code>.
94    * @param breakpoint reached breakpoint
95    * @param evaluatedLogExpression value of {@link XBreakpoint#getLogExpression()} evaluated in the current context
96    * @param suspendContext context
97    * @return <code>true</code> if the debug process should be suspended
98    */
99   boolean breakpointReached(@NotNull XBreakpoint<?> breakpoint, @Nullable String evaluatedLogExpression, @NotNull XSuspendContext suspendContext);
100
101   /**
102    * Call this method when position is reached (e.g. after "Run to cursor" or "Step over" command)
103    * @param suspendContext context
104    */
105   void positionReached(@NotNull XSuspendContext suspendContext);
106
107   void stop();
108
109   void setBreakpointMuted(boolean muted);
110   boolean areBreakpointsMuted();
111
112
113   void addSessionListener(@NotNull XDebugSessionListener listener);
114   void removeSessionListener(@NotNull XDebugSessionListener listener);
115
116   void reportError(String message);
117
118   @NotNull
119   String getSessionName();
120
121   @NotNull
122   RunContentDescriptor getRunContentDescriptor();
123
124   @Nullable  
125   RunProfile getRunProfile();
126
127   void setPauseActionSupported(boolean isSupported);
128
129   void rebuildViews();
130
131   <V extends XSmartStepIntoVariant> void smartStepInto(XSmartStepIntoHandler<V> handler, V variant);
132
133   void updateExecutionPosition();
134 }