public class org.terracotta.statistics.StatisticMapper<SOURCE extends java.lang.Enum<SOURCE>, TARGET extends java.lang.Enum<TARGET>> implements org.terracotta.statistics.OperationStatistic<TARGET>
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.terracotta.statistics.StatisticMapper
  super_class: java.lang.Object
{
  private final java.lang.Class<TARGET> targetType;
    descriptor: Ljava/lang/Class;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/lang/Class<TTARGET;>;

  private final java.lang.Class<SOURCE> sourceType;
    descriptor: Ljava/lang/Class;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/lang/Class<TSOURCE;>;

  private final org.terracotta.statistics.OperationStatistic<SOURCE> statistic;
    descriptor: Lorg/terracotta/statistics/OperationStatistic;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/terracotta/statistics/OperationStatistic<TSOURCE;>;

  private final java.util.Map<TARGET, java.util.Set<SOURCE>> translation;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<TTARGET;Ljava/util/Set<TSOURCE;>;>;

  private final java.util.Map<SOURCE, TARGET> reverseTranslation;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<TSOURCE;TTARGET;>;

  private final java.util.concurrent.ConcurrentMap<org.terracotta.statistics.observer.ChainedOperationObserver<? super TARGET>, org.terracotta.statistics.observer.ChainedOperationObserver<SOURCE>> derivedStats;
    descriptor: Ljava/util/concurrent/ConcurrentMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/concurrent/ConcurrentMap<Lorg/terracotta/statistics/observer/ChainedOperationObserver<-TTARGET;>;Lorg/terracotta/statistics/observer/ChainedOperationObserver<TSOURCE;>;>;

  public void <init>(java.util.Map<TARGET, java.util.Set<SOURCE>>, org.terracotta.statistics.OperationStatistic<SOURCE>);
    descriptor: (Ljava/util/Map;Lorg/terracotta/statistics/OperationStatistic;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=6, args_size=3
        start local 0 // org.terracotta.statistics.StatisticMapper this
        start local 1 // java.util.Map translation
        start local 2 // org.terracotta.statistics.OperationStatistic statistic
         0: .line 42
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 39
            aload 0 /* this */
         2: .line 40
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
            putfield org.terracotta.statistics.StatisticMapper.derivedStats:Ljava/util/concurrent/ConcurrentMap;
         3: .line 43
            aload 1 /* translation */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 3 /* first */
        start local 3 // java.util.Map$Entry first
         4: .line 45
            aload 0 /* this */
            aload 3 /* first */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.Enum
            invokevirtual java.lang.Enum.getDeclaringClass:()Ljava/lang/Class;
            putfield org.terracotta.statistics.StatisticMapper.targetType:Ljava/lang/Class;
         5: .line 46
            aload 0 /* this */
            aload 3 /* first */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Set
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Enum
            invokevirtual java.lang.Enum.getDeclaringClass:()Ljava/lang/Class;
            putfield org.terracotta.statistics.StatisticMapper.sourceType:Ljava/lang/Class;
         6: .line 47
            aload 0 /* this */
            aload 2 /* statistic */
            putfield org.terracotta.statistics.StatisticMapper.statistic:Lorg/terracotta/statistics/OperationStatistic;
         7: .line 48
            aload 0 /* this */
            aload 1 /* translation */
            putfield org.terracotta.statistics.StatisticMapper.translation:Ljava/util/Map;
         8: .line 49
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.targetType:Ljava/lang/Class;
            invokestatic java.util.EnumSet.allOf:(Ljava/lang/Class;)Ljava/util/EnumSet;
            astore 4 /* unmappedTierOutcomes */
        start local 4 // java.util.Set unmappedTierOutcomes
         9: .line 50
            aload 4 /* unmappedTierOutcomes */
            aload 1 /* translation */
            invokeinterface java.util.Map.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.removeAll:(Ljava/util/Collection;)Z
            pop
        10: .line 51
            aload 4 /* unmappedTierOutcomes */
            invokeinterface java.util.Set.isEmpty:()Z
            ifne 12
        11: .line 52
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Translation does not contain target outcomes "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* unmappedTierOutcomes */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        12: .line 55
      StackMap locals: org.terracotta.statistics.StatisticMapper java.util.Map org.terracotta.statistics.OperationStatistic java.util.Map$Entry java.util.Set
      StackMap stack:
            aload 0 /* this */
            aload 1 /* translation */
            invokestatic org.terracotta.statistics.StatisticMapper.reverse:(Ljava/util/Map;)Ljava/util/Map;
            putfield org.terracotta.statistics.StatisticMapper.reverseTranslation:Ljava/util/Map;
        13: .line 56
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.sourceType:Ljava/lang/Class;
            invokestatic java.util.EnumSet.allOf:(Ljava/lang/Class;)Ljava/util/EnumSet;
            astore 5 /* unmappedStoreOutcomes */
        start local 5 // java.util.Set unmappedStoreOutcomes
        14: .line 57
            aload 5 /* unmappedStoreOutcomes */
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.reverseTranslation:Ljava/util/Map;
            invokeinterface java.util.Map.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.removeAll:(Ljava/util/Collection;)Z
            pop
        15: .line 58
            aload 5 /* unmappedStoreOutcomes */
            invokeinterface java.util.Set.isEmpty:()Z
            ifne 17
        16: .line 59
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Translation does not contain source outcomes "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* unmappedStoreOutcomes */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        17: .line 61
      StackMap locals: java.util.Set
      StackMap stack:
            return
        end local 5 // java.util.Set unmappedStoreOutcomes
        end local 4 // java.util.Set unmappedTierOutcomes
        end local 3 // java.util.Map$Entry first
        end local 2 // org.terracotta.statistics.OperationStatistic statistic
        end local 1 // java.util.Map translation
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   18     0                   this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
            0   18     1            translation  Ljava/util/Map<TTARGET;Ljava/util/Set<TSOURCE;>;>;
            0   18     2              statistic  Lorg/terracotta/statistics/OperationStatistic<TSOURCE;>;
            4   18     3                  first  Ljava/util/Map$Entry<TTARGET;Ljava/util/Set<TSOURCE;>;>;
            9   18     4   unmappedTierOutcomes  Ljava/util/Set<TTARGET;>;
           14   18     5  unmappedStoreOutcomes  Ljava/util/Set<TSOURCE;>;
    Signature: (Ljava/util/Map<TTARGET;Ljava/util/Set<TSOURCE;>;>;Lorg/terracotta/statistics/OperationStatistic<TSOURCE;>;)V
    MethodParameters:
             Name  Flags
      translation  
      statistic    

  private static <B extends java.lang.Enum<B>, A extends java.lang.Enum<A>> java.util.Map<B, A> reverse(java.util.Map<A, java.util.Set<B>>);
    descriptor: (Ljava/util/Map;)Ljava/util/Map;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=5, locals=6, args_size=1
        start local 0 // java.util.Map map
         0: .line 64
            invokestatic java.util.Collections.emptyMap:()Ljava/util/Map;
            astore 1 /* reverse */
        start local 1 // java.util.Map reverse
         1: .line 66
            aload 0 /* map */
            invokeinterface java.util.Map.entrySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 3
            goto 10
      StackMap locals: java.util.Map java.util.Map top java.util.Iterator
      StackMap stack:
         2: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 2 /* e */
        start local 2 // java.util.Map$Entry e
         3: .line 67
            aload 2 /* e */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast java.util.Set
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 5
            goto 9
      StackMap locals: java.util.Map java.util.Map java.util.Map$Entry java.util.Iterator top java.util.Iterator
      StackMap stack:
         4: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Enum
            astore 4 /* b */
        start local 4 // java.lang.Enum b
         5: .line 68
            aload 1 /* reverse */
            invokeinterface java.util.Map.isEmpty:()Z
            ifeq 7
         6: .line 69
            new java.util.EnumMap
            dup
            aload 4 /* b */
            invokevirtual java.lang.Enum.getDeclaringClass:()Ljava/lang/Class;
            invokespecial java.util.EnumMap.<init>:(Ljava/lang/Class;)V
            astore 1 /* reverse */
         7: .line 71
      StackMap locals: java.util.Map java.util.Map java.util.Map$Entry java.util.Iterator java.lang.Enum java.util.Iterator
      StackMap stack:
            aload 1 /* reverse */
            aload 4 /* b */
            aload 2 /* e */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            checkcast java.lang.Enum
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            ifnull 9
         8: .line 72
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "Reverse statistic outcome mapping is ill-defined: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* map */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 4 // java.lang.Enum b
         9: .line 67
      StackMap locals: java.util.Map java.util.Map java.util.Map$Entry java.util.Iterator top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 4
        end local 2 // java.util.Map$Entry e
        10: .line 66
      StackMap locals: java.util.Map java.util.Map top java.util.Iterator
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
        11: .line 76
            aload 1 /* reverse */
            areturn
        end local 1 // java.util.Map reverse
        end local 0 // java.util.Map map
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   12     0      map  Ljava/util/Map<TA;Ljava/util/Set<TB;>;>;
            1   12     1  reverse  Ljava/util/Map<TB;TA;>;
            3   10     2        e  Ljava/util/Map$Entry<TA;Ljava/util/Set<TB;>;>;
            5    9     4        b  TB;
    Signature: <B:Ljava/lang/Enum<TB;>;A:Ljava/lang/Enum<TA;>;>(Ljava/util/Map<TA;Ljava/util/Set<TB;>;>;)Ljava/util/Map<TB;TA;>;
    MethodParameters:
      Name  Flags
      map   

  public java.lang.Class<TARGET> type();
    descriptor: ()Ljava/lang/Class;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.terracotta.statistics.StatisticMapper this
         0: .line 81
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.targetType:Ljava/lang/Class;
            areturn
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
    Signature: ()Ljava/lang/Class<TTARGET;>;

  public org.terracotta.statistics.ValueStatistic<java.lang.Long> statistic(TARGET);
    descriptor: (Ljava/lang/Enum;)Lorg/terracotta/statistics/ValueStatistic;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.terracotta.statistics.StatisticMapper this
        start local 1 // java.lang.Enum result
         0: .line 86
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.statistic:Lorg/terracotta/statistics/OperationStatistic;
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.translation:Ljava/util/Map;
            aload 1 /* result */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Set
            invokeinterface org.terracotta.statistics.OperationStatistic.statistic:(Ljava/util/Set;)Lorg/terracotta/statistics/ValueStatistic;
            areturn
        end local 1 // java.lang.Enum result
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
            0    1     1  result  TTARGET;
    Signature: (TTARGET;)Lorg/terracotta/statistics/ValueStatistic<Ljava/lang/Long;>;
    MethodParameters:
        Name  Flags
      result  

  public org.terracotta.statistics.ValueStatistic<java.lang.Long> statistic(java.util.Set<TARGET>);
    descriptor: (Ljava/util/Set;)Lorg/terracotta/statistics/ValueStatistic;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.terracotta.statistics.StatisticMapper this
        start local 1 // java.util.Set results
         0: .line 91
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.sourceType:Ljava/lang/Class;
            invokestatic java.util.EnumSet.noneOf:(Ljava/lang/Class;)Ljava/util/EnumSet;
            astore 2 /* translated */
        start local 2 // java.util.Set translated
         1: .line 92
            aload 1 /* results */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 4
            goto 4
      StackMap locals: org.terracotta.statistics.StatisticMapper java.util.Set java.util.Set top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Enum
            astore 3 /* result */
        start local 3 // java.lang.Enum result
         3: .line 93
            aload 2 /* translated */
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.translation:Ljava/util/Map;
            aload 3 /* result */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Collection
            invokeinterface java.util.Set.addAll:(Ljava/util/Collection;)Z
            pop
        end local 3 // java.lang.Enum result
         4: .line 92
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 95
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.statistic:Lorg/terracotta/statistics/OperationStatistic;
            aload 2 /* translated */
            invokeinterface org.terracotta.statistics.OperationStatistic.statistic:(Ljava/util/Set;)Lorg/terracotta/statistics/ValueStatistic;
            areturn
        end local 2 // java.util.Set translated
        end local 1 // java.util.Set results
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0        this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
            0    6     1     results  Ljava/util/Set<TTARGET;>;
            1    6     2  translated  Ljava/util/Set<TSOURCE;>;
            3    4     3      result  TTARGET;
    Signature: (Ljava/util/Set<TTARGET;>;)Lorg/terracotta/statistics/ValueStatistic<Ljava/lang/Long;>;
    MethodParameters:
         Name  Flags
      results  

  public long count();
    descriptor: (Ljava/lang/Enum;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.terracotta.statistics.StatisticMapper this
        start local 1 // java.lang.Enum type
         0: .line 100
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.statistic:Lorg/terracotta/statistics/OperationStatistic;
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.translation:Ljava/util/Map;
            aload 1 /* type */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Set
            invokeinterface org.terracotta.statistics.OperationStatistic.sum:(Ljava/util/Set;)J
            lreturn
        end local 1 // java.lang.Enum type
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
            0    1     1  type  TTARGET;
    Signature: (TTARGET;)J
    MethodParameters:
      Name  Flags
      type  

  public long sum(java.util.Set<TARGET>);
    descriptor: (Ljava/util/Set;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // org.terracotta.statistics.StatisticMapper this
        start local 1 // java.util.Set types
         0: .line 105
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.sourceType:Ljava/lang/Class;
            invokestatic java.util.EnumSet.noneOf:(Ljava/lang/Class;)Ljava/util/EnumSet;
            astore 2 /* translated */
        start local 2 // java.util.Set translated
         1: .line 106
            aload 1 /* types */
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 4
            goto 4
      StackMap locals: org.terracotta.statistics.StatisticMapper java.util.Set java.util.Set top java.util.Iterator
      StackMap stack:
         2: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Enum
            astore 3 /* type */
        start local 3 // java.lang.Enum type
         3: .line 107
            aload 2 /* translated */
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.translation:Ljava/util/Map;
            aload 3 /* type */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Collection
            invokeinterface java.util.Set.addAll:(Ljava/util/Collection;)Z
            pop
        end local 3 // java.lang.Enum type
         4: .line 106
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 109
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.statistic:Lorg/terracotta/statistics/OperationStatistic;
            aload 2 /* translated */
            invokeinterface org.terracotta.statistics.OperationStatistic.sum:(Ljava/util/Set;)J
            lreturn
        end local 2 // java.util.Set translated
        end local 1 // java.util.Set types
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0        this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
            0    6     1       types  Ljava/util/Set<TTARGET;>;
            1    6     2  translated  Ljava/util/Set<TSOURCE;>;
            3    4     3        type  TTARGET;
    Signature: (Ljava/util/Set<TTARGET;>;)J
    MethodParameters:
       Name  Flags
      types  

  public long sum();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.terracotta.statistics.StatisticMapper this
         0: .line 114
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.statistic:Lorg/terracotta/statistics/OperationStatistic;
            invokeinterface org.terracotta.statistics.OperationStatistic.sum:()J
            lreturn
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;

  public void addDerivedStatistic(org.terracotta.statistics.observer.ChainedOperationObserver<? super TARGET>);
    descriptor: (Lorg/terracotta/statistics/observer/ChainedOperationObserver;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.terracotta.statistics.StatisticMapper this
        start local 1 // org.terracotta.statistics.observer.ChainedOperationObserver derived
         0: .line 119
            new org.terracotta.statistics.StatisticMapper$1
            dup
            aload 0 /* this */
            aload 1 /* derived */
            invokespecial org.terracotta.statistics.StatisticMapper$1.<init>:(Lorg/terracotta/statistics/StatisticMapper;Lorg/terracotta/statistics/observer/ChainedOperationObserver;)V
            astore 2 /* translator */
        start local 2 // org.terracotta.statistics.observer.ChainedOperationObserver translator
         1: .line 130
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.derivedStats:Ljava/util/concurrent/ConcurrentMap;
            aload 1 /* derived */
            aload 2 /* translator */
            invokeinterface java.util.concurrent.ConcurrentMap.putIfAbsent:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            ifnonnull 3
         2: .line 131
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.statistic:Lorg/terracotta/statistics/OperationStatistic;
            aload 2 /* translator */
            invokeinterface org.terracotta.statistics.OperationStatistic.addDerivedStatistic:(Lorg/terracotta/statistics/observer/ChainedObserver;)V
         3: .line 133
      StackMap locals: org.terracotta.statistics.observer.ChainedOperationObserver
      StackMap stack:
            return
        end local 2 // org.terracotta.statistics.observer.ChainedOperationObserver translator
        end local 1 // org.terracotta.statistics.observer.ChainedOperationObserver derived
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
            0    4     1     derived  Lorg/terracotta/statistics/observer/ChainedOperationObserver<-TTARGET;>;
            1    4     2  translator  Lorg/terracotta/statistics/observer/ChainedOperationObserver<TSOURCE;>;
    Signature: (Lorg/terracotta/statistics/observer/ChainedOperationObserver<-TTARGET;>;)V
    MethodParameters:
         Name  Flags
      derived  final

  public void removeDerivedStatistic(org.terracotta.statistics.observer.ChainedOperationObserver<? super TARGET>);
    descriptor: (Lorg/terracotta/statistics/observer/ChainedOperationObserver;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=3, args_size=2
        start local 0 // org.terracotta.statistics.StatisticMapper this
        start local 1 // org.terracotta.statistics.observer.ChainedOperationObserver derived
         0: .line 137
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.derivedStats:Ljava/util/concurrent/ConcurrentMap;
            aload 1 /* derived */
            invokeinterface java.util.concurrent.ConcurrentMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast org.terracotta.statistics.observer.ChainedOperationObserver
            astore 2 /* translator */
        start local 2 // org.terracotta.statistics.observer.ChainedOperationObserver translator
         1: .line 138
            aload 2 /* translator */
            ifnull 3
         2: .line 139
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.statistic:Lorg/terracotta/statistics/OperationStatistic;
            aload 2 /* translator */
            invokeinterface org.terracotta.statistics.OperationStatistic.removeDerivedStatistic:(Lorg/terracotta/statistics/observer/ChainedObserver;)V
         3: .line 141
      StackMap locals: org.terracotta.statistics.observer.ChainedOperationObserver
      StackMap stack:
            return
        end local 2 // org.terracotta.statistics.observer.ChainedOperationObserver translator
        end local 1 // org.terracotta.statistics.observer.ChainedOperationObserver derived
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    4     0        this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
            0    4     1     derived  Lorg/terracotta/statistics/observer/ChainedOperationObserver<-TTARGET;>;
            1    4     2  translator  Lorg/terracotta/statistics/observer/ChainedOperationObserver<TSOURCE;>;
    Signature: (Lorg/terracotta/statistics/observer/ChainedOperationObserver<-TTARGET;>;)V
    MethodParameters:
         Name  Flags
      derived  

  public java.util.Collection<org.terracotta.statistics.observer.ChainedOperationObserver<? super TARGET>> getDerivedStatistics();
    descriptor: ()Ljava/util/Collection;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.terracotta.statistics.StatisticMapper this
         0: .line 145
            aload 0 /* this */
            getfield org.terracotta.statistics.StatisticMapper.derivedStats:Ljava/util/concurrent/ConcurrentMap;
            invokeinterface java.util.concurrent.ConcurrentMap.keySet:()Ljava/util/Set;
            invokestatic java.util.Collections.unmodifiableCollection:(Ljava/util/Collection;)Ljava/util/Collection;
            areturn
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
    Signature: ()Ljava/util/Collection<Lorg/terracotta/statistics/observer/ChainedOperationObserver<-TTARGET;>;>;

  public void begin();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.terracotta.statistics.StatisticMapper this
         0: .line 150
            new java.lang.UnsupportedOperationException
            dup
            invokespecial java.lang.UnsupportedOperationException.<init>:()V
            athrow
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;

  public void end();
    descriptor: (Ljava/lang/Enum;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.terracotta.statistics.StatisticMapper this
        start local 1 // java.lang.Enum result
         0: .line 155
            new java.lang.UnsupportedOperationException
            dup
            invokespecial java.lang.UnsupportedOperationException.<init>:()V
            athrow
        end local 1 // java.lang.Enum result
        end local 0 // org.terracotta.statistics.StatisticMapper this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    1     0    this  Lorg/terracotta/statistics/StatisticMapper<TSOURCE;TTARGET;>;
            0    1     1  result  TTARGET;
    Signature: (TTARGET;)V
    MethodParameters:
        Name  Flags
      result  

  public void addDerivedStatistic(org.terracotta.statistics.observer.ChainedObserver);
    descriptor: (Lorg/terracotta/statistics/observer/ChainedObserver;)V
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
         0: .line 1
            aload 0
            aload 1
            checkcast org.terracotta.statistics.observer.ChainedOperationObserver
            invokevirtual org.terracotta.statistics.StatisticMapper.addDerivedStatistic:(Lorg/terracotta/statistics/observer/ChainedOperationObserver;)V
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void removeDerivedStatistic(org.terracotta.statistics.observer.ChainedObserver);
    descriptor: (Lorg/terracotta/statistics/observer/ChainedObserver;)V
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
         0: .line 1
            aload 0
            aload 1
            checkcast org.terracotta.statistics.observer.ChainedOperationObserver
            invokevirtual org.terracotta.statistics.StatisticMapper.removeDerivedStatistic:(Lorg/terracotta/statistics/observer/ChainedOperationObserver;)V
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
Signature: <SOURCE:Ljava/lang/Enum<TSOURCE;>;TARGET:Ljava/lang/Enum<TTARGET;>;>Ljava/lang/Object;Lorg/terracotta/statistics/OperationStatistic<TTARGET;>;
SourceFile: "StatisticMapper.java"
NestMembers:
  org.terracotta.statistics.StatisticMapper$1
InnerClasses:
  public abstract Entry = java.util.Map$Entry of java.util.Map
  org.terracotta.statistics.StatisticMapper$1