From: tromey Date: Fri, 16 Mar 2007 22:48:27 +0000 (+0000) Subject: * tools/gnu/classpath/tools/javah/JniStubPrinter.java X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7ed170666aae2c051e2a52c9aa3b9a08e9ab432d;p=thirdparty%2Fgcc.git * tools/gnu/classpath/tools/javah/JniStubPrinter.java (printClass): Added filename argument. * tools/gnu/classpath/tools/javah/JniIncludePrinter.java (printClass): Added filename argument. * tools/gnu/classpath/tools/javah/CniIncludePrinter.java (printClass): Use user's file name. * tools/gnu/classpath/tools/javah/CniStubPrinter.java (printClass): Use user's file name. * tools/gnu/classpath/tools/javah/Printer.java (printClass): Added filename argument. * tools/gnu/classpath/tools/javah/Main.java (getParser): Fix '-v' argument order. (writeHeaders): Use a HashMap. (run): Put class name into HashMap for writeHeaders. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123000 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog index 985d95928d34..0f68f9194523 100644 --- a/libjava/classpath/ChangeLog +++ b/libjava/classpath/ChangeLog @@ -1,3 +1,20 @@ +2007-03-16 Tom Tromey + + * tools/gnu/classpath/tools/javah/JniStubPrinter.java + (printClass): Added filename argument. + * tools/gnu/classpath/tools/javah/JniIncludePrinter.java + (printClass): Added filename argument. + * tools/gnu/classpath/tools/javah/CniIncludePrinter.java + (printClass): Use user's file name. + * tools/gnu/classpath/tools/javah/CniStubPrinter.java + (printClass): Use user's file name. + * tools/gnu/classpath/tools/javah/Printer.java (printClass): Added + filename argument. + * tools/gnu/classpath/tools/javah/Main.java (getParser): Fix '-v' + argument order. + (writeHeaders): Use a HashMap. + (run): Put class name into HashMap for writeHeaders. + 2007-03-02 Mario Torre PR classpath/31017: diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/CniIncludePrinter.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/CniIncludePrinter.class index 13a0a99fef33..08bcc36cc044 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/CniIncludePrinter.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/CniIncludePrinter.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/CniStubPrinter.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/CniStubPrinter.class index c3cf12dda49f..8726cdd216e0 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/CniStubPrinter.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/CniStubPrinter.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/JniIncludePrinter.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/JniIncludePrinter.class index a89e0d2e9a81..690b2b932dc3 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/JniIncludePrinter.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/JniIncludePrinter.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/JniStubPrinter.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/JniStubPrinter.class index ad9620710b8c..a0f008dbfd89 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/JniStubPrinter.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/JniStubPrinter.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$1.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$1.class index ef2f2cff33eb..593774030219 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$1.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$1.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.class index 8c33dd3413a1..ed0500f45edc 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$10.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.class index 7bebfc828466..1eb1b1e43232 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$2.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.class index b59e0172203f..a798489e93c7 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$3.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.class index db5582d67231..0811703a1e5f 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$4.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.class index ef7038103803..faa51e20a530 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$5.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.class index e2e627dd34cb..10286fa7a07a 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$6.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.class index 249ec5ceb10f..6da557c37ac7 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$7.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.class index 001bfa06185d..16fe8a3a6e5e 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$8.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.class index aee9be7d9242..f4393f56fda3 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main$9.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.class index 27c3b7e6fa38..66c37937fa3a 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Main.class differ diff --git a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Printer.class b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Printer.class index 76b2cbeedab7..94bc20c09a50 100644 Binary files a/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Printer.class and b/libjava/classpath/tools/classes/gnu/classpath/tools/javah/Printer.class differ diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/CniIncludePrinter.java b/libjava/classpath/tools/gnu/classpath/tools/javah/CniIncludePrinter.java index fb007b131019..445f902da48a 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/javah/CniIncludePrinter.java +++ b/libjava/classpath/tools/gnu/classpath/tools/javah/CniIncludePrinter.java @@ -1,5 +1,5 @@ /* CniIncludePrinter.java - generate CNI header files - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -63,14 +63,14 @@ public class CniIncludePrinter return new PrintStream(fos); } - public void printClass(ClassWrapper klass) throws IOException + public void printClass(File filename, ClassWrapper klass) throws IOException { // Never write Object or Class. This is a hack, maybe // the user would like to see what they look like... if (klass.name.equals("java/lang/Object") || klass.name.equals("java/lang/Class")) return; - PrintStream ps = getPrintStream(klass.name + ".h", klass); + PrintStream ps = getPrintStream(filename + ".h", klass); if (ps == null) return; ps.println(); diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/CniStubPrinter.java b/libjava/classpath/tools/gnu/classpath/tools/javah/CniStubPrinter.java index d91f367c45c3..3acec2328897 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/javah/CniStubPrinter.java +++ b/libjava/classpath/tools/gnu/classpath/tools/javah/CniStubPrinter.java @@ -1,5 +1,5 @@ /* CniStubPrinter.java - Generate a CNI stub file - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -90,12 +90,12 @@ public class CniStubPrinter return new CniPrintStream(fos); } - public void printClass(ClassWrapper klass) throws IOException + public void printClass(File filename, ClassWrapper klass) throws IOException { if (! klass.hasNativeMethod()) return; String className = klass.name.replaceAll("/", "::"); - CniPrintStream out = (CniPrintStream) getPrintStream(klass.name + ".cc", + CniPrintStream out = (CniPrintStream) getPrintStream(filename + ".cc", klass); if (out == null) return; diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/JniIncludePrinter.java b/libjava/classpath/tools/gnu/classpath/tools/javah/JniIncludePrinter.java index dc19af255168..6c1a8e166fb2 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/javah/JniIncludePrinter.java +++ b/libjava/classpath/tools/gnu/classpath/tools/javah/JniIncludePrinter.java @@ -107,8 +107,9 @@ public class JniIncludePrinter return new JniPrintStream(classpath, fos, klass); } - public void printClass(ClassWrapper klass) throws IOException + public void printClass(File filename, ClassWrapper klass) throws IOException { + // Note that we ignore the filename here. String xname = JniHelper.mangle(klass.name); JniPrintStream out = (JniPrintStream) getPrintStream(klass.name.replace('/', '_') + ".h", diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/JniStubPrinter.java b/libjava/classpath/tools/gnu/classpath/tools/javah/JniStubPrinter.java index 758ec21c091a..d4b34fc20675 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/javah/JniStubPrinter.java +++ b/libjava/classpath/tools/gnu/classpath/tools/javah/JniStubPrinter.java @@ -1,5 +1,5 @@ /* JniStubPrinter.java - Generate JNI stub files - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -71,8 +71,9 @@ public class JniStubPrinter return new JniPrintStream(classpath, fos, klass); } - public void printClass(ClassWrapper klass) throws IOException + public void printClass(File filename, ClassWrapper klass) throws IOException { + // Note that we ignore the filename here. if (! klass.hasNativeMethod()) return; String xname = JniHelper.mangle(klass.name); diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/Main.java b/libjava/classpath/tools/gnu/classpath/tools/javah/Main.java index 729af476ad89..250844d1d88b 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/javah/Main.java +++ b/libjava/classpath/tools/gnu/classpath/tools/javah/Main.java @@ -58,6 +58,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.Map; import org.objectweb.asm.ClassReader; @@ -254,7 +255,7 @@ public class Main cni = true; } }); - result.add(new Option('v', "verbose", "Set verbose mode") + result.add(new Option("verbose", 'v', "Set verbose mode") { public void parsed(String arg0) throws OptionException { @@ -309,16 +310,18 @@ public class Main return result; } - private void writeHeaders(ArrayList klasses, Printer printer) + private void writeHeaders(HashMap klasses, Printer printer) throws IOException { - Iterator i = klasses.iterator(); + Iterator i = klasses.entrySet().iterator(); while (i.hasNext()) { - ClassWrapper klass = (ClassWrapper) i.next(); + Map.Entry e = (Map.Entry) i.next(); + File filename = (File) e.getKey(); + ClassWrapper klass = (ClassWrapper) e.getValue(); if (verbose) - System.err.println("[writing " + klass + "]"); - printer.printClass(klass); + System.err.println("[writing " + klass + " as " + filename + "]"); + printer.printClass(filename, klass); } } @@ -376,19 +379,21 @@ public class Main } Iterator i = klasses.iterator(); - ArrayList results = new ArrayList(); + HashMap results = new HashMap(); while (i.hasNext()) { // Let user specify either kind of class name or a // file name. Object item = i.next(); ClassWrapper klass; + File filename; if (item instanceof File) { // Load class from file. if (verbose) System.err.println("[reading file " + item + "]"); - klass = getClass((File) item); + filename = (File) item; + klass = getClass(filename); } else { @@ -396,9 +401,12 @@ public class Main String className = ((String) item).replace('.', '/'); if (verbose) System.err.println("[reading class " + className + "]"); + // Use the name the user specified, even if it is + // different from the ultimate class name. + filename = new File(className); klass = getClass(className); } - results.add(klass); + results.put(filename, klass); } writeHeaders(results, printer); @@ -436,7 +444,8 @@ public class Main String resource = name.replace('.', '/') + ".class"; URL url = loader.findResource(resource); if (url == null) - throw new IOException("can't find class file " + resource); + throw new IOException("can't find class file " + resource + + " in " + loader); InputStream is = url.openStream(); ClassWrapper result = readClass(is); classMap.put(name, result); diff --git a/libjava/classpath/tools/gnu/classpath/tools/javah/Printer.java b/libjava/classpath/tools/gnu/classpath/tools/javah/Printer.java index 9c4b48d2e5cf..7a896cf62b10 100644 --- a/libjava/classpath/tools/gnu/classpath/tools/javah/Printer.java +++ b/libjava/classpath/tools/gnu/classpath/tools/javah/Printer.java @@ -1,5 +1,5 @@ /* Print.java - abstract base class for printing classes - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -95,7 +95,8 @@ public abstract class Printer this.force = force; } - public abstract void printClass(ClassWrapper klass) throws IOException; + public abstract void printClass(File filename, ClassWrapper klass) + throws IOException; protected abstract void writePreambleImpl(PrintStream ps);