public class org.springframework.beans.support.PropertyComparator<T> implements java.util.Comparator<T>
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.springframework.beans.support.PropertyComparator
  super_class: java.lang.Object
{
  protected final org.apache.commons.logging.Log logger;
    descriptor: Lorg/apache/commons/logging/Log;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  private final org.springframework.beans.support.SortDefinition sortDefinition;
    descriptor: Lorg/springframework/beans/support/SortDefinition;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.springframework.beans.BeanWrapperImpl beanWrapper;
    descriptor: Lorg/springframework/beans/BeanWrapperImpl;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public void <init>(org.springframework.beans.support.SortDefinition);
    descriptor: (Lorg/springframework/beans/support/SortDefinition;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.springframework.beans.support.PropertyComparator this
        start local 1 // org.springframework.beans.support.SortDefinition sortDefinition
         0: .line 54
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 43
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokestatic org.apache.commons.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/commons/logging/Log;
            putfield org.springframework.beans.support.PropertyComparator.logger:Lorg/apache/commons/logging/Log;
         2: .line 47
            aload 0 /* this */
            new org.springframework.beans.BeanWrapperImpl
            dup
            iconst_0
            invokespecial org.springframework.beans.BeanWrapperImpl.<init>:(Z)V
            putfield org.springframework.beans.support.PropertyComparator.beanWrapper:Lorg/springframework/beans/BeanWrapperImpl;
         3: .line 55
            aload 0 /* this */
            aload 1 /* sortDefinition */
            putfield org.springframework.beans.support.PropertyComparator.sortDefinition:Lorg/springframework/beans/support/SortDefinition;
         4: .line 56
            return
        end local 1 // org.springframework.beans.support.SortDefinition sortDefinition
        end local 0 // org.springframework.beans.support.PropertyComparator this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    5     0            this  Lorg/springframework/beans/support/PropertyComparator<TT;>;
            0    5     1  sortDefinition  Lorg/springframework/beans/support/SortDefinition;
    MethodParameters:
                Name  Flags
      sortDefinition  

  public void <init>(java.lang.String, boolean, boolean);
    descriptor: (Ljava/lang/String;ZZ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=4, args_size=4
        start local 0 // org.springframework.beans.support.PropertyComparator this
        start local 1 // java.lang.String property
        start local 2 // boolean ignoreCase
        start local 3 // boolean ascending
         0: .line 64
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 43
            aload 0 /* this */
            aload 0 /* this */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokestatic org.apache.commons.logging.LogFactory.getLog:(Ljava/lang/Class;)Lorg/apache/commons/logging/Log;
            putfield org.springframework.beans.support.PropertyComparator.logger:Lorg/apache/commons/logging/Log;
         2: .line 47
            aload 0 /* this */
            new org.springframework.beans.BeanWrapperImpl
            dup
            iconst_0
            invokespecial org.springframework.beans.BeanWrapperImpl.<init>:(Z)V
            putfield org.springframework.beans.support.PropertyComparator.beanWrapper:Lorg/springframework/beans/BeanWrapperImpl;
         3: .line 65
            aload 0 /* this */
            new org.springframework.beans.support.MutableSortDefinition
            dup
            aload 1 /* property */
            iload 2 /* ignoreCase */
            iload 3 /* ascending */
            invokespecial org.springframework.beans.support.MutableSortDefinition.<init>:(Ljava/lang/String;ZZ)V
            putfield org.springframework.beans.support.PropertyComparator.sortDefinition:Lorg/springframework/beans/support/SortDefinition;
         4: .line 66
            return
        end local 3 // boolean ascending
        end local 2 // boolean ignoreCase
        end local 1 // java.lang.String property
        end local 0 // org.springframework.beans.support.PropertyComparator this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    5     0        this  Lorg/springframework/beans/support/PropertyComparator<TT;>;
            0    5     1    property  Ljava/lang/String;
            0    5     2  ignoreCase  Z
            0    5     3   ascending  Z
    MethodParameters:
            Name  Flags
      property    
      ignoreCase  
      ascending   

  public final org.springframework.beans.support.SortDefinition getSortDefinition();
    descriptor: ()Lorg/springframework/beans/support/SortDefinition;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.springframework.beans.support.PropertyComparator this
         0: .line 72
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.sortDefinition:Lorg/springframework/beans/support/SortDefinition;
            areturn
        end local 0 // org.springframework.beans.support.PropertyComparator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/springframework/beans/support/PropertyComparator<TT;>;

  public int compare(T, );
    descriptor: (Ljava/lang/Object;Ljava/lang/Object;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=3
        start local 0 // org.springframework.beans.support.PropertyComparator this
        start local 1 // java.lang.Object o1
        start local 2 // java.lang.Object o2
         0: .line 79
            aload 0 /* this */
            aload 1 /* o1 */
            invokevirtual org.springframework.beans.support.PropertyComparator.getPropertyValue:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 3 /* v1 */
        start local 3 // java.lang.Object v1
         1: .line 80
            aload 0 /* this */
            aload 2 /* o2 */
            invokevirtual org.springframework.beans.support.PropertyComparator.getPropertyValue:(Ljava/lang/Object;)Ljava/lang/Object;
            astore 4 /* v2 */
        start local 4 // java.lang.Object v2
         2: .line 81
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.sortDefinition:Lorg/springframework/beans/support/SortDefinition;
            invokeinterface org.springframework.beans.support.SortDefinition.isIgnoreCase:()Z
            ifeq 5
            aload 3 /* v1 */
            instanceof java.lang.String
            ifeq 5
            aload 4 /* v2 */
            instanceof java.lang.String
            ifeq 5
         3: .line 82
            aload 3 /* v1 */
            checkcast java.lang.String
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            astore 3 /* v1 */
         4: .line 83
            aload 4 /* v2 */
            checkcast java.lang.String
            invokevirtual java.lang.String.toLowerCase:()Ljava/lang/String;
            astore 4 /* v2 */
         5: .line 90
      StackMap locals: java.lang.Object java.lang.Object
      StackMap stack:
            aload 3 /* v1 */
            ifnull 10
         6: .line 91
            aload 4 /* v2 */
            ifnull 7
            aload 3 /* v1 */
            checkcast java.lang.Comparable
            aload 4 /* v2 */
            invokeinterface java.lang.Comparable.compareTo:(Ljava/lang/Object;)I
            goto 8
      StackMap locals:
      StackMap stack:
         7: iconst_m1
      StackMap locals:
      StackMap stack: int
         8: istore 5 /* result */
        start local 5 // int result
         9: .line 92
            goto 18
        end local 5 // int result
        10: .line 94
      StackMap locals:
      StackMap stack:
            aload 4 /* v2 */
            ifnull 11
            iconst_1
            goto 12
      StackMap locals:
      StackMap stack:
        11: iconst_0
      StackMap locals:
      StackMap stack: int
        12: istore 5 /* result */
        start local 5 // int result
        13: .line 96
            goto 18
        end local 5 // int result
        14: .line 97
      StackMap locals:
      StackMap stack: java.lang.RuntimeException
            astore 6 /* ex */
        start local 6 // java.lang.RuntimeException ex
        15: .line 98
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.logger:Lorg/apache/commons/logging/Log;
            invokeinterface org.apache.commons.logging.Log.isDebugEnabled:()Z
            ifeq 17
        16: .line 99
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.logger:Lorg/apache/commons/logging/Log;
            new java.lang.StringBuilder
            dup
            ldc "Could not sort objects ["
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* o1 */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "] and ["
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 2 /* o2 */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc "]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 6 /* ex */
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
        17: .line 101
      StackMap locals: org.springframework.beans.support.PropertyComparator java.lang.Object java.lang.Object java.lang.Object java.lang.Object top java.lang.RuntimeException
      StackMap stack:
            iconst_0
            ireturn
        end local 6 // java.lang.RuntimeException ex
        start local 5 // int result
        18: .line 104
      StackMap locals: org.springframework.beans.support.PropertyComparator java.lang.Object java.lang.Object java.lang.Object java.lang.Object int
      StackMap stack:
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.sortDefinition:Lorg/springframework/beans/support/SortDefinition;
            invokeinterface org.springframework.beans.support.SortDefinition.isAscending:()Z
            ifeq 19
            iload 5 /* result */
            goto 20
      StackMap locals:
      StackMap stack:
        19: iload 5 /* result */
            ineg
      StackMap locals:
      StackMap stack: int
        20: ireturn
        end local 5 // int result
        end local 4 // java.lang.Object v2
        end local 3 // java.lang.Object v1
        end local 2 // java.lang.Object o2
        end local 1 // java.lang.Object o1
        end local 0 // org.springframework.beans.support.PropertyComparator this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   21     0    this  Lorg/springframework/beans/support/PropertyComparator<TT;>;
            0   21     1      o1  TT;
            0   21     2      o2  TT;
            1   21     3      v1  Ljava/lang/Object;
            2   21     4      v2  Ljava/lang/Object;
            9   10     5  result  I
           13   14     5  result  I
           18   21     5  result  I
           15   18     6      ex  Ljava/lang/RuntimeException;
      Exception table:
        from    to  target  type
           5    13      14  Class java.lang.RuntimeException
    Signature: (TT;TT;)I
    MethodParameters:
      Name  Flags
      o1    
      o2    

  private java.lang.Object getPropertyValue(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.springframework.beans.support.PropertyComparator this
        start local 1 // java.lang.Object obj
         0: .line 118
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.beanWrapper:Lorg/springframework/beans/BeanWrapperImpl;
            aload 1 /* obj */
            invokevirtual org.springframework.beans.BeanWrapperImpl.setWrappedInstance:(Ljava/lang/Object;)V
         1: .line 119
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.beanWrapper:Lorg/springframework/beans/BeanWrapperImpl;
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.sortDefinition:Lorg/springframework/beans/support/SortDefinition;
            invokeinterface org.springframework.beans.support.SortDefinition.getProperty:()Ljava/lang/String;
            invokevirtual org.springframework.beans.BeanWrapperImpl.getPropertyValue:(Ljava/lang/String;)Ljava/lang/Object;
         2: areturn
         3: .line 121
      StackMap locals:
      StackMap stack: org.springframework.beans.BeansException
            astore 2 /* ex */
        start local 2 // org.springframework.beans.BeansException ex
         4: .line 122
            aload 0 /* this */
            getfield org.springframework.beans.support.PropertyComparator.logger:Lorg/apache/commons/logging/Log;
            ldc "PropertyComparator could not access property - treating as null for sorting"
            aload 2 /* ex */
            invokeinterface org.apache.commons.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
         5: .line 123
            aconst_null
            areturn
        end local 2 // org.springframework.beans.BeansException ex
        end local 1 // java.lang.Object obj
        end local 0 // org.springframework.beans.support.PropertyComparator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lorg/springframework/beans/support/PropertyComparator<TT;>;
            0    6     1   obj  Ljava/lang/Object;
            4    6     2    ex  Lorg/springframework/beans/BeansException;
      Exception table:
        from    to  target  type
           0     2       3  Class org.springframework.beans.BeansException
    RuntimeVisibleAnnotations: 
      org.springframework.lang.Nullable()
    MethodParameters:
      Name  Flags
      obj   

  public static void sort(java.util.List<?>, org.springframework.beans.support.SortDefinition);
    descriptor: (Ljava/util/List;Lorg/springframework/beans/support/SortDefinition;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // java.util.List source
        start local 1 // org.springframework.beans.support.SortDefinition sortDefinition
         0: .line 137
            aload 1 /* sortDefinition */
            invokeinterface org.springframework.beans.support.SortDefinition.getProperty:()Ljava/lang/String;
            invokestatic org.springframework.util.StringUtils.hasText:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 138
            aload 0 /* source */
            new org.springframework.beans.support.PropertyComparator
            dup
            aload 1 /* sortDefinition */
            invokespecial org.springframework.beans.support.PropertyComparator.<init>:(Lorg/springframework/beans/support/SortDefinition;)V
            invokeinterface java.util.List.sort:(Ljava/util/Comparator;)V
         2: .line 140
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.springframework.beans.support.SortDefinition sortDefinition
        end local 0 // java.util.List source
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    3     0          source  Ljava/util/List<*>;
            0    3     1  sortDefinition  Lorg/springframework/beans/support/SortDefinition;
    Exceptions:
      throws org.springframework.beans.BeansException
    Signature: (Ljava/util/List<*>;Lorg/springframework/beans/support/SortDefinition;)V
    MethodParameters:
                Name  Flags
      source          
      sortDefinition  

  public static void sort(java.lang.Object[], org.springframework.beans.support.SortDefinition);
    descriptor: ([Ljava/lang/Object;Lorg/springframework/beans/support/SortDefinition;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // java.lang.Object[] source
        start local 1 // org.springframework.beans.support.SortDefinition sortDefinition
         0: .line 151
            aload 1 /* sortDefinition */
            invokeinterface org.springframework.beans.support.SortDefinition.getProperty:()Ljava/lang/String;
            invokestatic org.springframework.util.StringUtils.hasText:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 152
            aload 0 /* source */
            new org.springframework.beans.support.PropertyComparator
            dup
            aload 1 /* sortDefinition */
            invokespecial org.springframework.beans.support.PropertyComparator.<init>:(Lorg/springframework/beans/support/SortDefinition;)V
            invokestatic java.util.Arrays.sort:([Ljava/lang/Object;Ljava/util/Comparator;)V
         2: .line 154
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.springframework.beans.support.SortDefinition sortDefinition
        end local 0 // java.lang.Object[] source
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    3     0          source  [Ljava/lang/Object;
            0    3     1  sortDefinition  Lorg/springframework/beans/support/SortDefinition;
    Exceptions:
      throws org.springframework.beans.BeansException
    MethodParameters:
                Name  Flags
      source          
      sortDefinition  
}
Signature: <T:Ljava/lang/Object;>Ljava/lang/Object;Ljava/util/Comparator<TT;>;
SourceFile: "PropertyComparator.java"