alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Java example source code file (Util.java)

This example Java source code file (Util.java) is included in the alvinalexander.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Learn more about this Java project at its project page.

Java - Java tags/keywords

constentry, enumeration, helper, holder, math, primitiveentry, printwriter, sequenceentry, string, stubfile, symtabentry, text, typedefentry, util, valuebase, valueentry, vector

The Util.java Java example source code

/*
 * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
/*
 * COMPONENT_NAME: idl.toJava
 *
 * ORIGINS: 27
 *
 * Licensed Materials - Property of IBM
 * 5639-D57 (C) COPYRIGHT International Business Machines Corp. 1997, 1999
 * RMI-IIOP v1.0
 *
 */

package com.sun.tools.corba.se.idl.toJavaPortable;

// Notes:
// -F46838.4<klr> Ported -td option from toJava.
// -10/17/98  KLR Ported fix for d48911 from toJava
// -10/18/98  KLR Ported fix from toJava for "unsigned long" constants
// -F46082.51<daz> Removed code to collect makefile list generation inforamtion
//  from getStream(); see f46830.
// -F46082.51<daz> Removed -stateful feature: methods javaStatefulName(String)
//  and javaStatefulName(SymtabEntry) are obsolete, supplanted by javaName().
// -D54640<daz> Represent unsigned long long expressions with their computed
//  value rather than their actual representation (see notes in method
//  parseTerminal(), parseBinary(), and parseUnary().)
// -D58319<daz> Add getVersion() method.
// -D48034<daz> Import Helper classes for typedef struct members when generating
//  helper.  See method addImportLines().
// -D59851<daz> Modify to enable QuickTest build. (pending)
// -D42256<daz> Determine import lines for template types, which may specify any
//  positive int., constant expression for a boundary. Such expression containing
//  non-literal contansts previously caused problems when appearing in constructs
//  structs, unions, exceptions, typedefs, operation types and parameters,
//  attributes; and of course, sequences, strings.
// -D59063<daz> Add helper for global exception to stub import list.
// -D58951<daz> Publicise members for QuickTest.
// -D59421<klr> Change ValueBaseHolder to SerializableHolder
// -D59596<klr> Prevent accesses to elements of empty Vectors.
// -D59771<daz> Add import stmt for Helper of global type in stubs.
// -D59355<daz> Remove target dir. from filename when writing to prolog.
// -D59437<daz> Fill typename information for value boxes.
// -D62023<klr> Don't import ValueBase*
// -D62023<klr> Add corbaLevel

import java.io.File;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.text.DateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Vector;

import com.sun.tools.corba.se.idl.ConstEntry;
import com.sun.tools.corba.se.idl.EnumEntry;
import com.sun.tools.corba.se.idl.ExceptionEntry;
import com.sun.tools.corba.se.idl.GenFileStream;
import com.sun.tools.corba.se.idl.InterfaceEntry;
import com.sun.tools.corba.se.idl.MethodEntry;
import com.sun.tools.corba.se.idl.NativeEntry;
import com.sun.tools.corba.se.idl.ParameterEntry;
import com.sun.tools.corba.se.idl.PrimitiveEntry;
import com.sun.tools.corba.se.idl.SequenceEntry;
import com.sun.tools.corba.se.idl.StringEntry;
import com.sun.tools.corba.se.idl.StructEntry;
import com.sun.tools.corba.se.idl.SymtabEntry;
import com.sun.tools.corba.se.idl.TypedefEntry;
import com.sun.tools.corba.se.idl.UnionBranch;
import com.sun.tools.corba.se.idl.UnionEntry;
import com.sun.tools.corba.se.idl.ValueEntry;
import com.sun.tools.corba.se.idl.ValueBoxEntry;
import com.sun.tools.corba.se.idl.InterfaceState;

import com.sun.tools.corba.se.idl.constExpr.*;

/**
 * Class Util is a repository of static members available for general
 * use by the IDL parser framework and any generator extensions.
 **/
public class Util extends com.sun.tools.corba.se.idl.Util
{
  // <d58319>
  /**
   * Fetch the version number of this build of the IDL-to-Java (portable)
   * compiler from the appropriate properties file.
   * @return the version number of this compiler build.
   **/
  public static String getVersion ()
  {
    return com.sun.tools.corba.se.idl.Util.getVersion ("com/sun/tools/corba/se/idl/toJavaPortable/toJavaPortable.prp");
  } // getVersion

  /**
   * This method is called by Setup.preEmit, so
   * symbolTable is available for all Util methods.
   **/
  static void setSymbolTable (Hashtable symtab)
  {
    symbolTable = symtab;
  } // setSymbolTable

  public static void setPackageTranslation( Hashtable pkgtrans )
  {
    packageTranslation = pkgtrans ;
  }

  public static boolean isInterface (String name)
  {
    return isInterface (name, symbolTable);
  } // isInterface

  static String arrayInfo (Vector arrayInfo)
  {
    int         arrays = arrayInfo.size ();
    String      info   = "";
    Enumeration e      = arrayInfo.elements ();
    while (e.hasMoreElements ())
      info = info + '[' + parseExpression ((Expression)e.nextElement ()) + ']';
    return info;
  } // arrayInfo

  // <d58951> static String sansArrayInfo (Vector arrayInfo)
  public static String sansArrayInfo (Vector arrayInfo)
  {
    int    arrays   = arrayInfo.size ();
    String brackets = "";
    for (int i = 0; i < arrays; ++i)
      brackets = brackets + "[]";
    return brackets;
  } // sansArrayInfo

  // <d58951> static String sansArrayInfo (String name)
  static public String sansArrayInfo (String name)
  {
    int index = name.indexOf ('[');
    if (index >= 0)
    {
      String array = name.substring (index);
      name = name.substring (0, index);
      while (!array.equals (""))
      {
        name = name + "[]";
        array = array.substring (array.indexOf (']') + 1);
      }
    }
    return name;
  } // sansArrayInfo

  /**
   * Given a symbol table entry, return the name of
   * the file which should be created.
   **/
  public static String fileName (SymtabEntry entry, String extension )
  {
    NameModifier nm = new NameModifierImpl() ;
    return fileName( entry, nm, extension ) ;
  } // fileName

  public static String fileName (SymtabEntry entry, NameModifier modifier, String extension )
  {
    // This may not be the most appropriate place for
    // the mkdir calls, but it's common to everything:
    String pkg = containerFullName (entry.container ());
    if (pkg != null && !pkg.equals (""))
      mkdir (pkg);

    String name = entry.name ();
    name = modifier.makeName( name ) + extension ;
    if (pkg != null && !pkg.equals (""))
      name = pkg + '/' + name;

    return name.replace ('/', File.separatorChar);
  } // fileName

  public static GenFileStream stream (SymtabEntry entry, String extension)
  {
    NameModifier nm = new NameModifierImpl() ;
    return stream(entry, nm, extension);
  } // stream

  public static GenFileStream stream (SymtabEntry entry, NameModifier modifier, String extension )
  {
    return getStream ( fileName (entry,modifier,extension), entry ) ;
  }

  public static GenFileStream getStream (String name, SymtabEntry entry)
  {
    // <f46838.4>
    String absPathName = ((Arguments)Compile.compiler.arguments).targetDir + name;
    if (Compile.compiler.arguments.keepOldFiles && new File (absPathName).exists ())
      return null;
    else
      // Write the data to the file stream
      return new GenFileStream (absPathName);
  } // getStream

  public static String containerFullName( SymtabEntry container)
  {
      String name = doContainerFullName( container ) ;
      if (packageTranslation.size() > 0)
          name = translate( name ) ;
      return name ;
  }

  public static String translate( String name )
  {
      String head = name ;
      String tail = "" ;
      int index ;
      String trname ;

      // Check for package name translations, starting with the
      // most specific match.
      do {
          trname = (String)(packageTranslation.get( head )) ;
          if (trname != null)
              return trname + tail ;

          index = head.lastIndexOf( '/' ) ;
          if (index >= 0) {
              tail = head.substring( index ) + tail ;
              head = head.substring( 0, index ) ;
          }
      } while (index >= 0) ;

      return name ;
  }

  private static String doContainerFullName (SymtabEntry container)
  {
    String name = "";

    if (container == null)
      name = "";
    else
    {
      if (container instanceof InterfaceEntry ||
          container instanceof StructEntry ||
          container instanceof UnionEntry)
        name = container.name () + "Package";
      else
        name = container.name ();

      if (container.container () != null &&
        !container.container ().name ().equals (""))
        name = doContainerFullName (container.container ()) + '/' + name;
    }

    return name;
  } // doContainerFullName

  /**
   * Given a SymtabEntry, return the string which should be used
   * for this entry. Enums are converted to ints, typedefs and
   * sequences are converted to their info types. javaQualifiedName
   * does not do any of these conversions.
   **/
  public static String javaName (SymtabEntry entry)
  {
    // First get the real name of this type
    String name = "";
    if (entry instanceof TypedefEntry || entry instanceof SequenceEntry)
      try
      {
        name = sansArrayInfo ((String)entry.dynamicVariable (Compile.typedefInfo));
      }
      catch (NoSuchFieldException e)
      {
        name = entry.name ();
      }
    else if (entry instanceof PrimitiveEntry)
      name = javaPrimName (entry.name ());
    else if (entry instanceof StringEntry)
      name = "String";
    else if (entry instanceof NativeEntry)
      name = javaNativeName (entry.name());
    else if (entry instanceof ValueEntry && entry.name ().equals ("ValueBase"))
        name = "java.io.Serializable";
    else if (entry instanceof ValueBoxEntry)
    {
      ValueBoxEntry v = (ValueBoxEntry) entry;
      TypedefEntry member = ((InterfaceState) v.state ().elementAt (0)).entry;
      SymtabEntry mType = member.type ();
      if (mType instanceof PrimitiveEntry)
      {
         name = containerFullName (entry.container ());
         if (!name.equals (""))
           name = name + '.';
         name = name + entry.name ();
      }
      else
         name = javaName (mType);
    }
    else
    {
      name = containerFullName (entry.container ());
      if (name.equals (""))
        name = entry.name ();
      else
        name = name + '.' + entry.name ();
    }

    // Make it a fully package-qualified name
    return name.replace ('/', '.');
  } // javaName

  public static String javaPrimName (String name)
  {
    if (name.equals ("long") || name.equals ("unsigned long"))
      name = "int";
    else if (name.equals ("octet"))
      name = "byte";
    // "unisigned long long" exceeds Java long.
    else if (name.equals ("long long") || name.equals ("unsigned long long"))
      name = "long";
    else if (name.equals ("wchar"))
      name = "char";
    else if (name.equals ("unsigned short"))
      name = "short";
    else if (name.equals ("any"))
      name = "org.omg.CORBA.Any";
    else if (name.equals ("TypeCode"))
      name = "org.omg.CORBA.TypeCode";
    else if (name.equals ("Principal")) // <d61961>
      name = "org.omg.CORBA.Principal";
    return name;
  } // javaPrimName

  public static String javaNativeName (String name)
  {

    // translations for Native declarations according to CORBA 2.3 spec

    if (name.equals ("AbstractBase") || name.equals ("Cookie"))
      name = "java.lang.Object";
    else if (name.equals ("Servant"))
      name = "org.omg.PortableServer.Servant";
    else if (name.equals ("ValueFactory"))
      name = "org.omg.CORBA.portable.ValueFactory";
    return name;
  }


  /**
   * Given a symtabEntry, return the name of this entry. This
   * method does not do any conversions like javaName does.
   **/
  public static String javaQualifiedName (SymtabEntry entry)
  {
    String name = "";
    if (entry instanceof PrimitiveEntry)
      name = javaPrimName (entry.name ());
    else if (entry instanceof StringEntry)
      name = "String";
    else if (entry instanceof ValueEntry && entry.name ().equals ("ValueBase"))
      name = "java.io.Serializable";
    else
    {
      SymtabEntry container = entry.container ();
      if (container != null)
        name = container.name ();
      if (name.equals (""))
        name = entry.name ();
      else
        name = containerFullName (entry.container ()) + '.' + entry.name ();
    }
    return name.replace ('/', '.');
  } // javaQualifiedName

  // <f46082.03> Publicize for extensions.
  //static String collapseName (String name)

  /**
   * Collapse primitive type names.
   **/
  public static String collapseName (String name)
  {
    if (name.equals ("unsigned short"))
      name = "ushort";
    else if (name.equals ("unsigned long"))
      name = "ulong";
    else if (name.equals ("unsigned long long"))
      name = "ulonglong";
    else if (name.equals ("long long"))
      name = "longlong";
    return name;
  } // collapseName

  /**
   *
   **/
  public static SymtabEntry typeOf (SymtabEntry entry)
  {
    while (entry instanceof TypedefEntry && ((TypedefEntry)entry).arrayInfo ().isEmpty () && !(entry.type () instanceof SequenceEntry))
      entry = entry.type ();
    return entry;
  } // typeOf

  /**
   * Fill the info field with the full name (with array info) of the type.
   **/
  static void fillInfo (SymtabEntry infoEntry)
  {
    String      arrayInfo   = "";
    SymtabEntry entry       = infoEntry;
    boolean     alreadyHave = false;

    do
    {
      try
      {
        alreadyHave = entry.dynamicVariable (Compile.typedefInfo) != null;
      }
      catch (NoSuchFieldException e)
      {}
      // If this entry's info has already been processed
      // don't bother processing it again, just take it.
      if (!alreadyHave)
      {
        if (entry instanceof TypedefEntry)
          arrayInfo = arrayInfo + arrayInfo (((TypedefEntry)entry).arrayInfo ());
        else if (entry instanceof SequenceEntry)
        {
          Expression maxSize = ((SequenceEntry)entry).maxSize ();
          if (maxSize == null)
            arrayInfo = arrayInfo + "[]";
          else
            arrayInfo = arrayInfo + '[' + parseExpression (maxSize) + ']';
        }
        if (entry.type () == null)
        {
          // <d59437> Suppress this message.  It tells the developer nothing, and
          // this path does not cause the algorithm to fail.  Value boxes may
          // contain anonymous types, like a struct or enum.
          //System.err.println (getMessage ("PreEmit.indeterminateTypeInfo", entry.typeName ()));
        }
        else
          entry = entry.type ();
      }
    } while (!alreadyHave && entry != null &&
        (entry instanceof TypedefEntry || entry instanceof SequenceEntry));
    // <d59437> Value boxes may contain types lacking typename info., which
    // causes the 2nd case, below, to fail with exception when retrieving the
    // javaName().
    if (entry instanceof ValueBoxEntry)
      fillValueBoxInfo ((ValueBoxEntry)entry);
    try
    {
      if (alreadyHave)
        infoEntry.dynamicVariable (Compile.typedefInfo, (String)entry.dynamicVariable (Compile.typedefInfo) + arrayInfo);
      else
        infoEntry.dynamicVariable (Compile.typedefInfo, javaName (entry) + arrayInfo);
    }
    catch (NoSuchFieldException e)
    {}
  } // fillInfo

  // <d59437>
  /**
   *
   **/
  static void fillValueBoxInfo (ValueBoxEntry vb)
  {
    SymtabEntry stateMember = (((InterfaceState) vb.state ().elementAt (0)).entry);
    if (stateMember.type() != null)
      Util.fillInfo (stateMember.type ());
    Util.fillInfo (stateMember);
  } // fillValueBoxInfo

  /**
   *
   **/
  public static String holderName (SymtabEntry entry)
  {
    String name;
    if (entry instanceof PrimitiveEntry)
      if (entry.name ().equals ("any"))
        name = "org.omg.CORBA.AnyHolder";
      else if (entry.name ().equals ("TypeCode"))
        name = "org.omg.CORBA.TypeCodeHolder";
      else if (entry.name ().equals ("Principal")) // <d61961>
        name = "org.omg.CORBA.PrincipalHolder";
      else
        name = "org.omg.CORBA." + capitalize (javaQualifiedName (entry)) + "Holder";
    else if (entry instanceof TypedefEntry)
    {
      TypedefEntry td = (TypedefEntry)entry;
      if (!td.arrayInfo ().isEmpty () || td.type () instanceof SequenceEntry)
        name = javaQualifiedName (entry) + "Holder";
      else
        name = holderName (entry.type ());
    }
    else if (entry instanceof StringEntry)
      name = "org.omg.CORBA.StringHolder";
    else if (entry instanceof ValueEntry)
    {
      if (entry.name ().equals ("ValueBase"))
          name = "org.omg.CORBA.ValueBaseHolder"; // <d59421>, 
      else
          name = javaName (entry) + "Holder";
    } else if (entry instanceof NativeEntry) {
      // do not attach holder to the translation for Native Entries, e.g.
      // for Cookie it should be CookieHolder instead of java.lang.ObjectHolder
      // returns the complete name for the package, etc.
      name = javaQualifiedName(entry) + "Holder";
    }
    else
      name = javaName (entry) + "Holder";
    return name;
  } // holderName

  /**
   * <d61056>
   **/
  public static String helperName (SymtabEntry entry, boolean qualifiedName)
  {
    if (entry instanceof ValueEntry)
      if (entry.name ().equals ("ValueBase"))
          return "org.omg.CORBA.ValueBaseHelper";

    if (qualifiedName)
      return javaQualifiedName (entry) + "Helper";
    else
      return javaName (entry) + "Helper";
  } // helperName

  public static final short
      TypeFile   = 0,
      StubFile   = 1,
      HelperFile = 2,
      HolderFile = 3,
      StateFile  = 4;

  /**
   *
   **/
  public static void writePackage (PrintWriter stream, SymtabEntry entry)
  {
    writePackage (stream, entry, TypeFile);
  } // writePackage

  /**
   *
   **/
  public static void writePackage (PrintWriter stream, SymtabEntry entry, String name, short type)
  {
    if (name != null && !name.equals (""))
    {
      stream.println ("package " + name.replace ('/', '.') + ';');

      // This type is in a module.  Just in case it refers to types
      // in the unnamed module, add an import statement for each of
      // those types.
      if (!Compile.compiler.importTypes.isEmpty ())
      {
        stream.println ();
        Vector v = addImportLines (entry, Compile.compiler.importTypes, type);
        printImports (v, stream);
      }
    }
  } // writePackage

  /**
   *
   **/
  public static void writePackage (PrintWriter stream, SymtabEntry entry, short type)
  {
    String fullName = containerFullName (entry.container ());
    if (fullName != null && !fullName.equals (""))
    {
      stream.println ("package " + fullName.replace ('/', '.') + ';');
       // This type is in a module.  Just in case it refers to types
      // in the unnamed module, add an import statement for each of
      // those types.
      if ((type != HolderFile || entry instanceof TypedefEntry) && !Compile.compiler.importTypes.isEmpty ())
      {
        stream.println ();
        Vector v = addImportLines (entry, Compile.compiler.importTypes, type);
        printImports (v, stream);
      }
      /*
      Enumeration e = Compile.compiler.importTypes.elements ();
      while (e.hasMoreElements ())
      {
        SymtabEntry i = (SymtabEntry)e.nextElement ();
        // Write import for type
        if (!(i instanceof TypedefEntry))
          stream.println ("import " + i.name () + ';');

        // Write import for Helper
        if (!(i instanceof ConstEntry))
          stream.println ("import " + i.name () + "Helper;");

        // Write import for Holder
        if (!(i instanceof ConstEntry))
          if (!(i instanceof TypedefEntry) || (i.type () instanceof SequenceEntry || !((TypedefEntry)i).arrayInfo ().isEmpty ()))
            stream.println ("import " + i.name () + "Holder;");
      }
      */
    }
  } // writePackage

  /**
   *
   **/
  static private void printImports (Vector importList, PrintWriter stream)
  {
    Enumeration e = importList.elements ();
    while (e.hasMoreElements ())
      stream.println ("import " + (String)e.nextElement () + ';');
  } // printImport

  /**
   *
   **/
  static private void addTo (Vector importList, String name)
  {
    // REVISIT - <d62023-klr> was also importing ValueBaseHolder and Helper
    if (name.startsWith ("ValueBase"))  // don't import ValueBase*
      if ((name.compareTo ("ValueBase") == 0) ||
          (name.compareTo ("ValueBaseHolder") == 0) ||
              (name.compareTo ("ValueBaseHelper") == 0))
        return;
    if (!importList.contains (name))
      importList.addElement (name);
  } // addTo

  /**
   *
   **/
  static private Vector addImportLines (SymtabEntry entry, Vector importTypes, short type)
  {
    Vector importList = new Vector ();
    if (entry instanceof ConstEntry)
    {
      ConstEntry c      = (ConstEntry)entry;
      Object     cvalue = c.value ().value ();
      if (cvalue instanceof ConstEntry && importTypes.contains (cvalue))
        addTo (importList, ((ConstEntry)cvalue).name ());
    }
    else if (entry instanceof ValueEntry && type == HelperFile) // <d59512>
    {
      // This code inspired by ValueGen.getConcreteBaseTypeCode().  Helper method
      // type() could be invoked against a global valuetype.
      if (((ValueEntry)entry).derivedFrom ().size () > 0) // <59596> KLR HACK
      {
        ValueEntry base = (ValueEntry)((ValueEntry)entry).derivedFrom ().elementAt (0);
        String baseName = base.name ();
        if (!"ValueBase".equals (baseName))
          if (importTypes.contains (base))
            addTo (importList, baseName + "Helper");
      }
    }
    else if (entry instanceof InterfaceEntry && (type == TypeFile || type == StubFile))
    {
      InterfaceEntry i = (InterfaceEntry)entry;

      if (i instanceof ValueEntry) // <d59512>
      {
        // Examine interface parents in supports vector.
        Enumeration e = ((ValueEntry)i).supports ().elements ();
        while (e.hasMoreElements ())
        {
          SymtabEntry parent = (SymtabEntry)e.nextElement ();
          if (importTypes.contains (parent))
          {
            addTo (importList, parent.name () + "Operations");
          }
          // If this is a stub, then recurse to the parents
          if (type == StubFile)
          {
            if (importTypes.contains (parent))
              addTo (importList, parent.name ());
            Vector subImportList = addImportLines (parent, importTypes, StubFile);
            Enumeration en = subImportList.elements ();
            while (en.hasMoreElements ())
            {
              addTo (importList, (String)en.nextElement ());
            }
          }
        }
      }
      // Interface or valuetype -- Examine interface and valuetype parents,
      // Look through derivedFrom vector
      Enumeration e = i.derivedFrom ().elements ();
      while (e.hasMoreElements ())
      {
        SymtabEntry parent = (SymtabEntry)e.nextElement ();
        if (importTypes.contains (parent))
        {
          addTo (importList, parent.name ());
          // <d59512> Always add both imports, even though superfluous.  Cannot
          // tell when writing Operations or Signature interface!
          if (!(parent instanceof ValueEntry)) // && parent.name ().equals ("ValueBase")))
            addTo (importList, parent.name () + "Operations");
        }
        // If this is a stub, then recurse to the parents
        if (type == StubFile)
        {
          Vector subImportList = addImportLines (parent, importTypes, StubFile);
          Enumeration en = subImportList.elements ();
          while (en.hasMoreElements ())
          {
            addTo (importList, (String)en.nextElement ());
          }
        }
      }
      // Look through methods vector
      e = i.methods ().elements ();
      while (e.hasMoreElements ())
      {
        MethodEntry m = (MethodEntry)e.nextElement ();

        // Look at method type
        SymtabEntry mtype = typeOf (m.type ());
        if (mtype != null && importTypes.contains (mtype))
          if (type == TypeFile || type == StubFile)
          {
            addTo (importList, mtype.name ());
            addTo (importList, mtype.name () + "Holder");
            if (type == StubFile)
              addTo (importList, mtype.name () + "Helper");
          }
        checkForArrays (mtype, importTypes, importList);
        // <d42256> Print import lines for globals constants and constants
        // within global interfaces.
        if (type == StubFile)
          checkForBounds (mtype, importTypes, importList);

        // Look through exceptions
        Enumeration exEnum = m.exceptions ().elements ();
        while (exEnum.hasMoreElements ())
        {
          ExceptionEntry ex = (ExceptionEntry)exEnum.nextElement ();
          if (importTypes.contains (ex))
          {
            addTo (importList, ex.name ());
            addTo (importList, ex.name () + "Helper"); // <d59063>
          }
        }

        // Look through parameters
        Enumeration parms = m.parameters ().elements ();
        while (parms.hasMoreElements ())
        {
          ParameterEntry parm = (ParameterEntry)parms.nextElement ();
          SymtabEntry parmType = typeOf (parm.type ());
          if (importTypes.contains (parmType))
          {
            // <d59771> Helper needed in stubs.
            if (type == StubFile)
              addTo (importList, parmType.name () + "Helper");
            if (parm.passType () == ParameterEntry.In)
              addTo (importList, parmType.name ());
            else
              addTo (importList, parmType.name () + "Holder");
          }
          checkForArrays (parmType, importTypes, importList);
          // <d42256>
          if (type == StubFile)
            checkForBounds (parmType, importTypes, importList);
        }
      }
    }
    else if (entry instanceof StructEntry)
    {
      StructEntry s = (StructEntry)entry;

      // Look through the members
      Enumeration members = s.members ().elements ();
      while (members.hasMoreElements ())
      {
        SymtabEntry member = (TypedefEntry)members.nextElement ();
        // <d48034> Need to add helper name for typedef members.  This name
        // is referenced at typecode generation in Helper class.
        SymtabEntry memberType = member.type ();
        member = typeOf (member);
        if (importTypes.contains (member))
        {
          // If this IS a typedef, then there are only Helper/Holder classes.
          //if (!(member instanceof TypedefEntry))
          // <d59437>  Valueboxes
          if (!(member instanceof TypedefEntry) && !(member instanceof ValueBoxEntry))
            addTo (importList, member.name ());
          // <d48034> Add helper name of alias, too, if member is a typedef.
          //if (type == HelperFile)
          //  addTo (importList, member.name () + "Helper");
          if (type == HelperFile)
          {
            addTo (importList, member.name () + "Helper");
            if (memberType instanceof TypedefEntry)
              addTo (importList, memberType.name () + "Helper");
          }
        }
        checkForArrays (member, importTypes, importList);
        checkForBounds (member, importTypes, importList);
      }
    }
    else if (entry instanceof TypedefEntry)
    {
      TypedefEntry t = (TypedefEntry)entry;
      String arrays = checkForArrayBase (t, importTypes, importList);
      if (type == HelperFile)
      {
        checkForArrayDimensions (arrays, importTypes, importList);
        try
        {
          String name = (String)t.dynamicVariable (Compile.typedefInfo);
          int index = name.indexOf ('[');
          if (index >= 0)
            name = name.substring (0, index);
          // See if the base type should be added to the list.
          SymtabEntry typeEntry = (SymtabEntry)symbolTable.get (name);
          if (typeEntry != null && importTypes.contains (typeEntry))
            addTo (importList, typeEntry.name () + "Helper");
        }
        catch (NoSuchFieldException e)
        {}

        // <d42256> Typedefs for global bounded strings need import
        // statement when bound expression contains non-literal constants.
        checkForBounds (typeOf (t), importTypes, importList);
      }
      Vector subImportList = addImportLines (t.type (), importTypes, type);
      Enumeration e = subImportList.elements ();
      while (e.hasMoreElements ())
        addTo (importList, (String)e.nextElement ());
    }
    else if (entry instanceof UnionEntry)
    {
      UnionEntry u = (UnionEntry)entry;

      // Look at the discriminant type
      SymtabEntry utype = typeOf (u.type ());
      if (utype instanceof EnumEntry && importTypes.contains (utype))
        addTo (importList, utype.name ());

      // Look through the branches
      Enumeration branches = u.branches ().elements ();
      while (branches.hasMoreElements ())
      {
        UnionBranch branch = (UnionBranch)branches.nextElement ();
        SymtabEntry branchEntry = typeOf (branch.typedef);
        if (importTypes.contains (branchEntry))
        {
          addTo (importList, branchEntry.name ());
          if (type == HelperFile)
            addTo (importList, branchEntry.name () + "Helper");
        }
        checkForArrays (branchEntry, importTypes, importList);
        // <d42256>
        checkForBounds (branchEntry, importTypes, importList);
      }
    }

    // If a typedef is not a sequence or an array, only holders and
    // helpers are generated for it.  Remove references to such
    // class names.
    Enumeration en = importList.elements ();
    while (en.hasMoreElements ())
    {
      String name = (String)en.nextElement ();
      SymtabEntry e = (SymtabEntry)symbolTable.get (name);
      if (e != null && e instanceof TypedefEntry)
      {
        TypedefEntry t = (TypedefEntry)e;
        if (t.arrayInfo ().size () == 0 || !(t.type () instanceof SequenceEntry))
          importList.removeElement (name);
      }
    }
    return importList;
  } // addImportLines

  /**
   *
   **/
  static private void checkForArrays (SymtabEntry entry, Vector importTypes, Vector importList)
  {
    if (entry instanceof TypedefEntry)
    {
      TypedefEntry t = (TypedefEntry)entry;
      String arrays = checkForArrayBase (t, importTypes, importList);
      checkForArrayDimensions (arrays, importTypes, importList);
    }
  } // checkForArrays

  /**
   *
   **/
  static private String checkForArrayBase (TypedefEntry t, Vector importTypes, Vector importList)
  {
    String arrays = "";
    try
    {
      String name = (String)t.dynamicVariable (Compile.typedefInfo);
      int index = name.indexOf ('[');
      if (index >= 0)
      {
        arrays = name.substring (index);
        name = name.substring (0, index);
      }

      // See if the base type should be added to the list.
      SymtabEntry typeEntry = (SymtabEntry)symbolTable.get (name);
      if (typeEntry != null && importTypes.contains (typeEntry))
        addTo (importList, typeEntry.name ());
    }
    catch (NoSuchFieldException e)
    {}
    return arrays;
  } // checkForArrayBase

  /**
   *
   **/
  static private void checkForArrayDimensions (String arrays, Vector importTypes, Vector importList)
  {
    // See if any of the arrays contain a constentry.
    // If so, see if it should be added to the list.
    while (!arrays.equals (""))
    {
      int index = arrays.indexOf (']');
      String dim = arrays.substring (1, index);
      arrays = arrays.substring (index + 1);
      SymtabEntry constant = (SymtabEntry)symbolTable.get (dim);
      if (constant == null)
      {
        // A constant expr could be of the form <const> OR
        // <interface>..  This if branch checks for that case.
        int i = dim.lastIndexOf ('.');
        if (i >= 0)
          constant = (SymtabEntry)symbolTable.get (dim.substring (0, i));
      }
      if (constant != null && importTypes.contains (constant))
        addTo (importList, constant.name ());
    }
  } // checkForArrayDimensions

  // <d42256> Call the following method when its necessary to determine the
  // the import types for IDL constructs containing arbitrary positive int.
  // expressions, which may specify non-literal constants.

  /**
   * Determine the import lines for template types.
   **/
  static private void checkForBounds (SymtabEntry entry, Vector importTypes, Vector importList)
  {
    // Obtain actual type, just to be complete.
    SymtabEntry entryType = entry;
    while (entryType instanceof TypedefEntry)
      entryType = entryType.type ();

    if (entryType instanceof StringEntry && ((StringEntry)entryType).maxSize () != null)
      checkForGlobalConstants (((StringEntry)entryType).maxSize ().rep (), importTypes, importList);
    else
      if (entryType instanceof SequenceEntry && ((SequenceEntry)entryType).maxSize () != null)
        checkForGlobalConstants (((SequenceEntry)entryType).maxSize ().rep (), importTypes, importList);
  } // checkForBounds

  /**
   * Extract the global constants from the supplied integer expression
   * representation (string) and add them to the supplied import list.
   **/
  static private void checkForGlobalConstants (String exprRep, Vector importTypes, Vector importList)
  {
    // NOTE: Do not use '/' as a delimiter. Symbol table names use '/' as a
    // delimiter and would not be otherwise properly collected. Blanks and
    // arithmetic symbols do not appear in tokens, except for '/'.
    java.util.StringTokenizer st = new java.util.StringTokenizer (exprRep, " +-*()~&|^%<>");
    while (st.hasMoreTokens ())
    {
      String token = st.nextToken ();
      // When token contains '/', it represents the division symbol or
      // a nested type (e.g., I/x). Ignore the division symbol, and don't
      // forget constants declared within global interfaces!
      if (!token.equals ("/"))
      {
        SymtabEntry typeEntry = (SymtabEntry)symbolTable.get (token);
        if (typeEntry instanceof ConstEntry)
        {
          int slashIdx = token.indexOf ('/');
          if (slashIdx < 0)  // Possible global constant
          {
            if (importTypes.contains (typeEntry))
              addTo (importList, typeEntry.name ());
          }
          else  // Possible constant in global interface
          {
            SymtabEntry constContainer = (SymtabEntry)symbolTable.get (token.substring (0, slashIdx));
            if (constContainer instanceof InterfaceEntry && importTypes.contains (constContainer))
              addTo (importList, constContainer.name ());
          }
        }
      }
    }
  } // checkForGlobalConstants

  /**
   *
   **/
  public static void writeInitializer (String indent, String name, String arrayDcl, SymtabEntry entry, PrintWriter stream)
  {
    if (entry instanceof TypedefEntry)
    {
      TypedefEntry td = (TypedefEntry)entry;
      writeInitializer (indent, name, arrayDcl + sansArrayInfo (td.arrayInfo ()), td.type (), stream);
    }
    else if (entry instanceof SequenceEntry)
      writeInitializer (indent, name, arrayDcl + "[]", entry.type (), stream);
    else if (entry instanceof EnumEntry)
      if (arrayDcl.length () > 0)
        stream.println (indent + javaName (entry) + ' ' + name + arrayDcl + " = null;");
      else
        stream.println (indent + javaName (entry) + ' ' + name + " = null;");
    else if (entry instanceof PrimitiveEntry)
    {
      boolean array = arrayDcl.length () > 0;
      String tname = javaPrimName (entry.name ());
      if (tname.equals ("boolean"))
        stream.println (indent + "boolean " + name + arrayDcl + " = " + (array ? "null;" : "false;"));
      else if (tname.equals ("org.omg.CORBA.TypeCode"))
        stream.println (indent + "org.omg.CORBA.TypeCode " + name + arrayDcl + " = null;");
      else if (tname.equals ("org.omg.CORBA.Any"))
        stream.println (indent + "org.omg.CORBA.Any " + name + arrayDcl + " = null;");
      else if (tname.equals ("org.omg.CORBA.Principal")) // <d61961>
        stream.println (indent + "org.omg.CORBA.Principal " + name + arrayDcl + " = null;");
      else
        stream.println (indent + tname + ' ' + name + arrayDcl + " = " + (array ? "null;" : '(' + tname + ")0;"));
    }
    // <f46082.51> Remove -stateful feature. This case is identical to next one
    // because javaName() supplants javaStatefulName().
    //else if (entry instanceof InterfaceEntry && ((InterfaceEntry)entry).state () != null)
    //  stream.println (indent + javaStatefulName ((InterfaceEntry)entry) + ' ' + name + arrayDcl + " = null;");
    else
      stream.println (indent + javaName (entry) + ' ' + name + arrayDcl + " = null;");
  } // writeInitializer

  /**
   *
   **/
  public static void writeInitializer (String indent, String name, String arrayDcl, SymtabEntry entry, String initializer, PrintWriter stream)
  {
    if (entry instanceof TypedefEntry)
    {
      TypedefEntry td = (TypedefEntry)entry;
      writeInitializer (indent, name, arrayDcl + sansArrayInfo (td.arrayInfo ()), td.type (), initializer, stream);
    }
    else if (entry instanceof SequenceEntry)
      writeInitializer (indent, name, arrayDcl + "[]", entry.type (), initializer, stream);
    else if (entry instanceof EnumEntry)
      if (arrayDcl.length () > 0)
        stream.println (indent + javaName (entry) + ' ' + name + arrayDcl + " = " + initializer + ';');
      else
        stream.println (indent + javaName (entry) + ' ' + name + " = " + initializer + ';');
    else if (entry instanceof PrimitiveEntry)
    {
      boolean array = arrayDcl.length () > 0;
      String tname = javaPrimName (entry.name ());
      if (tname.equals ("boolean"))
        stream.println (indent + "boolean " + name + arrayDcl + " = " + initializer + ';');
      else if (tname.equals ("org.omg.CORBA.TypeCode"))
        stream.println (indent + "org.omg.CORBA.TypeCode " + name + arrayDcl + " = " + initializer + ';');
      else if (tname.equals ("org.omg.CORBA.Any"))
        stream.println (indent + "org.omg.CORBA.Any " + name + arrayDcl + " = " + initializer + ';');
      else if (tname.equals ("org.omg.CORBA.Principal")) // <d61961>
        stream.println (indent + "org.omg.CORBA.Principal " + name + arrayDcl + " = " + initializer + ';');
      else
        stream.println (indent + tname + ' ' + name + arrayDcl + " = " + initializer + ';');
    }
    // <f46082.51> Remove -stateful feature. This case is identical to next one
    // because javaName() supplants javaStatefulName().
    //else if (entry instanceof InterfaceEntry && ((InterfaceEntry)entry).state () != null)
    //  stream.println (indent + javaStatefulName ((InterfaceEntry)entry) + ' ' + name + arrayDcl + " = " + initializer + ';');
    else
      stream.println (indent + javaName (entry) + ' ' + name + arrayDcl + " = " + initializer + ';');
  } // writeInitializer

  /**
   *
   **/
  public static void mkdir (String name)
  {
    String targetDir = ((Arguments)Compile.compiler.arguments).targetDir; // F46838.4
    name = (targetDir + name).replace ('/', File.separatorChar); // F46838.4
    File pkg = new File (name);
    if (!pkg.exists ())
      if (!pkg.mkdirs ())
        System.err.println (getMessage ("Util.cantCreatePkg", name));
  } // mkdir

  /**
   *
   **/
  public static void writeProlog (PrintWriter stream, String filename)
  {
    // <d59355> Remove target directory
    String targetDir = ((Arguments)Compile.compiler.arguments).targetDir;
    if (targetDir != null)
      filename = filename.substring (targetDir.length ());
    stream.println ();
    stream.println ("/**");
    stream.println ("* " + filename.replace (File.separatorChar, '/') +
        " .");
    stream.println ("* " + Util.getMessage ("toJavaProlog1",
        Util.getMessage ("Version.product", Util.getMessage ("Version.number"))));
    // <d48911> Do not introduce invalid escape characters into comment! 
    //stream.println ("* " + Util.getMessage ("toJavaProlog2", Compile.compiler.arguments.file));
    stream.println ("* " + Util.getMessage ("toJavaProlog2", Compile.compiler.arguments.file.replace (File.separatorChar, '/')));

    ///////////////
    // This SHOULD work, but there's a bug in the JDK.
    //    stream.println ("* " + DateFormat.getDateTimeInstance (DateFormat.FULL, DateFormat.FULL, Locale.getDefault ()).format (new Date ()));
    // This gets around the bug:

    DateFormat formatter = DateFormat.getDateTimeInstance (DateFormat.FULL, DateFormat.FULL, Locale.getDefault ());

    // Japanese-specific workaround.  JDK bug 4069784 being repaired by JavaSoft.
    // Keep this transient solution until bug fix is reported.cd .

    if (Locale.getDefault () == Locale.JAPAN)
      formatter.setTimeZone (java.util.TimeZone.getTimeZone ("JST"));
    else
      formatter.setTimeZone (java.util.TimeZone.getDefault ());

    stream.println ("* " + formatter.format (new Date ()));

    // <daz>
    ///////////////

    stream.println ("*/");
    stream.println ();
  } // writeProlog

  // keywords ending in Holder or Helper or Package have '_' prepended.
  // These prepended underscores must not be part of anything sent
  // across the wire, so these two methods are provided to strip them
  // off.

  /**
   *
   **/
  public static String stripLeadingUnderscores (String string)
  {
    while (string.startsWith ("_"))
      string = string.substring (1);
    return string;
  } // stripLeadingUnderscores

  /**
   *
   **/
  public static String stripLeadingUnderscoresFromID (String string)
  {
    String stringPrefix = "";
    int slashIndex = string.indexOf (':');
    if (slashIndex >= 0)
      do
      {
        stringPrefix = stringPrefix + string.substring (0, slashIndex + 1);
        string = string.substring (slashIndex + 1);
        while (string.startsWith ("_"))
          string = string.substring (1);
        slashIndex = string.indexOf ('/');
      } while (slashIndex >= 0);
    return stringPrefix + string;
  } // stripLeadingUnderscoresFromID

  /**
   *
   **/
  public static String parseExpression (Expression e)
  {
    if (e instanceof Terminal)
      return parseTerminal ((Terminal)e);
    else if (e instanceof BinaryExpr)
      return parseBinary ((BinaryExpr)e);
    else if (e instanceof UnaryExpr)
      return parseUnary ((UnaryExpr)e);
    else
      return "(UNKNOWN_VALUE)"; // This shouldn't happen unless someone slips
                                // in another type of expression.
  } // parseExpression

  /**
   *
   **/
  static String parseTerminal (Terminal e)
  {
    if (e.value () instanceof ConstEntry)
    {
      ConstEntry c = (ConstEntry)e.value ();
      if (c.container () instanceof InterfaceEntry)
        return javaQualifiedName (c.container ()) + '.' + c.name ();
      else
        return javaQualifiedName (c) + ".value";
    }
    else if (e.value () instanceof Expression)
      return '(' + parseExpression ((Expression)e.value ()) + ')';
    else if (e.value () instanceof Character)
    {
      if (((Character)e.value ()).charValue () == '\013')
        // e.rep is \v.  \v for vertical tab is meaningless in Java.
        return "'\\013'";
      else if (((Character)e.value ()).charValue () == '\007')
        // e.rep is \a.  \a for alert is meaningless in Java.
        return "'\\007'";
      else if (e.rep ().startsWith ("'\\x"))
        return hexToOctal (e.rep ());
      else if (e.rep ().equals ("'\\?'"))
        return "'?'";
      else
        return e.rep ();
    }
    else if (e.value () instanceof Boolean)
      return e.value ().toString ();

    // <d54640> If value is type "unsigned long long" (ull) and its magnitude
    // is greater than the maximal Java long (i.e., IDL long long) value, then
    // return its signed representation rather than its actual representation.
    /*
    // Support long long
    //else if (e.value () instanceof Long)
    else if (e.value () instanceof BigInteger &&
             (e.type ().indexOf ("long long") >= 0 || e.type ().equals ("unsigned long"))) // <klr>
    {
      String rep   = e.rep ();
      int    index = rep.indexOf (')');
      if (index < 0)
        return rep + 'L';
      else
        return rep.substring (0, index) + 'L' + rep.substring (index);
    }
    */
    else if (e.value () instanceof BigInteger)
    {
      // Get the correct primitive type. Since integer types (octet, short,
      // long, long long, unsigned short, unsigned long, unsigned long long)
      // could be aliased (typedef'ed) to any arbitrary levels, the code
      // below walks up the alias chain to get to the primitive type.

      // Get the symbol table entry corresponding to the 'type'.
      SymtabEntry typeEntry = (SymtabEntry) symbolTable.get(e.type());

      // Get to the primitive type.
      while (typeEntry.type() != null) {
          typeEntry = typeEntry.type();
      }
      String type = typeEntry.name();

      if (type.equals("unsigned long long") &&
          ((BigInteger)e.value ()).compareTo (Expression.llMax) > 0) // value > long long Max?
      {
        // Convert to signed value, which will always be negative.
        BigInteger v = (BigInteger)e.value ();
        v = v.subtract (Expression.twoPow64);
        int index = e.rep ().indexOf (')');
        if (index < 0)
          return v.toString () + 'L';
        else
          return '(' + v.toString () + 'L' + ')';
      }
      else if ( type.indexOf("long long") >= 0 || type.equals("unsigned long") )
      {
        String rep   = e.rep ();
        int    index = rep.indexOf (')');
        if (index < 0)
          return rep + 'L';
        else
          return rep.substring (0, index) + 'L' + rep.substring (index);
      }
      else
        return e.rep ();
    } // end <d54640>
    else
      return e.rep ();
  } // parseTerminal

  /**
   *
   **/
  static String hexToOctal (String hex)
  {
    // The format of hex is '/xXX' where XX is one or two hex digits.
    // This statement pulls off XX.
    hex = hex.substring (3, hex.length () - 1);
    return "'\\" + Integer.toString (Integer.parseInt (hex, 16), 8) + "'";
  } // hexToOctal

  /**
   *
   **/
  static String parseBinary (BinaryExpr e)
  {
    String castString = "";
    if (e.value () instanceof Float || e.value () instanceof Double)
    {
      castString = "(double)";
      if (!(e instanceof Plus || e instanceof Minus ||
            e instanceof Times || e instanceof Divide))
        System.err.println ("Operator " + e.op () + " is invalid on floating point numbers");
    }
    else if (e.value () instanceof Number)
    {
      if (e.type (). indexOf ("long long") >= 0)
        castString = "(long)";
      else
        castString = "(int)";
    }
    else
    {
      castString = "";
      System.err.println ("Unknown type in constant expression");
    }

    // <d54640> Must emit value rather than representation when type "unsigned
    // long long" (ull) because emitted binary arithmetic expressions containing
    // ull's converted to long (i.e., IDL long long) do not always compute to
    // the correct result.

    //return castString + '(' + parseExpression (e.left ()) + ' ' + e.op () + ' ' + parseExpression (e.right ()) + ')';
    if (e.type ().equals ("unsigned long long"))
    {
      BigInteger value = (BigInteger)e.value ();
      if (value.compareTo (Expression.llMax) > 0) // value > long long max?
        value = value.subtract (Expression.twoPow64); // Convert to Java long (signed)
      return castString + '(' + value.toString () + 'L' + ')';
    }
    else
      return castString + '(' + parseExpression (e.left ()) + ' ' + e.op () + ' ' + parseExpression (e.right ()) + ')';
    // <d54640> end
  } // parseBinary

  /**
   *
   **/
  static String parseUnary (UnaryExpr e)
  {
    if (!(e.value () instanceof Number))
      return "(UNKNOWN_VALUE)"; // This shouldn't happen if the parser checked the expression types correctly.
    else if ((e.value () instanceof Float || e.value () instanceof Double) && e instanceof Not)
      return "(UNKNOWN_VALUE)"; // This shouldn't happen if the parser checked the expression types correctly.
    else
    {
      String castString = "";
      if (e.operand ().value () instanceof Float ||
          e.operand ().value () instanceof Double)
        castString = "(double)";
      // Support long long.
      //else
      //  castString = "(long)";
      else if (e.type (). indexOf ("long long") >= 0)
        castString = "(long)";
      else
        castString = "(int)";

      // <d54640> Must emit value rather than representation when type is
      // "unsigned long long" (ull) because emitted unary arithmetic expressions
      // containing a ull converted to long (i.e., IDL long long) do not always
      // compute to the correct result.

      //return castString + e.op () + parseExpression (e.operand ());
      if (e.type ().equals ("unsigned long long"))
      {
        BigInteger value = (BigInteger)e.value ();
        if (value.compareTo (Expression.llMax) > 0) // value > long long max?
          value = value.subtract (Expression.twoPow64); // Convert to Java long (signed)
        return castString + '(' + value.toString () + 'L' + ')';
      }
      else
        return castString + e.op () + parseExpression (e.operand ());
      // end <d54640>
    }
  } // parseUnary

  /**
   *
   **/
  public static boolean IDLEntity (SymtabEntry entry)
  {
    boolean rc = true;
    if (entry instanceof PrimitiveEntry || entry instanceof StringEntry)
       rc = false;
    else if (entry instanceof TypedefEntry)
       rc = IDLEntity (entry.type ());
    return rc;
  } // IDLEntity

  // <d62023>
  /**
   * @return true if the current setting of corbaLevel is within delta of
   *    the range min <= corbaLevel <= max
   **/
  public static boolean corbaLevel (float min, float max)
  {
    float level = Compile.compiler.arguments.corbaLevel;
    float delta = 0.001f;
    if ((level - min + delta >= 0.0f) && (max - level + delta >= 0.0f))
        return true;
    else
        return false;
  } // corbaLevel

  static Hashtable symbolTable = new Hashtable ();
  static Hashtable packageTranslation = new Hashtable() ;
} // class Util

Other Java examples (source code examples)

Here is a short list of links related to this Java Util.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.