class org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator implements java.util.Comparator<org.springframework.aop.Advisor>
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator
  super_class: java.lang.Object
{
  private static final int HIGHER_PRECEDENCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: -1

  private static final int SAME_PRECEDENCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int LOWER_PRECEDENCE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private final java.util.Comparator<? super org.springframework.aop.Advisor> advisorComparator;
    descriptor: Ljava/util/Comparator;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Comparator<-Lorg/springframework/aop/Advisor;>;

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
         0: .line 64
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 65
            aload 0 /* this */
            getstatic org.springframework.core.annotation.AnnotationAwareOrderComparator.INSTANCE:Lorg/springframework/core/annotation/AnnotationAwareOrderComparator;
            putfield org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.advisorComparator:Ljava/util/Comparator;
         2: .line 66
            return
        end local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator;

  public void <init>(java.util.Comparator<? super org.springframework.aop.Advisor>);
    descriptor: (Ljava/util/Comparator;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
        start local 1 // java.util.Comparator advisorComparator
         0: .line 73
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 74
            aload 1 /* advisorComparator */
            ldc "Advisor comparator must not be null"
            invokestatic org.springframework.util.Assert.notNull:(Ljava/lang/Object;Ljava/lang/String;)V
         2: .line 75
            aload 0 /* this */
            aload 1 /* advisorComparator */
            putfield org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.advisorComparator:Ljava/util/Comparator;
         3: .line 76
            return
        end local 1 // java.util.Comparator advisorComparator
        end local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    4     0               this  Lorg/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator;
            0    4     1  advisorComparator  Ljava/util/Comparator<-Lorg/springframework/aop/Advisor;>;
    Signature: (Ljava/util/Comparator<-Lorg/springframework/aop/Advisor;>;)V
    MethodParameters:
                   Name  Flags
      advisorComparator  

  public int compare(org.springframework.aop.Advisor, org.springframework.aop.Advisor);
    descriptor: (Lorg/springframework/aop/Advisor;Lorg/springframework/aop/Advisor;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
        start local 1 // org.springframework.aop.Advisor o1
        start local 2 // org.springframework.aop.Advisor o2
         0: .line 81
            aload 0 /* this */
            getfield org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.advisorComparator:Ljava/util/Comparator;
            aload 1 /* o1 */
            aload 2 /* o2 */
            invokeinterface java.util.Comparator.compare:(Ljava/lang/Object;Ljava/lang/Object;)I
            istore 3 /* advisorPrecedence */
        start local 3 // int advisorPrecedence
         1: .line 82
            iload 3 /* advisorPrecedence */
            ifne 3
            aload 0 /* this */
            aload 1 /* o1 */
            aload 2 /* o2 */
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.declaredInSameAspect:(Lorg/springframework/aop/Advisor;Lorg/springframework/aop/Advisor;)Z
            ifeq 3
         2: .line 83
            aload 0 /* this */
            aload 1 /* o1 */
            aload 2 /* o2 */
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.comparePrecedenceWithinAspect:(Lorg/springframework/aop/Advisor;Lorg/springframework/aop/Advisor;)I
            istore 3 /* advisorPrecedence */
         3: .line 85
      StackMap locals: int
      StackMap stack:
            iload 3 /* advisorPrecedence */
            ireturn
        end local 3 // int advisorPrecedence
        end local 2 // org.springframework.aop.Advisor o2
        end local 1 // org.springframework.aop.Advisor o1
        end local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    4     0               this  Lorg/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator;
            0    4     1                 o1  Lorg/springframework/aop/Advisor;
            0    4     2                 o2  Lorg/springframework/aop/Advisor;
            1    4     3  advisorPrecedence  I
    MethodParameters:
      Name  Flags
      o1    
      o2    

  private int comparePrecedenceWithinAspect(org.springframework.aop.Advisor, org.springframework.aop.Advisor);
    descriptor: (Lorg/springframework/aop/Advisor;Lorg/springframework/aop/Advisor;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
        start local 1 // org.springframework.aop.Advisor advisor1
        start local 2 // org.springframework.aop.Advisor advisor2
         0: .line 90
            aload 1 /* advisor1 */
            invokestatic org.springframework.aop.aspectj.AspectJAopUtils.isAfterAdvice:(Lorg/springframework/aop/Advisor;)Z
            ifne 2
            aload 2 /* advisor2 */
            invokestatic org.springframework.aop.aspectj.AspectJAopUtils.isAfterAdvice:(Lorg/springframework/aop/Advisor;)Z
            ifne 2
         1: .line 89
            iconst_0
            goto 3
      StackMap locals:
      StackMap stack:
         2: iconst_1
      StackMap locals:
      StackMap stack: int
         3: istore 3 /* oneOrOtherIsAfterAdvice */
        start local 3 // boolean oneOrOtherIsAfterAdvice
         4: .line 91
            aload 0 /* this */
            aload 1 /* advisor1 */
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.getAspectDeclarationOrder:(Lorg/springframework/aop/Advisor;)I
            aload 0 /* this */
            aload 2 /* advisor2 */
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.getAspectDeclarationOrder:(Lorg/springframework/aop/Advisor;)I
            isub
            istore 4 /* adviceDeclarationOrderDelta */
        start local 4 // int adviceDeclarationOrderDelta
         5: .line 93
            iload 3 /* oneOrOtherIsAfterAdvice */
            ifeq 11
         6: .line 95
            iload 4 /* adviceDeclarationOrderDelta */
            ifge 8
         7: .line 98
            iconst_1
            ireturn
         8: .line 100
      StackMap locals: int int
      StackMap stack:
            iload 4 /* adviceDeclarationOrderDelta */
            ifne 10
         9: .line 101
            iconst_0
            ireturn
        10: .line 104
      StackMap locals:
      StackMap stack:
            iconst_m1
            ireturn
        11: .line 109
      StackMap locals:
      StackMap stack:
            iload 4 /* adviceDeclarationOrderDelta */
            ifge 13
        12: .line 112
            iconst_m1
            ireturn
        13: .line 114
      StackMap locals:
      StackMap stack:
            iload 4 /* adviceDeclarationOrderDelta */
            ifne 15
        14: .line 115
            iconst_0
            ireturn
        15: .line 118
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 4 // int adviceDeclarationOrderDelta
        end local 3 // boolean oneOrOtherIsAfterAdvice
        end local 2 // org.springframework.aop.Advisor advisor2
        end local 1 // org.springframework.aop.Advisor advisor1
        end local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
      LocalVariableTable:
        Start  End  Slot                         Name  Signature
            0   16     0                         this  Lorg/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator;
            0   16     1                     advisor1  Lorg/springframework/aop/Advisor;
            0   16     2                     advisor2  Lorg/springframework/aop/Advisor;
            4   16     3      oneOrOtherIsAfterAdvice  Z
            5   16     4  adviceDeclarationOrderDelta  I
    MethodParameters:
          Name  Flags
      advisor1  
      advisor2  

  private boolean declaredInSameAspect(org.springframework.aop.Advisor, org.springframework.aop.Advisor);
    descriptor: (Lorg/springframework/aop/Advisor;Lorg/springframework/aop/Advisor;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
        start local 1 // org.springframework.aop.Advisor advisor1
        start local 2 // org.springframework.aop.Advisor advisor2
         0: .line 124
            aload 0 /* this */
            aload 1 /* advisor1 */
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.hasAspectName:(Lorg/springframework/aop/Advisor;)Z
            ifeq 3
            aload 0 /* this */
            aload 2 /* advisor2 */
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.hasAspectName:(Lorg/springframework/aop/Advisor;)Z
            ifeq 3
         1: .line 125
            aload 0 /* this */
            aload 1 /* advisor1 */
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.getAspectName:(Lorg/springframework/aop/Advisor;)Ljava/lang/String;
            aload 0 /* this */
            aload 2 /* advisor2 */
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.getAspectName:(Lorg/springframework/aop/Advisor;)Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 3
         2: .line 124
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         3: iconst_0
            ireturn
        end local 2 // org.springframework.aop.Advisor advisor2
        end local 1 // org.springframework.aop.Advisor advisor1
        end local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    4     0      this  Lorg/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator;
            0    4     1  advisor1  Lorg/springframework/aop/Advisor;
            0    4     2  advisor2  Lorg/springframework/aop/Advisor;
    MethodParameters:
          Name  Flags
      advisor1  
      advisor2  

  private boolean hasAspectName(org.springframework.aop.Advisor);
    descriptor: (Lorg/springframework/aop/Advisor;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
        start local 1 // org.springframework.aop.Advisor anAdvisor
         0: .line 129
            aload 1 /* anAdvisor */
            instanceof org.springframework.aop.aspectj.AspectJPrecedenceInformation
            ifne 3
         1: .line 130
            aload 1 /* anAdvisor */
            invokeinterface org.springframework.aop.Advisor.getAdvice:()Lorg/aopalliance/aop/Advice;
            instanceof org.springframework.aop.aspectj.AspectJPrecedenceInformation
            ifne 3
         2: .line 129
            iconst_0
            ireturn
      StackMap locals:
      StackMap stack:
         3: iconst_1
            ireturn
        end local 1 // org.springframework.aop.Advisor anAdvisor
        end local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    4     0       this  Lorg/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator;
            0    4     1  anAdvisor  Lorg/springframework/aop/Advisor;
    MethodParameters:
           Name  Flags
      anAdvisor  

  private java.lang.String getAspectName(org.springframework.aop.Advisor);
    descriptor: (Lorg/springframework/aop/Advisor;)Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
        start local 1 // org.springframework.aop.Advisor anAdvisor
         0: .line 135
            aload 1 /* anAdvisor */
            invokestatic org.springframework.aop.aspectj.AspectJAopUtils.getAspectJPrecedenceInformationFor:(Lorg/springframework/aop/Advisor;)Lorg/springframework/aop/aspectj/AspectJPrecedenceInformation;
            astore 2 /* pi */
        start local 2 // org.springframework.aop.aspectj.AspectJPrecedenceInformation pi
         1: .line 136
            aload 2 /* pi */
            ifnull 2
            iconst_1
            goto 3
      StackMap locals: org.springframework.aop.aspectj.AspectJPrecedenceInformation
      StackMap stack:
         2: iconst_0
      StackMap locals:
      StackMap stack: int
         3: ldc "Unresolvable precedence information"
            invokestatic org.springframework.util.Assert.state:(ZLjava/lang/String;)V
         4: .line 137
            aload 2 /* pi */
            invokeinterface org.springframework.aop.aspectj.AspectJPrecedenceInformation.getAspectName:()Ljava/lang/String;
            areturn
        end local 2 // org.springframework.aop.aspectj.AspectJPrecedenceInformation pi
        end local 1 // org.springframework.aop.Advisor anAdvisor
        end local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Lorg/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator;
            0    5     1  anAdvisor  Lorg/springframework/aop/Advisor;
            1    5     2         pi  Lorg/springframework/aop/aspectj/AspectJPrecedenceInformation;
    MethodParameters:
           Name  Flags
      anAdvisor  

  private int getAspectDeclarationOrder(org.springframework.aop.Advisor);
    descriptor: (Lorg/springframework/aop/Advisor;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=3, args_size=2
        start local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
        start local 1 // org.springframework.aop.Advisor anAdvisor
         0: .line 142
            aload 1 /* anAdvisor */
            invokestatic org.springframework.aop.aspectj.AspectJAopUtils.getAspectJPrecedenceInformationFor:(Lorg/springframework/aop/Advisor;)Lorg/springframework/aop/aspectj/AspectJPrecedenceInformation;
         1: .line 141
            astore 2 /* precedenceInfo */
        start local 2 // org.springframework.aop.aspectj.AspectJPrecedenceInformation precedenceInfo
         2: .line 143
            aload 2 /* precedenceInfo */
            ifnull 4
         3: .line 144
            aload 2 /* precedenceInfo */
            invokeinterface org.springframework.aop.aspectj.AspectJPrecedenceInformation.getDeclarationOrder:()I
            ireturn
         4: .line 147
      StackMap locals: org.springframework.aop.aspectj.AspectJPrecedenceInformation
      StackMap stack:
            iconst_0
            ireturn
        end local 2 // org.springframework.aop.aspectj.AspectJPrecedenceInformation precedenceInfo
        end local 1 // org.springframework.aop.Advisor anAdvisor
        end local 0 // org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lorg/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparator;
            0    5     1       anAdvisor  Lorg/springframework/aop/Advisor;
            2    5     2  precedenceInfo  Lorg/springframework/aop/aspectj/AspectJPrecedenceInformation;
    MethodParameters:
           Name  Flags
      anAdvisor  

  public int compare(java.lang.Object, java.lang.Object);
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)I
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=3, locals=3, args_size=3
         0: .line 1
            aload 0
            aload 1
            checkcast org.springframework.aop.Advisor
            aload 2
            checkcast org.springframework.aop.Advisor
            invokevirtual org.springframework.aop.aspectj.autoproxy.AspectJPrecedenceComparator.compare:(Lorg/springframework/aop/Advisor;Lorg/springframework/aop/Advisor;)I
            ireturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
Signature: Ljava/lang/Object;Ljava/util/Comparator<Lorg/springframework/aop/Advisor;>;
SourceFile: "AspectJPrecedenceComparator.java"