Merge remote-tracking branch 'aosp/upstream-master' into desugar am: 28068806fa am: 6b2f3e8f0f
am: 970766bc54

Change-Id: I64daa5e6eb1809f2f67a49f78dbc491610d84eb5
diff --git a/java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java b/java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java
index 777a4ab..783069f 100644
--- a/java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java
+++ b/java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java
@@ -14,12 +14,14 @@
 package com.google.devtools.build.android.desugar;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 import com.google.auto.value.AutoValue;
 import com.google.common.collect.ImmutableList;
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Optional;
+import javax.annotation.Nullable;
 import org.objectweb.asm.Handle;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
@@ -41,11 +43,6 @@
   private FrameInfo previousFrame;
   /** For debugging purpose. */
   private final String methodSignature;
-  /**
-   * Stores mapping from "uninitialized" value to concrete value. This is for the "new" instruction.
-   */
-  private final HashMap<InferredType, InferredType> uninitializedToConcreteTypeMap =
-      new HashMap<>();
 
   public BytecodeTypeInference(int access, String owner, String name, String methodDescriptor) {
     super(Opcodes.ASM6);
@@ -81,6 +78,10 @@
     return operandStack.toString();
   }
 
+  public String getLocalsAsString() {
+    return localVariableSlots.toString();
+  }
+
   @Override
   public void visitInsn(int opcode) {
     switch (opcode) {
@@ -476,8 +477,7 @@
       int argumentSize = (Type.getArgumentsAndReturnSizes(desc) >> 2);
       InferredType receiverType = getTypeOfOperandFromTop(argumentSize - 1);
       if (receiverType.isUninitialized()) {
-        InferredType realType = InferredType.create('L' + owner + ';');
-        uninitializedToConcreteTypeMap.put(receiverType, realType);
+        InferredType realType = InferredType.createNonUninitializedType('L' + owner + ';');
         replaceUninitializedTypeInStack(receiverType, realType);
       }
     }
@@ -642,7 +642,6 @@
     operandStack.addAll(previousFrame.stack());
     localVariableSlots.clear();
     localVariableSlots.addAll(previousFrame.locals());
-
     super.visitFrame(type, nLocal, local, nStack, stack);
   }
 
@@ -672,7 +671,7 @@
     checkArgument(oldType.isUninitialized(), "The old type is NOT uninitialized. %s", oldType);
     for (int i = 0, size = operandStack.size(); i < size; ++i) {
       InferredType type = operandStack.get(i);
-      if (type == oldType) {
+      if (type.equals(oldType)) {
         operandStack.set(i, newType);
       }
     }
@@ -703,7 +702,7 @@
         break;
       case 'L':
       case '[':
-        push(InferredType.create(desc.substring(index)));
+        push(InferredType.createNonUninitializedType(desc.substring(index)));
         break;
       default:
         throw new RuntimeException("Unhandled type: " + desc);
@@ -771,12 +770,6 @@
     return lastPopped;
   }
 
-  private static ImmutableList<InferredType> removeBackFromList(
-      ImmutableList<InferredType> list, int countToRemove) {
-    int newSize = list.size() - countToRemove;
-    return list.subList(0, newSize);
-  }
-
   /**
    * Create the types of local variables at the very beginning of the method with the information of
    * the declaring class and the method descriptor.
@@ -787,7 +780,7 @@
 
     if (!BitFlags.isSet(access, Opcodes.ACC_STATIC)) {
       // Instance method, and this is the receiver
-      types.add(InferredType.create(convertToDescriptor(ownerClass)));
+      types.add(InferredType.createNonUninitializedType(convertToDescriptor(ownerClass)));
     }
     Type[] argumentTypes = Type.getArgumentTypes(methodDescriptor);
     for (Type argumentType : argumentTypes) {
@@ -812,7 +805,7 @@
           break;
         case Type.ARRAY:
         case Type.OBJECT:
-          types.add(InferredType.create(argumentType.getDescriptor()));
+          types.add(InferredType.createNonUninitializedType(argumentType.getDescriptor()));
           break;
         default:
           throw new RuntimeException(
@@ -828,6 +821,28 @@
     return types;
   }
 
+  private static ImmutableList<InferredType> removeBackFromList(
+      ImmutableList<InferredType> list, int countToRemove) {
+    int origSize = list.size();
+    int index = origSize - 1;
+
+    while (index >= 0 && countToRemove > 0) {
+      InferredType type = list.get(index);
+      if (type.equals(InferredType.TOP) && index > 0 && list.get(index - 1).isCategory2()) {
+        --index; // A category 2 takes two slots.
+      }
+      --index; // Eat this local variable.
+      --countToRemove;
+    }
+    checkState(
+        countToRemove == 0,
+        "countToRemove is %s but not 0. index=%s, list=%s",
+        countToRemove,
+        index,
+        list);
+    return list.subList(0, index + 1);
+  }
+
   private ImmutableList<InferredType> appendArrayToList(
       ImmutableList<InferredType> list, int size, Object[] array) {
     ImmutableList.Builder<InferredType> builder = ImmutableList.builder();
@@ -861,13 +876,13 @@
     } else if (typeInStackMapFrame instanceof String) {
       String referenceTypeName = (String) typeInStackMapFrame;
       if (referenceTypeName.charAt(0) == '[') {
-        return InferredType.create(referenceTypeName);
+        return InferredType.createNonUninitializedType(referenceTypeName);
       } else {
-        return InferredType.create('L' + referenceTypeName + ';');
+        return InferredType.createNonUninitializedType('L' + referenceTypeName + ';');
       }
     } else if (typeInStackMapFrame instanceof Label) {
       Label label = (Label) typeInStackMapFrame;
-      return InferredType.createUninitialized(label.getOffset());
+      return InferredType.createUninitializedType(label);
     } else {
       throw new RuntimeException(
           "Cannot reach here. Unhandled element: value="
@@ -911,26 +926,45 @@
     public static final String UNINITIALIZED_PREFIX = "UNINIT@";
 
     public static final InferredType BOOLEAN =
-        new AutoValue_BytecodeTypeInference_InferredType("Z");
-    public static final InferredType BYTE = new AutoValue_BytecodeTypeInference_InferredType("B");
-    public static final InferredType INT = new AutoValue_BytecodeTypeInference_InferredType("I");
-    public static final InferredType FLOAT = new AutoValue_BytecodeTypeInference_InferredType("F");
-    public static final InferredType LONG = new AutoValue_BytecodeTypeInference_InferredType("J");
-    public static final InferredType DOUBLE = new AutoValue_BytecodeTypeInference_InferredType("D");
+        new AutoValue_BytecodeTypeInference_InferredType("Z", /*uninitializationLabel=*/ null);
+    public static final InferredType BYTE =
+        new AutoValue_BytecodeTypeInference_InferredType("B", /*uninitializationLabel=*/ null);
+    public static final InferredType INT =
+        new AutoValue_BytecodeTypeInference_InferredType("I", /*uninitializationLabel=*/ null);
+    public static final InferredType FLOAT =
+        new AutoValue_BytecodeTypeInference_InferredType("F", /*uninitializationLabel=*/ null);
+    public static final InferredType LONG =
+        new AutoValue_BytecodeTypeInference_InferredType("J", /*uninitializationLabel=*/ null);
+    public static final InferredType DOUBLE =
+        new AutoValue_BytecodeTypeInference_InferredType("D", /*uninitializationLabel=*/ null);
     /** Not a real value. */
-    public static final InferredType TOP = new AutoValue_BytecodeTypeInference_InferredType("TOP");
+    public static final InferredType TOP =
+        new AutoValue_BytecodeTypeInference_InferredType("TOP", /*uninitializationLabel=*/ null);
     /** The value NULL */
     public static final InferredType NULL =
-        new AutoValue_BytecodeTypeInference_InferredType("NULL");
+        new AutoValue_BytecodeTypeInference_InferredType("NULL", /*uninitializationLabel=*/ null);
 
     public static final InferredType UNINITIALIZED_THIS =
-        new AutoValue_BytecodeTypeInference_InferredType("UNINITIALIZED_THIS");
+        new AutoValue_BytecodeTypeInference_InferredType(
+            "UNINITIALIZED_THIS", /*uninitializationLabel=*/ null);
 
-    static InferredType create(String descriptor) {
+    /**
+     * Create a type for a value. This method is not intended to be called outside of this class.
+     */
+    private static InferredType create(String descriptor, @Nullable Label uninitializationLabel) {
+      if (UNINITIALIZED_PREFIX.equals(descriptor)) {
+        return new AutoValue_BytecodeTypeInference_InferredType(
+            UNINITIALIZED_PREFIX, checkNotNull(uninitializationLabel));
+      }
+      checkArgument(
+          uninitializationLabel == null,
+          "The uninitializationLabel should be null for non-uninitialized value. %s",
+          descriptor);
       char firstChar = descriptor.charAt(0);
-      if (firstChar == 'L' || firstChar == '[' || descriptor.startsWith(UNINITIALIZED_PREFIX)) {
-        // Reference, array, or uninitialized values.
-        return new AutoValue_BytecodeTypeInference_InferredType(descriptor);
+      if (firstChar == 'L' || firstChar == '[') {
+        // Reference, array.
+        return new AutoValue_BytecodeTypeInference_InferredType(
+            descriptor, /*uninitializationLabel=*/ null);
       }
       switch (descriptor) {
         case "Z":
@@ -956,12 +990,23 @@
       }
     }
 
-    /** Create a type for uninitialized value. The label is generated by ASM. */
-    static InferredType createUninitialized(int label) {
-      return create(UNINITIALIZED_PREFIX + label);
+    /** Creates all types except UNINITIALIZED. This method can also create UNINTIALIZED_THIS. */
+    static InferredType createNonUninitializedType(String descriptor) {
+      return create(descriptor, /*uninitializationLabel=*/ null);
+    }
+
+    /** Create a type for an UNINITIALIZED value. The uninitializationLabel is generated by ASM. */
+    static InferredType createUninitializedType(Label uninitializationLabel) {
+      return create(UNINITIALIZED_PREFIX, uninitializationLabel);
     }
 
     abstract String descriptor();
+    /**
+     * The label may be null. This field is meaningful if the current type is "UNINITIALIZED". For
+     * other types, this field is null.
+     */
+    @Nullable
+    abstract Label uninitializationLabel();
 
     @Override
     public String toString() {
@@ -978,7 +1023,7 @@
     public InferredType getElementTypeIfArrayOrThrow() {
       String descriptor = descriptor();
       checkState(descriptor.charAt(0) == '[', "This type %s is not an array.", this);
-      return create(descriptor.substring(1));
+      return createNonUninitializedType(descriptor.substring(1));
     }
 
     /** Is an uninitialized value? */
@@ -992,17 +1037,16 @@
     }
 
     /**
-     * If this type is a reference type, then return the internal name. Otherwise, throw an
-     * exception.
+     * If this type is a reference type, then return the internal name. Otherwise, returns empty.
      */
-    public String getInternalNameOrThrow() {
+    public Optional<String> getInternalName() {
       String descriptor = descriptor();
       int length = descriptor.length();
-      checkState(
-          descriptor.charAt(0) == 'L' && descriptor.charAt(length - 1) == ';',
-          "The type is expected to be either a class or an interface: %s",
-          descriptor);
-      return descriptor.substring(1, length - 1);
+      if (length > 0 && descriptor.charAt(0) == 'L' && descriptor.charAt(length - 1) == ';') {
+        return Optional.of(descriptor.substring(1, length - 1));
+      } else {
+        return Optional.empty();
+      }
     }
   }
 }
diff --git a/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java b/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java
index beaeb03..1f240ef 100644
--- a/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java
+++ b/java/com/google/devtools/build/android/desugar/LambdaClassMaker.java
@@ -14,18 +14,19 @@
 package com.google.devtools.build.android.desugar;
 
 import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.collect.Iterables.getOnlyElement;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterators;
 import java.io.IOException;
 import java.lang.invoke.MethodHandle;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.function.Predicate;
-import java.util.stream.Stream;
+import java.util.Set;
 
 class LambdaClassMaker {
 
@@ -33,6 +34,7 @@
 
   private final Path rootDirectory;
   private final Map<Path, LambdaInfo> generatedClasses = new LinkedHashMap<>();
+  private final Set<Path> existingPaths = new HashSet<>();
 
   public LambdaClassMaker(Path rootDirectory) {
     checkArgument(
@@ -42,7 +44,9 @@
 
   public void generateLambdaClass(String invokerInternalName, LambdaInfo lambdaInfo,
       MethodHandle bootstrapMethod, ArrayList<Object> bsmArgs) throws IOException {
-    // Invoking the bootstrap method will dump the generated class
+    // Invoking the bootstrap method will dump the generated class.  Ignore any pre-existing
+    // matching files, which can come from desugar's implementation using classes being desugared.
+    existingPaths.addAll(findUnprocessed(invokerInternalName + "$$Lambda$"));
     try {
       bootstrapMethod.invokeWithArguments(bsmArgs);
     } catch (Throwable e) {
@@ -50,8 +54,9 @@
           + invokerInternalName + " using " + bootstrapMethod + " with arguments " + bsmArgs, e);
     }
 
-    Path generatedClassFile = findOnlyUnprocessed(invokerInternalName + "$$Lambda$");
+    Path generatedClassFile = getOnlyElement(findUnprocessed(invokerInternalName + "$$Lambda$"));
     generatedClasses.put(generatedClassFile, lambdaInfo);
+    existingPaths.add(generatedClassFile);
   }
 
   /**
@@ -64,7 +69,7 @@
     return result;
   }
 
-  private Path findOnlyUnprocessed(String pathPrefix) throws IOException {
+  private ImmutableList<Path> findUnprocessed(String pathPrefix) throws IOException {
     // pathPrefix is an internal class name prefix containing '/', but paths obtained on Windows
     // will not contain '/' and searches will fail.  So, construct an absolute path from the given
     // string and use its string representation to find the file we need regardless of host
@@ -72,18 +77,14 @@
     Path rootPathPrefix = rootDirectory.resolve(pathPrefix);
     final String rootPathPrefixStr = rootPathPrefix.toString();
 
-    // TODO(bazel-team): This could be much nicer with lambdas
-    try (Stream<Path> paths =
-        Files.list(rootPathPrefix.getParent())
-            .filter(
-                new Predicate<Path>() {
-                  @Override
-                  public boolean test(Path path) {
-                    return path.toString().startsWith(rootPathPrefixStr)
-                        && !generatedClasses.containsKey(path);
-                  }
-                })) {
-      return Iterators.getOnlyElement(paths.iterator());
+    if (!Files.exists(rootPathPrefix.getParent())) {
+      return ImmutableList.of();
     }
+    return Files.list(rootPathPrefix.getParent())
+        .filter(
+            path ->
+                path.toString().startsWith(rootPathPrefixStr)
+                    && !existingPaths.contains(path))
+        .collect(ImmutableList.toImmutableList());
   }
 }
diff --git a/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java b/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
index e4d4da5..8e6d6d5 100644
--- a/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
+++ b/java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java
@@ -31,6 +31,7 @@
 import com.google.devtools.build.android.desugar.BytecodeTypeInference.InferredType;
 import java.util.Collections;
 import java.util.LinkedHashSet;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.annotation.Nullable;
@@ -291,10 +292,16 @@
           // Check the exception type.
           InferredType exceptionClass = typeInference.getTypeOfOperandFromTop(1);
           if (!exceptionClass.isNull()) {
-            String exceptionClassInternalName = exceptionClass.getInternalNameOrThrow();
+            Optional<String> exceptionClassInternalName = exceptionClass.getInternalName();
+            checkState(
+                exceptionClassInternalName.isPresent(),
+                "The exception %s is not a reference type in %s.%s",
+                exceptionClass,
+                internalName,
+                methodSignature);
             checkState(
                 isAssignableFrom(
-                    "java.lang.Throwable", exceptionClassInternalName.replace('/', '.')),
+                    "java.lang.Throwable", exceptionClassInternalName.get().replace('/', '.')),
                 "The exception type %s in %s.%s should be a subclass of java.lang.Throwable.",
                 exceptionClassInternalName,
                 internalName,
@@ -302,20 +309,26 @@
           }
         }
 
-        String resourceClassInternalName =
-            typeInference.getTypeOfOperandFromTop(0).getInternalNameOrThrow();
+        InferredType resourceType = typeInference.getTypeOfOperandFromTop(0);
+        Optional<String> resourceClassInternalName = resourceType.getInternalName();
+        checkState(
+            resourceClassInternalName.isPresent(),
+            "The resource class %s is not a reference type in %s.%s",
+            resourceType,
+            internalName,
+            methodSignature);
         checkState(
             isAssignableFrom(
-                "java.lang.AutoCloseable", resourceClassInternalName.replace('/', '.')),
+                "java.lang.AutoCloseable", resourceClassInternalName.get().replace('/', '.')),
             "The resource type should be a subclass of java.lang.AutoCloseable: %s",
             resourceClassInternalName);
 
-        resourceTypeInternalNames.add(resourceClassInternalName);
+        resourceTypeInternalNames.add(resourceClassInternalName.get());
         super.visitMethodInsn(
             opcode,
             owner,
             "$closeResource",
-            "(Ljava/lang/Throwable;L" + resourceClassInternalName + ";)V",
+            "(Ljava/lang/Throwable;L" + resourceClassInternalName.get() + ";)V",
             itf);
         return;
       }
diff --git a/test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java b/test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java
index fefc599..d58d002 100644
--- a/test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java
+++ b/test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java
@@ -20,6 +20,7 @@
 import java.io.PrintWriter;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.Comparator;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 import org.objectweb.asm.ClassReader;
@@ -53,7 +54,7 @@
   private static ImmutableList<ZipEntry> getSortedClassEntriess(ZipFile jar) {
     return jar.stream()
         .filter(entry -> entry.getName().endsWith(".class"))
-        .sorted()
+        .sorted(Comparator.comparing(ZipEntry::getName))
         .collect(ImmutableList.toImmutableList());
   }
 
@@ -116,105 +117,106 @@
       this.printWriter = printWriter;
     }
 
-    private void printTypeOfOperandStackTop() {
+    private void printTypeOfOperandStack() {
       printer.print("    |__STACK: " + inference.getOperandStackAsString() + "\n");
+      printer.print("    |__LOCAL: " + inference.getLocalsAsString() + "\n");
     }
 
     @Override
     public void visitIntInsn(int opcode, int operand) {
       printer.visitIntInsn(opcode, operand);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitIntInsn(opcode, operand);
     }
 
     @Override
     public void visitInsn(int opcode) {
       printer.visitInsn(opcode);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitInsn(opcode);
     }
 
     @Override
     public void visitMultiANewArrayInsn(String desc, int dims) {
       printer.visitMultiANewArrayInsn(desc, dims);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitMultiANewArrayInsn(desc, dims);
     }
 
     @Override
     public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {
       printer.visitLookupSwitchInsn(dflt, keys, labels);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitLookupSwitchInsn(dflt, keys, labels);
     }
 
     @Override
     public void visitTableSwitchInsn(int min, int max, Label dflt, Label... labels) {
       printer.visitTableSwitchInsn(min, max, dflt, labels);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitTableSwitchInsn(min, max, dflt, labels);
     }
 
     @Override
     public void visitIincInsn(int var, int increment) {
       printer.visitIincInsn(var, increment);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitIincInsn(var, increment);
     }
 
     @Override
     public void visitLdcInsn(Object cst) {
       printer.visitLdcInsn(cst);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitLdcInsn(cst);
     }
 
     @Override
     public void visitJumpInsn(int opcode, Label label) {
       printer.visitJumpInsn(opcode, label);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitJumpInsn(opcode, label);
     }
 
     @Override
     public void visitInvokeDynamicInsn(String name, String desc, Handle bsm, Object... bsmArgs) {
       printer.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitInvokeDynamicInsn(name, desc, bsm, bsmArgs);
     }
 
     @Override
     public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
       printer.visitMethodInsn(opcode, owner, name, desc, itf);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitMethodInsn(opcode, owner, name, desc, itf);
     }
 
     @Override
     public void visitMethodInsn(int opcode, String owner, String name, String desc) {
       printer.visitMethodInsn(opcode, owner, name, desc);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitMethodInsn(opcode, owner, name, desc);
     }
 
     @Override
     public void visitFieldInsn(int opcode, String owner, String name, String desc) {
       printer.visitFieldInsn(opcode, owner, name, desc);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitFieldInsn(opcode, owner, name, desc);
     }
 
     @Override
     public void visitTypeInsn(int opcode, String type) {
       printer.visitTypeInsn(opcode, type);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitTypeInsn(opcode, type);
     }
 
     @Override
     public void visitVarInsn(int opcode, int var) {
       printer.visitVarInsn(opcode, var);
-      printTypeOfOperandStackTop();
+      printTypeOfOperandStack();
       super.visitVarInsn(opcode, var);
     }
 
diff --git a/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt b/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt
index 722c2ad..dabfe14 100644
--- a/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt
+++ b/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt
@@ -3,1168 +3,1793 @@
    L0
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject;]
+        |__LOCAL: [Ltestsubjects/TestSubject;]
     INVOKESPECIAL java/lang/Object.<init> ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;]
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;]
 Method catchTest
    L0
     ALOAD 0
         |__STACK: [Ljava/lang/Object;]
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
     INSTANCEOF java/lang/String
         |__STACK: [I]
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
     IFNE L1
         |__STACK: []
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
    L2
     GETSTATIC testsubjects/TestSubject.VALUE_ONE : I
         |__STACK: [I]
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
     IRETURN
         |__STACK: []
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
    L1
    FRAME SAME
     ALOAD 0
         |__STACK: [Ljava/lang/Object;]
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
     CHECKCAST java/lang/String
         |__STACK: [Ljava/lang/String;]
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
     INVOKESTATIC java/util/regex/Pattern.compile (Ljava/lang/String;)Ljava/util/regex/Pattern;
         |__STACK: [Ljava/util/regex/Pattern;]
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
     POP
         |__STACK: []
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
    L3
     GOTO L4
         |__STACK: []
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
    L5
    FRAME SAME1 java/util/regex/PatternSyntaxException
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;, Ljava/util/regex/PatternSyntaxException;]
    L6
     GETSTATIC testsubjects/TestSubject.VALUE_TWO : I
         |__STACK: [I]
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;, Ljava/util/regex/PatternSyntaxException;]
     IRETURN
         |__STACK: []
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;, Ljava/util/regex/PatternSyntaxException;]
    L4
    FRAME SAME
     GETSTATIC testsubjects/TestSubject.VALUE_ONE : I
         |__STACK: [I]
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
     IRETURN
         |__STACK: []
+        |__LOCAL: [Ljava/lang/Object;, Ljava/lang/Object;]
 Method assertEquals
    L0
     DLOAD 1
         |__STACK: [D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DLOAD 3
         |__STACK: [D, TOP, D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKESTATIC java/lang/Double.compare (DD)I
         |__STACK: [I]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     IFNE L1
         |__STACK: []
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
    L2
     RETURN
         |__STACK: []
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
    L1
    FRAME SAME
     DLOAD 1
         |__STACK: [D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DLOAD 3
         |__STACK: [D, TOP, D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DSUB
         |__STACK: [D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKESTATIC java/lang/Math.abs (D)D
         |__STACK: [D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DLOAD 5
         |__STACK: [D, TOP, D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DCMPG
         |__STACK: [I]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     IFLE L3
         |__STACK: []
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
    L4
     NEW java/lang/RuntimeException
         |__STACK: [Ljava/lang/RuntimeException;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DUP
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     NEW java/lang/StringBuilder
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DUP
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/StringBuilder;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKESPECIAL java/lang/StringBuilder.<init> ()V
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     ALOAD 0
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/String;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     NEW java/lang/Double
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DUP
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;, Ljava/lang/Double;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DLOAD 1
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;, Ljava/lang/Double;, D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKESPECIAL java/lang/Double.<init> (D)V
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder;
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     NEW java/lang/Double
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DUP
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;, Ljava/lang/Double;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     DLOAD 3
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;, Ljava/lang/Double;, D, TOP]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKESPECIAL java/lang/Double.<init> (D)V
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;, Ljava/lang/Double;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/Object;)Ljava/lang/StringBuilder;
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/StringBuilder;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
         |__STACK: [Ljava/lang/RuntimeException;, Ljava/lang/RuntimeException;, Ljava/lang/String;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     INVOKESPECIAL java/lang/RuntimeException.<init> (Ljava/lang/String;)V
         |__STACK: [Ljava/lang/RuntimeException;]
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
    L3
    FRAME SAME
     RETURN
         |__STACK: []
+        |__LOCAL: [Ljava/lang/String;, D, TOP, D, TOP, D, TOP]
 Method simpleTryWithResources
    L0
     NEW testsubjects/TestSubject$SimpleResource
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: []
     DUP
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;, Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: []
     INVOKESPECIAL testsubjects/TestSubject$SimpleResource.<init> ()V
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: []
     ASTORE 0
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;]
     ACONST_NULL
         |__STACK: [NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;]
     ASTORE 1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
    L1
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
     ICONST_1
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;, I]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
     INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.call (Z)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
    L2
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
     IFNULL L3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
     ALOAD 1
         |__STACK: [NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
     IFNULL L4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
    L5
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
     INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
    L6
     GOTO L3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, NULL]
    L7
    FRAME FULL [testsubjects/TestSubject$SimpleResource java/lang/Throwable] [java/lang/Throwable]
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 1
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 2
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L4
    FRAME SAME
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;]
     GOTO L3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;]
    L8
    FRAME SAME1 java/lang/Throwable
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 2
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ASTORE 1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 2
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L9
    FRAME SAME1 java/lang/Throwable
     ASTORE 3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
    L10
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
     IFNULL L11
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
     ALOAD 1
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
     IFNULL L12
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
    L13
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
     INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
    L14
     GOTO L11
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
    L15
    FRAME FULL [testsubjects/TestSubject$SimpleResource java/lang/Throwable T java/lang/Throwable] [java/lang/Throwable]
     ASTORE 4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 1
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 4
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L11
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L12
    FRAME SAME
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject$SimpleResource;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
     INVOKEVIRTUAL testsubjects/TestSubject$SimpleResource.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
    L11
    FRAME SAME
     ALOAD 3
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject$SimpleResource;, Ljava/lang/Throwable;, TOP, Ljava/lang/Throwable;]
    L3
    FRAME FULL [] []
     RETURN
         |__STACK: []
+        |__LOCAL: []
 Method internalCompare
    L0
     ALOAD 4
         |__STACK: [Ljava/util/function/BinaryOperator;]
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
     LLOAD 0
         |__STACK: [Ljava/util/function/BinaryOperator;, J, TOP]
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
     INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;
         |__STACK: [Ljava/util/function/BinaryOperator;, Ljava/lang/Long;]
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
     LLOAD 2
         |__STACK: [Ljava/util/function/BinaryOperator;, Ljava/lang/Long;, J, TOP]
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
     INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;
         |__STACK: [Ljava/util/function/BinaryOperator;, Ljava/lang/Long;, Ljava/lang/Long;]
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
     INVOKEINTERFACE java/util/function/BinaryOperator.apply (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
         |__STACK: [Ljava/lang/Object;]
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
     CHECKCAST java/lang/Long
         |__STACK: [Ljava/lang/Long;]
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
     INVOKEVIRTUAL java/lang/Long.longValue ()J
         |__STACK: [J, TOP]
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
     LRETURN
         |__STACK: []
+        |__LOCAL: [J, TOP, J, TOP, Ljava/util/function/BinaryOperator;]
 Method closeResourceArray
    L0
     ALOAD 1
         |__STACK: [[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;]
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
     ALOAD 2
         |__STACK: [[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
     ARRAYLENGTH
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
     ISTORE 3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I]
     ICONST_0
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I]
     ISTORE 4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
    L1
    FRAME APPEND [[Ljava/sql/Statement; I I]
     ILOAD 4
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     ILOAD 3
         |__STACK: [I, I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     IF_ICMPGE L2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     ALOAD 2
         |__STACK: [[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     ILOAD 4
         |__STACK: [[Ljava/sql/Statement;, I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     AALOAD
         |__STACK: [Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     ASTORE 5
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
    L3
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
     ALOAD 5
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
     ACONST_NULL
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
     INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
    L4
     IINC 4 1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
     GOTO L1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
    L2
    FRAME CHOP 3
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [Ljava/sql/Statement;]
 Method closeResourceMultiArray
    L0
     ALOAD 1
         |__STACK: [[[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;]
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;]
     ALOAD 2
         |__STACK: [[[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;]
     ARRAYLENGTH
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;]
     ISTORE 3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I]
     ICONST_0
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I]
     ISTORE 4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
    L1
    FRAME APPEND [[[Ljava/sql/Statement; I I]
     ILOAD 4
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
     ILOAD 3
         |__STACK: [I, I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
     IF_ICMPGE L2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
     ALOAD 2
         |__STACK: [[[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
     ILOAD 4
         |__STACK: [[[Ljava/sql/Statement;, I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
     AALOAD
         |__STACK: [[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
     ASTORE 5
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;]
    L3
     ALOAD 5
         |__STACK: [[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;]
     ASTORE 6
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
     ALOAD 6
         |__STACK: [[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
     ARRAYLENGTH
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;]
     ISTORE 7
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I]
     ICONST_0
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I]
     ISTORE 8
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
    L4
    FRAME FULL [testsubjects/TestSubject [[Ljava/sql/Statement; [[Ljava/sql/Statement; I I [Ljava/sql/Statement; [Ljava/sql/Statement; I I] []
     ILOAD 8
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     ILOAD 7
         |__STACK: [I, I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     IF_ICMPGE L5
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     ALOAD 6
         |__STACK: [[Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     ILOAD 8
         |__STACK: [[Ljava/sql/Statement;, I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     AALOAD
         |__STACK: [Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I]
     ASTORE 9
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
    L6
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
     ALOAD 9
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
     ACONST_NULL
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
     INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
    L7
     IINC 8 1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
     GOTO L4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I, [Ljava/sql/Statement;, [Ljava/sql/Statement;, I, I, Ljava/sql/Statement;]
    L5
    FRAME FULL [testsubjects/TestSubject [[Ljava/sql/Statement; [[Ljava/sql/Statement; I I] []
     IINC 4 1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
     GOTO L1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;, [[Ljava/sql/Statement;, I, I]
    L2
    FRAME CHOP 3
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, [[Ljava/sql/Statement;]
 Method closeResourceArrayList
    L0
     ALOAD 1
         |__STACK: [Ljava/util/List;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;]
     INVOKEINTERFACE java/util/List.iterator ()Ljava/util/Iterator;
         |__STACK: [Ljava/util/Iterator;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;]
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
    L1
    FRAME APPEND [java/util/Iterator]
     ALOAD 2
         |__STACK: [Ljava/util/Iterator;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
     INVOKEINTERFACE java/util/Iterator.hasNext ()Z
         |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
     IFEQ L2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
     ALOAD 2
         |__STACK: [Ljava/util/Iterator;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
     INVOKEINTERFACE java/util/Iterator.next ()Ljava/lang/Object;
         |__STACK: [Ljava/lang/Object;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
     CHECKCAST java/sql/Statement
         |__STACK: [Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;]
     ASTORE 3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
    L3
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
     ALOAD 3
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
     ACONST_NULL
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
     INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
    L4
     GOTO L1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;, Ljava/util/Iterator;, Ljava/sql/Statement;]
    L2
    FRAME CHOP 1
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/util/List;]
 Method closeSqlStmt
    L0
     ACONST_NULL
         |__STACK: [NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;]
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, NULL]
    L1
     ALOAD 1
         |__STACK: [Ljava/sql/Connection;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, NULL]
     INVOKEINTERFACE java/sql/Connection.createStatement ()Ljava/sql/Statement;
         |__STACK: [Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, NULL]
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
    L2
     GOTO L3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
    L4
    FRAME FULL [testsubjects/TestSubject java/sql/Connection java/sql/Statement] [java/sql/SQLException]
     ASTORE 3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
    L5
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
     ALOAD 2
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
     ALOAD 3
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
     INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;, Ljava/sql/SQLException;]
    L3
    FRAME SAME
     ALOAD 0
         |__STACK: [Ltestsubjects/TestSubject;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
     ALOAD 2
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
     ACONST_NULL
         |__STACK: [Ltestsubjects/TestSubject;, Ljava/sql/Statement;, NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
     INVOKEVIRTUAL testsubjects/TestSubject.closeResource (Ljava/lang/AutoCloseable;Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
    L6
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/sql/Connection;, Ljava/sql/Statement;]
 Method closeResource
    L0
     ALOAD 1
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     IFNONNULL L1
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L2
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L1
    FRAME SAME
     ALOAD 1
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L3
     GOTO L4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L5
    FRAME SAME1 java/lang/Exception
     ASTORE 3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
    L6
     ALOAD 2
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
     IFNULL L7
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
    L8
     ALOAD 2
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
     ALOAD 3
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Exception;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
    L7
    FRAME APPEND [java/lang/Exception]
     ALOAD 3
         |__STACK: [Ljava/lang/Exception;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Exception;]
    L4
    FRAME CHOP 1
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
 Method intAdd
    L0
     ILOAD 0
         |__STACK: [I]
+        |__LOCAL: [I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L1
     IINC 2 1
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L2
     IINC 2 1
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L3
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ILOAD 1
         |__STACK: [I, I]
+        |__LOCAL: [I, I, I]
     IADD
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L4
     IINC 2 -1
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L5
     IINC 2 -1
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L6
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ILOAD 1
         |__STACK: [I, I]
+        |__LOCAL: [I, I, I]
     ISUB
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L7
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ILOAD 1
         |__STACK: [I, I]
+        |__LOCAL: [I, I, I]
     IMUL
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L8
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ILOAD 1
         |__STACK: [I, I]
+        |__LOCAL: [I, I, I]
     IDIV
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L9
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ILOAD 1
         |__STACK: [I, I]
+        |__LOCAL: [I, I, I]
     IREM
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L10
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ICONST_2
         |__STACK: [I, I]
+        |__LOCAL: [I, I, I]
     ISHL
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L11
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ILOAD 1
         |__STACK: [I, I]
+        |__LOCAL: [I, I, I]
     ISHR
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L12
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ICONST_3
         |__STACK: [I, I]
+        |__LOCAL: [I, I, I]
     IUSHR
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     ISTORE 2
         |__STACK: []
+        |__LOCAL: [I, I, I]
    L13
     ILOAD 2
         |__STACK: [I]
+        |__LOCAL: [I, I, I]
     I2L
         |__STACK: [J, TOP]
+        |__LOCAL: [I, I, I]
     LSTORE 3
         |__STACK: []
+        |__LOCAL: [I, I, I, J, TOP]
    L14
     LLOAD 3
         |__STACK: [J, TOP]
+        |__LOCAL: [I, I, I, J, TOP]
     ILOAD 1
         |__STACK: [J, TOP, I]
+        |__LOCAL: [I, I, I, J, TOP]
     LSHL
         |__STACK: [J, TOP]
+        |__LOCAL: [I, I, I, J, TOP]
     LSTORE 3
         |__STACK: []
+        |__LOCAL: [I, I, I, J, TOP]
    L15
     LLOAD 3
         |__STACK: [J, TOP]
+        |__LOCAL: [I, I, I, J, TOP]
     L2I
         |__STACK: [I]
+        |__LOCAL: [I, I, I, J, TOP]
     IRETURN
         |__STACK: []
+        |__LOCAL: [I, I, I, J, TOP]
 Method createNumberWithDiamond
    L0
     ACONST_NULL
         |__STACK: [NULL]
+        |__LOCAL: [I]
     ASTORE 1
         |__STACK: []
+        |__LOCAL: [I, NULL]
    L1
     ILOAD 0
         |__STACK: [I]
+        |__LOCAL: [I, NULL]
     IFEQ L2
         |__STACK: []
+        |__LOCAL: [I, NULL]
    L3
     NEW java/lang/Integer
         |__STACK: [Ljava/lang/Integer;]
+        |__LOCAL: [I, NULL]
     DUP
         |__STACK: [Ljava/lang/Integer;, Ljava/lang/Integer;]
+        |__LOCAL: [I, NULL]
     ICONST_1
         |__STACK: [Ljava/lang/Integer;, Ljava/lang/Integer;, I]
+        |__LOCAL: [I, NULL]
     INVOKESPECIAL java/lang/Integer.<init> (I)V
         |__STACK: [Ljava/lang/Integer;]
+        |__LOCAL: [I, NULL]
     ASTORE 1
         |__STACK: []
+        |__LOCAL: [I, Ljava/lang/Integer;]
     GOTO L4
         |__STACK: []
+        |__LOCAL: [I, Ljava/lang/Integer;]
    L2
    FRAME APPEND [java/lang/Number]
     NEW java/lang/Double
         |__STACK: [Ljava/lang/Double;]
+        |__LOCAL: [I, Ljava/lang/Number;]
     DUP
         |__STACK: [Ljava/lang/Double;, Ljava/lang/Double;]
+        |__LOCAL: [I, Ljava/lang/Number;]
     DCONST_1
         |__STACK: [Ljava/lang/Double;, Ljava/lang/Double;, D, TOP]
+        |__LOCAL: [I, Ljava/lang/Number;]
     INVOKESPECIAL java/lang/Double.<init> (D)V
         |__STACK: [Ljava/lang/Double;]
+        |__LOCAL: [I, Ljava/lang/Number;]
     ASTORE 1
         |__STACK: []
+        |__LOCAL: [I, Ljava/lang/Double;]
    L4
    FRAME SAME
     ALOAD 1
         |__STACK: [Ljava/lang/Number;]
+        |__LOCAL: [I, Ljava/lang/Number;]
     ARETURN
         |__STACK: []
+        |__LOCAL: [I, Ljava/lang/Number;]
 Method createMultiObjectArray
    L0
     ICONST_0
         |__STACK: [I]
+        |__LOCAL: []
     ICONST_0
         |__STACK: [I, I]
+        |__LOCAL: []
     MULTIANEWARRAY [[Ljava/lang/Object; 2
         |__STACK: [[[Ljava/lang/Object;]
+        |__LOCAL: []
     ARETURN
         |__STACK: []
+        |__LOCAL: []
 Method createObjectArray
    L0
     ICONST_0
         |__STACK: [I]
+        |__LOCAL: []
     ANEWARRAY java/lang/Object
         |__STACK: [[Ljava/lang/Object;]
+        |__LOCAL: []
     ARETURN
         |__STACK: []
+        |__LOCAL: []
 Method createIntArray
    L0
     ICONST_0
         |__STACK: [I]
+        |__LOCAL: []
     NEWARRAY T_INT
         |__STACK: [[I]
+        |__LOCAL: []
     ARETURN
         |__STACK: []
+        |__LOCAL: []
 Method staticEmpty1
    L0
     RETURN
         |__STACK: []
+        |__LOCAL: []
 Method instanceEmpty1
    L0
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;]
 Method identity
    L0
     ILOAD 0
         |__STACK: [I]
+        |__LOCAL: [I]
     IRETURN
         |__STACK: []
+        |__LOCAL: [I]
 Method identity2
    L0
     ILOAD 0
         |__STACK: [I]
+        |__LOCAL: [I]
     ISTORE 1
         |__STACK: []
+        |__LOCAL: [I, I]
    L1
     ILOAD 1
         |__STACK: [I]
+        |__LOCAL: [I, I]
     IRETURN
         |__STACK: []
+        |__LOCAL: [I, I]
 Method readFile
    L0
     NEW java/io/BufferedReader
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
     DUP
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
     NEW java/io/FileReader
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
     DUP
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
     ALOAD 1
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;, Ljava/io/File;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
     INVOKESPECIAL java/io/FileReader.<init> (Ljava/io/File;)V
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
     INVOKESPECIAL java/io/BufferedReader.<init> (Ljava/io/Reader;)V
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;]
     ACONST_NULL
         |__STACK: [NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;]
     ASTORE 3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
    L1
     NEW java/io/BufferedReader
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
     DUP
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
     NEW java/io/FileReader
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
     DUP
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
     ALOAD 1
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;, Ljava/io/File;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
     INVOKESPECIAL java/io/FileReader.<init> (Ljava/io/File;)V
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
     INVOKESPECIAL java/io/BufferedReader.<init> (Ljava/io/Reader;)V
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL]
     ASTORE 4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
    L2
     ACONST_NULL
         |__STACK: [NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
     ASTORE 5
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
    L3
     NEW java/io/BufferedReader
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     DUP
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     NEW java/io/FileReader
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     DUP
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     ALOAD 1
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;, Ljava/io/File;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     INVOKESPECIAL java/io/FileReader.<init> (Ljava/io/File;)V
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     INVOKESPECIAL java/io/BufferedReader.<init> (Ljava/io/Reader;)V
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     ASTORE 6
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
    L4
     ACONST_NULL
         |__STACK: [NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
     ASTORE 7
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
    L5
     NEW java/io/BufferedReader
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     DUP
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     NEW java/io/FileReader
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     DUP
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     ALOAD 1
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;, Ljava/io/FileReader;, Ljava/io/File;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     INVOKESPECIAL java/io/FileReader.<init> (Ljava/io/File;)V
         |__STACK: [Ljava/io/BufferedReader;, Ljava/io/BufferedReader;, Ljava/io/FileReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     INVOKESPECIAL java/io/BufferedReader.<init> (Ljava/io/Reader;)V
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     ASTORE 8
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
    L6
     ACONST_NULL
         |__STACK: [NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;]
     ASTORE 9
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
    L7
     ALOAD 8
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     IFNULL L8
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     ALOAD 9
         |__STACK: [NULL]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     IFNULL L9
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
    L10
     ALOAD 8
         |__STACK: [Ljava/io/BufferedReader;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
    L11
     GOTO L8
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL, Ljava/io/BufferedReader;, NULL]
    L12
    FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable] [java/lang/Throwable]
     ASTORE 10
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 9
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 10
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L8
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L9
    FRAME SAME
     ALOAD 8
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L8
    FRAME CHOP 2
     ALOAD 6
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     IFNULL L13
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     ALOAD 7
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     IFNULL L14
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L15
     ALOAD 6
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L16
     GOTO L13
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L17
    FRAME SAME1 java/lang/Throwable
     ASTORE 8
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 7
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 8
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L13
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L14
    FRAME SAME
     ALOAD 6
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     GOTO L13
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L18
    FRAME SAME1 java/lang/Throwable
     ASTORE 8
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 8
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ASTORE 7
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 8
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L19
    FRAME SAME1 java/lang/Throwable
     ASTORE 11
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L20
     ALOAD 6
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
     IFNULL L21
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
     ALOAD 7
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
     IFNULL L22
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L23
     ALOAD 6
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L24
     GOTO L21
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L25
    FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable T T T java/lang/Throwable] [java/lang/Throwable]
     ASTORE 12
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 7
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 12
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L21
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L22
    FRAME SAME
     ALOAD 6
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L21
    FRAME SAME
     ALOAD 11
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L13
    FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable] []
     ALOAD 4
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     IFNULL L26
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     ALOAD 5
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     IFNULL L27
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L28
     ALOAD 4
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L29
     GOTO L26
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L30
    FRAME SAME1 java/lang/Throwable
     ASTORE 6
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 5
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 6
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L26
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L27
    FRAME SAME
     ALOAD 4
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     GOTO L26
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L31
    FRAME SAME1 java/lang/Throwable
     ASTORE 6
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 6
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ASTORE 5
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 6
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L32
    FRAME SAME1 java/lang/Throwable
     ASTORE 13
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L33
     ALOAD 4
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     IFNULL L34
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     ALOAD 5
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     IFNULL L35
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L36
     ALOAD 4
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L37
     GOTO L34
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L38
    FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable java/lang/AutoCloseable java/lang/Throwable T T T T T T T java/lang/Throwable] [java/lang/Throwable]
     ASTORE 14
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 5
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 14
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L34
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L35
    FRAME SAME
     ALOAD 4
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L34
    FRAME SAME
     ALOAD 13
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L26
    FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable] []
     ALOAD 2
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     IFNULL L39
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     ALOAD 3
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     IFNULL L40
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L41
     ALOAD 2
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L42
     GOTO L39
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L43
    FRAME SAME1 java/lang/Throwable
     ASTORE 4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 3
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 4
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L39
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L40
    FRAME SAME
     ALOAD 2
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
     GOTO L39
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;]
    L44
    FRAME SAME1 java/lang/Throwable
     ASTORE 4
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 4
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ASTORE 3
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 4
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L45
    FRAME SAME1 java/lang/Throwable
     ASTORE 15
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L46
     ALOAD 2
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     IFNULL L47
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     ALOAD 3
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     IFNULL L48
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L49
     ALOAD 2
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L50
     GOTO L47
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L51
    FRAME FULL [testsubjects/TestSubject java/io/File java/lang/AutoCloseable java/lang/Throwable T T T T T T T T T T T java/lang/Throwable] [java/lang/Throwable]
     ASTORE 16
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 3
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     ALOAD 16
         |__STACK: [Ljava/lang/Throwable;, Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     INVOKEVIRTUAL java/lang/Throwable.addSuppressed (Ljava/lang/Throwable;)V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
     GOTO L47
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;, Ljava/lang/Throwable;]
    L48
    FRAME SAME
     ALOAD 2
         |__STACK: [Ljava/lang/AutoCloseable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     INVOKEINTERFACE java/lang/AutoCloseable.close ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L47
    FRAME SAME
     ALOAD 15
         |__STACK: [Ljava/lang/Throwable;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
     ATHROW
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/lang/AutoCloseable;, Ljava/lang/Throwable;, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, TOP, Ljava/lang/Throwable;]
    L39
    FRAME FULL [testsubjects/TestSubject java/io/File] []
     GOTO L52
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
    L53
    FRAME SAME1 java/io/IOException
     ASTORE 2
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/IOException;]
    L54
     ALOAD 2
         |__STACK: [Ljava/io/IOException;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/IOException;]
     INVOKEVIRTUAL java/io/IOException.printStackTrace ()V
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;, Ljava/io/IOException;]
    L52
    FRAME SAME
     RETURN
         |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, Ljava/io/File;]
+Method testWithDoubleTypes
+   L0
+    DCONST_1
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;]
+    DSTORE 1
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP]
+   L1
+    DCONST_1
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP]
+    DSTORE 3
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+   L2
+   FRAME APPEND [D D]
+    DLOAD 3
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    LDC 22.0
+        |__STACK: [D, TOP, D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    DCMPG
+        |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    IFGE L3
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+   L4
+    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
+        |__STACK: [Ljava/io/PrintStream;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    DLOAD 3
+        |__STACK: [Ljava/io/PrintStream;, D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    INVOKEVIRTUAL java/io/PrintStream.println (D)V
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+   L5
+    DLOAD 1
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    DLOAD 3
+        |__STACK: [D, TOP, D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    DADD
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    DSTORE 1
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+   L6
+    DLOAD 3
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    DCONST_1
+        |__STACK: [D, TOP, D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    DADD
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    DSTORE 3
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+    GOTO L2
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP, D, TOP]
+   L3
+   FRAME CHOP 1
+    DLOAD 1
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP]
+    DRETURN
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, D, TOP]
+Method testWithFloatAndDoubleTypes
+   L0
+    FCONST_1
+        |__STACK: [F]
+        |__LOCAL: [Ltestsubjects/TestSubject;]
+    FSTORE 1
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, F]
+   L1
+    DCONST_1
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F]
+    DSTORE 2
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+   L2
+   FRAME APPEND [F D]
+    DLOAD 2
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    LDC 22.0
+        |__STACK: [D, TOP, D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    DCMPG
+        |__STACK: [I]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    IFGE L3
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+   L4
+    GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
+        |__STACK: [Ljava/io/PrintStream;]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    DLOAD 2
+        |__STACK: [Ljava/io/PrintStream;, D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    INVOKEVIRTUAL java/io/PrintStream.println (D)V
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+   L5
+    FLOAD 1
+        |__STACK: [F]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    DLOAD 2
+        |__STACK: [F, D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    D2F
+        |__STACK: [F, F]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    FADD
+        |__STACK: [F]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    FSTORE 1
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+   L6
+    DLOAD 2
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    DCONST_1
+        |__STACK: [D, TOP, D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    DADD
+        |__STACK: [D, TOP]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    DSTORE 2
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+    GOTO L2
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, F, D, TOP]
+   L3
+   FRAME CHOP 1
+    FLOAD 1
+        |__STACK: [F]
+        |__LOCAL: [Ltestsubjects/TestSubject;, F]
+    FRETURN
+        |__STACK: []
+        |__LOCAL: [Ltestsubjects/TestSubject;, F]
 Method <clinit>
    L0
     ICONST_1
         |__STACK: [I]
+        |__LOCAL: []
     PUTSTATIC testsubjects/TestSubject.VALUE_ONE : I
         |__STACK: []
+        |__LOCAL: []
    L1
     ICONST_2
         |__STACK: [I]
+        |__LOCAL: []
     PUTSTATIC testsubjects/TestSubject.VALUE_TWO : I
         |__STACK: []
+        |__LOCAL: []
     RETURN
-        |__STACK: []
\ No newline at end of file
+        |__STACK: []
+        |__LOCAL: []
\ No newline at end of file
diff --git a/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java b/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
index 2573648..476da87 100644
--- a/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
+++ b/test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java
@@ -13,8 +13,11 @@
 // limitations under the License.
 package com.google.devtools.build.android.desugar;
 
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableMap;
 import com.google.common.io.Files;
-import com.google.common.truth.Truth;
+import com.google.devtools.build.android.desugar.BytecodeTypeInference.InferredType;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.StringWriter;
@@ -24,6 +27,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
+import org.objectweb.asm.Label;
 
 /** Test for {@link BytecodeTypeInference} */
 @RunWith(JUnit4.class)
@@ -33,7 +37,7 @@
   private static final Path GOLDEN_PATH = Paths.get(System.getProperty("golden_file"));
 
   @Test
-  public void test() throws IOException {
+  public void testTypeInference() throws IOException {
     StringWriter stringWriter = new StringWriter();
     try (PrintWriter printWriter = new PrintWriter(stringWriter)) {
       ByteCodeTypePrinter.printClassesWithTypes(JAR_PATH, printWriter);
@@ -41,6 +45,37 @@
     }
     String inferenceResult = stringWriter.toString().trim();
     String golden = Files.asCharSource(GOLDEN_PATH.toFile(), StandardCharsets.UTF_8).read().trim();
-    Truth.assertThat(inferenceResult).isEqualTo(golden);
+    assertThat(inferenceResult).isEqualTo(golden);
+  }
+
+  @Test
+  public void testUninitializedInferType() {
+    Label label = new Label();
+    InferredType type = InferredType.createUninitializedType(label);
+    assertThat(type.descriptor()).isEqualTo(InferredType.UNINITIALIZED_PREFIX);
+    assertThat(type.uninitializationLabel()).isEqualTo(label);
+  }
+
+  @Test
+  public void testNonUninitializedInferType() {
+    ImmutableMap<String, InferredType> map =
+        ImmutableMap.<String, InferredType>builder()
+            .put("Z", InferredType.BOOLEAN)
+            .put("B", InferredType.BYTE)
+            .put("I", InferredType.INT)
+            .put("F", InferredType.FLOAT)
+            .put("D", InferredType.DOUBLE)
+            .put("J", InferredType.LONG)
+            .put("TOP", InferredType.TOP)
+            .put("NULL", InferredType.NULL)
+            .put("UNINITIALIZED_THIS", InferredType.UNINITIALIZED_THIS)
+            .build();
+    map.forEach(
+        (descriptor, expected) -> {
+          InferredType type = InferredType.createNonUninitializedType(descriptor);
+          assertThat(type.uninitializationLabel()).isNull();
+          assertThat(type.descriptor()).isEqualTo(descriptor);
+          assertThat(type).isSameAs(expected);
+        });
   }
 }
diff --git a/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jar b/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jar
index efa491b..f1bb726 100644
--- a/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jar
+++ b/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jar
Binary files differ
diff --git a/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java b/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java
index b5463a7..a07e73b 100644
--- a/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java
+++ b/test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java
@@ -193,4 +193,22 @@
       e.printStackTrace();
     }
   }
+
+  public double testWithDoubleTypes() {
+    double result = 1;
+    for (double i = 1; i < 22; i = i + 1) {
+      System.out.println(i);
+      result += i;
+    }
+    return result;
+  }
+
+  public float testWithFloatAndDoubleTypes() {
+    float result = 1;
+    for (double i = 1; i < 22; i = i + 1) {
+      System.out.println(i);
+      result += (float) i;
+    }
+    return result;
+  }
 }