--- old/src/java.corba/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/ValueGen24.java 2018-01-30 20:26:04.000000000 -0500 +++ /dev/null 2018-01-30 20:26:04.000000000 -0500 @@ -1,417 +0,0 @@ -/* - * 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: -// -D62023 Update for Java 2.4 RTF -// -D62794.1 Don't include operations inherited from abstract valuetypes -// -D62794.1 Don't include operations inherited from supported interfaces - -import java.io.File; -import java.io.PrintWriter; -import java.util.Hashtable; -import java.util.Enumeration; -import java.util.Vector; - -import com.sun.tools.corba.se.idl.GenFileStream; -import com.sun.tools.corba.se.idl.InterfaceEntry; -import com.sun.tools.corba.se.idl.SymtabEntry; -import com.sun.tools.corba.se.idl.TypedefEntry; -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.MethodEntry; -import com.sun.tools.corba.se.idl.AttributeEntry; -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; - -/** - * - **/ -public class ValueGen24 extends ValueGen -{ - /** - * Public zero-argument constructor. - **/ - public ValueGen24 () - { - } // ctor - - /** - * d62023 - delete constructor; helper is abstract - **/ - protected void writeConstructor () - { - } // writeConstructor - - /** - *
-   * d62023 - delete write_value from non-boxed helpers
-   *        - delete _write from non-boxed helpers
-   * 
- **/ - public void helperWrite (SymtabEntry entry, PrintWriter stream) - { - // REVISIT: Abstract/Custom?? - // per Simon mail 5/17/99 - stream.println (" ((org.omg.CORBA_2_3.portable.OutputStream) ostream).write_value (value, id ());"); - } // helperWrite - - /** - * d62023 - **/ - public void helperRead (String entryName, SymtabEntry entry, PrintWriter stream) - { - // REVISIT: Abstract/Custom?? - // per Simon mail 5/17/99 - stream.println (" return (" + entryName + ")((org.omg.CORBA_2_3.portable.InputStream) istream).read_value (id ());"); - } // helperRead - - /** - * d62023 - suppress initializers from mapped value; now generated in - * the Helper class and Factory class - **/ - protected void writeInitializers () - { - // override to do nothing - } // writeInitializers - - /** - * d62023 - goes in mapped class, not Helper - **/ - protected void writeTruncatable () // - { - if (!v.isAbstract ()) { - stream.println (" private static String[] _truncatable_ids = {"); - stream.print (" " + Util.helperName(v, true) + ".id ()"); - - // Any safe ValueEntry must have a concete value parent. - // The topmost parent cannot be safe since it doesn't have - // a concrete parent. - ValueEntry child = v; - while (child.isSafe ()) - { - stream.println(","); - ValueEntry parent = (ValueEntry)child.derivedFrom ().elementAt (0); - stream.print(" \"" + Util.stripLeadingUnderscoresFromID (parent.repositoryID ().ID ()) + "\""); - child = parent; - } - stream.println(); - stream.println(" };"); - stream.println(); - stream.println (" public String[] _truncatable_ids() {"); - stream.println (" return _truncatable_ids;"); - stream.println (" }"); - stream.println (); - } - } // writeTruncatable - - class ImplStreamWriter { - private boolean isImplementsWritten = false ; - - public void writeClassName( String name ) - { - if (!isImplementsWritten) { - stream.print( " implements " ) ; - isImplementsWritten = true ; - } else - stream.print( ", " ) ; - - stream.print( name ) ; - } - } - - /** - * d62023 - CustomMarshal {@literal ->} CustomValue for custom valuetypes - * mapped class is abstract - **/ - protected void writeHeading () - { - ImplStreamWriter isw = new ImplStreamWriter() ; - - Util.writePackage (stream, v); - Util.writeProlog (stream, ((GenFileStream)stream).name ()); - - if (v.comment () != null) - v.comment ().generate ("", stream); - - if (v.isAbstract ()) { - writeAbstract (); - return; - } else - stream.print ("public abstract class " + v.name ()); - - // There should always be at least one parent: ValueBase - SymtabEntry parent = (SymtabEntry) v.derivedFrom ().elementAt (0); - - // If parent is ValueBase, it's mapped to java.io.Serializable - String parentName = Util.javaName (parent); - boolean cv = false; // true if we've already implemented CustomValue - - if (parentName.equals ("java.io.Serializable")) { - if (((ValueEntry)v).isCustom ()) { - isw.writeClassName( "org.omg.CORBA.portable.CustomValue" ) ; - cv = true; - } else - isw.writeClassName( "org.omg.CORBA.portable.StreamableValue" ) ; - } else if ( !((ValueEntry)parent).isAbstract ()) - stream.print (" extends " + parentName); - - // if inheriting from abstract values - for (int i = 0; i < v.derivedFrom ().size (); i++) { - parent = (SymtabEntry) v.derivedFrom ().elementAt (i); - if ( ((ValueEntry)parent).isAbstract ()) { - isw.writeClassName( Util.javaName(parent) ) ; - } - } - - // Write out the supported interfaces - Enumeration enumeration = v.supports().elements(); - while (enumeration.hasMoreElements()) { - InterfaceEntry ie = (InterfaceEntry)(enumeration.nextElement()) ; - String cname = Util.javaName(ie) ; - if (!ie.isAbstract()) - cname += "Operations" ; - isw.writeClassName( cname ) ; - } - - // for when a custom valuetype inherits from a non-custom valuetype - if ( v.isCustom () && !cv) - isw.writeClassName( "org.omg.CORBA.portable.CustomValue" ) ; - - stream.println (); - stream.println ("{"); - } // writeHeading - - /** - * d62023 - private state maps to protected, not default - **/ - protected void writeMembers () - { - // if the value type contains no data members, a null return is expected - if (v.state () == null) - return; - - for (int i = 0; i < v.state ().size (); i ++) - { - InterfaceState member = (InterfaceState) v.state ().elementAt (i); - SymtabEntry entry = (SymtabEntry) member.entry; - Util.fillInfo (entry); - - if (entry.comment () != null) - entry.comment ().generate (" ", stream); - - String modifier = " "; - if (member.modifier == InterfaceState.Public) - modifier = " public "; - else - modifier = " protected "; - Util.writeInitializer (modifier, entry.name (), "", entry, stream); - } - stream.println(); - } // writeMembers - - /** - * d62023 - methods need to be abstract writeStreamable - **/ - protected void writeMethods () - { - // contained vector contains methods, attributes, const, enums, exceptions, - // structs, unions, or typedefs that are declared inside the value object. - // State members of the nested types are also included in this vector. - // Thus, if the declaration of a constructed type is nested in the decl. - // of a state member, e.g struct x {boolean b;} memberx; - // the generation of the nested type must be handled here. - Enumeration e = v.contained ().elements (); - while (e.hasMoreElements ()) - { - SymtabEntry contained = (SymtabEntry)e.nextElement (); - if (contained instanceof AttributeEntry) - { - AttributeEntry element = (AttributeEntry)contained; - ((AttributeGen24)element.generator ()).abstractMethod (symbolTable, element, stream); - } - else if (contained instanceof MethodEntry) - { - MethodEntry element = (MethodEntry)contained; - ((MethodGen24)element.generator ()).abstractMethod (symbolTable, element, stream); - } - else - { - // Generate the type referenced by the typedef. - if (contained instanceof TypedefEntry) - contained.type ().generate (symbolTable, stream); - - // Note that we also need to generate the typedef itself if - // contained is a typedef. - contained.generate (symbolTable, stream); - } - } - - // Abstract values are mapped to interfaces. There is no need to generate - // the bindings for inheriting methods in case of inheritance from other - // abstract values or supporting interface - if (v.isAbstract ()) - return; - - // Non-abstract, Non-Custom valuetypes support the Streamable interface - if (!(v.isCustom () || v.isAbstract ())) - writeStreamableMethods (); - } // writeMethods - - /** - * d62023 - call super._read() - **/ - public int read (int index, String indent, String name, SymtabEntry entry, PrintWriter stream) - { - // First do the state members from concrete parent hierarchy - Vector vParents = ((ValueEntry) entry).derivedFrom (); - if (vParents != null && vParents.size() != 0) - { - ValueEntry parent = (ValueEntry) vParents.elementAt (0); - if (parent == null) - return index; - - // call super._read if non-abstract value parent - if ((!parent.isAbstract ()) && (! Util.javaQualifiedName(parent).equals ("java.io.Serializable"))) // - stream.println(indent + "super._read (istream);"); - } - - Vector vMembers = ((ValueEntry) entry).state (); - int noOfMembers = vMembers == null ? 0 : vMembers.size (); - - for (int k = 0; k < noOfMembers; k++) - { - TypedefEntry member = (TypedefEntry)((InterfaceState)vMembers.elementAt (k)).entry; - String memberName = member.name (); - SymtabEntry mType = member.type (); - - if (mType instanceof PrimitiveEntry || - mType instanceof TypedefEntry || - mType instanceof SequenceEntry || - mType instanceof StringEntry || - !member.arrayInfo ().isEmpty ()) - index = ((JavaGenerator)member.generator ()).read (index, indent, name + '.' + memberName, member, stream); - else - stream.println (indent + name + '.' + memberName + " = " + - Util.helperName (mType, true) + ".read (istream);"); // - } - - return index; - } // read - - /** - * d62023 - call super._write() - **/ - public int write (int index, String indent, String name, SymtabEntry entry, PrintWriter stream) - { - // First do the state members from concrete parent hierarchy - Vector vParents = ((ValueEntry)entry).derivedFrom (); - if (vParents != null && vParents.size () != 0) - { - ValueEntry parent = (ValueEntry)vParents.elementAt (0); - if (parent == null) - return index; - // call super._read if non-abstract value parent - if ((!parent.isAbstract ()) && (! Util.javaQualifiedName(parent).equals ("java.io.Serializable"))) // - stream.println(indent + "super._write (ostream);"); - } - - Vector vMembers = ((ValueEntry) entry ).state (); - int noOfMembers = vMembers == null ? 0 : vMembers.size (); - for (int k = 0; k < noOfMembers; k++) - { - TypedefEntry member = (TypedefEntry)((InterfaceState)vMembers.elementAt (k)).entry; - String memberName = member.name (); - SymtabEntry mType = member.type (); - - if (mType instanceof PrimitiveEntry || - mType instanceof TypedefEntry || - mType instanceof SequenceEntry || - mType instanceof StringEntry || - !member.arrayInfo ().isEmpty ()) - index = ((JavaGenerator)member.generator ()).write (index, indent, name + '.' + memberName, member, stream); - else - stream.println (indent + Util.helperName (mType, true) + // - ".write (ostream, " + name + '.' + memberName + ");"); - } - - return index; - } // write - - /** - * d62023 - generate factory interface and default factory - **/ - public void generate (Hashtable symbolTable, ValueEntry v, PrintWriter str) - { - this.symbolTable = symbolTable; - this.v = v; - init (); - - openStream (); - if (stream == null) - return; - generateTie (); - generateHelper (); - generateHolder (); - if (!v.isAbstract ()) { - generateValueFactory (); - generateDefaultFactory (); - } - writeHeading (); - writeBody (); - writeClosing (); - closeStream (); - } // generate - - /** - * - **/ - protected void generateValueFactory () - { - ((Factories)Compile.compiler.factories ()).valueFactory ().generate (symbolTable, v); - } // generateValueFactory - - /** - * - **/ - protected void generateDefaultFactory () - { - ((Factories)Compile.compiler.factories ()).defaultFactory ().generate (symbolTable, v); - } // generateDefaultFactory -}