Форматирование вывода TraceClassVisitor - PullRequest
1 голос
/ 02 ноября 2011

Допустим, я хочу напечатать байт-код метода с библиотекой asm.

public int get777() { return 777; }

до TraceClassVisitor будет выглядеть как

  // access flags 0x1
  public get777()I
   L0
    LINENUMBER 21 L0
    SIPUSH 777
    IRETURN
   L1
    LOCALVARIABLE this Lsomething/Point; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1
}

Теперь дело в том, что я забочусь только о

    SIPUSH 777
    IRETURN

для меня все остальное в значительной степени не имеет значения, поэтому я хочу стереть их с лица земли.

Я думал о фильтрации вещей, которые мне не нужны, наследуя TraceMethodVisitor, но на самом деле это был последний класс (облом!).

Есть ли способ форматирования вывода TraceClassVisitor, вообще? Если нет, то, что вы считаете лучшим подходом, чтобы отфильтровать вещи, которые меня не волнуют?

Ответы [ 3 ]

1 голос
/ 02 ноября 2011

Вы можете избавиться от номеров строк и информации о локальных переменных, передав флаг ClassReader.SKIP_DEBUG методу ClassReader.accept ().

Альтернативный подход заключается в добавлении посетителя перед TraceClassVisitor и TraceMethodVisitor, который будет глотатьсобытия, которые вы не хотите видеть в выводе.

1 голос
/ 02 ноября 2011

Я бы посмотрел на предоставление моего собственного принтера (возможно, расширение или делегирование Textifier ) через TraceClassVisitor (ClassVisitor, Printer, PrintWriter) . Я не проверял этот подход.

0 голосов
/ 02 ноября 2011

Мой стандартный подход: получить исходный код, выполнить поиск и поиск final class -> class, перекомпилировать.

...