0N/A/*
157N/A * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
157N/A * published by the Free Software Foundation. Oracle designates this
0N/A * particular file as subject to the "Classpath" exception as provided
157N/A * by Oracle in the LICENSE file that accompanied this code.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
157N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
157N/A * or visit www.oracle.com if you need additional information or have any
157N/A * questions.
0N/A */
0N/A
0N/A/*
0N/A * Licensed Materials - Property of IBM
0N/A * RMI-IIOP v1.0
0N/A * Copyright IBM Corp. 1998 1999 All Rights Reserved
0N/A *
0N/A */
0N/A
0N/Apackage sun.rmi.rmic.iiop;
0N/A
0N/Aimport sun.rmi.rmic.Main;
0N/Aimport sun.tools.java.ClassPath;
0N/Aimport java.io.OutputStream;
0N/Aimport sun.tools.java.ClassDefinition;
0N/Aimport sun.tools.java.ClassDeclaration;
0N/Aimport sun.tools.java.Identifier;
0N/Aimport sun.tools.java.ClassNotFound;
0N/Aimport java.util.HashSet;
0N/Aimport java.util.Hashtable;
0N/Aimport java.util.Enumeration;
0N/Aimport java.util.Iterator;
0N/A
0N/A/**
0N/A * BatchEnvironment for iiop extends rmic's version to add
0N/A * parse state.
0N/A */
0N/Apublic class BatchEnvironment extends sun.rmi.rmic.BatchEnvironment implements Constants {
0N/A
0N/A /*
0N/A * If the following flag is true, then the IDL generator can map
0N/A * the methods and constants of non-conforming types. However,
0N/A * this is very expensive, so the default should be false.
0N/A */
0N/A private boolean parseNonConforming = false;
0N/A
0N/A /**
0N/A * This flag indicates that the stubs and ties need to be generated without
0N/A * the package prefix (org.omg.stub).
0N/A */
0N/A private boolean standardPackage;
0N/A
0N/A /* Common objects used within package */
0N/A
0N/A HashSet alreadyChecked = new HashSet();
0N/A Hashtable allTypes = new Hashtable(3001, 0.5f);
0N/A Hashtable invalidTypes = new Hashtable(256, 0.5f);
0N/A DirectoryLoader loader = null;
0N/A ClassPathLoader classPathLoader = null;
0N/A Hashtable nameContexts = null;
0N/A Hashtable namesCache = new Hashtable();
0N/A NameContext modulesContext = new NameContext(false);
0N/A
0N/A ClassDefinition defRemote = null;
0N/A ClassDefinition defError = null;
0N/A ClassDefinition defException = null;
0N/A ClassDefinition defRemoteException = null;
0N/A ClassDefinition defCorbaObject = null;
0N/A ClassDefinition defSerializable = null;
0N/A ClassDefinition defExternalizable = null;
0N/A ClassDefinition defThrowable = null;
0N/A ClassDefinition defRuntimeException = null;
0N/A ClassDefinition defIDLEntity = null;
0N/A ClassDefinition defValueBase = null;
0N/A
0N/A sun.tools.java.Type typeRemoteException = null;
0N/A sun.tools.java.Type typeIOException = null;
0N/A sun.tools.java.Type typeException = null;
0N/A sun.tools.java.Type typeThrowable = null;
0N/A
0N/A ContextStack contextStack = null;
0N/A
0N/A /**
0N/A * Create a BatchEnvironment for rmic with the given class path,
0N/A * stream for messages and Main.
0N/A */
0N/A public BatchEnvironment(OutputStream out, ClassPath path, Main main) {
0N/A
0N/A super(out,path,main);
0N/A
0N/A // Make sure we have our definitions...
0N/A
0N/A try {
0N/A defRemote =
0N/A getClassDeclaration(idRemote).getClassDefinition(this);
0N/A defError =
0N/A getClassDeclaration(idJavaLangError).getClassDefinition(this);
0N/A defException =
0N/A getClassDeclaration(idJavaLangException).getClassDefinition(this);
0N/A defRemoteException =
0N/A getClassDeclaration(idRemoteException).getClassDefinition(this);
0N/A defCorbaObject =
0N/A getClassDeclaration(idCorbaObject).getClassDefinition(this);
0N/A defSerializable =
0N/A getClassDeclaration(idJavaIoSerializable).getClassDefinition(this);
0N/A defRuntimeException =
0N/A getClassDeclaration(idJavaLangRuntimeException).getClassDefinition(this);
0N/A defExternalizable =
0N/A getClassDeclaration(idJavaIoExternalizable).getClassDefinition(this);
0N/A defThrowable=
0N/A getClassDeclaration(idJavaLangThrowable).getClassDefinition(this);
0N/A defIDLEntity=
0N/A getClassDeclaration(idIDLEntity).getClassDefinition(this);
0N/A defValueBase=
0N/A getClassDeclaration(idValueBase).getClassDefinition(this);
0N/A typeRemoteException = defRemoteException.getClassDeclaration().getType();
0N/A typeException = defException.getClassDeclaration().getType();
0N/A typeIOException = getClassDeclaration(idJavaIoIOException).getType();
0N/A typeThrowable = getClassDeclaration(idJavaLangThrowable).getType();
0N/A
0N/A classPathLoader = new ClassPathLoader(path);
0N/A
0N/A } catch (ClassNotFound e) {
0N/A error(0, "rmic.class.not.found", e.name);
0N/A throw new Error();
0N/A }
0N/A }
0N/A
0N/A /**
0N/A * Return whether or not to parse non-conforming types.
0N/A */
0N/A public boolean getParseNonConforming () {
0N/A return parseNonConforming;
0N/A }
0N/A
0N/A /**
0N/A * Set whether or not to parse non-conforming types.
0N/A */
0N/A public void setParseNonConforming (boolean parseEm) {
0N/A
0N/A // If we are transitioning from not parsing to
0N/A // parsing, we need to throw out any previously
0N/A // parsed types...
0N/A
0N/A if (parseEm && !parseNonConforming) {
0N/A reset();
0N/A }
0N/A
0N/A parseNonConforming = parseEm;
0N/A }
0N/A
0N/A void setStandardPackage(boolean standardPackage) {
0N/A this.standardPackage = standardPackage;
0N/A }
0N/A
0N/A boolean getStandardPackage() {
0N/A return standardPackage;
0N/A }
0N/A
0N/A /**
0N/A * Clear out any data from previous executions.
0N/A */
0N/A public void reset () {
0N/A
0N/A // First, find all Type instances and call destroy()
0N/A // on them...
0N/A
0N/A for (Enumeration e = allTypes.elements() ; e.hasMoreElements() ;) {
0N/A Type type = (Type) e.nextElement();
0N/A type.destroy();
0N/A }
0N/A
0N/A for (Enumeration e = invalidTypes.keys() ; e.hasMoreElements() ;) {
0N/A Type type = (Type) e.nextElement();
0N/A type.destroy();
0N/A }
0N/A
0N/A for (Iterator e = alreadyChecked.iterator() ; e.hasNext() ;) {
0N/A Type type = (Type) e.next();
0N/A type.destroy();
0N/A }
0N/A
0N/A if (contextStack != null) contextStack.clear();
0N/A
0N/A // Remove and clear all NameContexts in the
0N/A // nameContexts cache...
0N/A
0N/A if (nameContexts != null) {
0N/A for (Enumeration e = nameContexts.elements() ; e.hasMoreElements() ;) {
0N/A NameContext context = (NameContext) e.nextElement();
0N/A context.clear();
0N/A }
0N/A nameContexts.clear();
0N/A }
0N/A
0N/A // Now remove all table entries...
0N/A
0N/A allTypes.clear();
0N/A invalidTypes.clear();
0N/A alreadyChecked.clear();
0N/A namesCache.clear();
0N/A modulesContext.clear();
0N/A
0N/A // Clean up remaining...
0N/A loader = null;
0N/A parseNonConforming = false;
0N/A
0N/A // REVISIT - can't clean up classPathLoader here
0N/A }
0N/A
0N/A /**
0N/A * Release resources, if any.
0N/A */
0N/A public void shutdown() {
0N/A if (alreadyChecked != null) {
0N/A //System.out.println();
0N/A //System.out.println("allTypes.size() = "+ allTypes.size());
0N/A //System.out.println(" InstanceCount before reset = "+Type.instanceCount);
0N/A reset();
0N/A //System.out.println(" InstanceCount AFTER reset = "+Type.instanceCount);
0N/A
0N/A alreadyChecked = null;
0N/A allTypes = null;
0N/A invalidTypes = null;
0N/A nameContexts = null;
0N/A namesCache = null;
0N/A modulesContext = null;
0N/A defRemote = null;
0N/A defError = null;
0N/A defException = null;
0N/A defRemoteException = null;
0N/A defCorbaObject = null;
0N/A defSerializable = null;
0N/A defExternalizable = null;
0N/A defThrowable = null;
0N/A defRuntimeException = null;
0N/A defIDLEntity = null;
0N/A defValueBase = null;
0N/A typeRemoteException = null;
0N/A typeIOException = null;
0N/A typeException = null;
0N/A typeThrowable = null;
0N/A
0N/A super.shutdown();
0N/A }
0N/A }
0N/A}