class org.eclipse.core.internal.jobs.WorkerPool
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.eclipse.core.internal.jobs.WorkerPool
  super_class: java.lang.Object
{
  private static final int BEST_BEFORE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 60000

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

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

  private int busyThreads;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  protected final java.lang.ClassLoader defaultContextLoader;
    descriptor: Ljava/lang/ClassLoader;
    flags: (0x0014) ACC_PROTECTED, ACC_FINAL

  private boolean isDaemon;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private org.eclipse.core.internal.jobs.JobManager manager;
    descriptor: Lorg/eclipse/core/internal/jobs/JobManager;
    flags: (0x0002) ACC_PRIVATE

  private int numThreads;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private int sleepingThreads;
    descriptor: I
    flags: (0x0002) ACC_PRIVATE

  private org.eclipse.core.internal.jobs.Worker[] threads;
    descriptor: [Lorg/eclipse/core/internal/jobs/Worker;
    flags: (0x0002) ACC_PRIVATE

  protected void <init>(org.eclipse.core.internal.jobs.JobManager);
    descriptor: (Lorg/eclipse/core/internal/jobs/JobManager;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
        start local 1 // org.eclipse.core.internal.jobs.JobManager manager
         0: .line 78
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 52
            aload 0 /* this */
            iconst_0
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
         2: .line 62
            aload 0 /* this */
            iconst_0
            putfield org.eclipse.core.internal.jobs.WorkerPool.isDaemon:Z
         3: .line 68
            aload 0 /* this */
            iconst_0
            putfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
         4: .line 72
            aload 0 /* this */
            iconst_0
            putfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
         5: .line 76
            aload 0 /* this */
            bipush 10
            anewarray org.eclipse.core.internal.jobs.Worker
            putfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
         6: .line 79
            aload 0 /* this */
            aload 1 /* manager */
            putfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
         7: .line 80
            aload 0 /* this */
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            putfield org.eclipse.core.internal.jobs.WorkerPool.defaultContextLoader:Ljava/lang/ClassLoader;
         8: .line 81
            return
        end local 1 // org.eclipse.core.internal.jobs.JobManager manager
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            0    9     1  manager  Lorg/eclipse/core/internal/jobs/JobManager;
    MethodParameters:
         Name  Flags
      manager  

  private synchronized void add(org.eclipse.core.internal.jobs.Worker);
    descriptor: (Lorg/eclipse/core/internal/jobs/Worker;)V
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=5, locals=4, args_size=2
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
        start local 1 // org.eclipse.core.internal.jobs.Worker worker
         0: .line 87
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
            arraylength
            istore 2 /* size */
        start local 2 // int size
         1: .line 88
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            iconst_1
            iadd
            iload 2 /* size */
            if_icmple 5
         2: .line 89
            iconst_2
            iload 2 /* size */
            imul
            anewarray org.eclipse.core.internal.jobs.Worker
            astore 3 /* newThreads */
        start local 3 // org.eclipse.core.internal.jobs.Worker[] newThreads
         3: .line 90
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
            iconst_0
            aload 3 /* newThreads */
            iconst_0
            iload 2 /* size */
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 91
            aload 0 /* this */
            aload 3 /* newThreads */
            putfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
        end local 3 // org.eclipse.core.internal.jobs.Worker[] newThreads
         5: .line 93
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            dup_x1
            iconst_1
            iadd
            putfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            aload 1 /* worker */
            aastore
         6: .line 94
            return
        end local 2 // int size
        end local 1 // org.eclipse.core.internal.jobs.Worker worker
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    7     0        this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            0    7     1      worker  Lorg/eclipse/core/internal/jobs/Worker;
            1    7     2        size  I
            3    5     3  newThreads  [Lorg/eclipse/core/internal/jobs/Worker;
    MethodParameters:
        Name  Flags
      worker  

  private synchronized void decrementBusyThreads();
    descriptor: ()V
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
         0: .line 98
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            iconst_1
            isub
            dup_x1
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            ifge 4
         1: .line 99
            getstatic org.eclipse.core.internal.jobs.JobManager.DEBUG:Z
            ifeq 3
         2: .line 100
            iconst_0
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            invokestatic java.lang.Integer.toString:(I)Ljava/lang/String;
            invokestatic org.eclipse.core.runtime.Assert.isTrue:(ZLjava/lang/String;)Z
            pop
         3: .line 101
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_0
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
         4: .line 103
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/eclipse/core/internal/jobs/WorkerPool;

  protected void endJob(org.eclipse.core.internal.jobs.InternalJob, org.eclipse.core.runtime.IStatus);
    descriptor: (Lorg/eclipse/core/internal/jobs/InternalJob;Lorg/eclipse/core/runtime/IStatus;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=4, locals=4, args_size=3
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
        start local 1 // org.eclipse.core.internal.jobs.InternalJob job
        start local 2 // org.eclipse.core.runtime.IStatus result
         0: .line 113
            aload 1 /* job */
            invokevirtual org.eclipse.core.internal.jobs.InternalJob.getRule:()Lorg/eclipse/core/runtime/jobs/ISchedulingRule;
            ifnull 2
            aload 1 /* job */
            instanceof org.eclipse.core.internal.jobs.ThreadJob
            ifne 2
         1: .line 115
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            invokevirtual org.eclipse.core.internal.jobs.JobManager.getLockManager:()Lorg/eclipse/core/internal/jobs/LockManager;
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 1 /* job */
            invokevirtual org.eclipse.core.internal.jobs.InternalJob.getRule:()Lorg/eclipse/core/runtime/jobs/ISchedulingRule;
            invokevirtual org.eclipse.core.internal.jobs.LockManager.removeLockCompletely:(Ljava/lang/Thread;Lorg/eclipse/core/runtime/jobs/ISchedulingRule;)V
         2: .line 117
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            aload 1 /* job */
            aload 2 /* result */
            iconst_1
            invokevirtual org.eclipse.core.internal.jobs.JobManager.endJob:(Lorg/eclipse/core/internal/jobs/InternalJob;Lorg/eclipse/core/runtime/IStatus;Z)V
         3: .line 119
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            getfield org.eclipse.core.internal.jobs.JobManager.implicitJobs:Lorg/eclipse/core/internal/jobs/ImplicitJobs;
            aload 1 /* job */
            invokevirtual org.eclipse.core.internal.jobs.ImplicitJobs.endJob:(Lorg/eclipse/core/internal/jobs/InternalJob;)V
         4: .line 120
            goto 8
      StackMap locals:
      StackMap stack: java.lang.Throwable
         5: astore 3
         6: .line 121
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.decrementBusyThreads:()V
         7: .line 122
            aload 3
            athrow
         8: .line 121
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.decrementBusyThreads:()V
         9: .line 123
            return
        end local 2 // org.eclipse.core.runtime.IStatus result
        end local 1 // org.eclipse.core.internal.jobs.InternalJob job
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   10     0    this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            0   10     1     job  Lorg/eclipse/core/internal/jobs/InternalJob;
            0   10     2  result  Lorg/eclipse/core/runtime/IStatus;
      Exception table:
        from    to  target  type
           0     5       5  any
    MethodParameters:
        Name  Flags
      job     
      result  

  protected synchronized void endWorker(org.eclipse.core.internal.jobs.Worker);
    descriptor: (Lorg/eclipse/core/internal/jobs/Worker;)V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
        start local 1 // org.eclipse.core.internal.jobs.Worker worker
         0: .line 130
            aload 0 /* this */
            aload 1 /* worker */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.remove:(Lorg/eclipse/core/internal/jobs/Worker;)Z
            ifeq 2
            getstatic org.eclipse.core.internal.jobs.JobManager.DEBUG:Z
            ifeq 2
         1: .line 131
            new java.lang.StringBuilder
            dup
            ldc "worker removed from pool: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* worker */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.eclipse.core.internal.jobs.JobManager.debug:(Ljava/lang/String;)V
         2: .line 132
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.eclipse.core.internal.jobs.Worker worker
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    3     0    this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            0    3     1  worker  Lorg/eclipse/core/internal/jobs/Worker;
    MethodParameters:
        Name  Flags
      worker  

  private synchronized void incrementBusyThreads();
    descriptor: ()V
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
         0: .line 136
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            iconst_1
            iadd
            dup_x1
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            if_icmple 4
         1: .line 137
            getstatic org.eclipse.core.internal.jobs.JobManager.DEBUG:Z
            ifeq 3
         2: .line 138
            iconst_0
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            invokestatic java.lang.Integer.toString:(I)Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            bipush 44
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.eclipse.core.runtime.Assert.isTrue:(ZLjava/lang/String;)Z
            pop
         3: .line 139
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
         4: .line 141
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Lorg/eclipse/core/internal/jobs/WorkerPool;

  protected synchronized void jobQueued();
    descriptor: ()V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
         0: .line 149
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
            ifle 3
         1: .line 150
            aload 0 /* this */
            invokevirtual java.lang.Object.notify:()V
         2: .line 151
            return
         3: .line 154
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            if_icmplt 11
         4: .line 155
            new org.eclipse.core.internal.jobs.Worker
            dup
            aload 0 /* this */
            invokespecial org.eclipse.core.internal.jobs.Worker.<init>:(Lorg/eclipse/core/internal/jobs/WorkerPool;)V
            astore 1 /* worker */
        start local 1 // org.eclipse.core.internal.jobs.Worker worker
         5: .line 156
            aload 1 /* worker */
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.isDaemon:Z
            invokevirtual org.eclipse.core.internal.jobs.Worker.setDaemon:(Z)V
         6: .line 157
            aload 0 /* this */
            aload 1 /* worker */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.add:(Lorg/eclipse/core/internal/jobs/Worker;)V
         7: .line 158
            getstatic org.eclipse.core.internal.jobs.JobManager.DEBUG:Z
            ifeq 9
         8: .line 159
            new java.lang.StringBuilder
            dup
            ldc "worker added to pool: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* worker */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.eclipse.core.internal.jobs.JobManager.debug:(Ljava/lang/String;)V
         9: .line 160
      StackMap locals: org.eclipse.core.internal.jobs.Worker
      StackMap stack:
            aload 1 /* worker */
            invokevirtual org.eclipse.core.internal.jobs.Worker.start:()V
        10: .line 161
            return
        end local 1 // org.eclipse.core.internal.jobs.Worker worker
        11: .line 163
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   12     0    this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            5   11     1  worker  Lorg/eclipse/core/internal/jobs/Worker;

  private synchronized boolean remove(org.eclipse.core.internal.jobs.Worker);
    descriptor: (Lorg/eclipse/core/internal/jobs/Worker;)Z
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=3, args_size=2
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
        start local 1 // org.eclipse.core.internal.jobs.Worker worker
         0: .line 170
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         1: goto 7
         2: .line 171
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
            iload 2 /* i */
            aaload
            aload 1 /* worker */
            if_acmpne 6
         3: .line 172
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
            iload 2 /* i */
            iconst_1
            iadd
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
            iload 2 /* i */
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            iload 2 /* i */
            isub
            iconst_1
            isub
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 173
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            iconst_1
            isub
            dup_x1
            putfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            aconst_null
            aastore
         5: .line 174
            iconst_1
            ireturn
         6: .line 170
      StackMap locals:
      StackMap stack:
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
         7: iload 2 /* i */
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.threads:[Lorg/eclipse/core/internal/jobs/Worker;
            arraylength
            if_icmplt 2
        end local 2 // int i
         8: .line 177
            iconst_0
            ireturn
        end local 1 // org.eclipse.core.internal.jobs.Worker worker
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0    9     0    this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            0    9     1  worker  Lorg/eclipse/core/internal/jobs/Worker;
            1    8     2       i  I
    MethodParameters:
        Name  Flags
      worker  

  void setDaemon(boolean);
    descriptor: (Z)V
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
        start local 1 // boolean value
         0: .line 184
            aload 0 /* this */
            iload 1 /* value */
            putfield org.eclipse.core.internal.jobs.WorkerPool.isDaemon:Z
         1: .line 185
            return
        end local 1 // boolean value
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    2     0   this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            0    2     1  value  Z
    MethodParameters:
       Name  Flags
      value  

  protected synchronized void shutdown();
    descriptor: ()V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
         0: .line 188
            aload 0 /* this */
            invokevirtual java.lang.Object.notifyAll:()V
         1: .line 189
            return
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/eclipse/core/internal/jobs/WorkerPool;

  private synchronized void sleep(long);
    descriptor: (J)V
    flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=4, args_size=2
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
        start local 1 // long duration
         0: .line 195
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
            iconst_1
            iadd
            putfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
         1: .line 196
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            iconst_1
            isub
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
         2: .line 197
            getstatic org.eclipse.core.internal.jobs.JobManager.DEBUG:Z
            ifeq 4
         3: .line 198
            new java.lang.StringBuilder
            dup
            ldc "worker sleeping for: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            lload 1 /* duration */
            invokevirtual java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;
            ldc "ms"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokestatic org.eclipse.core.internal.jobs.JobManager.debug:(Ljava/lang/String;)V
         4: .line 200
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            lload 1 /* duration */
            invokevirtual java.lang.Object.wait:(J)V
         5: .line 201
            goto 15
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         6: pop
         7: .line 202
            getstatic org.eclipse.core.internal.jobs.JobManager.DEBUG:Z
            ifeq 9
         8: .line 203
            ldc "worker interrupted while waiting... :-|"
            invokestatic org.eclipse.core.internal.jobs.JobManager.debug:(Ljava/lang/String;)V
         9: .line 205
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
            iconst_1
            isub
            putfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
        10: .line 206
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            iconst_1
            iadd
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            goto 17
        11: .line 204
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
        12: .line 205
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
            iconst_1
            isub
            putfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
        13: .line 206
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            iconst_1
            iadd
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
        14: .line 207
            aload 3
            athrow
        15: .line 205
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
            iconst_1
            isub
            putfield org.eclipse.core.internal.jobs.WorkerPool.sleepingThreads:I
        16: .line 206
            aload 0 /* this */
            dup
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            iconst_1
            iadd
            putfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
        17: .line 208
      StackMap locals:
      StackMap stack:
            return
        end local 1 // long duration
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   18     0      this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            0   18     1  duration  J
      Exception table:
        from    to  target  type
           4     5       6  Class java.lang.InterruptedException
           4     9      11  any
    MethodParameters:
          Name  Flags
      duration  

  protected org.eclipse.core.internal.jobs.InternalJob startJob(org.eclipse.core.internal.jobs.Worker);
    descriptor: (Lorg/eclipse/core/internal/jobs/Worker;)Lorg/eclipse/core/internal/jobs/InternalJob;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=5, locals=10, args_size=2
        start local 0 // org.eclipse.core.internal.jobs.WorkerPool this
        start local 1 // org.eclipse.core.internal.jobs.Worker worker
         0: .line 216
            aload 0 /* this */
            dup
            astore 3
            monitorenter
         1: .line 217
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            invokevirtual org.eclipse.core.internal.jobs.JobManager.isActive:()Z
            ifne 5
         2: .line 219
            aload 0 /* this */
            aload 1 /* worker */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.endWorker:(Lorg/eclipse/core/internal/jobs/Worker;)V
         3: .line 220
            aload 3
            monitorexit
         4: aconst_null
            areturn
         5: .line 223
      StackMap locals: org.eclipse.core.internal.jobs.WorkerPool org.eclipse.core.internal.jobs.Worker top org.eclipse.core.internal.jobs.WorkerPool
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.incrementBusyThreads:()V
         6: .line 224
            iconst_1
            istore 2 /* busy */
        start local 2 // boolean busy
         7: .line 216
            aload 3
            monitorexit
         8: goto 11
        end local 2 // boolean busy
      StackMap locals:
      StackMap stack: java.lang.Throwable
         9: aload 3
            monitorexit
        10: athrow
        start local 2 // boolean busy
        11: .line 226
      StackMap locals: org.eclipse.core.internal.jobs.WorkerPool org.eclipse.core.internal.jobs.Worker int
      StackMap stack:
            aconst_null
            astore 3 /* job */
        start local 3 // org.eclipse.core.runtime.jobs.Job job
        12: .line 228
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            aload 1 /* worker */
            invokevirtual org.eclipse.core.internal.jobs.JobManager.startJob:(Lorg/eclipse/core/internal/jobs/Worker;)Lorg/eclipse/core/runtime/jobs/Job;
            astore 3 /* job */
        13: .line 230
            invokestatic java.lang.System.currentTimeMillis:()J
            lstore 4 /* idleStart */
        start local 4 // long idleStart
        14: .line 231
            goto 47
        15: .line 232
      StackMap locals: org.eclipse.core.runtime.jobs.Job long
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            invokevirtual org.eclipse.core.internal.jobs.JobManager.sleepHint:()J
            lstore 6 /* hint */
        start local 6 // long hint
        16: .line 233
            lload 6 /* hint */
            lconst_0
            lcmp
            ifle 31
        17: .line 234
            aload 0 /* this */
            dup
            astore 8
            monitorenter
        18: .line 235
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            bipush 50
            if_icmple 26
        19: .line 236
            aload 0 /* this */
            aload 1 /* worker */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.endWorker:(Lorg/eclipse/core/internal/jobs/Worker;)V
        20: .line 237
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.decrementBusyThreads:()V
        21: .line 238
            iconst_0
            istore 2 /* busy */
        22: .line 239
            aload 8
            monitorexit
        23: .line 273
            aload 3 /* job */
            ifnonnull 25
            iload 2 /* busy */
            ifeq 25
        24: .line 274
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.decrementBusyThreads:()V
        25: .line 239
      StackMap locals: long org.eclipse.core.internal.jobs.WorkerPool
      StackMap stack:
            aconst_null
            areturn
        26: .line 234
      StackMap locals:
      StackMap stack:
            aload 8
            monitorexit
        27: goto 30
      StackMap locals:
      StackMap stack: java.lang.Throwable
        28: aload 8
            monitorexit
        29: athrow
        30: .line 242
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            lload 6 /* hint */
            ldc 60000
            invokestatic java.lang.Math.min:(JJ)J
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.sleep:(J)V
        31: .line 244
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            aload 1 /* worker */
            invokevirtual org.eclipse.core.internal.jobs.JobManager.startJob:(Lorg/eclipse/core/internal/jobs/Worker;)Lorg/eclipse/core/runtime/jobs/Job;
            astore 3 /* job */
        32: .line 247
            aload 0 /* this */
            dup
            astore 8
            monitorenter
        33: .line 248
            aload 3 /* job */
            ifnonnull 41
            invokestatic java.lang.System.currentTimeMillis:()J
            lload 4 /* idleStart */
            lsub
            ldc 60000
            lcmp
            ifle 41
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.numThreads:I
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.busyThreads:I
            isub
            iconst_1
            if_icmple 41
        34: .line 250
            aload 0 /* this */
            aload 1 /* worker */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.endWorker:(Lorg/eclipse/core/internal/jobs/Worker;)V
        35: .line 251
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.decrementBusyThreads:()V
        36: .line 252
            iconst_0
            istore 2 /* busy */
        37: .line 253
            aload 8
            monitorexit
        38: .line 273
            aload 3 /* job */
            ifnonnull 40
            iload 2 /* busy */
            ifeq 40
        39: .line 274
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.decrementBusyThreads:()V
        40: .line 253
      StackMap locals: org.eclipse.core.internal.jobs.WorkerPool
      StackMap stack:
            aconst_null
            areturn
        41: .line 247
      StackMap locals:
      StackMap stack:
            aload 8
            monitorexit
        42: goto 45
      StackMap locals:
      StackMap stack: java.lang.Throwable
        43: aload 8
            monitorexit
        44: athrow
        45: .line 257
      StackMap locals:
      StackMap stack:
            lload 6 /* hint */
            lconst_0
            lcmp
            ifgt 47
            aload 3 /* job */
            ifnonnull 47
        46: .line 258
            aload 0 /* this */
            ldc 50
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.sleep:(J)V
        end local 6 // long hint
        47: .line 231
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            invokevirtual org.eclipse.core.internal.jobs.JobManager.isActive:()Z
            ifeq 48
            aload 3 /* job */
            ifnull 15
        48: .line 260
      StackMap locals:
      StackMap stack:
            aload 3 /* job */
            ifnull 58
        49: .line 262
            aload 3 /* job */
            invokevirtual org.eclipse.core.runtime.jobs.Job.getRule:()Lorg/eclipse/core/runtime/jobs/ISchedulingRule;
            ifnull 51
            aload 3 /* job */
            instanceof org.eclipse.core.internal.jobs.ThreadJob
            ifne 51
        50: .line 265
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            invokevirtual org.eclipse.core.internal.jobs.JobManager.getLockManager:()Lorg/eclipse/core/internal/jobs/LockManager;
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            aload 3 /* job */
            invokevirtual org.eclipse.core.runtime.jobs.Job.getRule:()Lorg/eclipse/core/runtime/jobs/ISchedulingRule;
            invokevirtual org.eclipse.core.internal.jobs.LockManager.addLockThread:(Ljava/lang/Thread;Lorg/eclipse/core/runtime/jobs/ISchedulingRule;)V
        51: .line 268
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.eclipse.core.internal.jobs.WorkerPool.manager:Lorg/eclipse/core/internal/jobs/JobManager;
            invokevirtual org.eclipse.core.internal.jobs.JobManager.sleepHint:()J
            ldc 9223372036854775807
            lcmp
            ifge 58
        52: .line 269
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.jobQueued:()V
        end local 4 // long idleStart
        53: .line 271
            goto 58
      StackMap locals: org.eclipse.core.internal.jobs.WorkerPool org.eclipse.core.internal.jobs.Worker int org.eclipse.core.runtime.jobs.Job
      StackMap stack: java.lang.Throwable
        54: astore 9
        55: .line 273
            aload 3 /* job */
            ifnonnull 57
            iload 2 /* busy */
            ifeq 57
        56: .line 274
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.decrementBusyThreads:()V
        57: .line 275
      StackMap locals: org.eclipse.core.internal.jobs.WorkerPool org.eclipse.core.internal.jobs.Worker int org.eclipse.core.runtime.jobs.Job top top top top top java.lang.Throwable
      StackMap stack:
            aload 9
            athrow
        58: .line 273
      StackMap locals: org.eclipse.core.internal.jobs.WorkerPool org.eclipse.core.internal.jobs.Worker int org.eclipse.core.runtime.jobs.Job
      StackMap stack:
            aload 3 /* job */
            ifnonnull 60
            iload 2 /* busy */
            ifeq 60
        59: .line 274
            aload 0 /* this */
            invokevirtual org.eclipse.core.internal.jobs.WorkerPool.decrementBusyThreads:()V
        60: .line 276
      StackMap locals:
      StackMap stack:
            aload 3 /* job */
            areturn
        end local 3 // org.eclipse.core.runtime.jobs.Job job
        end local 2 // boolean busy
        end local 1 // org.eclipse.core.internal.jobs.Worker worker
        end local 0 // org.eclipse.core.internal.jobs.WorkerPool this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   61     0       this  Lorg/eclipse/core/internal/jobs/WorkerPool;
            0   61     1     worker  Lorg/eclipse/core/internal/jobs/Worker;
            7    9     2       busy  Z
           11   61     2       busy  Z
           12   61     3        job  Lorg/eclipse/core/runtime/jobs/Job;
           14   53     4  idleStart  J
           16   47     6       hint  J
      Exception table:
        from    to  target  type
           1     4       9  any
           5     8       9  any
           9    10       9  any
          18    23      28  any
          26    27      28  any
          28    29      28  any
          33    38      43  any
          41    42      43  any
          43    44      43  any
          12    23      54  any
          26    38      54  any
          41    54      54  any
    MethodParameters:
        Name  Flags
      worker  
}
SourceFile: "WorkerPool.java"