001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.api.debugger.jpda;
043:
044: import com.sun.jdi.AbsentInformationException;
045: import java.beans.PropertyChangeListener;
046: import java.util.List;
047: import org.netbeans.spi.debugger.jpda.EditorContext.Operation;
048:
049: /**
050: * Represents one stack frame.
051: *
052: * <pre style="background-color: rgb(255, 255, 102);">
053: * Since JDI interfaces evolve from one version to another, it's strongly recommended
054: * not to implement this interface in client code. New methods can be added to
055: * this interface at any time to keep up with the JDI functionality.</pre>
056: *
057: * @author Jan Jancura
058: */
059: public interface CallStackFrame {
060:
061: /**
062: * Returns line number associated with this stack frame.
063: *
064: * @param struts a language name or null for default language
065: * @return line number associated with this this stack frame
066: */
067: public abstract int getLineNumber(String struts);
068:
069: /**
070: * Returns the current operation (if any) at the location of this call stack frame.
071: *
072: * @param struts a language name or null for default language
073: * @return The operation at the frame location if available and this frame does not
074: * represent a native method invocation; <CODE>null</CODE> otherwise
075: */
076: public abstract Operation getCurrentOperation(String struts);
077:
078: /**
079: * Returns method name associated with this stack frame.
080: *
081: * @return method name associated with this stack frame
082: */
083: public abstract String getMethodName();
084:
085: /**
086: * Returns class name of this stack frame.
087: *
088: * @return class name of this stack frame
089: */
090: public abstract String getClassName();
091:
092: /**
093: * Returns name of default stratumn.
094: *
095: * @return name of default stratumn
096: */
097: public abstract String getDefaultStratum();
098:
099: /**
100: * Returns name of default stratumn.
101: *
102: * @return name of default stratumn
103: */
104: public abstract List<String> getAvailableStrata();
105:
106: /**
107: * Returns name of file this stack frame is stopped in.
108: *
109: * @param struts a language name or null for default language
110: * @return name of file this stack frame is stopped in
111: * @throws NoInformationException if information about source is not
112: * included in class file
113: */
114: public abstract String getSourceName(String struts)
115: throws AbsentInformationException;
116:
117: /**
118: * Returns source path of file this frame is stopped in or null.
119: *
120: * @return source path of file this frame is stopped in or null
121: */
122: public abstract String getSourcePath(String stratum)
123: throws AbsentInformationException;
124:
125: /**
126: * Returns local variables.
127: *
128: * @return local variables
129: */
130: public abstract LocalVariable[] getLocalVariables()
131: throws AbsentInformationException;
132:
133: /**
134: * Returns arguments of the current method (if any).
135: * @return The array of arguments or
136: * <code>null</code> when it's not possible to retrieve the arguments.
137: *
138: * (Possible to uncomment if this method is necessary. We have the implementation.)
139: public abstract LocalVariable[] getMethodArguments();
140: */
141:
142: /**
143: * Returns object reference this frame is associated with or null (
144: * frame is in static method).
145: *
146: * @return object reference this frame is associated with or null
147: */
148: public abstract This getThisVariable();
149:
150: /**
151: * Sets this frame current.
152: *
153: * @see JPDADebugger#getCurrentCallStackFrame
154: */
155: public abstract void makeCurrent();
156:
157: /**
158: * Returns <code>true</code> if this frame is obsoleted.
159: *
160: * @return <code>true</code> if this frame is obsoleted
161: */
162: public abstract boolean isObsolete();
163:
164: /** UNCOMMENT WHEN THIS METHOD IS NEEDED. IT'S ALREADY IMPLEMENTED IN THE IMPL. CLASS.
165: * Determine, if this stack frame can be poped off the stack.
166: *
167: * @return <code>true</code> if this frame can be poped
168: *
169: public abstract boolean canPop();
170: */
171:
172: /**
173: * Pop stack frames. All frames up to and including the frame
174: * are popped off the stack. The frame previous to the parameter
175: * frame will become the current frame.
176: */
177: public abstract void popFrame();
178:
179: /**
180: * Returns thread.
181: *
182: * @return thread
183: */
184: public abstract JPDAThread getThread();
185: }
|