Save This Page
Home » bsf-src-2.4.0 » org.apache.bsf.debug.jsdi » [javadoc | source]
    1   /*
    2    * The Apache Software License, Version 1.1
    3    *
    4    * Copyright (c) 2002 The Apache Software Foundation.  All rights
    5    * reserved.
    6    *
    7    * Redistribution and use in source and binary forms, with or without
    8    * modification, are permitted provided that the following conditions
    9    * are met:
   10    *
   11    * 1. Redistributions of source code must retain the above copyright
   12    *    notice, this list of conditions and the following disclaimer.
   13    *
   14    * 2. Redistributions in binary form must reproduce the above copyright
   15    *    notice, this list of conditions and the following disclaimer in
   16    *    the documentation and/or other materials provided with the
   17    *    distribution.
   18    *
   19    * 3. The end-user documentation included with the redistribution, if
   20    *    any, must include the following acknowlegement:
   21    *       "This product includes software developed by the
   22    *        Apache Software Foundation (http://www.apache.org/)."
   23    *    Alternately, this acknowlegement may appear in the software itself,
   24    *    if and wherever such third-party acknowlegements normally appear.
   25    *
   26    * 4. The names "Apache BSF", "Apache", and "Apache Software Foundation"
   27    *    must not be used to endorse or promote products derived from
   28    *    this software without prior written permission. For written
   29    *    permission, please contact apache@apache.org.
   30    *
   31    * 5. Products derived from this software may not be called "Apache"
   32    *    nor may "Apache" appear in their names without prior written
   33    *    permission of the Apache Group.
   34    *
   35    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   36    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   37    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   38    * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   39    * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   40    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   41    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   42    * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   43    * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   44    * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   45    * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   46    * SUCH DAMAGE.
   47    * ====================================================================
   48    *
   49    * This software consists of voluntary contributions made by many individuals
   50    * on behalf of the Apache Software Foundation and was originally created by
   51    * Sanjiva Weerawarana and others at International Business Machines
   52    * Corporation. For more information on the Apache Software Foundation,
   53    * please see <http://www.apache.org/>.
   54    */
   55   
   56   package org.apache.bsf.debug.jsdi;
   57   
   58   import java.rmi.Remote;
   59   import java.rmi.RemoteException;
   60   
   61   /**
   62    * Represents a remote engine as seen from the debugger.
   63    * It matches the notion of global object in JavaScript
   64    * specification. In other words, a JsEngine is an 
   65    * execution context rather than an explicit engine.
   66    * This also means that a JsEngine is not multi-threaded,
   67    * there is only one execution being carried.
   68    * Hence, there is only one stack of JsContext for a 
   69    * JsEngine. The stack is only accesible if the engine is
   70    * in a callback mode to the debugger, that is, the 
   71    * execution is stopped at a breakpoint or after a stepping
   72    * order has completed.
   73    * 
   74    */
   75   public interface JsEngine extends Remote {
   76   
   77   	/**
   78   	 * Allows the client debugger to poll the connection.
   79   	 */ 
   80   	public boolean poll() throws RemoteException;
   81   
   82   	/**
   83   	 * Set the associated debugger.
   84   	 * @param debugger the debugger to be used on callbacks from
   85   	 * the engine.
   86   	 */
   87   	public void setDebugger(JsCallbacks debugger) throws RemoteException;
   88   
   89   	/**
   90   	 * Return the current debugger.
   91   	 * @return the debugger, or null if none is attached.
   92   	 */
   93   	public JsCallbacks getDebugger() throws RemoteException;
   94   
   95   
   96   	/**
   97   	 * Allow the debugger to evaluate an expression
   98   	 * within the current context.
   99   	 */
  100   	public Object eval(String docname, String fnOrScript, int lineno)
  101   		throws RemoteException;
  102   
  103   	/**
  104   	 * Returns the count of JsContext on the current stack.
  105   	 * This is a valid call only if the engine is stopped
  106   	 * in a callback to the debugger (breakpoint or stepping
  107   	 * completed).
  108   	 */
  109    	public int getContextCount() 
  110                   throws RemoteException;
  111   
  112           /**
  113            * Returns name of the thread currently running in the engine
  114            */
  115           public String getThread()
  116                   throws RemoteException;
  117   
  118           /**
  119            * Returns name of the ThreadGroup of the thread currently running in the engine
  120            */
  121           public String getThreadGroup()
  122                   throws RemoteException;
  123   
  124   	/**
  125   	 * Returns the JsContext at a certain depth.
  126   	 * Depth zero is the top of the stack, that is,
  127   	 * the inner execution context.
  128   	 * 
  129   	 * This is a valid call only if the engine is stopped
  130   	 * in a callback to the debugger (breakpoint or stepping
  131   	 * completed).
  132   	 */
  133   	public JsContext getContext(int depth) 
  134   		throws RemoteException;
  135   	/**
  136   	 * Any execution in JavaScript happen with respect to a 
  137   	 * global object, sort of the top-level name space for 
  138   	 * properties. This is global object return by this call.
  139   	 */
  140   	public JsObject getGlobalObject() 
  141   		throws RemoteException;
  142   
  143   	/**
  144   	 * As per ECMA specification, each JavaScript execution 
  145   	 * defines a unique object for the undefined value.
  146   	 */	
  147   	public JsObject getUndefinedValue() 
  148   		throws RemoteException;
  149   	
  150   	/**
  151   	 * Stepping commands:
  152   	 * 		run: resume execution until it finishes or a breakpoint is hit.
  153   	 * 		stepIn: steps to the next statement, considering callee's statement if any.
  154   	 * 		stepOut: steps until the current JsContext exits.
  155   	 * 		stepOver: steps to the next statement within the same JsContext.
  156   	 */
  157   	public void run() throws RemoteException;
  158   	public void stepIn() throws RemoteException;
  159   	public void stepOut() throws RemoteException;
  160   	public void stepOver() throws RemoteException;
  161   
  162   	public boolean isSuspended() throws RemoteException;
  163   
  164   }

Save This Page
Home » bsf-src-2.4.0 » org.apache.bsf.debug.jsdi » [javadoc | source]