Мне нужно написать инструмент, в котором перечислены классы, которые вызывают методы указанных интерфейсов. Он будет использоваться как часть процесса сборки большого приложения 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
Можно ли использовать визиторы метода ASM с интерфейсами? ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1758072163
Anonymous
Мне нужно написать инструмент, в котором перечислены классы, которые вызывают методы указанных интерфейсов. Он будет использоваться как часть процесса сборки большого приложения Java, состоящего из многих модулей. Цель состоит в том, чтобы автоматически документировать зависимости между определенными модулями Java. Наконец, я нашел [b] 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:[/b]
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?
Подробнее здесь: [url]https://stackoverflow.com/questions/2866805/can-asm-method-visitors-be-used-with-interfaces[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия