Fixed python code indentation in the editor of Evaluate code fragment dialog (PY...
[idea/community.git] / platform / xdebugger-api / src / com / intellij / xdebugger / evaluation / XDebuggerEvaluator.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 package com.intellij.xdebugger.evaluation;
17
18 import com.intellij.openapi.editor.Document;
19 import com.intellij.openapi.project.Project;
20 import com.intellij.openapi.util.TextRange;
21 import com.intellij.xdebugger.XDebugSession;
22 import com.intellij.xdebugger.XSourcePosition;
23 import com.intellij.xdebugger.breakpoints.XBreakpoint;
24 import com.intellij.xdebugger.frame.XSuspendContext;
25 import com.intellij.xdebugger.frame.XValue;
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28
29 /**
30  * @author nik
31  */
32 public abstract class XDebuggerEvaluator {
33
34   /**
35    * Evaluate <code>expression</code> to boolean
36    *
37    * @param expression expression to evaluate
38    * @return result
39    * @see XBreakpoint#getCondition()
40    * @deprecated This method is used to evaluate breakpoints' conditions only. Instead of implementing it you should evaluate breakpoint's condition
41    *             in your code and call {@link XDebugSession#breakpointReached(XBreakpoint, XSuspendContext)}
42    *             only if the condition evaluates to <code>true</code>.
43    */
44   @Deprecated
45   public boolean evaluateCondition(@NotNull String expression) {
46     return true;
47   }
48
49   /**
50    * Evaluate <code>expression</code> to string
51    *
52    * @param expression expression to evaluate
53    * @return result
54    * @deprecated This method is used to evaluate breakpoints' log messages only. Instead of implementing it you should evaluate breakpoint's
55    *             log message in your code and pass it to {@link XDebugSession#breakpointReached(XBreakpoint, String, XSuspendContext)}.
56    */
57   @Deprecated
58   @Nullable
59   public String evaluateMessage(@NotNull String expression) {
60     return null;
61   }
62
63   /**
64    * Start evaluating expression.
65    *
66    * @param expression expression to evaluate
67    * @param callback   used to notify that the expression has been evaluated or an error occurs
68    */
69   public void evaluate(@NotNull String expression, XEvaluationCallback callback, @Nullable XSourcePosition expressionPosition) {
70     evaluate(expression, callback);
71   }
72
73   /**
74    * @deprecated override {@link #evaluate(String, XEvaluationCallback, com.intellij.xdebugger.XSourcePosition)} instead
75    */
76   @Deprecated
77   public void evaluate(@NotNull String expression, XEvaluationCallback callback) {
78   }
79
80   /**
81    * If this method returns {@code true} 'Code Fragment Mode' button will be shown in 'Evaluate' dialog allowing user to execute a set of
82    * statements
83    *
84    * @return {@code true} if debugger supports evaluation of code fragments (statements)
85    */
86   public boolean isCodeFragmentEvaluationSupported() {
87     return true;
88   }
89
90   /**
91    * @deprecated override {@link #getExpressionRangeAtOffset(com.intellij.openapi.project.Project, com.intellij.openapi.editor.Document, int, boolean)} instead
92    */
93   @Nullable
94   @Deprecated
95   @SuppressWarnings({"MethodMayBeStatic"})
96   public TextRange getExpressionRangeAtOffset(final Project project, final Document document, int offset) {
97     return null;
98   }
99
100   /**
101    * Return text range of expression which can be evaluated.
102    *
103    * @param project            project
104    * @param document           document
105    * @param offset             offset
106    * @param sideEffectsAllowed if this parameter is false, the expression should not have any side effects when evaluated
107    *                           (such expressions are evaluated in quick popups)
108    * @return text range of expression
109    */
110   @Nullable
111   public TextRange getExpressionRangeAtOffset(final Project project, final Document document, int offset, boolean sideEffectsAllowed) {
112     return sideEffectsAllowed ? null : getExpressionRangeAtOffset(project, document, offset);
113   }
114
115   /**
116    * Override this method to format selected text before it is shown in 'Evaluate' dialog
117    */
118   @NotNull
119   @SuppressWarnings({"MethodMayBeStatic"})
120   public String formatTextForEvaluation(@NotNull String text) {
121     return text;
122   }
123
124   /**
125    * @return delay before showing value tooltip (in ms)
126    */
127   public int getValuePopupDelay() {
128     return 700;
129   }
130
131   public interface XEvaluationCallback {
132
133     void evaluated(@NotNull XValue result);
134
135     void errorOccurred(@NotNull String errorMessage);
136   }
137 }