Можно ли использовать визиторы метода ASM с интерфейсами?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Можно ли использовать визиторы метода ASM с интерфейсами?

Сообщение Anonymous »

Мне нужно написать инструмент, в котором перечислены классы, которые вызывают методы указанных интерфейсов. Он будет использоваться как часть процесса сборки большого приложения Java, состоящего из многих модулей. Цель состоит в том, чтобы автоматически документировать зависимости между определенными модулями Java. Наконец, я нашел asm < /strong>, это, кажется, делает то, что мне нужно.import java.io.*;
import java.util.*;

import org.objectweb.asm.ClassReader;

public class Test {

public static void main(String[] args) throws Exception {

File dir = new File(args[0]);

List classFiles = new LinkedList();
findClassFiles(classFiles, dir);

for (File classFile : classFiles) {
InputStream input = new FileInputStream(classFile);
new ClassReader(input).accept(new MyClassVisitor(), 0);
input.close();
}
}

private static void findClassFiles(List list, File dir) {
for (File file : dir.listFiles()) {
if (file.isDirectory()) {
findClassFiles(list, file);
} else if (file.getName().endsWith(".class")) {
list.add(file);
}
}
}
}
< /code>



import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.commons.EmptyVisitor;

public class MyClassVisitor extends EmptyVisitor {

private String className;

@Override
public void visit(int version, int access, String name, String signature,
String superName, String[] interfaces) {
this.className = name;
}

@Override
public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {

System.out.println(className + "." + name);
return new MyMethodVisitor();
}
}
< /code>



import org.objectweb.asm.commons.EmptyVisitor;

public class MyMethodVisitor extends EmptyVisitor {

@Override
public void visitMethodInsn(int opcode, String owner, String name,
String desc) {

String key = owner + "." + name;
System.out.println(" " + key);
}
}
< /code>



The Problem:


The code works for regular classes only! If the class file contains an interface, visitMethod is called, but not visitMethodInsn. I don't get any info about the callers of interface methods.

Any ideas?

Подробнее здесь: https://stackoverflow.com/questions/286 ... interfaces
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»