diff options
author | Tom Tromey <tromey@redhat.com> | 2007-03-16 22:42:42 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2007-03-16 22:42:42 +0000 |
commit | 01b3c1ed8bd56c02c1afbf5de0c21e281e0e40c6 (patch) | |
tree | 2098a965aeabe033aee42980335e1c8a5a1761df | |
parent | dd8d7b5172cd89d71c4ec8abdc75a11f5ee756f9 (diff) | |
download | classpath-01b3c1ed8bd56c02c1afbf5de0c21e281e0e40c6.tar.gz |
* 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.
-rw-r--r-- | ChangeLog | 17 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/javah/CniIncludePrinter.java | 6 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/javah/CniStubPrinter.java | 6 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/javah/JniIncludePrinter.java | 3 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/javah/JniStubPrinter.java | 5 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/javah/Main.java | 29 | ||||
-rw-r--r-- | tools/gnu/classpath/tools/javah/Printer.java | 5 |
7 files changed, 50 insertions, 21 deletions
@@ -1,3 +1,20 @@ +2007-03-16 Tom Tromey <tromey@redhat.com> + + * 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-16 Francis Kung <fkung@redhat.com> * gnu/java/awt/peer/gtk/CairoGraphics2D.java diff --git a/tools/gnu/classpath/tools/javah/CniIncludePrinter.java b/tools/gnu/classpath/tools/javah/CniIncludePrinter.java index fb007b131..445f902da 100644 --- a/tools/gnu/classpath/tools/javah/CniIncludePrinter.java +++ b/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/tools/gnu/classpath/tools/javah/CniStubPrinter.java b/tools/gnu/classpath/tools/javah/CniStubPrinter.java index d91f367c4..3acec2328 100644 --- a/tools/gnu/classpath/tools/javah/CniStubPrinter.java +++ b/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/tools/gnu/classpath/tools/javah/JniIncludePrinter.java b/tools/gnu/classpath/tools/javah/JniIncludePrinter.java index dc19af255..6c1a8e166 100644 --- a/tools/gnu/classpath/tools/javah/JniIncludePrinter.java +++ b/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/tools/gnu/classpath/tools/javah/JniStubPrinter.java b/tools/gnu/classpath/tools/javah/JniStubPrinter.java index 758ec21c0..d4b34fc20 100644 --- a/tools/gnu/classpath/tools/javah/JniStubPrinter.java +++ b/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/tools/gnu/classpath/tools/javah/Main.java b/tools/gnu/classpath/tools/javah/Main.java index 729af476a..250844d1d 100644 --- a/tools/gnu/classpath/tools/javah/Main.java +++ b/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/tools/gnu/classpath/tools/javah/Printer.java b/tools/gnu/classpath/tools/javah/Printer.java index 9c4b48d2e..7a896cf62 100644 --- a/tools/gnu/classpath/tools/javah/Printer.java +++ b/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); |