public class org.apache.commons.io.FileCleaningTracker
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.commons.io.FileCleaningTracker
  super_class: java.lang.Object
{
  java.lang.ref.ReferenceQueue<java.lang.Object> q;
    descriptor: Ljava/lang/ref/ReferenceQueue;
    flags: (0x0000) 
    Signature: Ljava/lang/ref/ReferenceQueue<Ljava/lang/Object;>;

  final java.util.Collection<org.apache.commons.io.FileCleaningTracker$Tracker> trackers;
    descriptor: Ljava/util/Collection;
    flags: (0x0010) ACC_FINAL
    Signature: Ljava/util/Collection<Lorg/apache/commons/io/FileCleaningTracker$Tracker;>;

  final java.util.List<java.lang.String> deleteFailures;
    descriptor: Ljava/util/List;
    flags: (0x0010) ACC_FINAL
    Signature: Ljava/util/List<Ljava/lang/String;>;

  volatile boolean exitWhenFinished;
    descriptor: Z
    flags: (0x0040) ACC_VOLATILE

  java.lang.Thread reaper;
    descriptor: Ljava/lang/Thread;
    flags: (0x0000) 

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.apache.commons.io.FileCleaningTracker this
         0: .line 43
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 50
            aload 0 /* this */
            new java.lang.ref.ReferenceQueue
            dup
            invokespecial java.lang.ref.ReferenceQueue.<init>:()V
            putfield org.apache.commons.io.FileCleaningTracker.q:Ljava/lang/ref/ReferenceQueue;
         2: .line 54
            aload 0 /* this */
            new java.util.HashSet
            dup
            invokespecial java.util.HashSet.<init>:()V
            invokestatic java.util.Collections.synchronizedSet:(Ljava/util/Set;)Ljava/util/Set;
            putfield org.apache.commons.io.FileCleaningTracker.trackers:Ljava/util/Collection;
         3: .line 58
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            invokestatic java.util.Collections.synchronizedList:(Ljava/util/List;)Ljava/util/List;
            putfield org.apache.commons.io.FileCleaningTracker.deleteFailures:Ljava/util/List;
         4: .line 62
            aload 0 /* this */
            iconst_0
            putfield org.apache.commons.io.FileCleaningTracker.exitWhenFinished:Z
         5: .line 43
            return
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0  this  Lorg/apache/commons/io/FileCleaningTracker;

  public void track(java.io.File, java.lang.Object);
    descriptor: (Ljava/io/File;Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.apache.commons.io.FileCleaningTracker this
        start local 1 // java.io.File file
        start local 2 // java.lang.Object marker
         0: .line 79
            aload 0 /* this */
            aload 1 /* file */
            aload 2 /* marker */
            aconst_null
            invokevirtual org.apache.commons.io.FileCleaningTracker.track:(Ljava/io/File;Ljava/lang/Object;Lorg/apache/commons/io/FileDeleteStrategy;)V
         1: .line 80
            return
        end local 2 // java.lang.Object marker
        end local 1 // java.io.File file
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/apache/commons/io/FileCleaningTracker;
            0    2     1    file  Ljava/io/File;
            0    2     2  marker  Ljava/lang/Object;
    MethodParameters:
        Name  Flags
      file    final
      marker  final

  public void track(java.io.File, java.lang.Object, org.apache.commons.io.FileDeleteStrategy);
    descriptor: (Ljava/io/File;Ljava/lang/Object;Lorg/apache/commons/io/FileDeleteStrategy;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.apache.commons.io.FileCleaningTracker this
        start local 1 // java.io.File file
        start local 2 // java.lang.Object marker
        start local 3 // org.apache.commons.io.FileDeleteStrategy deleteStrategy
         0: .line 93
            aload 1 /* file */
            ifnonnull 2
         1: .line 94
            new java.lang.NullPointerException
            dup
            ldc "The file must not be null"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 96
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* file */
            invokevirtual java.io.File.getPath:()Ljava/lang/String;
            aload 2 /* marker */
            aload 3 /* deleteStrategy */
            invokevirtual org.apache.commons.io.FileCleaningTracker.addTracker:(Ljava/lang/String;Ljava/lang/Object;Lorg/apache/commons/io/FileDeleteStrategy;)V
         3: .line 97
            return
        end local 3 // org.apache.commons.io.FileDeleteStrategy deleteStrategy
        end local 2 // java.lang.Object marker
        end local 1 // java.io.File file
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    4     0            this  Lorg/apache/commons/io/FileCleaningTracker;
            0    4     1            file  Ljava/io/File;
            0    4     2          marker  Ljava/lang/Object;
            0    4     3  deleteStrategy  Lorg/apache/commons/io/FileDeleteStrategy;
    MethodParameters:
                Name  Flags
      file            final
      marker          final
      deleteStrategy  final

  public void track(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.apache.commons.io.FileCleaningTracker this
        start local 1 // java.lang.String path
        start local 2 // java.lang.Object marker
         0: .line 109
            aload 0 /* this */
            aload 1 /* path */
            aload 2 /* marker */
            aconst_null
            invokevirtual org.apache.commons.io.FileCleaningTracker.track:(Ljava/lang/String;Ljava/lang/Object;Lorg/apache/commons/io/FileDeleteStrategy;)V
         1: .line 110
            return
        end local 2 // java.lang.Object marker
        end local 1 // java.lang.String path
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    2     0    this  Lorg/apache/commons/io/FileCleaningTracker;
            0    2     1    path  Ljava/lang/String;
            0    2     2  marker  Ljava/lang/Object;
    MethodParameters:
        Name  Flags
      path    final
      marker  final

  public void track(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;Lorg/apache/commons/io/FileDeleteStrategy;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.apache.commons.io.FileCleaningTracker this
        start local 1 // java.lang.String path
        start local 2 // java.lang.Object marker
        start local 3 // org.apache.commons.io.FileDeleteStrategy deleteStrategy
         0: .line 123
            aload 1 /* path */
            ifnonnull 2
         1: .line 124
            new java.lang.NullPointerException
            dup
            ldc "The path must not be null"
            invokespecial java.lang.NullPointerException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 126
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* path */
            aload 2 /* marker */
            aload 3 /* deleteStrategy */
            invokevirtual org.apache.commons.io.FileCleaningTracker.addTracker:(Ljava/lang/String;Ljava/lang/Object;Lorg/apache/commons/io/FileDeleteStrategy;)V
         3: .line 127
            return
        end local 3 // org.apache.commons.io.FileDeleteStrategy deleteStrategy
        end local 2 // java.lang.Object marker
        end local 1 // java.lang.String path
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    4     0            this  Lorg/apache/commons/io/FileCleaningTracker;
            0    4     1            path  Ljava/lang/String;
            0    4     2          marker  Ljava/lang/Object;
            0    4     3  deleteStrategy  Lorg/apache/commons/io/FileDeleteStrategy;
    MethodParameters:
                Name  Flags
      path            final
      marker          final
      deleteStrategy  final

  private synchronized void addTracker(java.lang.String, java.lang.Object, org.apache.commons.io.FileDeleteStrategy);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;Lorg/apache/commons/io/FileDeleteStrategy;)V
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=7, locals=4, args_size=4
        start local 0 // org.apache.commons.io.FileCleaningTracker this
        start local 1 // java.lang.String path
        start local 2 // java.lang.Object marker
        start local 3 // org.apache.commons.io.FileDeleteStrategy deleteStrategy
         0: .line 139
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.exitWhenFinished:Z
            ifeq 2
         1: .line 140
            new java.lang.IllegalStateException
            dup
            ldc "No new trackers can be added once exitWhenFinished() is called"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 142
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.reaper:Ljava/lang/Thread;
            ifnonnull 5
         3: .line 143
            aload 0 /* this */
            new org.apache.commons.io.FileCleaningTracker$Reaper
            dup
            aload 0 /* this */
            invokespecial org.apache.commons.io.FileCleaningTracker$Reaper.<init>:(Lorg/apache/commons/io/FileCleaningTracker;)V
            putfield org.apache.commons.io.FileCleaningTracker.reaper:Ljava/lang/Thread;
         4: .line 144
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.reaper:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.start:()V
         5: .line 146
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.trackers:Ljava/util/Collection;
            new org.apache.commons.io.FileCleaningTracker$Tracker
            dup
            aload 1 /* path */
            aload 3 /* deleteStrategy */
            aload 2 /* marker */
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.q:Ljava/lang/ref/ReferenceQueue;
            invokespecial org.apache.commons.io.FileCleaningTracker$Tracker.<init>:(Ljava/lang/String;Lorg/apache/commons/io/FileDeleteStrategy;Ljava/lang/Object;Ljava/lang/ref/ReferenceQueue;)V
            invokeinterface java.util.Collection.add:(Ljava/lang/Object;)Z
            pop
         6: .line 147
            return
        end local 3 // org.apache.commons.io.FileDeleteStrategy deleteStrategy
        end local 2 // java.lang.Object marker
        end local 1 // java.lang.String path
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    7     0            this  Lorg/apache/commons/io/FileCleaningTracker;
            0    7     1            path  Ljava/lang/String;
            0    7     2          marker  Ljava/lang/Object;
            0    7     3  deleteStrategy  Lorg/apache/commons/io/FileDeleteStrategy;
    MethodParameters:
                Name  Flags
      path            final
      marker          final
      deleteStrategy  final

  public int getTrackCount();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.commons.io.FileCleaningTracker this
         0: .line 157
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.trackers:Ljava/util/Collection;
            invokeinterface java.util.Collection.size:()I
            ireturn
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/commons/io/FileCleaningTracker;

  public java.util.List<java.lang.String> getDeleteFailures();
    descriptor: ()Ljava/util/List;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.commons.io.FileCleaningTracker this
         0: .line 167
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.deleteFailures:Ljava/util/List;
            areturn
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/commons/io/FileCleaningTracker;
    Signature: ()Ljava/util/List<Ljava/lang/String;>;

  public synchronized void exitWhenFinished();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // org.apache.commons.io.FileCleaningTracker this
         0: .line 194
            aload 0 /* this */
            iconst_1
            putfield org.apache.commons.io.FileCleaningTracker.exitWhenFinished:Z
         1: .line 195
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.reaper:Ljava/lang/Thread;
            ifnull 8
         2: .line 196
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.reaper:Ljava/lang/Thread;
            dup
            astore 1
            monitorenter
         3: .line 197
            aload 0 /* this */
            getfield org.apache.commons.io.FileCleaningTracker.reaper:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.interrupt:()V
         4: .line 196
            aload 1
            monitorexit
         5: goto 8
      StackMap locals: org.apache.commons.io.FileCleaningTracker java.lang.Thread
      StackMap stack: java.lang.Throwable
         6: aload 1
            monitorexit
         7: athrow
         8: .line 200
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.apache.commons.io.FileCleaningTracker this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    9     0  this  Lorg/apache/commons/io/FileCleaningTracker;
      Exception table:
        from    to  target  type
           3     5       6  any
           6     7       6  any
}
SourceFile: "FileCleaningTracker.java"
NestMembers:
  org.apache.commons.io.FileCleaningTracker$Reaper  org.apache.commons.io.FileCleaningTracker$Tracker
InnerClasses:
  private final Reaper = org.apache.commons.io.FileCleaningTracker$Reaper of org.apache.commons.io.FileCleaningTracker
  private final Tracker = org.apache.commons.io.FileCleaningTracker$Tracker of org.apache.commons.io.FileCleaningTracker