Мне не известен инструмент, который делает это автоматически. Вероятно, я бы использовал класс org.objectweb.asm.util.ASMifierClassVisitor , чтобы выяснить связь между сигнатурами и вызовами API ASM.
Для класса, содержащего этот код:
public void foo1(Object o1, String s2) {
}
... инструмент сгенерирует:
mv = cw.visitMethod(ACC_PUBLIC, "foo1",
"(Ljava/lang/Object;Ljava/lang/String;)V", null, null);
mv.visitCode();
mv.visitInsn(RETURN);
mv.visitMaxs(0, 3);
mv.visitEnd();
Для этого кода:
public static final String[] foo2() {
return null;
}
... будет генерироваться:
mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL + ACC_STATIC,
"foo2", "()[Ljava/lang/String;", null, null);
mv.visitCode();
mv.visitInsn(ACONST_NULL);
mv.visitInsn(ARETURN);
mv.visitMaxs(1, 0);
mv.visitEnd();
В часто задаваемых вопросах есть примечания по сигнатурам методов, и это поможет, если вы понимаете Номенклатура классов Java .
Обратите внимание, что API ASM также можно использовать для превращения java.lang.reflect.Method в org.objectweb.asm.commons.Method . Поскольку вы можете получить класс из java.lang.reflect.Method , вы можете использовать ClassVisitor s / MethodVisitor s для проверять методы .