RSyntaxTextArea icon indicating copy to clipboard operation
RSyntaxTextArea copied to clipboard

Java Bytecode syntax style

Open GraxCode opened this issue 5 years ago • 0 comments

It would be nice to have a syntax style for java bytecode. Bytecode text generated by ASM looks like this:

// class version 50.0 (50)
// access flags 0x21
public class org/benf/cfr/reader/CfrDriverImpl implements org/benf/cfr/reader/api/CfrDriver {

  // access flags 0x9
  public static INNERCLASS org/benf/cfr/reader/util/getopt/PermittedOptionProvider$Argument org/benf/cfr/reader/util/getopt/PermittedOptionProvider Argument
  // access flags 0x9
  public static INNERCLASS org/benf/cfr/reader/util/getopt/PermittedOptionProvider$ArgumentParam org/benf/cfr/reader/util/getopt/PermittedOptionProvider ArgumentParam

  // access flags 0x12
  private final Lorg/benf/cfr/reader/util/getopt/Options; options

  // access flags 0x12
  private final Lorg/benf/cfr/reader/apiunreleased/ClassFileSource2; classFileSource

  // access flags 0x12
  private final Lorg/benf/cfr/reader/api/OutputSinkFactory; outputSinkFactory

  // access flags 0x1
  public <init>(Lorg/benf/cfr/reader/api/ClassFileSource;Lorg/benf/cfr/reader/api/OutputSinkFactory;Lorg/benf/cfr/reader/util/getopt/Options;)V
    ALOAD 0
    INVOKESPECIAL java/lang/Object.<init> ()V
    ALOAD 3
    IFNONNULL L0
    NEW org/benf/cfr/reader/util/getopt/OptionsImpl
    DUP
    NEW java/util/HashMap
    DUP
    INVOKESPECIAL java/util/HashMap.<init> ()V
    INVOKESPECIAL org/benf/cfr/reader/util/getopt/OptionsImpl.<init> (Ljava/util/Map;)V
    ASTORE 3
   L0
   FRAME FULL [org/benf/cfr/reader/CfrDriverImpl org/benf/cfr/reader/api/ClassFileSource org/benf/cfr/reader/api/OutputSinkFactory org/benf/cfr/reader/util/getopt/Options] []
    ALOAD 1
    IFNONNULL L1
    NEW org/benf/cfr/reader/state/ClassFileSourceImpl
    DUP
    ALOAD 3
    INVOKESPECIAL org/benf/cfr/reader/state/ClassFileSourceImpl.<init> (Lorg/benf/cfr/reader/util/getopt/Options;)V
    ASTORE 1
   L1
   FRAME SAME
    ALOAD 0
    ALOAD 2
    PUTFIELD org/benf/cfr/reader/CfrDriverImpl.outputSinkFactory : Lorg/benf/cfr/reader/api/OutputSinkFactory;
    ALOAD 0
    ALOAD 3
    PUTFIELD org/benf/cfr/reader/CfrDriverImpl.options : Lorg/benf/cfr/reader/util/getopt/Options;
    ALOAD 0
    ALOAD 1
    INSTANCEOF org/benf/cfr/reader/apiunreleased/ClassFileSource2
    IFEQ L2
    ALOAD 1
    CHECKCAST org/benf/cfr/reader/apiunreleased/ClassFileSource2
    GOTO L3
   L2
   FRAME SAME1 org/benf/cfr/reader/CfrDriverImpl
    NEW org/benf/cfr/reader/state/ClassFileSourceWrapper
    DUP
    ALOAD 1
    INVOKESPECIAL org/benf/cfr/reader/state/ClassFileSourceWrapper.<init> (Lorg/benf/cfr/reader/api/ClassFileSource;)V
   L3
   FRAME FULL [org/benf/cfr/reader/CfrDriverImpl org/benf/cfr/reader/api/ClassFileSource org/benf/cfr/reader/api/OutputSinkFactory org/benf/cfr/reader/util/getopt/Options] [org/benf/cfr/reader/CfrDriverImpl org/benf/cfr/reader/apiunreleased/ClassFileSource2]
    PUTFIELD org/benf/cfr/reader/CfrDriverImpl.classFileSource : Lorg/benf/cfr/reader/apiunreleased/ClassFileSource2;
    RETURN
    MAXSTACK = 4
    MAXLOCALS = 4

  // access flags 0x1
  // signature (Ljava/util/List<Ljava/lang/String;>;)V
  // declaration: void analyse(java.util.List<java.lang.String>)
  public analyse(Ljava/util/List;)V
    ALOAD 1
    INVOKEINTERFACE java/util/List.size ()I (itf)
    ICONST_1
    IF_ICMPLE L0
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.options : Lorg/benf/cfr/reader/util/getopt/Options;
    GETSTATIC org/benf/cfr/reader/util/getopt/OptionsImpl.SKIP_BATCH_INNER_CLASSES : Lorg/benf/cfr/reader/util/getopt/PermittedOptionProvider$Argument;
    INVOKEINTERFACE org/benf/cfr/reader/util/getopt/Options.getOption (Lorg/benf/cfr/reader/util/getopt/PermittedOptionProvider$ArgumentParam;)Ljava/lang/Object; (itf)
    CHECKCAST java/lang/Boolean
    INVOKEVIRTUAL java/lang/Boolean.booleanValue ()Z
    IFEQ L0
    ICONST_1
    GOTO L1
   L0
   FRAME SAME
    ICONST_0
   L1
   FRAME SAME1 I
    ISTORE 2
    ALOAD 1
    INVOKESTATIC java/util/Collections.sort (Ljava/util/List;)V
    ALOAD 1
    INVOKEINTERFACE java/util/List.iterator ()Ljava/util/Iterator; (itf)
    ASTORE 3
   L2
   FRAME APPEND [I java/util/Iterator]
    ALOAD 3
    INVOKEINTERFACE java/util/Iterator.hasNext ()Z (itf)
    IFEQ L3
    ALOAD 3
    INVOKEINTERFACE java/util/Iterator.next ()Ljava/lang/Object; (itf)
    CHECKCAST java/lang/String
    ASTORE 4
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.classFileSource : Lorg/benf/cfr/reader/apiunreleased/ClassFileSource2;
    ACONST_NULL
    ACONST_NULL
    INVOKEINTERFACE org/benf/cfr/reader/apiunreleased/ClassFileSource2.informAnalysisRelativePathDetail (Ljava/lang/String;Ljava/lang/String;)V (itf)
    NEW org/benf/cfr/reader/state/DCCommonState
    DUP
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.options : Lorg/benf/cfr/reader/util/getopt/Options;
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.classFileSource : Lorg/benf/cfr/reader/apiunreleased/ClassFileSource2;
    INVOKESPECIAL org/benf/cfr/reader/state/DCCommonState.<init> (Lorg/benf/cfr/reader/util/getopt/Options;Lorg/benf/cfr/reader/apiunreleased/ClassFileSource2;)V
    ASTORE 5
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.outputSinkFactory : Lorg/benf/cfr/reader/api/OutputSinkFactory;
    IFNULL L4
    NEW org/benf/cfr/reader/util/output/SinkDumperFactory
    DUP
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.outputSinkFactory : Lorg/benf/cfr/reader/api/OutputSinkFactory;
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.options : Lorg/benf/cfr/reader/util/getopt/Options;
    INVOKESPECIAL org/benf/cfr/reader/util/output/SinkDumperFactory.<init> (Lorg/benf/cfr/reader/api/OutputSinkFactory;Lorg/benf/cfr/reader/util/getopt/Options;)V
    GOTO L5
   L4
   FRAME APPEND [java/lang/String org/benf/cfr/reader/state/DCCommonState]
    NEW org/benf/cfr/reader/util/output/InternalDumperFactoryImpl
    DUP
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.options : Lorg/benf/cfr/reader/util/getopt/Options;
    INVOKESPECIAL org/benf/cfr/reader/util/output/InternalDumperFactoryImpl.<init> (Lorg/benf/cfr/reader/util/getopt/Options;)V
   L5
   FRAME SAME1 org/benf/cfr/reader/util/output/DumperFactory
    ASTORE 6
    ALOAD 0
    GETFIELD org/benf/cfr/reader/CfrDriverImpl.options : Lorg/benf/cfr/reader/util/getopt/Options;
    GETSTATIC org/benf/cfr/reader/util/getopt/OptionsImpl.ANALYSE_AS : Lorg/benf/cfr/reader/util/getopt/PermittedOptionProvider$Argument;
    INVOKEINTERFACE org/benf/cfr/reader/util/getopt/Options.getOption (Lorg/benf/cfr/reader/util/getopt/PermittedOptionProvider$ArgumentParam;)Ljava/lang/Object; (itf)
    CHECKCAST org/benf/cfr/reader/util/AnalysisType
    ASTORE 7
    ALOAD 7
    IFNULL L6
    ALOAD 7
    GETSTATIC org/benf/cfr/reader/util/AnalysisType.DETECT : Lorg/benf/cfr/reader/util/AnalysisType;
    IF_ACMPNE L7
   L6
   FRAME APPEND [org/benf/cfr/reader/util/output/DumperFactory org/benf/cfr/reader/util/AnalysisType]
    ALOAD 5
    ALOAD 4
    INVOKEVIRTUAL org/benf/cfr/reader/state/DCCommonState.detectClsJar (Ljava/lang/String;)Lorg/benf/cfr/reader/util/AnalysisType;
    ASTORE 7
   L7
   FRAME SAME
    ALOAD 7
    GETSTATIC org/benf/cfr/reader/util/AnalysisType.JAR : Lorg/benf/cfr/reader/util/AnalysisType;
    IF_ACMPEQ L8
    ALOAD 7
    GETSTATIC org/benf/cfr/reader/util/AnalysisType.WAR : Lorg/benf/cfr/reader/util/AnalysisType;
    IF_ACMPNE L9
   L8
   FRAME SAME
    ALOAD 5
    ALOAD 4
    ALOAD 6
    INVOKESTATIC org/benf/cfr/reader/Driver.doJar (Lorg/benf/cfr/reader/state/DCCommonState;Ljava/lang/String;Lorg/benf/cfr/reader/util/output/DumperFactory;)V
    GOTO L10
   L9
   FRAME SAME
    ALOAD 7
    GETSTATIC org/benf/cfr/reader/util/AnalysisType.CLASS : Lorg/benf/cfr/reader/util/AnalysisType;
    IF_ACMPNE L10
    ALOAD 5
    ALOAD 4
    ILOAD 2
    ALOAD 6
    INVOKESTATIC org/benf/cfr/reader/Driver.doClass (Lorg/benf/cfr/reader/state/DCCommonState;Ljava/lang/String;ZLorg/benf/cfr/reader/util/output/DumperFactory;)V
   L10
   FRAME FULL [org/benf/cfr/reader/CfrDriverImpl java/util/List I java/util/Iterator] []
    GOTO L2
   L3
   FRAME CHOP 1
    RETURN
    MAXSTACK = 4
    MAXLOCALS = 8
}

GraxCode avatar Apr 25 '20 08:04 GraxCode