src/share/classes/sun/rmi/rmic/iiop/BatchEnvironment.java

Wed, 28 Mar 2012 02:50:50 -0700

author
mbankal
date
Wed, 28 Mar 2012 02:50:50 -0700
changeset 371
e324dfb90c9e
parent 158
91006f157c46
child 748
6845b95cba6b
permissions
-rw-r--r--

7079902: Refine CORBA data models
Reviewed-by: coffeys

     1 /*
     2  * Copyright (c) 1998, 2007, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    26 /*
    27  * Licensed Materials - Property of IBM
    28  * RMI-IIOP v1.0
    29  * Copyright IBM Corp. 1998 1999  All Rights Reserved
    30  *
    31  */
    33 package sun.rmi.rmic.iiop;
    35 import sun.rmi.rmic.Main;
    36 import sun.tools.java.ClassPath;
    37 import java.io.OutputStream;
    38 import sun.tools.java.ClassDefinition;
    39 import sun.tools.java.ClassDeclaration;
    40 import sun.tools.java.Identifier;
    41 import sun.tools.java.ClassNotFound;
    42 import java.util.HashSet;
    43 import java.util.Hashtable;
    44 import java.util.Enumeration;
    45 import java.util.Iterator;
    47 /**
    48  * BatchEnvironment for iiop extends rmic's version to add
    49  * parse state.
    50  */
    51 public class BatchEnvironment extends sun.rmi.rmic.BatchEnvironment implements Constants {
    53     /*
    54      * If the following flag is true, then the IDL generator can map
    55      * the methods and constants of non-conforming types. However,
    56      * this is very expensive, so the default should be false.
    57      */
    58     private boolean parseNonConforming = false;
    60     /**
    61      * This flag indicates that the stubs and ties need to be generated without
    62      * the package prefix (org.omg.stub).
    63      */
    64     private boolean standardPackage;
    66     /* Common objects used within package */
    68     HashSet alreadyChecked = new HashSet();
    69     Hashtable allTypes = new Hashtable(3001, 0.5f);
    70     Hashtable invalidTypes = new Hashtable(256, 0.5f);
    71     DirectoryLoader loader = null;
    72     ClassPathLoader classPathLoader = null;
    73     Hashtable nameContexts = null;
    74     Hashtable namesCache = new Hashtable();
    75     NameContext modulesContext = new NameContext(false);
    77     ClassDefinition defRemote = null;
    78     ClassDefinition defError = null;
    79     ClassDefinition defException = null;
    80     ClassDefinition defRemoteException = null;
    81     ClassDefinition defCorbaObject = null;
    82     ClassDefinition defSerializable = null;
    83     ClassDefinition defExternalizable = null;
    84     ClassDefinition defThrowable = null;
    85     ClassDefinition defRuntimeException = null;
    86     ClassDefinition defIDLEntity = null;
    87     ClassDefinition defValueBase = null;
    89     sun.tools.java.Type typeRemoteException = null;
    90     sun.tools.java.Type typeIOException = null;
    91     sun.tools.java.Type typeException = null;
    92     sun.tools.java.Type typeThrowable = null;
    94     ContextStack contextStack = null;
    96     /**
    97      * Create a BatchEnvironment for rmic with the given class path,
    98      * stream for messages and Main.
    99      */
   100     public BatchEnvironment(OutputStream out, ClassPath path, Main main) {
   102         super(out,path,main);
   104         // Make sure we have our definitions...
   106         try {
   107             defRemote =
   108                 getClassDeclaration(idRemote).getClassDefinition(this);
   109             defError =
   110                 getClassDeclaration(idJavaLangError).getClassDefinition(this);
   111             defException =
   112                 getClassDeclaration(idJavaLangException).getClassDefinition(this);
   113             defRemoteException =
   114                 getClassDeclaration(idRemoteException).getClassDefinition(this);
   115             defCorbaObject =
   116                 getClassDeclaration(idCorbaObject).getClassDefinition(this);
   117             defSerializable =
   118                 getClassDeclaration(idJavaIoSerializable).getClassDefinition(this);
   119             defRuntimeException =
   120                 getClassDeclaration(idJavaLangRuntimeException).getClassDefinition(this);
   121             defExternalizable =
   122                 getClassDeclaration(idJavaIoExternalizable).getClassDefinition(this);
   123             defThrowable=
   124                 getClassDeclaration(idJavaLangThrowable).getClassDefinition(this);
   125             defIDLEntity=
   126                 getClassDeclaration(idIDLEntity).getClassDefinition(this);
   127             defValueBase=
   128                 getClassDeclaration(idValueBase).getClassDefinition(this);
   129             typeRemoteException = defRemoteException.getClassDeclaration().getType();
   130             typeException = defException.getClassDeclaration().getType();
   131             typeIOException = getClassDeclaration(idJavaIoIOException).getType();
   132             typeThrowable = getClassDeclaration(idJavaLangThrowable).getType();
   134             classPathLoader = new ClassPathLoader(path);
   136         } catch (ClassNotFound e) {
   137             error(0, "rmic.class.not.found", e.name);
   138             throw new Error();
   139         }
   140     }
   142     /**
   143      * Return whether or not to parse non-conforming types.
   144      */
   145     public boolean getParseNonConforming () {
   146         return parseNonConforming;
   147     }
   149     /**
   150      * Set whether or not to parse non-conforming types.
   151      */
   152     public void setParseNonConforming (boolean parseEm) {
   154         // If we are transitioning from not parsing to
   155         // parsing, we need to throw out any previously
   156         // parsed types...
   158         if (parseEm && !parseNonConforming) {
   159             reset();
   160         }
   162         parseNonConforming = parseEm;
   163     }
   165     void setStandardPackage(boolean standardPackage) {
   166         this.standardPackage = standardPackage;
   167     }
   169     boolean getStandardPackage() {
   170         return standardPackage;
   171     }
   173     /**
   174      * Clear out any data from previous executions.
   175      */
   176     public void reset () {
   178         // First, find all Type instances and call destroy()
   179         // on them...
   181         for (Enumeration e = allTypes.elements() ; e.hasMoreElements() ;) {
   182             Type type = (Type) e.nextElement();
   183             type.destroy();
   184         }
   186         for (Enumeration e = invalidTypes.keys() ; e.hasMoreElements() ;) {
   187             Type type = (Type) e.nextElement();
   188             type.destroy();
   189         }
   191         for (Iterator e = alreadyChecked.iterator() ; e.hasNext() ;) {
   192             Type type = (Type) e.next();
   193             type.destroy();
   194         }
   196         if (contextStack != null) contextStack.clear();
   198         // Remove and clear all NameContexts in the
   199         // nameContexts cache...
   201         if (nameContexts != null) {
   202             for (Enumeration e = nameContexts.elements() ; e.hasMoreElements() ;) {
   203                 NameContext context = (NameContext) e.nextElement();
   204                 context.clear();
   205             }
   206             nameContexts.clear();
   207         }
   209         // Now remove all table entries...
   211         allTypes.clear();
   212         invalidTypes.clear();
   213         alreadyChecked.clear();
   214         namesCache.clear();
   215         modulesContext.clear();
   217         // Clean up remaining...
   218         loader = null;
   219         parseNonConforming = false;
   221         // REVISIT - can't clean up classPathLoader here
   222     }
   224     /**
   225      * Release resources, if any.
   226      */
   227     public void shutdown() {
   228         if (alreadyChecked != null) {
   229             //System.out.println();
   230             //System.out.println("allTypes.size() = "+ allTypes.size());
   231             //System.out.println("    InstanceCount before reset = "+Type.instanceCount);
   232             reset();
   233             //System.out.println("    InstanceCount AFTER reset = "+Type.instanceCount);
   235             alreadyChecked = null;
   236             allTypes = null;
   237             invalidTypes = null;
   238             nameContexts = null;
   239             namesCache = null;
   240             modulesContext = null;
   241             defRemote = null;
   242             defError = null;
   243             defException = null;
   244             defRemoteException = null;
   245             defCorbaObject = null;
   246             defSerializable = null;
   247             defExternalizable = null;
   248             defThrowable = null;
   249             defRuntimeException = null;
   250             defIDLEntity = null;
   251             defValueBase = null;
   252             typeRemoteException = null;
   253             typeIOException = null;
   254             typeException = null;
   255             typeThrowable = null;
   257             super.shutdown();
   258         }
   259     }
   260 }

mercurial