summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2017-12-19 18:25:00 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-12-19 18:25:00 +0000
commit748b31ab428fe984e7975c41a5100a23275a8315 (patch)
tree0c22f124f5cf9949a124de963bc98d9dcb0bf96c
parent4552d61047e1aa91364c3a02d43a620b46bb6d53 (diff)
parentbbd7d2e2c365b12f9581b6f16ab39ee519a0e2af (diff)
downloaddesugar-748b31ab428fe984e7975c41a5100a23275a8315.tar.gz
Revert "Revert "Merge remote-tracking branch 'aosp/upstream-master' into desugar"" am: 0156e0d255
am: bbd7d2e2c3 Change-Id: I039388f5f5045e9385461c60efbca732f1bce254
-rw-r--r--java/com/google/devtools/build/android/desugar/BytecodeTypeInference.java138
-rw-r--r--java/com/google/devtools/build/android/desugar/LambdaClassMaker.java37
-rw-r--r--java/com/google/devtools/build/android/desugar/TryWithResourcesRewriter.java27
-rw-r--r--test/java/com/google/devtools/build/android/desugar/ByteCodeTypePrinter.java34
-rw-r--r--test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.golden.txt627
-rw-r--r--test/java/com/google/devtools/build/android/desugar/BytecodeTypeInferenceTest.java41
-rw-r--r--test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/test_subjects.jarbin3361 -> 3594 bytes
-rw-r--r--test/java/com/google/devtools/build/android/desugar/classes_for_testing_type_inference/testsubjects/TestSubject.java18
8 files changed, 830 insertions, 92 deletions
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
return operandStack.toString();
}
+ public String getLocalsAsString() {
+ return localVariableSlots.toString();
+ }
+
@Override
public void visitInsn(int opcode) {
switch (opcode) {
@@ -476,8 +477,7 @@ public final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
operandStack.addAll(previousFrame.stack());
localVariableSlots.clear();
localVariableSlots.addAll(previousFrame.locals());
-
super.visitFrame(type, nLocal, local, nStack, stack);
}
@@ -672,7 +671,7 @@ public final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
} 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 final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
}
}
- /** 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 final class BytecodeTypeInference extends MethodVisitor {
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 @@ public final class BytecodeTypeInference extends MethodVisitor {
}
/**
- * 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 @@ class LambdaClassMaker {
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 @@ class LambdaClassMaker {
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 @@ class LambdaClassMaker {
+ 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 @@ class LambdaClassMaker {
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 @@ class LambdaClassMaker {
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.common.collect.ImmutableSet;
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 @@ public class TryWithResourcesRewriter extends ClassVisitor {
// 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 @@ public class TryWithResourcesRewriter extends ClassVisitor {
}
}
- 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.InputStream;
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 @@ public class ByteCodeTypePrinter {
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 @@ public class ByteCodeTypePrinter {
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 @@ Method <init>
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 java.nio.file.Paths;
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 @@ public class BytecodeTypeInferenceTest {
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 @@ public class BytecodeTypeInferenceTest {
}
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 @@ public class TestSubject {
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;
+ }
}