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

Fri, 14 Jun 2013 16:31:55 +0100

author
msheppar
date
Fri, 14 Jun 2013 16:31:55 +0100
changeset 512
81d694b1ab2f
parent 158
91006f157c46
child 748
6845b95cba6b
permissions
-rw-r--r--

8011157: Improve CORBA portablility
Summary: fix also reviewed by Alexander Fomin
Reviewed-by: alanb, coffeys, skoivu

     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 java.util.Vector;
    36 import sun.tools.java.CompilerError;
    37 import sun.tools.java.ClassNotFound;
    38 import sun.tools.java.ClassDefinition;
    40 /**
    41  * NCInterfaceType represents any non-special, non-conforming interface.
    42  * <p>
    43  * The static forNCInterface(...) method must be used to obtain an instance.
    44  * @author      Bryan Atsatt
    45  */
    46 public class NCInterfaceType extends InterfaceType {
    48     //_____________________________________________________________________
    49     // Public Interfaces
    50     //_____________________________________________________________________
    52     /**
    53      * Create an NCInterfaceType for the given class.
    54      *
    55      * If the class is not a properly formed or if some other error occurs, the
    56      * return value will be null, and errors will have been reported to the
    57      * supplied BatchEnvironment.
    58      */
    59     public static NCInterfaceType forNCInterface( ClassDefinition classDef,
    60                                                   ContextStack stack) {
    61         if (stack.anyErrors()) return null;
    63         boolean doPop = false;
    64         try {
    65             // Do we already have it?
    67             sun.tools.java.Type theType = classDef.getType();
    68             Type existing = getType(theType,stack);
    70             if (existing != null) {
    72                 if (!(existing instanceof NCInterfaceType)) return null; // False hit.
    74                                 // Yep, so return it...
    76                 return (NCInterfaceType) existing;
    77             }
    79             NCInterfaceType it = new NCInterfaceType(stack, classDef);
    80             putType(theType,it,stack);
    81             stack.push(it);
    82             doPop = true;
    84             if (it.initialize(stack)) {
    85                 stack.pop(true);
    86                 return it;
    87             } else {
    88                 removeType(theType,stack);
    89                 stack.pop(false);
    90                 return null;
    91             }
    92         } catch (CompilerError e) {
    93             if (doPop) stack.pop(false);
    94             return null;
    95         }
    96     }
    98     /**
    99      * Return a string describing this type.
   100      */
   101     public String getTypeDescription () {
   102         return "Non-conforming interface";
   103     }
   105     //_____________________________________________________________________
   106     // Internal/Subclass Interfaces
   107     //_____________________________________________________________________
   109     /**
   110      * Create a NCInterfaceType instance for the given class.  The resulting
   111      * object is not yet completely initialized.
   112      */
   113     private NCInterfaceType(ContextStack stack, ClassDefinition classDef) {
   114         super(stack,classDef,TYPE_NC_INTERFACE | TM_INTERFACE | TM_COMPOUND);
   115     }
   117     //_____________________________________________________________________
   118     // Internal Interfaces
   119     //_____________________________________________________________________
   121     /**
   122      * Initialize this instance.
   123      */
   124     private boolean initialize (ContextStack stack) {
   126         if (stack.getEnv().getParseNonConforming()) {
   128             Vector directInterfaces = new Vector();
   129             Vector directMethods = new Vector();
   130             Vector directMembers = new Vector();
   132             try {
   134                 // need to include parent interfaces in IDL generation...
   135                 addNonRemoteInterfaces( directInterfaces,stack );
   137                 // Get methods...
   139                 if (addAllMethods(getClassDefinition(),directMethods,false,false,stack) != null) {
   141                     // Get conforming constants...
   143                     if (addConformingConstants(directMembers,false,stack)) {
   145                         // We're ok, so pass 'em up...
   147                         if (!initialize(directInterfaces,directMethods,directMembers,stack,false)) {
   148                             return false;
   149                         }
   150                     }
   151                 }
   152                 return true;
   154             } catch (ClassNotFound e) {
   155                 classNotFound(stack,e);
   156             }
   157             return false;
   158         } else {
   159             return initialize(null,null,null,stack,false);
   160         }
   161     }
   162 }

mercurial