/*
 * 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.parser
 *
 * 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;

// NOTES:

import java.io.PrintWriter;

import java.util.Hashtable;
import java.util.Stack;
import java.util.Vector;

This is the base class for all symbol table entries.
See Also:
/** * This is the base class for all symbol table entries. * @see AttributeEntry * @see ConstEntry * @see EnumEntry * @see ExceptionEntry * @see IncludeEntry * @see InterfaceEntry * @see MethodEntry * @see ModuleEntry * @see ParameterEntry * @see PragmaEntry * @see PrimitiveEntry * @see SequenceEntry * @see StructEntry * @see TypedefEntry * @see UnionEntry **/
public class SymtabEntry { public SymtabEntry () { initDynamicVars (); } // ctor SymtabEntry (SymtabEntry that, IDLID clone) { _module = that._module; _name = that._name; _type = that._type; _typeName = that._typeName; _sourceFile = that._sourceFile; _info = that._info; _repID = (RepositoryID)clone.clone (); ((IDLID)_repID).appendToName (_name); if (that instanceof InterfaceEntry || that instanceof ModuleEntry || that instanceof StructEntry || that instanceof UnionEntry || (that instanceof SequenceEntry && this instanceof SequenceEntry)) _container = that; else _container = that._container; initDynamicVars (); _comment = that._comment; // <21jul1997daz> } // ctor
This is a shallow copy constructor
/** This is a shallow copy constructor */
SymtabEntry (SymtabEntry that) { _module = that._module; _name = that._name; _type = that._type; _typeName = that._typeName; _sourceFile = that._sourceFile; _info = that._info; _repID = (RepositoryID)that._repID.clone (); _container = that._container; if (_type instanceof ForwardEntry) ((ForwardEntry)_type).types.addElement (this); initDynamicVars (); // <21JUL1997> _comment = that._comment; } // ctor void initDynamicVars () { _dynamicVars = new Vector (maxKey + 1); for (int i = 0; i <= maxKey; ++i) _dynamicVars.addElement (null); } // initDynamicVars
This is a shallow copy clone
/** This is a shallow copy clone */
public Object clone () { return new SymtabEntry (this); } // clone
Returns:the concatenation of the module and the name, delimited by '/'.
/** @return the concatenation of the module and the name, delimited by '/'. */
public final String fullName () { return _module.equals ("") ? _name : _module + '/' + _name; } // fullName
Get the name of this entry's module. If there are modules within modules, each module name is separated by '/'.
Returns:this entry's module name.
/** Get the name of this entry's module. If there are modules within modules, each module name is separated by '/'. @return this entry's module name. */
public String module () { return _module; } // module
Set the module for this entry.
Params:
  • newName – the new name of the module.
/** Set the module for this entry. @param newName the new name of the module. */
public void module (String newName) { if (newName == null) _module = ""; else _module = newName; } // module
Returns:the name of this entry.
/** @return the name of this entry. */
public String name () { return _name; } // name
Set the name.
Params:
  • newName – the new name.
/** Set the name. @param newName the new name. */
public void name (String newName) { if (newName == null) _name = ""; else _name = newName; // Update the RepositoryID if (_repID instanceof IDLID) ((IDLID)_repID).replaceName (newName); } // name
Returns:the type name of this entry.
/** @return the type name of this entry. */
public String typeName () { return _typeName; } // typeName protected void typeName (String typeName) { _typeName = typeName; } // typeName
Returns:the type entry of this entry
/** @return the type entry of this entry */
public SymtabEntry type () { return _type; } // type public void type (SymtabEntry newType) { if (newType == null) typeName (""); else typeName (newType.fullName ()); _type = newType; if (_type instanceof ForwardEntry) ((ForwardEntry)_type).types.addElement (this); } // type
The file name in which this entry was defined.
/** The file name in which this entry was defined. */
public IncludeEntry sourceFile () { return _sourceFile; } // sourceFile
The file name in which this entry was defined.
/** The file name in which this entry was defined. */
public void sourceFile (IncludeEntry file) { _sourceFile = file; } // sourceFile
This must be either an InterfaceEntry or a ModuleEntry. It can be nothing else.
/** This must be either an InterfaceEntry or a ModuleEntry. It can be nothing else. */
public SymtabEntry container () { return _container; } // container
This must be either an InterfaceEntry or a ModuleEntry. It can be nothing else.
/** This must be either an InterfaceEntry or a ModuleEntry. It can be nothing else. */
public void container (SymtabEntry newContainer) { if (newContainer instanceof InterfaceEntry || newContainer instanceof ModuleEntry) _container = newContainer; } // container
Returns:the repository ID for this entry.
/** @return the repository ID for this entry. */
public RepositoryID repositoryID () { return _repID; } // repositoryID
Set the repository ID for this entry.
Params:
  • id – the new repository ID.
/** Set the repository ID for this entry. @param id the new repository ID. */
public void repositoryID (RepositoryID id) { _repID = id; } // repositoryID
Should this type be emitted?
/** Should this type be emitted? */
public boolean emit () { return _emit && _isReferencable ; } // emit public void emit (boolean emit) { _emit = emit; } // emit /* <21jul1997daz> Accessors for comment */ public Comment comment() { return _comment; } public void comment( Comment comment ) { _comment = comment; } public boolean isReferencable() { return _isReferencable ; } public void isReferencable( boolean value ) { _isReferencable = value ; } static Stack includeStack = new Stack (); static void enteringInclude () { includeStack.push (new Boolean (setEmit)); setEmit = false; } // enteringInclude static void exitingInclude () { setEmit = ((Boolean)includeStack.pop ()).booleanValue (); } // exitingInclude
Other variables besides the default ones can be dynamically placed into SymTabEntry (and therefore on all symbol table entries) by extenders. Before such a variable can exist, its key must be obtained by calling getVariableKey.
/** Other variables besides the default ones can be dynamically placed into SymTabEntry (and therefore on all symbol table entries) by extenders. Before such a variable can exist, its key must be obtained by calling getVariableKey. */
public static int getVariableKey () { return ++maxKey; } // dynamicVariable
Other variables besides the default ones can be dynamically placed into SymTabEntry (and therefore on all symbol table entries) by extenders. This method assigns the value to the variable of the given key. A valid key must be obtained by calling the method getVariableKey. If the key is invalid, NoSuchFieldException is thrown.
/** Other variables besides the default ones can be dynamically placed into SymTabEntry (and therefore on all symbol table entries) by extenders. This method assigns the value to the variable of the given key. A valid key must be obtained by calling the method getVariableKey. If the key is invalid, NoSuchFieldException is thrown. */
public void dynamicVariable (int key, Object value) throws NoSuchFieldException { if (key > maxKey) throw new NoSuchFieldException (Integer.toString (key)); else { if (key >= _dynamicVars.size ()) growVars (); _dynamicVars.setElementAt (value, key); } } // dynamicVariable
Other variables besides the default ones can be dynamically placed into SymTabEntry (and therefore on all symbol table entries) by extenders. This method gets the value of the variable of the given key. A valid key must be obtained by calling the method getVariableKey. If the key is invalid, NoSuchFieldException is thrown.
/** Other variables besides the default ones can be dynamically placed into SymTabEntry (and therefore on all symbol table entries) by extenders. This method gets the value of the variable of the given key. A valid key must be obtained by calling the method getVariableKey. If the key is invalid, NoSuchFieldException is thrown. */
public Object dynamicVariable (int key) throws NoSuchFieldException { if (key > maxKey) throw new NoSuchFieldException (Integer.toString (key)); else { if (key >= _dynamicVars.size ()) growVars (); return _dynamicVars.elementAt (key); } } // dynamicVariable void growVars () { int diff = maxKey - _dynamicVars.size () + 1; for (int i = 0; i < diff; ++i) _dynamicVars.addElement (null); } // growVars
Invoke a generator. A call to this method is only meaningful for subclasses of SymtabEntry. If called on this class, it is a no-op.
Params:
  • symbolTable – the symbol table is a hash table whose key is a fully qualified type name and whose value is a SymtabEntry or a subclass of SymtabEntry.
  • stream – the stream to which the generator should sent its output.
/** Invoke a generator. A call to this method is only meaningful for subclasses of SymtabEntry. If called on this class, it is a no-op. @param symbolTable the symbol table is a hash table whose key is a fully qualified type name and whose value is a SymtabEntry or a subclass of SymtabEntry. @param stream the stream to which the generator should sent its output. */
public void generate (Hashtable symbolTable, PrintWriter stream) { } // generate
Access a generator. A call to this method is only meaningful for subclasses of SymtabEntry. If called on this class, it is a no-op.
Returns:an object which implements the Generator interface.
/** Access a generator. A call to this method is only meaningful for subclasses of SymtabEntry. If called on this class, it is a no-op. @return an object which implements the Generator interface. */
public Generator generator () { return null; } // generator static boolean setEmit = true; static int maxKey = -1; private SymtabEntry _container = null; private String _module = ""; private String _name = ""; private String _typeName = ""; private SymtabEntry _type = null; private IncludeEntry _sourceFile = null; private Object _info = null; private RepositoryID _repID = new IDLID ("", "", "1.0"); private boolean _emit = setEmit; private Comment _comment = null; private Vector _dynamicVars; private boolean _isReferencable = true ; } // class SymtabEntry /*======================================================================================= DATE<AUTHOR> ACTION --------------------------------------------------------------------------------------- 21jul1997<daz> Added _comment data member to afford transferring comments from source file to target; added acessor methods for comment. =======================================================================================*/