Package idebughc

Source Code of idebughc.Debug

/*
* Software Engineering Tools.
*
* $Id: Test62.java,v 1.1 2001/07/10 06:37:22 clemens Exp clemens $
*
* Copyright (c) 1997-2001 Joseph Kiniry
* Copyright (c) 2000-2001 KindSoftware, LLC
* Copyright (c) 1997-1999 California Institute of Technology
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of the Joseph Kiniry, KindSoftware, nor the
* California Institute of Technology, nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
* IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KIND SOFTWARE OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package idebughc;

import java.util.Enumeration;
import java.util.Hashtable;

/**
* <p> Debug is the core class of the IDebug debugging facilities.
*
* <p> The Debug class is used as the central facility for configuring
* debugging for a component.
*
* <p> All assertions are handled in the Assert class, all logging is
* accomplished via the DebugOutput class, and all system monitoring and
* statistics gathering takes place via the Collect class.
*
* <p> This debug package is meant to help, in general, produce high
* quality, high confidence, code.
*
* <p> The Debug facility is non-static.  The first thing your
* component or application needs to do is construct a new Debug
* object.  If you wish to install an alternate implementation of the
* debugging constants (i.e. categories, levels, error messages,
* etc.), pass your implementation of DebuggingConstantsInterface to
* the constructor of Debug.
*
* <p> Each thread that calls the Debug class has, potentially, a
* different context.  Elements of this context include a notion of
* current message level, message types, classes currently under
* inspection, and whether debugging is turned on or off.
*
* <p> Threads create new debugging contexts by constructing a Context
* object and calling its methods.  This Context is then passed to the
* Debug object to change the current global debugging context at
* runtime.
*
* <p> In brief, the Debug class is normally used in the following
* manner.  A more detailed discussion of the use of this class can be
* found in the full documentation for the Infospheres debugging
* package.  See the debug package's <a href="../index.html">main
* index</a> for more information.
*
* <p> Each thread needs to construct a debugging context (see the
* Context class for details) to detail its specific debugging needs.
* After creating a valid debugging context, encapsulated in the
* Context object, the object is passed to this class (Debug) via the
* <code>addContext()</code> method so that the debugging runtime
* system knows the thread's context.  Note that the debug runtime
* keeps a reference to the passed Context, it does not make a copy of
* it.  Thus, you can modify the Context (change debugging levels, add
* new thread-specific categories, etc.)  after the context is
* installed and changes will be noted immediately by the debug
* runtime.
*
* <p> Finally, you have to direct the output of the debugging runtime.
* This is accomplished by constructing an implementation of the
* <code>DebugOutput</code> interface, e.g. <code>ConsoleOutput</code>.
* This object is then passed to your Debug object via the
* <code>Debug.setOutputInterface()</code> method.
*
* <p> You're ready to rock and roll.  Call
* <code>debug.getAssert()</code> to get a reference to your debug
* runtime's Assert class.  Finally, if you chose not to install your
* own implementation of <code>DebugConstants</code>, call
* <code>debug.getDebugConstants()</code> to get a reference to your
* debug constants.
*
* <p> Then, simply use <code>assert.assert()</code>, the
* <code>print()</code>, <code>println()</code> of your
* <code>DebugOutput</code> and/or <code>Utilities.dumpStackSafe()</code>
* methods in your code as necessary.
*
* <p> Note that all class-specific debugging is <em>additive</em> and
* <em>reductive</em>.  You can either remove all classes from the
* debugging table then add classes one by one, or you can add all
* <em>potential</em> classes then remove them one by one at this
* time.  Meaning, when you perform an add of "*", you are
* <em>not</em> adding all classes currently defined in this VM; you
* are adding all classes currently defined and all classes that might
* ever be defined in this VM.
*
* @version $Revision: 1.1 $ $Date: 2001/07/10 06:37:22 $
* @author Joseph R. Kiniry <joe@kindsoftware.com>
* @history Versions 0.01 through 0.10 were developed as
* <code>edu.caltech.cs.kiniry.coding.Debug</code>.  New revision
* history began when class was moved to
* <code>edu.caltech.cs.infospheres.util.Debug</code>.  Six versions
* were developed while in this package.  The code was then moved to
* Joe's PhD repository and refactoring began to take place as of
* cumulative version 0.17.
*
* @todo kiniry Possible future enhancements:
* <ol>
* <li> New derivative: persistence mobile debug object.
* <li> GUI interface to runtime debugging.
* <li> Garbage collection thread for Debug to clean up stopped
* threads.
* <li> Support for ThreadGroup contexts.
* </ol>
*
* @review kiniry To make debugging classes as robust as possible, we
* need to decide if they should not throw exceptions at all and only
* return error values if outright failures occur in processing, or
* throw real exceptions, etc.  Once javap is built, this will be
* something of a non-issue (since the user will not have to type the
* exception-handling code at all).
*
* @review kiniry Should all precondition/postcondition checks be
* assertions?  This would lower the robustness of the code.  Perhaps
* this means that the definitions for @pre/postconditions need be
* refined (i.e. are they always assertions or not?).
*
* @review kiniry Should assertions always call stackDump()?  Should
* they always call System.exit()?  That's not very nice or robust,
* and it certainly doesn't support distributed debugging well.
* Perhaps we can throw some kind of InterruptedException in the
* thread?
*
* @review kiniry Should null or zero-length debugging messages be
* permitted?  Wouldn't this increase robustness?
*
* @review kiniry Are print() and println() methods both necessary?
* Why not just print()?  Similar to the isOn() controversy.
*
* @review kiniry Should calls to println with an ASSERTION_LEVEL
* cause the calling thread to stop, as in a real assertion?  This
* complicates the semantics of the print() methods.
*
* @review kiniry Addition of an exception stack trace printing
* mechanism (as per dmz, 15 January).
*
* @review kiniry Addition of a system property to turn global
* debugging on/off (as per dmz, 15 January).
*
* @design General Debug design obtained through group consensus in
* mid November, 1997.
*
* @todo kiniry Should the global DebugOutput be public?  Should a
* client be able to get a reference to it via a call to the
* appropriate getter instead?  I.e. Detect whether the thread is in a
* per-thread debugging state and, if not, return the global output
* interface? 
*/

public class Debug implements Cloneable
{
  // Attributes

  /**
   * <p> <code>threadHashtable</code> is a hashtable of all threads that
   * have some per-thread specific debugging attributes defined.
   * Per-thread attributes include categories and classes.  A key of this
   * hashtable is a reference to a <code>Thread</code>, while a data value
   * is a <code>Context</code> object which contains the information
   * specific to this thread. </p>
   *
   * <p> <code>threadHashtable</code> always has an two entries, one under
   * the key "GLOBAL_CATEGORIES" and one under the key "GLOBAL_CLASSES".
   * These entries contain all the class-global categories and
   * class-specific information for debugging, respectively. </p>
   *
   * <p> Internal class handling is somewhat complicated.  If the
   * expression "*" is <em>removed</em>, the database is simply cleared.
   * If the expression "*" is <em>added</em>, the entry is inserted in the
   * table.  So, if one removes specific classes after removing "*", or if
   * one adds specific classes after adding "*", there is no change to the
   * database.  <em>But</em>, if you remove specific classes after adding
   * "*", or if you add specific classes after removing "*", your changes
   * will be noted.  I.e. <code>Debug</code> handles both additive and
   * reductive specification of classes. </p>
   */

  Hashtable threadHashtable = null;

  /**
   * <p> The debugging constants for this class. </p>
   *
   * @modifies SINGLE-ASSIGNMENT
   */

  DebugConstants debugConstants = null;

  /**
   * <p> The current "global" (<code>Debug</code> instance scoped) flag
   * indicating if any debugging is enabled.  If (isOn == false), all calls
   * like <code>Assert.assert()</code> and
   * <code>DebugOutput.print()</code>, but for the query and state change
   * functions (like <code>isOn()</code>, <code>turnOn()</code>, etc.)  are
   * short-circuited and do nothing. </p>
   */

  boolean isOn = false;

  /**
   * <p> The current global (<code>Debug</code> instance scoped) debug
   * level of the <code>Debug</code> class. </p>
   *
   * @design Higher valued levels usually indicate higher priorities.
   * E.g. A level 9 message is in the default implementation an asssertion;
   * if it fails, the program exits.  A level 5 message is an error and the
   * user should probably be informed of the problem.  You can override
   * this behavior by subtyping <code>DebugConstants</code> and installing
   * the new constant set when constructing <code>Debug</code>.
   *
   * @values (debugConstants.LEVEL_MIN <= level <=
   * debugConstants.LEVEL_MAX)
   */

  int level = 0;

  /**
   * <p> The <code>Assert</code> object associated with this
   * <code>Debug</code> object, when instantiated. </p>
   *
   * @modifies SINGLE-ASSIGNMENT
   */

  Assert assert = null;

  /**
   * <p> The <code>Collect</code> object associated with this
   * <code>Debug</code> object, when instantiated. </p>
   *
   * @modifies SINGLE-ASSIGNMENT
   */

  Collect collect = null;

  /**
   * <p> Private debugging utility class that encapsulates several helpful
   * algorithms. </p>
   *
   * @modifies SINGLE-ASSIGNMENT
   */
 
  Utilities debugUtilities = null;

  /**
   * <p> The class used by this thread to control debugging output device.
   * All global debugging messages will use this interface for output. </p>
   */

  transient public DebugOutput debugOutputInterface;

  // Inherited Methods

  public Object clone()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "clone()", true), jassParameters);
    java.lang.Object jassResult;

    try {
      jassResult = ( super.clone());
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "clone()", false), jassParameters);


      return jassResult;
    } catch (CloneNotSupportedException cnse) {
      throw new RuntimeException(cnse.getMessage());
    }
  }

  // Constructors

  /**
   * <p> Construct a new <code>Debug</code> class.  Note that the method
   * <code>setOutputInterface</code> need be called on the newly
   * constructed <code>Debug</code> object before it can be used. </p>
   */

  public Debug()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "Debug()", true), jassParameters);


    init(new DefaultDebugConstants(), null);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "Debug()", false), jassParameters);

  }
 
  /**
   * <p> Construct a new <code>Debug</code> class.  Note that the method
   * <code>setOutputInterface</code> need be called on the newly
   * constructed <code>Debug</code> object before it can be used. </p>
   *
   * @param dc an implementation of the <code>DebugConstants</code>
   * interface that defines the semantics of this debug context.
   * @param c an implementation of the <code>Collect</code> class.
   * @see idebug.SimpleCollect
   */

  public Debug(DebugConstants dc, Collect c)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(dc), new jass.runtime.traceAssertion.Parameter(c)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "Debug(idebughc.DebugConstants,idebughc.Collect)", true), jassParameters);


    /* precondition */
    if (!((dc!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","Debug(idebughc.DebugConstants,idebughc.Collect)",321,"dc_non_null");
    if (!((c!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","Debug(idebughc.DebugConstants,idebughc.Collect)",322,"c_non_null");

    init(dc, c);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "Debug(idebughc.DebugConstants,idebughc.Collect)", false), jassParameters);

  }

  // Public Methods

  /**
   * <p> Set the global output interface to a new
   * <code>DebugOutput</code>. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@6b017e</b>: (d!=null)</code></dd></dl>
<dl><dt><b>Ensures:</b></dt><dd><code><b>jass.reflect.AssertionLabel@2effdf</b>: (getOutputInterface()==d)</code></dd></dl>
@concurrency CONCURRENT
   * @modifies debugOutputInterface
   * @param d the new output interface.
   */

  public void setOutputInterface(DebugOutput d)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(d)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "setOutputInterface(idebughc.DebugOutput)", true), jassParameters);


    /* precondition */
    if (!((d!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","setOutputInterface(idebughc.DebugOutput)",340,"d_not_null");

    this.debugOutputInterface = d;
    /* postcondition */
    if (!((jassInternal_getOutputInterface()==d))) throw new jass.runtime.PostconditionException("idebughc.Debug","setOutputInterface(idebughc.DebugOutput)",344,"output_interface_set");
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "setOutputInterface(idebughc.DebugOutput)", false), jassParameters);

  }

  /**
   * @concurrency CONCURRENT
   * @modifies QUERY
   * @return the <code>Assert</code> object associated with this
   * <code>Debug</code> object.
   */

  public Assert getAssert()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getAssert()", true), jassParameters);
    idebughc.Assert jassResult;

    jassResult = ( assert);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getAssert()", false), jassParameters);


    return jassResult;
  }


  /**
   * @concurrency CONCURRENT
   * @modifies QUERY
   * @return the <code>Collect</code> object associated with this
   * <code>Debug</code> object.
   */

  public Collect getCollect()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getCollect()", true), jassParameters);
    idebughc.Collect jassResult;

    jassResult = ( collect);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getCollect()", false), jassParameters);


    return jassResult;
  }

  /**
   * @concurrency CONCURRENT
   * @modifies QUERY
   * @return the <code>DebugOutput</code> corresponding to the invoking
   * thread or, if that thread has no interface, the global output
   * interface.
   */

  public DebugOutput getOutputInterface()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getOutputInterface()", true), jassParameters);
    idebughc.DebugOutput jassResult;

    Thread currentThread = Thread.currentThread();
   
    if (threadHashtable.containsKey(currentThread)) {
      Context debugContext =
        (Context)(threadHashtable.get(currentThread));
        jassResult = ( debugContext.getOutputInterface());
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getOutputInterface()", false), jassParameters);


        return jassResult;
    } else {
      jassResult = ( this.debugOutputInterface);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getOutputInterface()", false), jassParameters);


      return jassResult;
    }
  }

  /**
   * @concurrency CONCURRENT
   * @modifies QUERY
   * @return the <code>DebugConstants</code> for this <code>Debug</code>
   * object.
   */

  public DebugConstants getDebugConstants()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getDebugConstants()", true), jassParameters);
    idebughc.DebugConstants jassResult;

    jassResult = ( debugConstants);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getDebugConstants()", false), jassParameters);


    return jassResult;
  }

  /**
   * <p> Returns a boolean indicating if any debugging is turned on. </p>
   *
   * @concurrency GUARDED
   * @modifies QUERY
   * @return a boolean indicating if any debugging is turned on.
   */

  public synchronized boolean isOn()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOn()", true), jassParameters);
    boolean jassResult;

    jassResult = ( isOn);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOn()", false), jassParameters);


    return jassResult;
  }
  /**
   * <p> Returns a boolean indicating whether any debugging facilities are
   * turned on for a particular thread. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@20a47e</b>: (thread!=null)</code></dd></dl>
@concurrency GUARDED
   * @modifies QUERY
   * @ensures Debugging turned on for passed thread.
   * @param thread is the thread that we are interested in.
   * @return a boolean indicating whether any debugging facilities are
   * turned on for a particular thread.
   */

  public synchronized boolean isOn(Thread thread)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(thread)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOn(java.lang.Thread)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((thread!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","isOn(java.lang.Thread)",430,"thread_non_null");

    // Make sure that there is a legal entry in the threadHashtable
    // for this particular thread.
    if (threadHashtable.containsKey(thread))
    {
      // Get the object that describes the per-thread debugging state.
      Context debugContext =
        (Context)(threadHashtable.get(thread));
        jassResult = ( debugContext.isOn());
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOn(java.lang.Thread)", false), jassParameters);


        return jassResult;
    }
    else {
      jassResult = ( false);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOn(java.lang.Thread)", false), jassParameters);


      return jassResult;
    }
  }

  /**
   * <p> Returns a boolean indicating if any debugging is turned off. </p>
   *
   * @concurrency GUARDED
   * @modifies QUERY
   * @return a boolean indicating if any debugging is turned on.
   * @review kiniry Are the isOff() methods necessary at all?
   */

  public synchronized boolean isOff()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOff()", true), jassParameters);
    boolean jassResult;

    jassResult = ( (!isOn()));
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOff()", false), jassParameters);


    return jassResult;
  }
 

  /**
   * <p> Returns a boolean indicating whether any debugging facilities are
   * turned off for a particular thread. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@789144</b>: (thread!=null)</code></dd></dl>
@concurrency GUARDED
   * @modifies QUERY
   * @param thread is the thread that we are interested in.
   * @return a boolean indicating whether any debugging facilities are
   * turned off for a particular thread.
   * @review kiniry Are the isOff() methods necessary at all?
   */

  public synchronized boolean isOff(Thread thread)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(thread)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOff(java.lang.Thread)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((thread!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","isOff(java.lang.Thread)",474,"thread_non_null");
    jassResult = ( (!isOn(thread)));
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "isOff(java.lang.Thread)", false), jassParameters);


    return jassResult;
  }
 
  /**
   * <p> Turns on class-global debugging facilities. </p>
   *
   * @concurrency GUARDED
   * @modifies isOn
   */

  public synchronized void turnOn()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "turnOn()", true), jassParameters);


    isOn = true;
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "turnOn()", false), jassParameters);

  }

  /**
   * <p> Turns off class-global debugging facilities. </p>
   *
   * @concurrency GUARDED
   * @modifies isOn
   */

  public synchronized void turnOff()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "turnOff()", true), jassParameters);


    isOn = false;
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "turnOff()", false), jassParameters);

  }

  /**
   * <p> Adds a category to the database of legal debugging categories.
   * Once a category exists in the database, its debugging level cannot be
   * changed. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@93efe</b>: (category!=null) &&<br><b>jass.reflect.AssertionLabel@6c6b2</b>: (category.length()>0)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable, categoryHashtable
   * @param category the category to add to the global set of
   * categories.
   * @param level the debugging level associated with the passed
   * category.
   * @return a boolean indicating if the category was sucessfully
   * added to the database.  A false indicates either the category was
   * already in the database at a different level or the parameters
   * were invalid.
   */

  public synchronized boolean addCategory(String category,
                                          int level)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(category), new jass.runtime.traceAssertion.Parameter(level)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addCategory(java.lang.String,int)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((category!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","addCategory(java.lang.String,int)",523,"category_non_null");
    if (!((category.length()>0))) throw new jass.runtime.PreconditionException("idebughc.Debug","addCategory(java.lang.String,int)",524,"category_nonzero_length");

    // Get a reference to the global category hashtable.
    Hashtable categoryHashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CATEGORIES"));
    jassResult = ( addCategoryToHashtable(categoryHashtable, category, level));
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addCategory(java.lang.String,int)", false), jassParameters);


    return jassResult;
  }

  /**
   * <p> Removes a category to the database of legal debugging
   * categories. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@5ee671</b>: (category!=null) &&<br><b>jass.reflect.AssertionLabel@6b13c7</b>: (category.length()>0)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable, categoryHashtable
   * @param category the category to remove.
   * @return a boolean indicating if the category was sucessfully
   * removed from the database.  A false indicates that the parameters
   * were invalid.
   */

  public synchronized boolean removeCategory(String category)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(category)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeCategory(java.lang.String)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((category!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeCategory(java.lang.String)",547,"category_non_null");
    if (!((category.length()>0))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeCategory(java.lang.String)",548,"category_nonzero_length");

    // Get a reference to the global category hashtable.
    Hashtable categoryHashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CATEGORIES"));
    jassResult = ( removeCategoryFromHashtable(categoryHashtable, category));
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeCategory(java.lang.String)", false), jassParameters);


    return jassResult;
  }


  /**
   * <p> Returns a boolean indicating if a category is in the class-global
   * category database. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@5f8f5e</b>: (category!=null) &&<br><b>jass.reflect.AssertionLabel@3d93f4</b>: (category.length()>0)</code></dd></dl>
@concurrency GUARDED
   * @modifies QUERY
   * @param category is the category to lookup.
   * @return a boolean indicating if a category is in the class-global
   * category database.
   */

  public synchronized boolean containsCategory(String category)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(category)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "containsCategory(java.lang.String)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((category!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","containsCategory(java.lang.String)",571,"category_non_null");
    if (!((category.length()>0))) throw new jass.runtime.PreconditionException("idebughc.Debug","containsCategory(java.lang.String)",572,"category_nonzero_length");

    // Get global category hashtable.
    Hashtable hashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CATEGORIES"));
    jassResult = ( (hashtable.containsKey(category)));
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "containsCategory(java.lang.String)", false), jassParameters);

// If entry exists, return a true; otherwise return a false.

    return jassResult;
  }
 
  /**
   * <p> Returns an <code>Enumeration</code> that is the list of
   * class-global debugging categories that are currently in the category
   * database. </p>
   *
   * @concurrency GUARDED
   * @modifies QUERY
   * @return an <code>Enumeration</code> that is the list of class-global
   * debugging categories that are currently in the category database.
   * @see Hashtable#elements
   */

  public synchronized Enumeration listCategories()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "listCategories()", true), jassParameters);
    java.util.Enumeration jassResult;

    // Get global category hashtable.
    Hashtable hashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CATEGORIES"));
    jassResult = ( (hashtable.elements()));
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "listCategories()", false), jassParameters);


    return jassResult;
  }

  /**
   * <p> Adds a class the the class-global database of classes that
   * have debugging enabled. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@3ca5f1</b>: (classRef!=null)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable, classHashtable
   * @param classRef the class to add to the global table of classes
   * that have debugging enabled.
   */

  public synchronized void addClass(Class classRef)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(classRef)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addClass(java.lang.Class)", true), jassParameters);


    /* precondition */
    if (!((classRef!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","addClass(java.lang.Class)",615,"classRef_non_null");

    //  Get a reference to the global class hashtable.
    Hashtable classHashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CLASSES"));

    Utilities.addClassToHashtable(classHashtable,
                                  classRef.getName());
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addClass(java.lang.Class)", false), jassParameters);

  }

  /**
   * <p> Adds a class the the class-global database of classes that have
   * debugging enabled. Note that a class of "*" means that all classes
   * will now have debugging enabled.  There is no way to "undo" such a
   * command short of manually adding the individual classes back to the
   * database. (Or, equivalently, removing the complement.) </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@329f3d</b>: (className!=null) &&<br><b>jass.reflect.AssertionLabel@749757</b>: (className.length()>0)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable, classHashtable
   * @param className the name of the class to add.
   */

  public synchronized void addClass(String className)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(className)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addClass(java.lang.String)", true), jassParameters);


    /* precondition */
    if (!((className!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","addClass(java.lang.String)",639,"className_non_null");
    if (!((className.length()>0))) throw new jass.runtime.PreconditionException("idebughc.Debug","addClass(java.lang.String)",640,"className_nonzero_length");

    //  Get a reference to the global class hashtable.
    Hashtable classHashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CLASSES"));

    Utilities.addClassToHashtable(classHashtable, className);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addClass(java.lang.String)", false), jassParameters);

  }
 
  /**
   * <p> Removes a class the the class-global database of classes that have
   * debugging enabled. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@7bd6a1</b>: (classRef!=null)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable, classHashtable
   * @param classRef the class to remove.
   */

  public synchronized void removeClass(Class classRef)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(classRef)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeClass(java.lang.Class)", true), jassParameters);


    /* precondition */
    if (!((classRef!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeClass(java.lang.Class)",660,"classRef_non_null");

    //  Get a reference to the global class hashtable.
    Hashtable classHashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CLASSES"));

    Utilities.removeClassFromHashtable(classHashtable,
                                       classRef.getName());
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeClass(java.lang.Class)", false), jassParameters);

  }

  /**
   * <p> Removes a class the the class-global database of classes that have
   * debugging enabled.  Removes a class from a database of
   * debugging-enabled classes.  Note that a class of "*" means that all
   * classes will be removed and debugging disabled.  There is no way to
   * "undo" such a command. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@47ee05</b>: (className!=null) &&<br><b>jass.reflect.AssertionLabel@5b9e68</b>: (className.length()>0)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable, classHashtable
   * @param className the name of the class to remove.
   */

  public synchronized void removeClass(String className)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(className)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeClass(java.lang.String)", true), jassParameters);


    /* precondition */
    if (!((className!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeClass(java.lang.String)",684,"className_non_null");
    if (!((className.length()>0))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeClass(java.lang.String)",685,"className_nonzero_length");

    //  Get a reference to the global class hashtable.
    Hashtable classHashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CLASSES"));

    Utilities.removeClassFromHashtable(classHashtable,
                                       className);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeClass(java.lang.String)", false), jassParameters);

  }


  /**
   * <p> Get the context for a specific thread. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@7cf0ce</b>: (thread!=null)</code></dd></dl>
@concurrency GUARDED
   * @modifies QUERY
   * @modifies threadHashtable
   * @param thread the thread that we are interested in.
   * @return the <code>Context</code> corresponding to thread, or
   * <code>null</code> if no such context exists.
   */

  public synchronized Context getContext(Thread thread)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(thread)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getContext(java.lang.Thread)", true), jassParameters);
    idebughc.Context jassResult;

    /* precondition */
    if (!((thread!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","getContext(java.lang.Thread)",709,"thread_non_null");

    if (threadHashtable.containsKey(thread)) {
      jassResult = ( (Context)(threadHashtable.get(thread)));
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getContext(java.lang.Thread)", false), jassParameters);


      return jassResult;
    }
    else {
      jassResult = ( null);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getContext(java.lang.Thread)", false), jassParameters);


      return jassResult;
    }
  }

  /**
   * <p> Adds a context to the the class-global database of threads that
   * have debugging context. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@256ea2</b>: (debugContext!=null)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable
   * @param debugContext is the context that we are interested in
   * adding.
   * @return a boolean indicating if the context was added to the
   * database sucessfully or that the thread was already in the
   * database.  A false indicates that the context was invalid.
   */

  public synchronized boolean addContext(Context debugContext)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(debugContext)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addContext(idebughc.Context)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((debugContext!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","addContext(idebughc.Context)",731,"context_non_null");

    if (debugContext != null) {
      threadHashtable.put(debugContext.getThread(), debugContext);
        jassResult = ( true);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addContext(idebughc.Context)", false), jassParameters);


        return jassResult;
    } else {
      jassResult = ( false);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addContext(idebughc.Context)", false), jassParameters);


      return jassResult;
    }
  }

  /**
   * <p> Removes a context from the the class-global database of
   * threads that have debugging context. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@2701e</b>: (debugContext!=null)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable
   * @param debugContext is the context that we are interested in
   * removing.
   * @return a boolean indicating if the context was removed from
   * the database sucessfully or that the thread was not in the
   * database at all.  A false indicates that the context was
   * invalid or not in the table.
   */

  public synchronized boolean removeContext(Context debugContext)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(debugContext)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeContext(idebughc.Context)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((debugContext!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeContext(idebughc.Context)",755,"context_non_null");

    if ((debugContext != null) &&
        (threadHashtable.containsKey(debugContext))) {
      threadHashtable.remove(debugContext);
        jassResult = ( true);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeContext(idebughc.Context)", false), jassParameters);


        return jassResult;
    } else {
      jassResult = ( false);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeContext(idebughc.Context)", false), jassParameters);


      return jassResult;
    }
  }

  /**
   * <p> Returns an <code>Enumeration</code> that is the list of
   * class-global classes that have debugging enabled. </p>
   *
   * @concurrency GUARDED
   * @modifies QUERY
   * @return an <code>Enumeration</code> that is the list of class-global
   * classes that currently have debugging enabled (they are in the class
   * database). Returns a null if a null is passed, otherwise a zero-length
   * Enumeration will be returned if there is no information on the thread
   * at all.
   * @see Hashtable#elements
   */

  public synchronized Enumeration listClasses()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "listClasses()", true), jassParameters);
    java.util.Enumeration jassResult;

    // Get global category hashtable.
    Hashtable hashtable =
      (Hashtable)(threadHashtable.get("GLOBAL_CLASSES"));
    jassResult = ( (hashtable.elements()));
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "listClasses()", false), jassParameters);


    return jassResult;
  }
 
  /**
   * <p> Set a new class-global debugging level. </p>
   *
   * @concurrency GUARDED
   * @modifies level
   * @param level the new debugging level.
   * @return a boolean indicating whether the level change succeeded.
   * The only reason why a setLevel might fail is if the level passed
   * is out of range.
   */

  public synchronized boolean setLevel(int level)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(level)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "setLevel(int)", true), jassParameters);
    boolean jassResult;

    if ((level >= debugConstants.LEVEL_MIN) &&
        (level <= debugConstants.LEVEL_MAX)) {
      this.level = level;
        jassResult = ( true);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "setLevel(int)", false), jassParameters);


        return jassResult;
    } else {
      jassResult = ( false);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "setLevel(int)", false), jassParameters);


      return jassResult;
    }
   
  }

  /**
   * <p> Returns the current class-global debugging level. </p>
   *
   * @concurrency GUARDED
   * @modifies QUERY
   * @return the current class-global debugging level.
   */

  public synchronized int getLevel()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getLevel()", true), jassParameters);
    int jassResult;

    jassResult = ( level);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "getLevel()", false), jassParameters);


    return jassResult;
  }

  /**
   * <p> Returns an <code>Enumeration</code> that is the list of
   * class-global threads that have debugging enabled. </p>
   *
   * @concurrency GUARDED
   * @modifies QUERY
   * @return an <code>Enumeration</code> that is the list of class-global
   * threads that currently have debugging enabled (they are in the thread
   * database).
   * @see Hashtable#keys
   */

  public synchronized Enumeration listThreads()
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "listThreads()", true), jassParameters);
    java.util.Enumeration jassResult;

    jassResult = ( threadHashtable.keys());
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "listThreads()", false), jassParameters);


    return jassResult;
  }

  // Protected Methods
  // Package Methods
  // Private Methods

  /**
   * <p> Initialize all the static data-structures used by the
   * <code>Debug</code> class.  Note that the <code>initCategories()</code>
   * method is automatically called as necessary to initialize the default
   * categories database of the <code>Debug</code> class. </p>
   *
   * <dl><dt><b>Ensures:</b></dt><dd><code><b>jass.reflect.AssertionLabel@1a0c7c</b>: (threadHashtable!=null) &&<br><b>jass.reflect.AssertionLabel@29ae05</b>: (getAssert()!=null) &&<br><b>jass.reflect.AssertionLabel@5ff3a2</b>: (getCollect()==c) &&<br><b>jass.reflect.AssertionLabel@742b49</b>: (debugUtilities!=null) &&<br><b>jass.reflect.AssertionLabel@45e044</b>: (getDebugConstants()==dc)</code></dd></dl>
@concurrency CONCURRENT
   * @modifies threadHashtable, debugConstants, assert, collect,
   *           debugUtilities
   * @param dc an implementation of the <code>DebugConstants</code> that
   * defines the semantics of this debug context.
   * @param collect an implementation of the <code>Collect</code> class.
   */

  private void init(DebugConstants dc, Collect c)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(dc), new jass.runtime.traceAssertion.Parameter(c)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "init(idebughc.DebugConstants,idebughc.Collect)", true), jassParameters);


    idebughc.Debug jassOld = (idebughc.Debug)this.clone();
    threadHashtable = new Hashtable();
    Hashtable categoryHashtable = new Hashtable();
    threadHashtable.put("GLOBAL_CATEGORIES", categoryHashtable);
    this.debugConstants = dc;
    debugConstants.initCategories(categoryHashtable);
    Hashtable classHashtable = new Hashtable();
    threadHashtable.put("GLOBAL_CLASSES", classHashtable);
    classHashtable.put("*", new Boolean(true));

    // Note that we need to actually initialize our own debugging context!
    this.assert = new Assert(this);
    this.collect = c;

    debugUtilities = new Utilities(this);
    /* postcondition */
    if (!((threadHashtable!=null))) throw new jass.runtime.PostconditionException("idebughc.Debug","init(idebughc.DebugConstants,idebughc.Collect)",873,"threadHashtable_valid");
    if (!((jassInternal_getAssert()!=null))) throw new jass.runtime.PostconditionException("idebughc.Debug","init(idebughc.DebugConstants,idebughc.Collect)",874,"assert_valid");
    if (!((jassInternal_getCollect()==c))) throw new jass.runtime.PostconditionException("idebughc.Debug","init(idebughc.DebugConstants,idebughc.Collect)",875,"collect_valid");
    if (!((debugUtilities!=null))) throw new jass.runtime.PostconditionException("idebughc.Debug","init(idebughc.DebugConstants,idebughc.Collect)",876,"debugUtilities_valid");
    if (!((jassInternal_getDebugConstants()==dc))) throw new jass.runtime.PostconditionException("idebughc.Debug","init(idebughc.DebugConstants,idebughc.Collect)",877,"debugConstants_valid");
    if (!(isOn == jassOld.isOn && level == jassOld.level && jass.runtime.Tool.referenceEquals(debugOutputInterface,jassOld.debugOutputInterface))) throw new jass.runtime.PostconditionException("idebughc.Debug","init(idebughc.DebugConstants,idebughc.Collect)",-1,"Method has changed old value.");
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "init(idebughc.DebugConstants,idebughc.Collect)", false), jassParameters);

  }

  /**
   * <p> Adds a category to a hashtable of legal debugging categories.
   * Once a category exists in the database, its debugging level cannot be
   * changed without removing and re-adding the category to the
   * database. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@160f05</b>: (hashtable!=null) &&<br><b>jass.reflect.AssertionLabel@342cbf</b>: (category!=null) &&<br><b>jass.reflect.AssertionLabel@65b723</b>: (category.length()>0)</code></dd></dl>
@concurrency GUARDED
   * @modifies QUERY
   * @param hashtable the hashtable to remove the class from.
   * @param category the category to add to the set of defined
   * categories.
   * @param level the debugging level associated with the passed
   * category.
   * @return a boolean indicating if the category was sucessfully
   * added to the database.  A false indicates either the category was
   * already in the database at a different level or the parameters
   * were invalid.
   */

  private synchronized boolean
    addCategoryToHashtable(Hashtable hashtable, String category, int level)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(hashtable), new jass.runtime.traceAssertion.Parameter(category), new jass.runtime.traceAssertion.Parameter(level)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addCategoryToHashtable(java.util.Hashtable,java.lang.String,int)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((hashtable!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","addCategoryToHashtable(java.util.Hashtable,java.lang.String,int)",904,"hashtable_non_null");
    if (!((category!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","addCategoryToHashtable(java.util.Hashtable,java.lang.String,int)",905,"category_non_null");
    if (!((category.length()>0))) throw new jass.runtime.PreconditionException("idebughc.Debug","addCategoryToHashtable(java.util.Hashtable,java.lang.String,int)",906,"category_nonzero_length");

    // See if an entry for the passed category exists.
    if (hashtable.containsKey(category)) {
      if (((Integer)(hashtable.get(category))).intValue() != level) {
        jassResult = ( false);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addCategoryToHashtable(java.util.Hashtable,java.lang.String,int)", false), jassParameters);


        return jassResult;
      }
      else {
        jassResult = ( true);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addCategoryToHashtable(java.util.Hashtable,java.lang.String,int)", false), jassParameters);


        return jassResult;
      }
    }

    // Add a new entry for the passed category.
    hashtable.put(category, new Integer(level));
    jassResult = ( true);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "addCategoryToHashtable(java.util.Hashtable,java.lang.String,int)", false), jassParameters);


    return jassResult;
  }

  /**
   * <p> Removes a category from a database of legal debugging
   * categories. </p>
   *
   * <dl><dt><b>Requires:</b></dt><dd><code><b>jass.reflect.AssertionLabel@5a8767</b>: (hashtable!=null) &&<br><b>jass.reflect.AssertionLabel@6f7ce9</b>: (category!=null) &&<br><b>jass.reflect.AssertionLabel@71bbc9</b>: (category.length()>0)</code></dd></dl>
@concurrency GUARDED
   * @modifies threadHashtable, categoryHashtable
   * @param hashtable is the thread that we are interested in.
   * @param category the category to remove.
   * @return a boolean indicating if the category was sucessfully
   * removed from the database.  A false indicates that the parameters
   * were invalid.
   */

  private synchronized boolean
    removeCategoryFromHashtable(Hashtable hashtable, String category)
  {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(hashtable), new jass.runtime.traceAssertion.Parameter(category)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeCategoryFromHashtable(java.util.Hashtable,java.lang.String)", true), jassParameters);
    boolean jassResult;

    /* precondition */
    if (!((hashtable!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeCategoryFromHashtable(java.util.Hashtable,java.lang.String)",937,"hashtable_non_null");
    if (!((category!=null))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeCategoryFromHashtable(java.util.Hashtable,java.lang.String)",938,"category_non_null");
    if (!((category.length()>0))) throw new jass.runtime.PreconditionException("idebughc.Debug","removeCategoryFromHashtable(java.util.Hashtable,java.lang.String)",939,"category_nonzero_length");

    // If is in the hashtable, remove it.
    if (hashtable.containsKey(category))
      hashtable.remove(category);
    jassResult = ( true);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(jassResult)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "removeCategoryFromHashtable(java.util.Hashtable,java.lang.String)", false), jassParameters);


    return jassResult;
  }

  /* --- The following methods of class idebughc.Debug are generated by JASS --- */


 

  public DebugOutput jassInternal_getOutputInterface()
  {
    Thread currentThread = Thread.currentThread();
   
    if (threadHashtable.containsKey(currentThread)) {
      Context debugContext =
        (Context)(threadHashtable.get(currentThread));
      return debugContext.getOutputInterface();
    } else return this.debugOutputInterface;
  }


 

  public Assert jassInternal_getAssert()
  {
    return assert;
  }



 

  public Collect jassInternal_getCollect()
  {
    return collect;
  }


 

  public DebugConstants jassInternal_getDebugConstants()
  {
    return debugConstants;
  }


  protected void finalize () throws java.lang.Throwable {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "finalize()", true), jassParameters);
    super.finalize();
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "finalize()", false), jassParameters);
  }

  public boolean equals (java.lang.Object par0) {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(par0)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "equals(java.lang.Object)", true), jassParameters);
    boolean returnValue = super.equals(par0);
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(returnValue)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "equals(java.lang.Object)", false), jassParameters);
    return returnValue;
  }

  public java.lang.String toString () {
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jass.runtime.traceAssertion.Parameter[] jassParameters; jassParameters = new jass.runtime.traceAssertion.Parameter[] {}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "toString()", true), jassParameters);
    java.lang.String returnValue = super.toString();
    jass.runtime.traceAssertion.CommunicationManager.internalAction = true; jassParameters = new jass.runtime.traceAssertion.Parameter[] {new jass.runtime.traceAssertion.Parameter(returnValue)}; jass.runtime.traceAssertion.CommunicationManager.internalAction = false; jass.runtime.traceAssertion.CommunicationManager.communicate(this, new jass.runtime.traceAssertion.MethodReference("idebughc", "Debug", "toString()", false), jassParameters);
    return returnValue;
  }
 
} // end of class Debug

/*
* Local Variables:
* Mode: Java
* fill-column: 75
* End:
*/

 
TOP

Related Classes of idebughc.Debug

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.