Save This Page
Home » bsf-src-2.4.0 » org.apache.bsf.engines.javascript » [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.engines.javascript;
   57   
   58   import org.apache.bsf;
   59   
   60   /**
   61    * Materializes a breakpoint.
   62    * A breakpoint can be defined at a line number or an
   63    * offset character in its document. For JavaScript,
   64    * we only support lineno for the underlying Rhino
   65    * engine does support only the line numbers.
   66    * Note: this is unfortunate for this prevents
   67    * setting a breakpoint on different statements on the 
   68    * same line...
   69    * 
   70    * A breakpoint is remembered at either the document level
   71    * (DocumentCell) or the function/script level (FnOrScript).
   72    * It is remembered at the document level when a FnOrScript
   73    * is not yet known for the breakpoint line number.
   74    * When a matching FnOrScrip will become known (compiled in Rhino),
   75    * the breakpoint will be remembered at the FnOrScript level.
   76    * 
   77    * Additionally, a breakpoint can be correlated or not
   78    * to a compilation unit. When not correlated (m_unit==null),
   79    * it means a compilation unit for the breakpoint
   80    * line has not been seen yet. It may be because the
   81    * breakpoint is on an invalid line but it may be
   82    * also that the breakpoint is in a script or function
   83    * that has not been compiled yet.
   84    * Indeed, there is a delay between knowing about a FnOrScript
   85    * and knowing about all its compilation unit. When a FnOrScript
   86    * is about to be compiled in Rhino, we create the FnOrScript,
   87    * with no known compilation unit. As a side effect of compiling,
   88    * the Rhino engine calls us back with compilation units such 
   89    * as independent functions or scripts. This is when those units,
   90    * represented by our class CompilationUnit are added to the 
   91    * corresponding FnOrScript.
   92    * 
   93    * @author: Olivier Gruber
   94    */
   95   public class BreakPoint {
   96   
   97   	protected int m_brkptId;
   98   	protected int m_lineno;
   99   	protected int m_offset;
  100   	protected boolean m_lineDefined;
  101   
  102   	protected DocumentCell m_cell;
  103   	protected FnOrScript m_fnOrScript;
  104   
  105    	protected CompilationUnit m_unit;
  106   
  107   	public BreakPoint(BreakPoint bp) {
  108   		m_fnOrScript = bp.m_fnOrScript;
  109   		m_cell = bp.m_cell;
  110   		m_brkptId = bp.m_brkptId;
  111   		m_lineno = bp.m_lineno;
  112   		m_offset = bp.m_offset;
  113   		m_lineDefined = bp.m_lineDefined;
  114   		m_unit = bp.m_unit;	
  115   	}
  116   	public BreakPoint(DocumentCell cell, int brkptid) {
  117   		super();
  118   		m_fnOrScript = null;
  119   		m_cell = cell;
  120   		m_brkptId = brkptid;
  121   		m_lineno = -1;
  122   		m_lineDefined = true;
  123   		m_unit=null;
  124   	}
  125   	public void setUnit(CompilationUnit unit) {
  126   		m_unit = unit;
  127   	}
  128   	
  129   	/**
  130   	 * Propagating the breakpoint to its corresponding
  131   	 * compilation unit, the side effect of that is to 
  132   	 * set the breakpoint in the Rhino engine.
  133   	 */
  134   	public void propagate() {
  135   		if (m_unit != null) {
  136   			m_unit.propagate(m_lineno);
  137   		}
  138   	}
  139   	/**
  140   	 * Unpropagating the breakpoint to its corresponding
  141   	 * compilation unit, the side effect of that is to 
  142   	 * unset the breakpoint in the Rhino engine.
  143   	 */
  144   	public void unpropagate() {
  145   		if (m_unit != null) {
  146   			m_unit.unpropagate(m_lineno);
  147   		}
  148   	}
  149   	
  150   	/**
  151   	 * attaches this breakpoint to the specified FnOrScript.
  152   	 */
  153   	public void attachToFnOrScript(FnOrScript fnOrScript) {
  154   		m_fnOrScript = fnOrScript;
  155   	}
  156   	/**
  157   	 * @return the identifier of the breakpoint.
  158   	 */
  159   	public int getId() {
  160   		return m_brkptId;
  161   	}
  162   	/**
  163   	 * @return the line number of that breakpoint.
  164   	 * This method will succeed only if the breakpoint as been
  165   	 * defined at a line number.
  166   	 * There is no automated translation between line number and 
  167   	 * offsets...
  168   	 */	
  169   	public int getLineNo() throws BSFException {
  170   		if (!m_lineDefined)
  171   			throw new BSFException(
  172   				BSFException.REASON_INVALID_ARGUMENT,
  173   				"Breakpoint is offset defined, can't provide its line number.");
  174   		return m_lineno;
  175   	}
  176   	/**
  177   	 * @return the character offset of that breakpoint.
  178   	 * This method will succeed only if the breakpoint as been
  179   	 * defined at an offset.
  180   	 * There is no automated translation between line number and 
  181   	 * offsets...
  182   	 */	
  183   	public int getOffset() throws BSFException {
  184   		if (m_lineDefined)
  185   			throw new BSFException(
  186   				BSFException.REASON_INVALID_ARGUMENT,
  187   				"Breakpoint is line defined, can't provide its offset.");
  188   		return m_offset;
  189   	}
  190   	
  191   	public void setLineNo(int lineno) {
  192   		m_lineno = lineno;
  193   	}
  194   	public void setOffset(int offset) {
  195   		m_offset = offset;
  196   	}
  197   }

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