8 Aug 14:54
Re: Moving forward - call for contributions
Geir Magnusson Jr. <geirm <at> apache.org>
2005-08-08 12:54:54 GMT
2005-08-08 12:54:54 GMT
On Aug 6, 2005, at 12:38 PM, Ian Darwin wrote:
> Well, this is tiny and trivial but I guess its a start.
A river starts with a single raindrop
>
>
>> - javap replacement.
>>
>
> Attached.
> This is a partial JavaP replacement that I wrote, using the
> Reflection API. It doesn't implement the options e.g., for dumping
> bytecode, but it does the most commonly-used part.
>
> Note an earlier version of this has been used as the basis of
> Kaffe's javap, so it will be dual licensed (GPL and ASF2). I have
> an Apache committer's agreement for ASF2 on file with the ASF.
I assume that the entire work was written by you, and no improvements
from Kaffe have been incorporated?
geir
>
> Ian
>
> package introspection;
>
> import java.lang.reflect.Constructor;
> import java.lang.reflect.Field;
> import java.lang.reflect.Method;
> import java.lang.reflect.Modifier;
>
> /**
> * JavaP prints structural information about classes.
> * For each class, all public fields and methods are listed.
> * The "Reflection" API is used to look up the information.
> *
> * @version $Id: MyJavaP.java,v 1.8 2005/08/01 17:14:05 ian Exp $
> */
> public class MyJavaP {
>
> /** Simple main program, process each class name
> * found in argv.
> */
> public static void main(String[] argv) {
> MyJavaP pp = new MyJavaP();
>
> if (argv.length == 0) {
> System.err.println("Usage: MyJavaP className [...]");
> System.exit(1);
> } else for (int i=0; i<argv.length; i++)
> pp.doClass(argv[i]);
> }
>
> /** Format the fields and methods of one class, given its name.
> */
> protected void doClass(String className) {
>
> try {
> Class c = Class.forName(className);
> System.out.println(c + " {");
>
> int mods;
> Field fields[] = c.getDeclaredFields();
> for (int i = 0; i < fields.length; i++) {
> if (!Modifier.isPrivate(fields[i].getModifiers())
> && !Modifier.isProtected(fields[i].getModifiers()))
> System.out.println("\t" + fields[i]);
> }
> Constructor[] constructors = c.getConstructors();
> for (int j = 0; j < constructors.length; j++) {
> Constructor constructor = constructors[j];
> System.out.println("\t" + constructor);
>
> }
> Method methods[] = c.getDeclaredMethods();
> for (int i = 0; i < methods.length; i++) {
> if (!Modifier.isPrivate(methods[i].getModifiers())
> && !Modifier.isProtected(methods[i].getModifiers()))
> System.out.println("\t" + methods[i]);
> }
> System.out.println("}");
> } catch (ClassNotFoundException e) {
> System.err.println("Error: Class " +
> className + " not found!");
> } catch (Exception e) {
> System.err.println("JavaP Error: " + e);
> }
> }
> }
>
>
>
>
--
--
Geir Magnusson Jr +1-203-665-6437
geirm <at> apache.org
RSS Feed