Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Obtaining methods signature

1,168 views
Skip to first unread message

Dmitry Marienko

unread,
Nov 21, 2007, 1:19:01 PM11/21/07
to

Hi !
I'm dumb on simple question. How can I get method's signature in my
java program in "JVM notation" ?

For example for class

class A {
void foo(int a,int b) { ... }
}

I would like to get string .../A/foo(II)V for method 'foo' . I haven't
found any appropriate methods to do it.

--dima

Joshua Cranmer

unread,
Nov 21, 2007, 12:44:12 PM11/21/07
to

If you have easy access the bytecode, the program `javap' can print out
the signature for the method (foo(II)V).

Barring that, it is pretty easy to transform a
java.lang.reflect.Method's toString() to a JVM internal String.

--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E. Knuth

A Pietu Pohjalainen

unread,
Nov 23, 2007, 7:35:18 AM11/23/07
to
Dmitry Marienko <di...@rts.ua> wrote:


I believe that this information is not available in the standard Java
API. Haven't followed late changes though..

To get this info, I'm using the Apache BCEL library
(http://jakarta.apache.org/bcel/):


$ cat SignatureLister.java
import java.io.*;

import org.apache.bcel.*;
import org.apache.bcel.classfile.*;
import org.apache.bcel.generic.*;
import org.apache.bcel.util.*;

public class SignatureLister {
public static void main(String args[]) throws IOException {
ClassParser parser = new ClassParser(args[0]);
JavaClass clazz = parser.parse();
Method[] methods = clazz.getMethods();

for(int i=0; i<methods.length; i++) {
System.out.print(clazz.getClassName());
System.out.print(".");
System.out.print(methods[i].getName());
System.out.println(methods[i].getSignature());
}
}
}

$ javac -classpath bcel-5.2.jar SignatureLister.java

$ $ java -cp bcel-5.2.jar:. SignatureLister A.class
A.<init>()V
A.foo(II)V


br,
Pietu


Dmitry Marienko

unread,
Nov 23, 2007, 10:07:08 AM11/23/07
to
Hi !
Thanks, Joshua and Pietu,
Unfortunately, I'm restricted in using any extern packages in this
project, so I have written simple class for translation method's signature
from general notation to jvm.

--dima

0 new messages