replaced <code></code> with more concise {@code}
[idea/community.git] / platform / xdebugger-api / src / com / intellij / xdebugger / frame / XExecutionStack.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.frame;
17
18 import com.intellij.icons.AllIcons;
19 import com.intellij.openapi.editor.markup.GutterIconRenderer;
20 import com.intellij.xdebugger.Obsolescent;
21 import org.jetbrains.annotations.NotNull;
22 import org.jetbrains.annotations.Nullable;
23
24 import javax.swing.*;
25 import java.util.List;
26
27 /**
28  * Represents a stack of executions frames usually corresponding to a thread. It is shown in 'Frames' panel of
29  * 'Debug' tool window
30  *
31  * @author nik
32  */
33 public abstract class XExecutionStack {
34   public static final XExecutionStack[] EMPTY_ARRAY = new XExecutionStack[0];
35   private final String myDisplayName;
36   private final Icon myIcon;
37
38   /**
39    * @param displayName presentable name of the thread to be shown in the combobox in 'Frames' tab
40    */
41   protected XExecutionStack(final String displayName) {
42     this(displayName, AllIcons.Debugger.ThreadSuspended);
43   }
44
45   /**
46    * @param displayName presentable name of the thread to be shown in the combobox in 'Frames' tab
47    * @param icon icon to be shown in the combobox in 'Frames' tab
48    */
49   protected XExecutionStack(final @NotNull String displayName, final @Nullable Icon icon) {
50     myDisplayName = displayName;
51     myIcon = icon;
52   }
53
54   @NotNull
55   public final String getDisplayName() {
56     return myDisplayName;
57   }
58
59   @Nullable
60   public final Icon getIcon() {
61     return myIcon;
62   }
63
64   /**
65    * Override this method to provide an icon with optional tooltip and popup actions. This icon will be shown on the editor gutter to the
66    * left of the execution line when this thread is selected in 'Frames' tab.
67    * @return
68    */
69   @Nullable
70   public GutterIconRenderer getExecutionLineIconRenderer() {
71     return null;
72   }
73
74   /**
75    * Return top stack frame synchronously
76    * @return top stack frame or {@code null} if it isn't available
77    */
78   @Nullable
79   public abstract XStackFrame getTopFrame();
80
81   /**
82    * Start computing stack frames top-down starting from {@code firstFrameIndex}. This method is called from the Event Dispatch Thread
83    * so it should return quickly
84    * @param firstFrameIndex frame index to start from ({@code 1} corresponds to the frame just under the top frame)
85    * @param container callback
86    */
87   public abstract void computeStackFrames(int firstFrameIndex, XStackFrameContainer container);
88
89   public interface XStackFrameContainer extends Obsolescent, XValueCallback {
90     /**
91      * Add stack frames to the list
92      * @param stackFrames stack frames to add
93      * @param last {@code true} if all frames are added
94      */
95     void addStackFrames(@NotNull List<? extends XStackFrame> stackFrames, boolean last);
96   }
97 }