]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libjava/gnu/java/rmi/rmic/RMIC.java
Imported gcc-4.4.3
[msp430-gcc.git] / libjava / gnu / java / rmi / rmic / RMIC.java
diff --git a/libjava/gnu/java/rmi/rmic/RMIC.java b/libjava/gnu/java/rmi/rmic/RMIC.java
deleted file mode 100644 (file)
index ef44732..0000000
+++ /dev/null
@@ -1,1017 +0,0 @@
-/*
-  Copyright (c) 1996, 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-GNU Classpath 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 for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING.  If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library.  Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module.  An independent module is a module which is not derived from
-or based on this library.  If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so.  If you do not wish to do so, delete this
-exception statement from your version. */
-
-package gnu.java.rmi.rmic;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Arrays;
-import java.lang.Comparable;
-import gnu.java.rmi.server.RMIHashes;
-
-public class RMIC {
-
-private String[] args;
-private int next;
-private Exception exception;
-
-private boolean keep = false;
-private boolean need11Stubs = true;
-private boolean need12Stubs = true;
-private boolean compile = true;
-private boolean verbose;
-private String destination;
-
-private PrintWriter out;
-private TabbedWriter ctrl;
-
-private Class clazz;
-private String classname;
-private String fullclassname;
-private MethodRef[] remotemethods;
-private String stubname;
-private String skelname;
-
-public RMIC(String[] a) {
-       args = a;
-}
-
-public static void main(String args[]) {
-       RMIC r = new RMIC(args);
-       if (r.run() == false) {
-               Exception exception = r.getException();
-               if (exception != null) {
-                       exception.printStackTrace();
-               }
-               else {
-                       System.exit(1);
-               }
-       }
-}
-
-public boolean run() {
-       parseOptions();
-       if (next >= args.length) {
-               error("no class names found");
-       }
-       for (int i = next; i < args.length; i++) {
-               try {
-                       if (verbose) {
-                               System.out.println("[Processing class " + args[i] + ".class]");
-                       }
-                       processClass(args[i]);
-               }
-               catch (Exception e) {
-                       exception = e;
-                       return (false);
-               }
-       }
-       return (true);
-}
-
-private boolean processClass(String classname) throws Exception {
-       analyzeClass(classname);
-       generateStub();
-       if (need11Stubs) {
-               generateSkel();
-       }
-       if (compile) {
-               compile(stubname + ".java");
-               if (need11Stubs) {
-                       compile(skelname + ".java");
-               }
-       }
-       if (!keep) {
-               (new File(stubname + ".java")).delete();
-               if (need11Stubs) {
-                       (new File(skelname + ".java")).delete();
-               }
-       }
-       return (true);
-}
-
-private void analyzeClass(String cname) throws Exception {
-       int p = cname.lastIndexOf('.');
-       if (p != -1) {
-               classname = cname.substring(p+1);
-       }
-       else {
-               classname = cname;
-       }
-       fullclassname = cname;
-
-       HashSet rmeths = new HashSet();
-       findClass();
-       for (Class cls = clazz; cls != null; cls = cls.getSuperclass()) {
-               // Keep going down the inheritence tree until we hit the system
-               if (cls.getName().startsWith("java.")) {
-                       break;
-               }
-
-               Method[] meths = cls.getDeclaredMethods();
-               for (int i = 0; i < meths.length; i++) {
-                       // Only include public methods
-                       int mods = meths[i].getModifiers();
-                       if (Modifier.isPublic(mods) && !Modifier.isStatic(mods)) {
-                               // Should check exceptions here. - XXX
-
-                               // Add this one in.
-                               rmeths.add(meths[i]);
-                       }
-               }
-       }
-
-       // Convert into a MethodRef array and sort them
-       remotemethods = new MethodRef[rmeths.size()];
-       int c = 0;
-       for (Iterator i = rmeths.iterator(); i.hasNext(); ) {
-               remotemethods[c++] = new MethodRef((Method)i.next());
-       }
-       Arrays.sort(remotemethods);
-}
-
-public Exception getException() {
-       return (exception);
-}
-
-private void findClass() throws ClassNotFoundException {
-       clazz = Class.forName(fullclassname);
-}
-
-private void generateStub() throws IOException {
-       stubname = classname + "_Stub";
-       ctrl = new TabbedWriter(new FileWriter(stubname + ".java"));
-       out = new PrintWriter(ctrl);
-
-       if (verbose) {
-               System.out.println("[Generating class " + stubname + ".java]");
-       }
-
-       out.println("// Stub class generated by rmic - DO NOT EDIT!");
-       out.println();
-       if (fullclassname != classname) {
-               String pname = fullclassname.substring(0, fullclassname.lastIndexOf('.'));
-               out.println("package " + pname + ";");
-               out.println();
-       }
-
-       out.print("public final class " + stubname);
-       ctrl.indent();
-       out.println("extends java.rmi.server.RemoteStub");
-       
-       // Output interfaces we implement
-       out.print("implements ");
-       Class[] ifaces = clazz.getInterfaces(); 
-       for (int i = 0; i < ifaces.length; i++) {
-               out.print(ifaces[i].getName());
-               if (i+1 < ifaces.length) {
-                       out.print(", ");
-               }
-       }
-
-       ctrl.unindent();
-       out.print("{");
-       ctrl.indent();
-
-       // UID
-       if (need12Stubs) {
-               out.println("private static final long serialVersionUID = 2L;");
-               out.println();
-       }
-
-       // InterfaceHash - don't know how to calculate this - XXX
-       if (need11Stubs) {
-               out.println("private static final long interfaceHash = " + RMIHashes.getInterfaceHash(clazz) + "L;");
-               out.println();
-               if (need12Stubs) {
-                       out.println("private static boolean useNewInvoke;");
-                       out.println();
-               }
-
-               // Operation table
-               out.print("private static final java.rmi.server.Operation[] operations = {");
-
-               ctrl.indent();
-               for (int i = 0; i < remotemethods.length; i++) {
-                       Method m = remotemethods[i].meth;
-                       out.print("new java.rmi.server.Operation(\"");
-                       out.print(getPrettyName(m.getReturnType()) + " ");
-                       out.print(m.getName() + "(");
-                       // Output signature
-                       Class[] sig = m.getParameterTypes();
-                       for (int j = 0; j < sig.length; j++) {
-                               out.print(getPrettyName(sig[j]));
-                               if (j+1 < sig.length) {
-                                       out.print(", ");
-                               }
-                       }
-                       out.print(")\")");
-                       if (i + 1 < remotemethods.length) {
-                               out.println(",");
-                       }
-               }
-               ctrl.unindent();
-               out.println("};");
-               out.println();
-       }
-
-       // Set of method references.
-       if (need12Stubs) {
-               for (int i = 0; i < remotemethods.length; i++) {
-                       Method m = remotemethods[i].meth;
-                       out.println("private static java.lang.reflect.Method $method_" + m.getName() + "_" + i + ";");
-               }
-
-               // Initialize the methods references.
-               out.println();
-               out.print("static {");
-               ctrl.indent();
-
-               out.print("try {");
-               ctrl.indent();
-
-               if (need11Stubs) {
-                       out.println("java.rmi.server.RemoteRef.class.getMethod(\"invoke\", new java.lang.Class[] { java.rmi.Remote.class, java.lang.reflect.Method.class, java.lang.Object[].class, long.class });");
-                       out.println("useNewInvoke = true;");
-               }
-
-               for (int i = 0; i < remotemethods.length; i++) {
-                       Method m = remotemethods[i].meth;
-                       out.print("$method_" + m.getName() + "_" + i + " = ");
-                       out.print(fullclassname + ".class.getMethod(\"" + m.getName() + "\"");
-                       out.print(", new java.lang.Class[] {");
-                       // Output signature
-                       Class[] sig = m.getParameterTypes();
-                       for (int j = 0; j < sig.length; j++) {
-                               out.print(getPrettyName(sig[j]) + ".class");
-                               if (j+1 < sig.length) {
-                                       out.print(", ");
-                               }
-                       }
-                       out.println("});");
-               }
-               ctrl.unindent();
-               out.println("}");
-               out.print("catch (java.lang.NoSuchMethodException e) {");
-               ctrl.indent();
-               if (need11Stubs) {
-                       out.print("useNewInvoke = false;");
-               }
-               else {
-                       out.print("throw new java.lang.NoSuchMethodError(\"stub class initialization failed\");");
-               }
-
-               ctrl.unindent();
-               out.print("}");
-
-               ctrl.unindent();
-               out.println("}");
-               out.println();
-       }
-
-       // Constructors
-       if (need11Stubs) {
-               out.print("public " + stubname + "() {");
-               ctrl.indent();
-               out.print("super();");
-               ctrl.unindent();
-               out.println("}");
-       }
-
-       if (need12Stubs) {
-               out.print("public " + stubname + "(java.rmi.server.RemoteRef ref) {");
-               ctrl.indent();
-               out.print("super(ref);");
-               ctrl.unindent();
-               out.println("}");
-       }
-
-       // Method implementations
-       for (int i = 0; i < remotemethods.length; i++) {
-               Method m = remotemethods[i].meth;
-               Class[] sig = m.getParameterTypes();
-               Class returntype = m.getReturnType();
-               Class[] except = sortExceptions(m.getExceptionTypes());
-
-               out.println();
-               out.print("public " + getPrettyName(returntype) + " " + m.getName() + "(");
-               for (int j = 0; j < sig.length; j++) {
-                       out.print(getPrettyName(sig[j]));
-                       out.print(" $param_" + j);
-                       if (j+1 < sig.length) {
-                               out.print(", ");
-                       }
-               }
-               out.print(") ");
-               out.print("throws ");
-               for (int j = 0; j < except.length; j++) {
-                       out.print(getPrettyName(except[j]));
-                       if (j+1 < except.length) {
-                               out.print(", ");
-                       }
-               }
-               out.print(" {");
-               ctrl.indent();
-
-               out.print("try {");
-               ctrl.indent();
-
-               if (need12Stubs) {
-                       if (need11Stubs) {
-                               out.print("if (useNewInvoke) {");
-                               ctrl.indent();
-                       }
-                       if (returntype != Void.TYPE) {
-                               out.print("java.lang.Object $result = ");
-                       }
-                       out.print("ref.invoke(this, $method_" + m.getName() + "_" + i + ", ");
-                       if (sig.length == 0) {
-                               out.print("null, ");
-                       }
-                       else {
-                               out.print("new java.lang.Object[] {");
-                               for (int j = 0; j < sig.length; j++) {
-                                       if (sig[j] == Boolean.TYPE) {
-                                               out.print("new java.lang.Boolean($param_" + j + ")");
-                                       }
-                                       else if (sig[j] == Byte.TYPE) {
-                                               out.print("new java.lang.Byte($param_" + j + ")");
-                                       }
-                                       else if (sig[j] == Character.TYPE) {
-                                               out.print("new java.lang.Character($param_" + j + ")");
-                                       }
-                                       else if (sig[j] == Short.TYPE) {
-                                               out.print("new java.lang.Short($param_" + j + ")");
-                                       }
-                                       else if (sig[j] == Integer.TYPE) {
-                                               out.print("new java.lang.Integer($param_" + j + ")");
-                                       }
-                                       else if (sig[j] == Long.TYPE) {
-                                               out.print("new java.lang.Long($param_" + j + ")");
-                                       }
-                                       else if (sig[j] == Float.TYPE) {
-                                               out.print("new java.lang.Float($param_" + j + ")");
-                                       }
-                                       else if (sig[j] == Double.TYPE) {
-                                               out.print("new java.lang.Double($param_" + j + ")");
-                                       }
-                                       else {
-                                               out.print("$param_" + j);
-                                       }
-                                       if (j+1 < sig.length) {
-                                               out.print(", ");
-                                       }
-                               }
-                               out.print("}, ");
-                       }
-                       out.print(Long.toString(remotemethods[i].hash) + "L");
-                       out.print(");");
-
-                       if (returntype != Void.TYPE) {
-                               out.println();
-                               out.print("return (");
-                               if (returntype == Boolean.TYPE) {
-                                       out.print("((java.lang.Boolean)$result).booleanValue()");
-                               }
-                               else if (returntype == Byte.TYPE) {
-                                       out.print("((java.lang.Byte)$result).byteValue()");
-                               }
-                               else if (returntype == Character.TYPE) {
-                                       out.print("((java.lang.Character)$result).charValue()");
-                               }
-                               else if (returntype == Short.TYPE) {
-                                       out.print("((java.lang.Short)$result).shortValue()");
-                               }
-                               else if (returntype == Integer.TYPE) {
-                                       out.print("((java.lang.Integer)$result).intValue()");
-                               }
-                               else if (returntype == Long.TYPE) {
-                                       out.print("((java.lang.Long)$result).longValue()");
-                               }
-                               else if (returntype == Float.TYPE) {
-                                       out.print("((java.lang.Float)$result).floatValue()");
-                               }
-                               else if (returntype == Double.TYPE) {
-                                       out.print("((java.lang.Double)$result).doubleValue()");
-                               }
-                               else {
-                                       out.print("(" + getPrettyName(returntype) + ")$result");
-                               }
-                               out.print(");");
-                       }
-
-                       if (need11Stubs) {
-                               ctrl.unindent();
-                               out.println("}");
-                               out.print("else {");
-                               ctrl.indent();
-                       }
-               }
-
-               if (need11Stubs) {
-                       out.println("java.rmi.server.RemoteCall call = ref.newCall((java.rmi.server.RemoteObject)this, operations, " + i + ", interfaceHash);");
-                       out.print("try {");
-                       ctrl.indent();
-                       out.print("java.io.ObjectOutput out = call.getOutputStream();");
-                       for (int j = 0; j < sig.length; j++) {
-                               out.println();
-                               if (sig[j] == Boolean.TYPE) {
-                                       out.print("out.writeBoolean(");
-                               }
-                               else if (sig[j] == Byte.TYPE) {
-                                       out.print("out.writeByte(");
-                               }
-                               else if (sig[j] == Character.TYPE) {
-                                       out.print("out.writeChar(");
-                               }
-                               else if (sig[j] == Short.TYPE) {
-                                       out.print("out.writeShort(");
-                               }
-                               else if (sig[j] == Integer.TYPE) {
-                                       out.print("out.writeInt(");
-                               }
-                               else if (sig[j] == Long.TYPE) {
-                                       out.print("out.writeLong(");
-                               }
-                               else if (sig[j] == Float.TYPE) {
-                                       out.print("out.writeFloat(");
-                               }
-                               else if (sig[j] == Double.TYPE) {
-                                       out.print("out.writeDouble(");
-                               }
-                               else {
-                                       out.print("out.writeObject(");
-                               }
-                               out.print("$param_" + j + ");");
-                       }
-                       ctrl.unindent();
-                       out.println("}");
-                       out.print("catch (java.io.IOException e) {");
-                       ctrl.indent();
-                       out.print("throw new java.rmi.MarshalException(\"error marshalling arguments\", e);");
-                       ctrl.unindent();
-                       out.println("}");
-                       out.println("ref.invoke(call);");
-                       if (returntype != Void.TYPE) {
-                               out.println(getPrettyName(returntype) + " $result;");
-                       }
-                       out.print("try {");
-                       ctrl.indent();
-                       out.print("java.io.ObjectInput in = call.getInputStream();");
-                       boolean needcastcheck = false;
-                       if (returntype != Void.TYPE) {
-                               out.println();
-                               out.print("$result = ");
-                               if (returntype == Boolean.TYPE) {
-                                       out.print("in.readBoolean();");
-                               }
-                               else if (returntype == Byte.TYPE) {
-                                       out.print("in.readByte();");
-                               }
-                               else if (returntype == Character.TYPE) {
-                                       out.print("in.readChar();");
-                               }
-                               else if (returntype == Short.TYPE) {
-                                       out.print("in.readShort();");
-                               }
-                               else if (returntype == Integer.TYPE) {
-                                       out.print("in.readInt();");
-                               }
-                               else if (returntype == Long.TYPE) {
-                                       out.print("in.readLong();");
-                               }
-                               else if (returntype == Float.TYPE) {
-                                       out.print("in.readFloat();");
-                               }
-                               else if (returntype == Double.TYPE) {
-                                       out.print("in.readDouble();");
-                               }
-                               else {
-                                       if (returntype != Object.class) {
-                                               out.print("(" + getPrettyName(returntype) + ")");
-                                       }
-                                       else {
-                                               needcastcheck = true;
-                                       }
-                                       out.print("in.readObject();");
-                               }
-                               out.println();
-                               out.print("return ($result);");
-                       }
-                       ctrl.unindent();
-                       out.println("}");
-                       out.print("catch (java.io.IOException e) {");
-                       ctrl.indent();
-                       out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);");
-                       ctrl.unindent();
-                       out.println("}");
-                       if (needcastcheck) {
-                               out.print("catch (java.lang.ClassNotFoundException e) {");
-                               ctrl.indent();
-                               out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);");
-                               ctrl.unindent();
-                               out.println("}");
-                       }
-                       out.print("finally {");
-                       ctrl.indent();
-                       out.print("ref.done(call);");
-                       ctrl.unindent();
-                       out.print("}");
-
-                       if (need12Stubs && need11Stubs) {
-                               ctrl.unindent();
-                               out.print("}");
-                       }
-               }
-
-               ctrl.unindent();
-               out.print("}");
-
-               boolean needgeneral = true;
-               for (int j = 0; j < except.length; j++) {
-                       out.println();
-                       out.print("catch (" + getPrettyName(except[j]) + " e) {");
-                       ctrl.indent();
-                       out.print("throw e;");
-                       ctrl.unindent();
-                       out.print("}");
-                       if (except[j] == Exception.class) {
-                               needgeneral = false;
-                       }
-               }
-               if (needgeneral) {
-                       out.println();
-                       out.print("catch (java.lang.Exception e) {");
-                       ctrl.indent();
-                       out.print("throw new java.rmi.UnexpectedException(\"undeclared checked exception\", e);");
-                       ctrl.unindent();
-                       out.print("}");
-               }
-
-               ctrl.unindent();
-               out.print("}");
-               out.println();
-       }
-
-       ctrl.unindent();
-       out.println("}");
-
-       out.close();
-}
-
-private void generateSkel() throws IOException {
-       skelname = classname + "_Skel";
-       ctrl = new TabbedWriter(new FileWriter(skelname + ".java"));
-       out = new PrintWriter(ctrl);
-
-       if (verbose) {
-               System.out.println("[Generating class " + skelname + ".java]");
-       }
-
-       out.println("// Skel class generated by rmic - DO NOT EDIT!");
-       out.println();
-       if (fullclassname != classname) {
-               String pname = fullclassname.substring(0, fullclassname.lastIndexOf('.'));
-               out.println("package " + pname + ";");
-               out.println();
-       }
-
-       out.print("public final class " + skelname);
-       ctrl.indent();
-       
-       // Output interfaces we implement
-       out.print("implements java.rmi.server.Skeleton");
-
-       ctrl.unindent();
-       out.print("{");
-       ctrl.indent();
-
-       // Interface hash - don't know how to calculate this - XXX
-       out.println("private static final long interfaceHash = " + RMIHashes.getInterfaceHash(clazz) + "L;");
-       out.println();
-
-       // Operation table
-       out.print("private static final java.rmi.server.Operation[] operations = {");
-
-       ctrl.indent();
-       for (int i = 0; i < remotemethods.length; i++) {
-               Method m = remotemethods[i].meth;
-               out.print("new java.rmi.server.Operation(\"");
-               out.print(getPrettyName(m.getReturnType()) + " ");
-               out.print(m.getName() + "(");
-               // Output signature
-               Class[] sig = m.getParameterTypes();
-               for (int j = 0; j < sig.length; j++) {
-                       out.print(getPrettyName(sig[j]));
-                       if (j+1 < sig.length) {
-                               out.print(", ");
-                       }
-               }
-               out.print("\")");
-               if (i + 1 < remotemethods.length) {
-                       out.println(",");
-               }
-       }
-       ctrl.unindent();
-       out.println("};");
-
-       out.println();
-
-       // getOperations method
-       out.print("public java.rmi.server.Operation[] getOperations() {");
-       ctrl.indent();
-       out.print("return ((java.rmi.server.Operation[]) operations.clone());");
-       ctrl.unindent();
-       out.println("}");
-
-       out.println();
-
-       // Dispatch method
-       out.print("public void dispatch(java.rmi.Remote obj, java.rmi.server.RemoteCall call, int opnum, long hash) throws java.lang.Exception {");
-       ctrl.indent();
-
-       out.print("if (opnum < 0) {");
-       ctrl.indent();
-
-       for (int i = 0; i < remotemethods.length; i++) {
-               out.print("if (hash == " + Long.toString(remotemethods[i].hash) + "L) {");
-               ctrl.indent();
-               out.print("opnum = " + i + ";");
-               ctrl.unindent();
-               out.println("}");
-               out.print("else ");
-       }
-       out.print("{");
-       ctrl.indent();
-       out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");");
-       ctrl.unindent();
-       out.print("}");
-
-       ctrl.unindent();
-       out.println("}");
-       out.print("else if (hash != interfaceHash) {");
-       ctrl.indent();
-       out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");");
-       ctrl.unindent();
-       out.println("}");
-
-       out.println();
-
-       out.println(fullclassname + " server = (" + fullclassname + ")obj;");
-       out.println("switch (opnum) {");
-
-       // Method dispatch
-       for (int i = 0; i < remotemethods.length; i++) {
-               Method m = remotemethods[i].meth;
-               out.println("case " + i + ":");
-               out.print("{");
-               ctrl.indent();
-
-               Class[] sig = m.getParameterTypes();
-               for (int j = 0; j < sig.length; j++) {
-                       out.print(getPrettyName(sig[j]));
-                       out.println(" $param_" + j + ";");
-               }
-
-               out.print("try {");
-               boolean needcastcheck = false;
-               ctrl.indent();
-               out.println("java.io.ObjectInput in = call.getInputStream();");
-               for (int j = 0; j < sig.length; j++) {
-                       out.print("$param_" + j + " = ");
-                       if (sig[j] == Boolean.TYPE) {
-                               out.print("in.readBoolean();");
-                       }
-                       else if (sig[j] == Byte.TYPE) {
-                               out.print("in.readByte();");
-                       }
-                       else if (sig[j] == Character.TYPE) {
-                               out.print("in.readChar();");
-                       }
-                       else if (sig[j] == Short.TYPE) {
-                               out.print("in.readShort();");
-                       }
-                       else if (sig[j] == Integer.TYPE) {
-                               out.print("in.readInt();");
-                       }
-                       else if (sig[j] == Long.TYPE) {
-                               out.print("in.readLong();");
-                       }
-                       else if (sig[j] == Float.TYPE) {
-                               out.print("in.readFloat();");
-                       }
-                       else if (sig[j] == Double.TYPE) {
-                               out.print("in.readDouble();");
-                       }
-                       else {
-                               if (sig[j] != Object.class) {
-                                       out.print("(" + getPrettyName(sig[j]) + ")");
-                                       needcastcheck = true;
-                               }
-                               out.print("in.readObject();");
-                       }
-                       out.println();
-               }
-               ctrl.unindent();
-               out.println("}");
-               out.print("catch (java.io.IOException e) {");
-               ctrl.indent();
-               out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling arguments\", e);");
-               ctrl.unindent();
-               out.println("}");
-               if (needcastcheck) {
-                       out.print("catch (java.lang.ClassCastException e) {");
-                       ctrl.indent();
-                       out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling arguments\", e);");
-                       ctrl.unindent();
-                       out.println("}");
-               }
-               out.print("finally {");
-               ctrl.indent();
-               out.print("call.releaseInputStream();");
-               ctrl.unindent();
-               out.println("}");
-
-               Class returntype = m.getReturnType();
-               if (returntype != Void.TYPE) {
-                       out.print(getPrettyName(returntype) + " $result = ");
-               }
-               out.print("server." + m.getName() + "(");
-               for (int j = 0; j < sig.length; j++) {
-                       out.print("$param_" + j);
-                       if (j + 1 < sig.length) {
-                               out.print(", ");
-                       }
-               }
-               out.println(");");
-
-               out.print("try {");
-               ctrl.indent();
-               out.print("java.io.ObjectOutput out = call.getResultStream(true);");
-               if (returntype != Void.TYPE) {
-                       out.println();
-                       if (returntype == Boolean.TYPE) {
-                               out.print("out.writeBoolean($result);");
-                       }
-                       else if (returntype == Byte.TYPE) {
-                               out.print("out.writeByte($result);");
-                       }
-                       else if (returntype == Character.TYPE) {
-                               out.print("out.writeChar($result);");
-                       }
-                       else if (returntype == Short.TYPE) {
-                               out.print("out.writeShort($result);");
-                       }
-                       else if (returntype == Integer.TYPE) {
-                               out.print("out.writeInt($result);");
-                       }
-                       else if (returntype == Long.TYPE) {
-                               out.print("out.writeLong($result);");
-                       }
-                       else if (returntype == Float.TYPE) {
-                               out.print("out.writeFloat($result);");
-                       }
-                       else if (returntype == Double.TYPE) {
-                               out.print("out.writeDouble($result);");
-                       }
-                       else {
-                               out.print("out.writeObject($result);");
-                       }
-               }
-               ctrl.unindent();
-               out.println("}");
-               out.print("catch (java.io.IOException e) {");
-               ctrl.indent();
-               out.print("throw new java.rmi.MarshalException(\"error marshalling return\", e);");
-               ctrl.unindent();
-               out.println("}");
-               out.print("break;");
-
-               ctrl.unindent();
-               out.println("}");
-               out.println();
-       }
-
-       out.print("default:");
-       ctrl.indent();
-       out.print("throw new java.rmi.UnmarshalException(\"invalid method number\");");
-       ctrl.unindent();
-       out.print("}");
-
-       ctrl.unindent();
-       out.print("}");
-
-       ctrl.unindent();
-       out.println("}");
-
-       out.close();
-}
-
-private void compile(String name) throws Exception {
-       Compiler comp = Compiler.getInstance();
-       if (verbose) {
-               System.out.println("[Compiling class " + name + "]");
-       }
-       comp.setDestination(destination);
-       comp.compile(name);
-}
-
-private static String getPrettyName(Class cls) {
-        StringBuffer str = new StringBuffer();
-        for (int count = 0;; count++) {
-                if (!cls.isArray()) {
-                        str.append(cls.getName());
-                        for (; count > 0; count--) {
-                                str.append("[]");
-                        }
-                        return (str.toString());
-                }
-                cls = cls.getComponentType();
-        }
-}
-
-/**
- * Sort exceptions so the most general go last.
- */
-private Class[] sortExceptions(Class[] except) {
-       for (int i = 0; i < except.length; i++) {
-               for (int j = i+1; j < except.length; j++) {
-                       if (except[i].isAssignableFrom(except[j])) {
-                               Class tmp = except[i];
-                               except[i] = except[j];
-                               except[j] = tmp;
-                       }
-               }
-       }
-       return (except);
-}
-
-/**
- * Process the options until we find the first argument.
- */
-private void parseOptions() {
-       for (;;) {
-               if (next >= args.length || args[next].charAt(0) != '-') {
-                       break;
-               }
-               String arg = args[next];
-               next++;
-
-               // Accept `--' options if they look long enough.
-               if (arg.length() > 3 && arg.charAt(0) == '-'
-                   && arg.charAt(1) == '-')
-                 arg = arg.substring(1);
-
-               if (arg.equals("-keep")) {
-                       keep = true;
-               }
-               else if (arg.equals("-keepgenerated")) {
-                       keep = true;
-               }
-               else if (arg.equals("-v1.1")) {
-                       need11Stubs = true;
-                       need12Stubs = false;
-               }
-               else if (arg.equals("-vcompat")) {
-                       need11Stubs = true;
-                       need12Stubs = true;
-               }
-               else if (arg.equals("-v1.2")) {
-                       need11Stubs = false;
-                       need12Stubs = true;
-               }
-               else if (arg.equals("-g")) {
-               }
-               else if (arg.equals("-depend")) {
-               }
-               else if (arg.equals("-nowarn")) {
-               }
-               else if (arg.equals("-verbose")) {
-                       verbose = true;
-               }
-               else if (arg.equals("-nocompile")) {
-                       compile = false;
-               }
-               else if (arg.equals("-classpath")) {
-                       next++;
-               }
-               else if (arg.equals("-help")) {
-                       usage();
-               }
-               else if (arg.equals("-version")) {
-                       System.out.println("rmic ("
-                                          + System.getProperty("java.vm.name")
-                                          + ") "
-                                          + System.getProperty("java.vm.version"));
-                       System.out.println();
-                       System.out.println("Copyright 2002 Free Software Foundation, Inc.");
-                       System.out.println("This is free software; see the source for copying conditions.  There is NO");
-                       System.out.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.");
-                       System.exit(0);
-               }
-               else if (arg.equals("-d")) {
-                       destination = args[next];
-                       next++;
-               }
-               else if (arg.charAt(1) == 'J') {
-               }
-               else {
-                       error("unrecognized option `" + arg + "'");
-               }
-       }
-}
-
-private static void error(String message) {
-       System.err.println("rmic: " + message);
-       System.err.println("Try `rmic --help' for more information.");
-       System.exit(1);
-}
-
-private static void usage() {
-       System.out.println(
-"Usage: rmic [OPTION]... CLASS...\n" +
-"\n" +
-"      -keep                   Don't delete any intermediate files\n" +
-"      -keepgenerated          Same as -keep\n" +
-"      -v1.1                   Java 1.1 style stubs only\n" +
-"      -vcompat                Java 1.1 & Java 1.2 stubs\n" +
-"      -v1.2                   Java 1.2 style stubs only\n" +
-"      -g *                    Generated debugging information\n" +
-"      -depend *               Recompile out-of-date files\n" +
-"      -nowarn *               Suppress warning messages\n" +
-"      -nocompile              Don't compile the generated files\n" +
-"      -verbose                Output what's going on\n" +
-"      -classpath <path> *     Use given path as classpath\n" +
-"      -d <directory>          Specify where to place generated classes\n" +
-"      -J<flag> *              Pass flag to Java\n" +
-"      -help                   Print this help, then exit\n" +
-"      -version                Print version number, then exit\n" +
-"\n" +
-"  * Option currently ignored\n" +
-"Long options can be used with `--option' form as well."
-       );
-       System.exit(0);
-}
-
-static class MethodRef
-       implements Comparable {
-
-Method meth;
-String sig;
-long hash;
-
-MethodRef(Method m) {
-       meth = m;
-       // We match on the name - but what about overloading? - XXX
-       sig = m.getName();
-       hash = RMIHashes.getMethodHash(m);
-}
-
-public int compareTo(Object obj) {
-       MethodRef that = (MethodRef)obj;
-       return (this.sig.compareTo(that.sig));
-}
-
-}
-
-}