diff options
author | Michael Koch <konqueror@gmx.de> | 2004-10-20 08:45:33 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2004-10-20 08:45:33 +0000 |
commit | 659d8f1a4aef5508a2bc8a03690dce13bb930182 (patch) | |
tree | dc333a430852d8414354f877072b60a623db1b37 /libjava/gnu | |
parent | f4a8f2791cdea5aa417884db3e7da0310babc848 (diff) | |
download | gcc-659d8f1a4aef5508a2bc8a03690dce13bb930182.zip gcc-659d8f1a4aef5508a2bc8a03690dce13bb930182.tar.gz gcc-659d8f1a4aef5508a2bc8a03690dce13bb930182.tar.bz2 |
RMIC.java: Reformatted.
2004-10-20 Michael Koch <konqueror@gmx.de>
* gnu/java/rmi/rmic/RMIC.java: Reformatted.
From-SVN: r89327
Diffstat (limited to 'libjava/gnu')
-rw-r--r-- | libjava/gnu/java/rmi/rmic/RMIC.java | 1909 |
1 files changed, 951 insertions, 958 deletions
diff --git a/libjava/gnu/java/rmi/rmic/RMIC.java b/libjava/gnu/java/rmi/rmic/RMIC.java index d34a84c..e81c0fb 100644 --- a/libjava/gnu/java/rmi/rmic/RMIC.java +++ b/libjava/gnu/java/rmi/rmic/RMIC.java @@ -52,1034 +52,1027 @@ import java.util.HashSet; import java.util.Iterator; import java.util.Set; -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; -private int errorCount = 0; - -private Class mRemoteInterface; -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].replace(File.separatorChar, '.')); - } - catch (Exception e) { - exception = e; - return (false); - } - } - return (true); -} +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; + private int errorCount = 0; + private Class mRemoteInterface; + + public RMIC(String[] a) + { + args = a; + } + + public static void main(String[] args) + { + RMIC r = new RMIC(args); + if (r.run() == false) + { + Exception e = r.getException(); + if (e != null) + e.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].replace(File.separatorChar, '.')); + } + catch (Exception e) + { + exception = e; + return (false); + } + } + return (true); + } + + private boolean processClass(String classname) throws Exception + { + errorCount = 0; + analyzeClass(classname); + if (errorCount > 0) + System.exit(1); + generateStub(); + if (need11Stubs) + generateSkel(); + if (compile) + { + compile(stubname.replace('.', File.separatorChar) + ".java"); + if (need11Stubs) + compile(skelname.replace('.', File.separatorChar) + ".java"); + } + if (! keep) + { + (new File(stubname.replace('.', File.separatorChar) + ".java")).delete(); + if (need11Stubs) + (new File(skelname.replace('.', File.separatorChar) + ".java")) + .delete(); + } + return (true); + } + + private void analyzeClass(String cname) throws Exception + { + if (verbose) + System.out.println("[analyze class " + cname + "]"); + int p = cname.lastIndexOf('.'); + if (p != -1) + classname = cname.substring(p + 1); + else + classname = cname; + fullclassname = cname; + + HashSet rmeths = new HashSet(); + findClass(); + + // get the remote interface + mRemoteInterface = getRemoteInterface(clazz); + if (mRemoteInterface == null) + return; + if (verbose) + System.out.println("[implements " + mRemoteInterface.getName() + "]"); + + // check if the methods of the remote interface declare RemoteExceptions + Method[] meths = mRemoteInterface.getDeclaredMethods(); + for (int i = 0; i < meths.length; i++) + { + Class[] exceptions = meths[i].getExceptionTypes(); + int index = 0; + for (; index < exceptions.length; index++) + { + if (exceptions[index].equals(RemoteException.class)) + break; + } + if (index < exceptions.length) + rmeths.add(meths[i]); + else + logError("Method " + meths[i] + + " does not throw a java.rmi.RemoteException"); + } + + // 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, true, ClassLoader.getSystemClassLoader()); + } + + private void generateStub() throws IOException + { + stubname = fullclassname + "_Stub"; + String stubclassname = classname + "_Stub"; + ctrl = + new TabbedWriter(new FileWriter((destination == null ? "" + : destination + + File.separator) + + stubname.replace('.', + File.separatorChar) + + ".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 " + stubclassname); + ctrl.indent(); + out.println("extends java.rmi.server.RemoteStub"); + + // Output interfaces we implement + out.print("implements "); + /* Scan implemented interfaces, and only print remote interfaces. */ + Class[] ifaces = clazz.getInterfaces(); + Set remoteIfaces = new HashSet(); + for (int i = 0; i < ifaces.length; i++) + { + Class iface = ifaces[i]; + if (java.rmi.Remote.class.isAssignableFrom(iface)) + remoteIfaces.add(iface); + } + Iterator iter = remoteIfaces.iterator(); + while (iter.hasNext()) + { + /* Print remote interface. */ + Class iface = (Class) iter.next(); + out.print(iface.getName()); + + /* Print ", " if more remote interfaces follow. */ + if (iter.hasNext()) + out.print(", "); + } + ctrl.unindent(); + out.print("{"); + ctrl.indent(); + + // UID + if (need12Stubs) + { + out.println("private static final long serialVersionUID = 2L;"); + out.println(); + } -private boolean processClass(String classname) throws Exception { - errorCount = 0; - analyzeClass(classname); - if(errorCount > 0) { - System.exit(1); - } - generateStub(); - if (need11Stubs) { - generateSkel(); - } - if (compile) { - compile(stubname.replace('.', File.separatorChar) + ".java"); - if (need11Stubs) { - compile(skelname.replace('.', File.separatorChar) + ".java"); - } - } - if (!keep) { - (new File(stubname.replace('.', File.separatorChar) + ".java")).delete(); - if (need11Stubs) { - (new File(skelname.replace('.', File.separatorChar) + ".java")).delete(); - } - } - return (true); -} + // 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(); + } -private void analyzeClass(String cname) throws Exception { - if(verbose){ - System.out.println("[analyze class "+cname+"]"); - } - int p = cname.lastIndexOf('.'); - if (p != -1) { - classname = cname.substring(p+1); - } - else { - classname = cname; - } - fullclassname = cname; - - - HashSet rmeths = new HashSet(); - findClass(); - - // get the remote interface - mRemoteInterface = getRemoteInterface(clazz); - if(mRemoteInterface == null) - return; - if(verbose){ - System.out.println("[implements "+mRemoteInterface.getName()+"]"); - } - - // check if the methods of the remote interface declare RemoteExceptions - Method[] meths = mRemoteInterface.getDeclaredMethods(); - for (int i = 0; i < meths.length; i++) { - Class[] exceptions = meths[i].getExceptionTypes(); - int index = 0; - for(;index < exceptions.length; index++){ - if(exceptions[index].equals(RemoteException.class)){ - break; - } - } - if (index < exceptions.length) { - rmeths.add(meths[i]); - } else { - logError("Method "+meths[i]+" does not throw a java.rmi.RemoteException"); - } - } - - - // 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); -} + // Operation table + out.print("private static final java.rmi.server.Operation[] operations = {"); -public Exception getException() { - return (exception); -} + 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(); -private void findClass() throws ClassNotFoundException { - clazz = Class.forName(fullclassname, true, ClassLoader.getSystemClassLoader()); -} + out.print("try {"); + ctrl.indent(); -private void generateStub() throws IOException { - stubname = fullclassname + "_Stub"; - String stubclassname = classname + "_Stub"; - ctrl = new TabbedWriter(new FileWriter((destination == null ? "" : destination + File.separator) - + stubname.replace('.', File.separatorChar) - + ".java")); - out = new PrintWriter(ctrl); + 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(mRemoteInterface.getName() + ".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\");"); - if (verbose) { - System.out.println("[Generating class " + stubname + ".java]"); - } + ctrl.unindent(); + out.print("}"); - out.println("// Stub class generated by rmic - DO NOT EDIT!"); + ctrl.unindent(); + out.println("}"); out.println(); - if (fullclassname != classname) { - String pname = fullclassname.substring(0, fullclassname.lastIndexOf('.')); - out.println("package " + pname + ";"); - out.println(); - } + } - out.print("public final class " + stubclassname); + // Constructors + if (need11Stubs) + { + out.print("public " + stubclassname + "() {"); ctrl.indent(); - out.println("extends java.rmi.server.RemoteStub"); - - // Output interfaces we implement - out.print("implements "); - /* Scan implemented interfaces, and only print remote interfaces. */ - Class[] ifaces = clazz.getInterfaces(); - Set remoteIfaces = new HashSet(); - for (int i = 0; i < ifaces.length; i++) { - Class iface = ifaces[i]; - if (java.rmi.Remote.class.isAssignableFrom(iface)) { - remoteIfaces.add(iface); - } - } - Iterator iter = remoteIfaces.iterator(); - while (iter.hasNext()) { - /* Print remote interface. */ - Class iface = (Class) iter.next(); - out.print(iface.getName()); - - /* Print ", " if more remote interfaces follow. */ - if (iter.hasNext()) { - out.print(", "); - } - } + out.print("super();"); ctrl.unindent(); - out.print("{"); + out.println("}"); + } + + if (need12Stubs) + { + out.print("public " + stubclassname + + "(java.rmi.server.RemoteRef ref) {"); ctrl.indent(); + out.print("super(ref);"); + ctrl.unindent(); + out.println("}"); + } - // UID - if (need12Stubs) { - out.println("private static final long serialVersionUID = 2L;"); - 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()); - // 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(); - } + 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(); - // Operation table - out.print("private static final java.rmi.server.Operation[] operations = {"); + out.print("try {"); + ctrl.indent(); + if (need12Stubs) + { + if (need11Stubs) + { + out.print("if (useNewInvoke) {"); 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. + } + 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("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(mRemoteInterface.getName() + ".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("});"); - } + 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("catch (java.lang.NoSuchMethodException e) {"); + out.print("else {"); 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("}"); + } + } + + 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(); - } - - // Constructors - if (need11Stubs) { - out.print("public " + stubclassname + "() {"); - ctrl.indent(); - out.print("super();"); - ctrl.unindent(); - out.println("}"); - } - - if (need12Stubs) { - out.print("public " + stubclassname + "(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()); - + 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("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 {"); + 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(); - - 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("}"); - } - } - + out.print("throw new java.rmi.UnmarshalException(\"error unmarshalling return\", e);"); 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("}"); - } - + out.println("}"); + } + out.print("finally {"); + ctrl.indent(); + out.print("ref.done(call);"); + ctrl.unindent(); + out.print("}"); + + if (need12Stubs && need11Stubs) + { ctrl.unindent(); out.print("}"); - out.println(); - } + } + } ctrl.unindent(); - out.println("}"); - - out.close(); -} - -private void generateSkel() throws IOException { - skelname = fullclassname + "_Skel"; - String skelclassname = classname + "_Skel"; - ctrl = new TabbedWriter(new FileWriter((destination == null ? "" : destination + File.separator) - + skelname.replace('.', File.separatorChar) - + ".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("}"); - out.print("public final class " + skelclassname); - ctrl.indent(); - - // Output interfaces we implement - out.print("implements java.rmi.server.Skeleton"); + 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("{"); - ctrl.indent(); - - // Interface hash - don't know how to calculate this - XXX - out.println("private static final long interfaceHash = " + RMIHashes.getInterfaceHash(clazz) + "L;"); + out.print("}"); 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("};"); - + } + + ctrl.unindent(); + out.println("}"); + + out.close(); + } + + private void generateSkel() throws IOException + { + skelname = fullclassname + "_Skel"; + String skelclassname = classname + "_Skel"; + ctrl = + new TabbedWriter(new FileWriter((destination == null ? "" + : destination + + File.separator) + + skelname.replace('.', + File.separatorChar) + + ".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(); - - // getOperations method - out.print("public java.rmi.server.Operation[] getOperations() {"); + } + + out.print("public final class " + skelclassname); + 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("return ((java.rmi.server.Operation[]) operations.clone());"); + out.print("opnum = " + i + ";"); 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 {"); + 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(); - out.print("if (opnum < 0) {"); - ctrl.indent(); + Class[] sig = m.getParameterTypes(); + for (int j = 0; j < sig.length; j++) + { + out.print(getPrettyName(sig[j])); + out.println(" $param_" + j + ";"); + } - 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("{"); + out.print("try {"); + boolean needcastcheck = false; ctrl.indent(); - out.print("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");"); + 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.print("}"); - + 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("}"); - out.print("else if (hash != interfaceHash) {"); + 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("throw new java.rmi.server.SkeletonMismatchException(\"interface hash mismatch\");"); + out.print("call.releaseInputStream();"); 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:"); + 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("throw new java.rmi.UnmarshalException(\"invalid method number\");"); + 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.print("}"); - + 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.print("}"); + out.println("}"); + out.print("break;"); 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(); - } -} + 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); -} + 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 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 + "'"); + } + } /** * Looks for the java.rmi.Remote interface that that is implemented by theClazz. - * @param theClazz the class to look in + * @param theClazz the class to look in * @return the Remote interface of theClazz or null if theClazz does not implement a Remote interface */ -private Class getRemoteInterface(Class theClazz) -{ - Class[] interfaces = theClazz.getInterfaces(); - for (int i = 0; i < interfaces.length; i++) - { - if (java.rmi.Remote.class.isAssignableFrom(interfaces[i])) - { - return interfaces[i]; - } - } - logError("Class "+ theClazz.getName() - + " is not a remote object. It does not implement an interface that is a java.rmi.Remote-interface."); - return null; -} - + private Class getRemoteInterface(Class theClazz) + { + Class[] interfaces = theClazz.getInterfaces(); + for (int i = 0; i < interfaces.length; i++) + { + if (java.rmi.Remote.class.isAssignableFrom(interfaces[i])) + return interfaces[i]; + } + logError("Class " + theClazz.getName() + + " is not a remote object. It does not implement an interface that is a java.rmi.Remote-interface."); + return null; + } + /** * Prints an error to System.err and increases the error count. * @param theError */ -private void logError(String theError){ - errorCount++; - System.err.println("error:"+theError); -} - -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)); -} - -} - + private void logError(String theError) + { + errorCount++; + System.err.println("error:" + theError); + } + + 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)); + } + } } |