Avoid lossy joins in cf analysis
This changes InitializedNonNullReferenceFrameType into being the base type of InitializedNonNullReferenceFrameTypeWithInterfaces and InitializedNonNullReferenceFrameTypeWithoutInterfaces.
The class InitializedNonNullReferenceFrameTypeWithoutInterfaces is backed by a DexType, similar to the existing InitializedNonNullReferenceFrameType.
The newly introduced InitializedNonNullReferenceFrameTypeWithInterfaces is backed by a ReferenceTypeElement. Instances of this are (only) used when computing the join of two reference types in the CF analysis to avoid loss of information from the joins. Thus instances of this class will not appear in any CfFrame in CfCode.
Fixes: b/236581210
Change-Id: I56bba15e1821e8d36a8757380b90eb3688305acd
diff --git a/src/main/java/com/android/tools/r8/cf/CfCodePrinter.java b/src/main/java/com/android/tools/r8/cf/CfCodePrinter.java
index 88afb27..e612d68 100644
--- a/src/main/java/com/android/tools/r8/cf/CfCodePrinter.java
+++ b/src/main/java/com/android/tools/r8/cf/CfCodePrinter.java
@@ -545,13 +545,17 @@
return frameTypeType() + "." + frameType.asPrimitive().getTypeName() + "Type()";
}
} else {
- assert frameType.isInitialized();
+ assert frameType.isInitializedReferenceType();
+ assert !frameType.isInitializedNonNullReferenceTypeWithInterfaces()
+ : "Unexpected InitializedNonNullReferenceTypeWithInterfaces in CfFrame";
if (frameType.isNullType()) {
- return frameTypeType() + ".initialized(" + dexItemFactoryType() + ".nullValueType)";
+ return frameTypeType() + ".nullType()";
} else {
+ assert frameType.isInitializedNonNullReferenceTypeWithoutInterfaces();
return frameTypeType()
- + ".initialized("
- + dexType(frameType.asInitializedNonNullReferenceType().getInitializedType())
+ + ".initializedNonNullReference("
+ + dexType(
+ frameType.asInitializedNonNullReferenceTypeWithoutInterfaces().getInitializedType())
+ ")";
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/CfPrinter.java b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
index 7472176..5869f46 100644
--- a/src/main/java/com/android/tools/r8/cf/CfPrinter.java
+++ b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
@@ -68,6 +68,7 @@
import com.android.tools.r8.graph.DexMethodHandle;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.DexValue;
+import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.If;
import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.code.Monitor;
@@ -459,9 +460,13 @@
if (type.isInitializedReferenceType()) {
if (type.isNullType()) {
builder.append("null");
+ } else if (type.isInitializedNonNullReferenceTypeWithInterfaces()) {
+ appendTypeElement(
+ type.asInitializedNonNullReferenceTypeWithInterfaces()
+ .getInitializedTypeWithInterfaces());
} else {
- assert type.isInitializedNonNullReferenceType();
- appendType(type.asInitializedNonNullReferenceType().getInitializedType());
+ assert type.isInitializedNonNullReferenceTypeWithoutInterfaces();
+ appendType(type.asInitializedNonNullReferenceTypeWithoutInterfaces().getInitializedType());
}
} else if (type.isUninitializedNew()) {
builder.append("uninitialized ").append(getLabel(type.getUninitializedLabel()));
@@ -780,6 +785,10 @@
}
}
+ private void appendTypeElement(TypeElement type) {
+ builder.append(type.toString());
+ }
+
private void appendClass(DexType type) {
assert type.isArrayType() || type.isClassType();
if (mapper == null) {
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java b/src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java
index cec4126..bbffacb 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfArrayLoad.java
@@ -118,11 +118,21 @@
? state.push(config, FrameType.nullType())
: state.push(appView, config, getType());
}
- return state.push(
- config,
- head.asInitializedNonNullReferenceType()
- .getInitializedType()
- .toArrayElementType(dexItemFactory));
+ if (head.isInitializedNonNullReferenceTypeWithInterfaces()) {
+ return state.push(
+ config,
+ head.asInitializedNonNullReferenceTypeWithInterfaces()
+ .getInitializedTypeWithInterfaces()
+ .asArrayType()
+ .getMemberType());
+ } else {
+ assert head.isInitializedNonNullReferenceTypeWithoutInterfaces();
+ return state.push(
+ config,
+ head.asInitializedNonNullReferenceTypeWithoutInterfaces()
+ .getInitializedType()
+ .toArrayElementType(dexItemFactory));
+ }
});
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfAssignability.java b/src/main/java/com/android/tools/r8/cf/code/CfAssignability.java
index 5def6cf..6858fe9 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfAssignability.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfAssignability.java
@@ -66,10 +66,11 @@
if (source.isInitialized()) {
// Both are instantiated types and we resort to primitive type/java type hierarchy checking.
return isAssignable(
- source.asInitializedReferenceType().getInitializedType(),
- target.asInitializedReferenceType().getInitializedType());
+ source.asInitializedReferenceType().getInitializedType(dexItemFactory),
+ target.asInitializedReferenceType().getInitializedType(dexItemFactory));
}
- return target.asInitializedReferenceType().getInitializedType() == dexItemFactory.objectType;
+ return target.asInitializedReferenceType().getInitializedType(dexItemFactory)
+ == dexItemFactory.objectType;
}
return false;
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfFrame.java b/src/main/java/com/android/tools/r8/cf/code/CfFrame.java
index 637ad81..6b2ee79 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfFrame.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfFrame.java
@@ -259,9 +259,10 @@
}
private void internalRegisterUse(UseRegistry<?> registry, FrameType frameType) {
- if (frameType.isInitializedNonNullReferenceType()) {
+ assert !frameType.isInitializedNonNullReferenceTypeWithInterfaces();
+ if (frameType.isInitializedNonNullReferenceTypeWithoutInterfaces()) {
registry.registerTypeReference(
- frameType.asInitializedNonNullReferenceType().getInitializedType());
+ frameType.asInitializedNonNullReferenceTypeWithoutInterfaces().getInitializedType());
} else if (frameType.isUninitializedNew()) {
registry.registerTypeReference(frameType.asUninitializedNew().getUninitializedNewType());
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfInstanceFieldWrite.java b/src/main/java/com/android/tools/r8/cf/code/CfInstanceFieldWrite.java
index 7fffb3d..594f126 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfInstanceFieldWrite.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfInstanceFieldWrite.java
@@ -86,6 +86,7 @@
return frame
.popInitialized(appView, config, getField().getType())
.popObject(
+ appView,
getField().getHolderType(),
config,
(state, head) -> head.isUninitializedNew() ? error(head) : state);
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/BaseFrameType.java b/src/main/java/com/android/tools/r8/cf/code/frame/BaseFrameType.java
index f7ce302..42ba495 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/BaseFrameType.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/BaseFrameType.java
@@ -86,7 +86,7 @@
}
@Override
- public DexType getObjectType(DexType context) {
+ public DexType getObjectType(DexItemFactory dexItemFactory, DexType context) {
assert false : "Unexpected use of getObjectType() for non-object FrameType";
return null;
}
@@ -154,6 +154,28 @@
}
@Override
+ public boolean isInitializedNonNullReferenceTypeWithoutInterfaces() {
+ return false;
+ }
+
+ @Override
+ public InitializedNonNullReferenceFrameTypeWithoutInterfaces
+ asInitializedNonNullReferenceTypeWithoutInterfaces() {
+ return null;
+ }
+
+ @Override
+ public boolean isInitializedNonNullReferenceTypeWithInterfaces() {
+ return false;
+ }
+
+ @Override
+ public InitializedNonNullReferenceFrameTypeWithInterfaces
+ asInitializedNonNullReferenceTypeWithInterfaces() {
+ return null;
+ }
+
+ @Override
public boolean isWide() {
return false;
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/FrameType.java b/src/main/java/com/android/tools/r8/cf/code/frame/FrameType.java
index 6c5314b..bf16f11 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/FrameType.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/FrameType.java
@@ -9,6 +9,9 @@
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.GraphLens;
+import com.android.tools.r8.ir.analysis.type.PrimitiveTypeElement;
+import com.android.tools.r8.ir.analysis.type.ReferenceTypeElement;
+import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.naming.NamingLens;
@@ -63,15 +66,33 @@
return initializedReference(type);
}
+ static InitializedFrameType initialized(TypeElement type) {
+ if (type.isPrimitiveType()) {
+ return primitive(type.asPrimitiveType());
+ }
+ return initializedReference(type.asReferenceType());
+ }
+
static InitializedReferenceFrameType initializedReference(DexType type) {
assert type.isReferenceType();
return type.isNullValueType() ? nullType() : initializedNonNullReference(type);
}
- static InitializedNonNullReferenceFrameType initializedNonNullReference(DexType type) {
+ static InitializedReferenceFrameType initializedReference(ReferenceTypeElement type) {
+ return type.isNullType() ? nullType() : initializedNonNullReference(type);
+ }
+
+ static InitializedNonNullReferenceFrameTypeWithoutInterfaces initializedNonNullReference(
+ DexType type) {
assert type.isReferenceType();
assert !type.isNullValueType();
- return new InitializedNonNullReferenceFrameType(type);
+ return new InitializedNonNullReferenceFrameTypeWithoutInterfaces(type);
+ }
+
+ static InitializedNonNullReferenceFrameTypeWithInterfaces initializedNonNullReference(
+ ReferenceTypeElement type) {
+ assert !type.isNullType();
+ return new InitializedNonNullReferenceFrameTypeWithInterfaces(type);
}
static NullFrameType nullType() {
@@ -80,7 +101,15 @@
static PrimitiveFrameType primitive(DexType type) {
assert type.isPrimitiveType();
- switch (type.getDescriptor().getFirstByteAsChar()) {
+ return internalPrimitive(type.getDescriptor().getFirstByteAsChar());
+ }
+
+ static PrimitiveFrameType primitive(PrimitiveTypeElement type) {
+ return internalPrimitive(type.getDescriptor().charAt(0));
+ }
+
+ static PrimitiveFrameType internalPrimitive(char descriptor) {
+ switch (descriptor) {
case 'Z':
return booleanType();
case 'B':
@@ -98,7 +127,7 @@
case 'S':
return shortType();
default:
- throw new Unreachable("Unexpected primitive type: " + type.getTypeName());
+ throw new Unreachable("Unexpected primitive type: " + descriptor);
}
}
@@ -145,7 +174,7 @@
DexType getInitializedType(DexItemFactory dexItemFactory);
- DexType getObjectType(DexType context);
+ DexType getObjectType(DexItemFactory dexItemFactory, DexType context);
Object getTypeOpcode(GraphLens graphLens, NamingLens namingLens);
@@ -179,6 +208,16 @@
InitializedNonNullReferenceFrameType asInitializedNonNullReferenceType();
+ boolean isInitializedNonNullReferenceTypeWithoutInterfaces();
+
+ InitializedNonNullReferenceFrameTypeWithoutInterfaces
+ asInitializedNonNullReferenceTypeWithoutInterfaces();
+
+ boolean isInitializedNonNullReferenceTypeWithInterfaces();
+
+ InitializedNonNullReferenceFrameTypeWithInterfaces
+ asInitializedNonNullReferenceTypeWithInterfaces();
+
boolean isInt();
boolean isLong();
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameType.java b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameType.java
index 3f6ebeb..d55633a 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameType.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameType.java
@@ -4,144 +4,65 @@
package com.android.tools.r8.cf.code.frame;
-import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
-import com.android.tools.r8.graph.DexTypeUtils;
-import com.android.tools.r8.graph.GraphLens;
-import com.android.tools.r8.naming.NamingLens;
-import org.objectweb.asm.Opcodes;
+import com.android.tools.r8.ir.analysis.type.ReferenceTypeElement;
-public class InitializedNonNullReferenceFrameType extends BaseFrameType
+public abstract class InitializedNonNullReferenceFrameType extends BaseFrameType
implements InitializedReferenceFrameType {
- private final DexType type;
-
- InitializedNonNullReferenceFrameType(DexType type) {
- assert type != null;
- assert type.isReferenceType();
- assert !type.isNullValueType();
- this.type = type;
- }
-
@Override
- public boolean isPrecise() {
+ public final boolean isInitialized() {
return true;
}
@Override
- public PreciseFrameType asPrecise() {
+ public final boolean isInitializedReferenceType() {
+ return true;
+ }
+
+ @Override
+ public final InitializedNonNullReferenceFrameType asInitializedReferenceType() {
return this;
}
@Override
- public boolean isInitializedReferenceType() {
+ public final boolean isInitializedNonNullReferenceType() {
return true;
}
@Override
- public InitializedNonNullReferenceFrameType asInitializedReferenceType() {
+ public final InitializedNonNullReferenceFrameType asInitializedNonNullReferenceType() {
return this;
}
@Override
- public boolean isInitializedNonNullReferenceType() {
+ public final boolean isObject() {
return true;
}
@Override
- public InitializedNonNullReferenceFrameType asInitializedNonNullReferenceType() {
+ public final boolean isPrecise() {
+ return true;
+ }
+
+ @Override
+ public final PreciseFrameType asPrecise() {
return this;
}
@Override
- public SingleFrameType join(
- AppView<? extends AppInfoWithClassHierarchy> appView, SingleFrameType frameType) {
- if (equals(frameType) || frameType.isNullType()) {
- return this;
- }
- if (frameType.isOneWord() || frameType.isPrimitive() || frameType.isUninitialized()) {
- return FrameType.oneWord();
- }
- DexType otherType = frameType.asInitializedNonNullReferenceType().getInitializedType();
- DexType joinType =
- DexTypeUtils.toDexType(
- appView, type.toTypeElement(appView).join(otherType.toTypeElement(appView), appView));
- return FrameType.initializedNonNullReference(joinType);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null || getClass() != obj.getClass()) {
- return false;
- }
- InitializedNonNullReferenceFrameType initializedType =
- (InitializedNonNullReferenceFrameType) obj;
- return type == initializedType.type;
- }
-
- @Override
- public int hashCode() {
- return type.hashCode();
- }
-
- @Override
- public String toString() {
- return "Initialized(" + type.toString() + ")";
- }
-
- @Override
- public Object getTypeOpcode(GraphLens graphLens, NamingLens namingLens) {
- DexType rewrittenType = graphLens.lookupType(type);
- assert rewrittenType != DexItemFactory.nullValueType;
- switch (rewrittenType.toShorty()) {
- case 'L':
- return namingLens.lookupInternalName(rewrittenType);
- case 'I':
- return Opcodes.INTEGER;
- case 'F':
- return Opcodes.FLOAT;
- case 'J':
- return Opcodes.LONG;
- case 'D':
- return Opcodes.DOUBLE;
- default:
- throw new Unreachable("Unexpected value type: " + rewrittenType);
- }
- }
-
- @Override
- public SingleFrameType asSingle() {
+ public final SingleFrameType asSingle() {
return this;
}
- @Override
- public boolean isInitialized() {
- return true;
- }
+ public abstract ReferenceTypeElement getInitializedTypeWithInterfaces(
+ AppView<? extends AppInfoWithClassHierarchy> appView);
@Override
- public DexType getInitializedType() {
- return type;
- }
-
- @Override
- public DexType getInitializedType(DexItemFactory dexItemFactory) {
- return getInitializedType();
- }
-
- @Override
- public boolean isObject() {
- return true;
- }
-
- @Override
- public DexType getObjectType(DexType context) {
- return type;
+ public final DexType getObjectType(DexItemFactory dexItemFactory, DexType context) {
+ return getInitializedType(dexItemFactory);
}
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithInterfaces.java b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithInterfaces.java
new file mode 100644
index 0000000..d1187c0
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithInterfaces.java
@@ -0,0 +1,105 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.cf.code.frame;
+
+import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.GraphLens;
+import com.android.tools.r8.ir.analysis.type.ReferenceTypeElement;
+import com.android.tools.r8.naming.NamingLens;
+
+public class InitializedNonNullReferenceFrameTypeWithInterfaces
+ extends InitializedNonNullReferenceFrameType {
+
+ private final ReferenceTypeElement type;
+ private DexType initializedTypeCache;
+
+ InitializedNonNullReferenceFrameTypeWithInterfaces(ReferenceTypeElement type) {
+ assert type != null;
+ assert !type.isNullType();
+ this.type = type;
+ }
+
+ @Override
+ public boolean isInitializedNonNullReferenceTypeWithInterfaces() {
+ return true;
+ }
+
+ @Override
+ public InitializedNonNullReferenceFrameTypeWithInterfaces
+ asInitializedNonNullReferenceTypeWithInterfaces() {
+ return this;
+ }
+
+ @Override
+ public DexType getInitializedType(DexItemFactory dexItemFactory) {
+ if (initializedTypeCache == null) {
+ initializedTypeCache = type.toDexType(dexItemFactory);
+ }
+ return initializedTypeCache;
+ }
+
+ @Override
+ public ReferenceTypeElement getInitializedTypeWithInterfaces(
+ AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return getInitializedTypeWithInterfaces();
+ }
+
+ public ReferenceTypeElement getInitializedTypeWithInterfaces() {
+ return type;
+ }
+
+ @Override
+ public Object getTypeOpcode(GraphLens graphLens, NamingLens namingLens) {
+ throw new Unreachable(
+ "Unexpected InitializedNonNullReferenceFrameTypeWithInterfaces in writer");
+ }
+
+ @Override
+ public SingleFrameType join(
+ AppView<? extends AppInfoWithClassHierarchy> appView, SingleFrameType frameType) {
+ if (equals(frameType) || frameType.isNullType()) {
+ return this;
+ }
+ if (frameType.isOneWord() || frameType.isPrimitive() || frameType.isUninitialized()) {
+ return FrameType.oneWord();
+ }
+ assert frameType.isInitializedNonNullReferenceType();
+ ReferenceTypeElement joinType =
+ getInitializedTypeWithInterfaces(appView)
+ .join(
+ frameType
+ .asInitializedNonNullReferenceType()
+ .getInitializedTypeWithInterfaces(appView),
+ appView);
+ return FrameType.initializedNonNullReference(joinType);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null || getClass() != obj.getClass()) {
+ return false;
+ }
+ InitializedNonNullReferenceFrameTypeWithInterfaces initializedType =
+ (InitializedNonNullReferenceFrameTypeWithInterfaces) obj;
+ return type.equals(initializedType.type);
+ }
+
+ @Override
+ public int hashCode() {
+ return type.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return "Initialized(" + type.toString() + ")";
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithoutInterfaces.java b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithoutInterfaces.java
new file mode 100644
index 0000000..88beb14
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithoutInterfaces.java
@@ -0,0 +1,117 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.cf.code.frame;
+
+import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
+import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.graph.GraphLens;
+import com.android.tools.r8.ir.analysis.type.ReferenceTypeElement;
+import com.android.tools.r8.naming.NamingLens;
+import org.objectweb.asm.Opcodes;
+
+public class InitializedNonNullReferenceFrameTypeWithoutInterfaces
+ extends InitializedNonNullReferenceFrameType {
+
+ private final DexType type;
+
+ InitializedNonNullReferenceFrameTypeWithoutInterfaces(DexType type) {
+ assert type != null;
+ assert type.isReferenceType();
+ assert !type.isNullValueType();
+ this.type = type;
+ }
+
+ @Override
+ public boolean isInitializedNonNullReferenceTypeWithoutInterfaces() {
+ return true;
+ }
+
+ @Override
+ public InitializedNonNullReferenceFrameTypeWithoutInterfaces
+ asInitializedNonNullReferenceTypeWithoutInterfaces() {
+ return this;
+ }
+
+ @Override
+ public final DexType getInitializedType(DexItemFactory dexItemFactory) {
+ return getInitializedType();
+ }
+
+ public DexType getInitializedType() {
+ return type;
+ }
+
+ @Override
+ public ReferenceTypeElement getInitializedTypeWithInterfaces(
+ AppView<? extends AppInfoWithClassHierarchy> appView) {
+ return type.toTypeElement(appView).asReferenceType();
+ }
+
+ @Override
+ public Object getTypeOpcode(GraphLens graphLens, NamingLens namingLens) {
+ DexType rewrittenType = graphLens.lookupType(type);
+ assert rewrittenType != DexItemFactory.nullValueType;
+ switch (rewrittenType.toShorty()) {
+ case 'L':
+ return namingLens.lookupInternalName(rewrittenType);
+ case 'I':
+ return Opcodes.INTEGER;
+ case 'F':
+ return Opcodes.FLOAT;
+ case 'J':
+ return Opcodes.LONG;
+ case 'D':
+ return Opcodes.DOUBLE;
+ default:
+ throw new Unreachable("Unexpected value type: " + rewrittenType);
+ }
+ }
+
+ @Override
+ public SingleFrameType join(
+ AppView<? extends AppInfoWithClassHierarchy> appView, SingleFrameType frameType) {
+ if (equals(frameType) || frameType.isNullType()) {
+ return this;
+ }
+ if (frameType.isOneWord() || frameType.isPrimitive() || frameType.isUninitialized()) {
+ return FrameType.oneWord();
+ }
+ assert frameType.isInitializedNonNullReferenceType();
+ ReferenceTypeElement joinType =
+ getInitializedTypeWithInterfaces(appView)
+ .join(
+ frameType
+ .asInitializedNonNullReferenceType()
+ .getInitializedTypeWithInterfaces(appView),
+ appView);
+ return FrameType.initializedNonNullReference(joinType);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null || getClass() != obj.getClass()) {
+ return false;
+ }
+ InitializedNonNullReferenceFrameTypeWithoutInterfaces initializedType =
+ (InitializedNonNullReferenceFrameTypeWithoutInterfaces) obj;
+ return type == initializedType.type;
+ }
+
+ @Override
+ public int hashCode() {
+ return type.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return "Initialized(" + type.toString() + ")";
+ }
+}
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/InitializedReferenceFrameType.java b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedReferenceFrameType.java
index 1fd0f73..4094f4e 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/InitializedReferenceFrameType.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedReferenceFrameType.java
@@ -4,9 +4,4 @@
package com.android.tools.r8.cf.code.frame;
-import com.android.tools.r8.graph.DexType;
-
-public interface InitializedReferenceFrameType extends InitializedFrameType, SingleFrameType {
-
- DexType getInitializedType();
-}
+public interface InitializedReferenceFrameType extends InitializedFrameType, SingleFrameType {}
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/NullFrameType.java b/src/main/java/com/android/tools/r8/cf/code/frame/NullFrameType.java
index ee4659a..a5e26c8 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/NullFrameType.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/NullFrameType.java
@@ -68,13 +68,12 @@
return getInitializedType();
}
- @Override
public DexType getInitializedType() {
return DexItemFactory.nullValueType;
}
@Override
- public DexType getObjectType(DexType context) {
+ public DexType getObjectType(DexItemFactory dexItemFactory, DexType context) {
return getInitializedType();
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/PreciseFrameType.java b/src/main/java/com/android/tools/r8/cf/code/frame/PreciseFrameType.java
index 250ce67..11f9a33 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/PreciseFrameType.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/PreciseFrameType.java
@@ -11,8 +11,9 @@
@Override
default PreciseFrameType map(Function<DexType, DexType> fn) {
- if (isInitializedNonNullReferenceType()) {
- DexType type = asInitializedNonNullReferenceType().getInitializedType();
+ assert !isInitializedNonNullReferenceTypeWithInterfaces();
+ if (isInitializedNonNullReferenceTypeWithoutInterfaces()) {
+ DexType type = asInitializedNonNullReferenceTypeWithoutInterfaces().getInitializedType();
DexType newType = fn.apply(type);
if (type != newType) {
return FrameType.initializedNonNullReference(newType);
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedNew.java b/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedNew.java
index a35e4b4..a57c5e6 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedNew.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedNew.java
@@ -7,6 +7,7 @@
import com.android.tools.r8.cf.code.CfLabel;
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.naming.NamingLens;
@@ -24,7 +25,7 @@
}
@Override
- public DexType getObjectType(DexType context) {
+ public DexType getObjectType(DexItemFactory dexItemFactory, DexType context) {
return type;
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedThis.java b/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedThis.java
index 5b6730d..21036e4 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedThis.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedThis.java
@@ -6,6 +6,7 @@
import com.android.tools.r8.graph.AppInfoWithClassHierarchy;
import com.android.tools.r8.graph.AppView;
+import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.GraphLens;
import com.android.tools.r8.naming.NamingLens;
@@ -18,7 +19,7 @@
private UninitializedThis() {}
@Override
- public DexType getObjectType(DexType context) {
+ public DexType getObjectType(DexItemFactory dexItemFactory, DexType context) {
return context;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeElement.java
index 549bbf2..6b77171 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeElement.java
@@ -33,6 +33,7 @@
this.variants = variants;
}
+ @Override
public DexType toDexType(DexItemFactory factory) {
TypeElement baseTypeLattice = getBaseType();
DexType baseType;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/BooleanTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/BooleanTypeElement.java
index e00ecf9..8c14b52 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/BooleanTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/BooleanTypeElement.java
@@ -12,6 +12,11 @@
}
@Override
+ public String getDescriptor() {
+ return "Z";
+ }
+
+ @Override
public String getTypeName() {
return "boolean";
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/ByteTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/ByteTypeElement.java
index 849f508..b4b1179 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/ByteTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/ByteTypeElement.java
@@ -12,6 +12,11 @@
}
@Override
+ public String getDescriptor() {
+ return "B";
+ }
+
+ @Override
public String getTypeName() {
return "byte";
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/CharTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/CharTypeElement.java
index 5a47cda..e7984bd 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/CharTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/CharTypeElement.java
@@ -12,6 +12,11 @@
}
@Override
+ public String getDescriptor() {
+ return "C";
+ }
+
+ @Override
public String getTypeName() {
return "char";
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/ClassTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/ClassTypeElement.java
index 3298b8e..6101905 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/ClassTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/ClassTypeElement.java
@@ -153,6 +153,7 @@
return getOrCreateVariant(nullability().meet(nullability));
}
+ @Override
public DexType toDexType(DexItemFactory dexItemFactory) {
if (type == dexItemFactory.objectType) {
DexType singleKnownInterface = getInterfaces().getSingleKnownInterface();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/DoubleTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/DoubleTypeElement.java
index 85a501c..430897a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/DoubleTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/DoubleTypeElement.java
@@ -12,6 +12,11 @@
}
@Override
+ public String getDescriptor() {
+ return "D";
+ }
+
+ @Override
public String getTypeName() {
return "double";
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/FloatTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/FloatTypeElement.java
index 9efadf8..d4463cc 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/FloatTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/FloatTypeElement.java
@@ -11,6 +11,11 @@
}
@Override
+ public String getDescriptor() {
+ return "F";
+ }
+
+ @Override
public String getTypeName() {
return "float";
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/IntTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/IntTypeElement.java
index 881cb19..3ecd81b 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/IntTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/IntTypeElement.java
@@ -11,6 +11,11 @@
}
@Override
+ public String getDescriptor() {
+ return "I";
+ }
+
+ @Override
public String getTypeName() {
return "int";
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/LongTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/LongTypeElement.java
index 7f71468..b90dbb4 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/LongTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/LongTypeElement.java
@@ -12,6 +12,11 @@
}
@Override
+ public String getDescriptor() {
+ return "J";
+ }
+
+ @Override
public String getTypeName() {
return "long";
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeElement.java
index 9797274..1e5260b 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeElement.java
@@ -12,6 +12,8 @@
/** A {@link TypeElement} that abstracts primitive types. */
public abstract class PrimitiveTypeElement extends TypeElement {
+ public abstract String getDescriptor();
+
public abstract String getTypeName();
@Override
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/ReferenceTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/ReferenceTypeElement.java
index 4aa2116..1f06630 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/ReferenceTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/ReferenceTypeElement.java
@@ -6,6 +6,7 @@
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexItemFactory;
+import com.android.tools.r8.graph.DexType;
public abstract class ReferenceTypeElement extends TypeElement {
@@ -39,6 +40,11 @@
}
@Override
+ public DexType toDexType(DexItemFactory dexItemFactory) {
+ return DexItemFactory.nullValueType;
+ }
+
+ @Override
public String toString() {
return nullability.toString() + " " + DexItemFactory.nullValueType.toString();
}
@@ -116,6 +122,8 @@
return this;
}
+ public abstract DexType toDexType(DexItemFactory dexItemFactory);
+
@Override
public boolean equals(Object o) {
throw new Unreachable("Should be implemented on each sub type");
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/ShortTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/ShortTypeElement.java
index fd7d65a..2c73f91 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/ShortTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/ShortTypeElement.java
@@ -12,6 +12,11 @@
}
@Override
+ public String getDescriptor() {
+ return "S";
+ }
+
+ @Override
public String getTypeName() {
return "short";
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/SinglePrimitiveTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/SinglePrimitiveTypeElement.java
index 5d3d16b..8814afc 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/SinglePrimitiveTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/SinglePrimitiveTypeElement.java
@@ -19,6 +19,11 @@
}
@Override
+ public String getDescriptor() {
+ throw new Unreachable("Unexpected attempt to get descriptor of " + this);
+ }
+
+ @Override
public String getTypeName() {
throw new Unreachable("Unexpected attempt to get type name of " + this);
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/WidePrimitiveTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/WidePrimitiveTypeElement.java
index f13800d..2180be1 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/WidePrimitiveTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/WidePrimitiveTypeElement.java
@@ -19,6 +19,11 @@
}
@Override
+ public String getDescriptor() {
+ throw new Unreachable("Unexpected attempt to get descriptor of " + this);
+ }
+
+ @Override
public String getTypeName() {
throw new Unreachable("Unexpected attempt to get type name of " + this);
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
index 4f28ee9..8a18a09 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
@@ -638,7 +638,12 @@
private DexType convertUninitialized(FrameType type) {
if (type.isInitializedReferenceType()) {
- return type.asInitializedReferenceType().getInitializedType();
+ if (type.isNullType()) {
+ return type.asNullType().getInitializedType();
+ } else {
+ assert type.isInitializedNonNullReferenceTypeWithoutInterfaces();
+ return type.asInitializedNonNullReferenceTypeWithoutInterfaces().getInitializedType();
+ }
}
if (type.isPrimitive()) {
if (type.isSinglePrimitive()) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/backports/BackportedMethods.java b/src/main/java/com/android/tools/r8/ir/desugar/backports/BackportedMethods.java
index 73aeb93..99b113d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/backports/BackportedMethods.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/backports/BackportedMethods.java
@@ -135,12 +135,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType(
"Ljava/util/concurrent/atomic/AtomicReferenceArray;")),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.INT, 1),
@@ -167,12 +167,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType(
"Ljava/util/concurrent/atomic/AtomicReferenceArray;")),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.INT, 1),
@@ -212,12 +212,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType(
"Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;")),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.OBJECT, 1),
@@ -244,12 +244,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType(
"Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;")),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.OBJECT, 1),
@@ -289,11 +289,11 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType(
"Ljava/util/concurrent/atomic/AtomicReference;")),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.OBJECT, 1),
@@ -317,11 +317,11 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType(
"Ljava/util/concurrent/atomic/AtomicReference;")),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInvoke(
@@ -540,8 +540,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType()
})),
@@ -566,8 +566,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -614,8 +614,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -628,8 +628,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType()
})),
@@ -744,8 +744,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 1),
new CfInvoke(
@@ -792,12 +792,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(
Arrays.asList(
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/lang/Exception;"))))),
new CfStore(ValueType.OBJECT, 2),
label6,
@@ -861,11 +861,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(
- Arrays.asList(FrameType.initialized(options.itemFactory.throwableType)))),
+ Arrays.asList(
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType)))),
new CfStore(ValueType.OBJECT, 2),
label8,
new CfNew(options.itemFactory.createType("Ljava/lang/AssertionError;")),
@@ -928,12 +929,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(
Arrays.asList(
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType(
"Ljava/lang/reflect/InvocationTargetException;"))))),
new CfStore(ValueType.OBJECT, 2),
@@ -952,8 +953,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfGoto(label20),
label12,
@@ -961,11 +962,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(
- Arrays.asList(FrameType.initialized(options.itemFactory.throwableType)))),
+ Arrays.asList(
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType)))),
new CfStore(ValueType.OBJECT, 2),
label13,
new CfLoad(ValueType.OBJECT, 0),
@@ -1017,13 +1019,13 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.throwableType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType)
}),
new ArrayDeque<>(
Arrays.asList(
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/lang/Exception;"))))),
new CfStore(ValueType.OBJECT, 3),
label18,
@@ -1031,9 +1033,9 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.throwableType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfThrow(),
@@ -1042,9 +1044,9 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.throwableType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType)
})),
new CfLoad(ValueType.OBJECT, 2),
new CfThrow(),
@@ -1053,8 +1055,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfReturnVoid(),
label21),
@@ -1148,10 +1150,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/ArrayList;")),
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
FrameType.intType(),
FrameType.intType()
})),
@@ -1190,8 +1194,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/ArrayList;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/ArrayList;"))
})),
new CfLoad(ValueType.OBJECT, 1),
new CfInvoke(
@@ -1304,10 +1310,11 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/util/Map$Entry;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashMap;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashMap;")),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/util/Map$Entry;")),
FrameType.intType(),
FrameType.intType()
@@ -1421,10 +1428,11 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/util/Map$Entry;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashMap;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashMap;")),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/util/Map$Entry;")),
FrameType.intType(),
FrameType.intType()
@@ -1436,9 +1444,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/util/Map$Entry;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashMap;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashMap;"))
})),
new CfLoad(ValueType.OBJECT, 1),
new CfInvoke(
@@ -1497,9 +1506,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashSet;")),
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashSet;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
FrameType.intType(),
FrameType.intType()
})),
@@ -1581,9 +1593,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashSet;")),
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashSet;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
FrameType.intType(),
FrameType.intType()
})),
@@ -1594,8 +1609,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashSet;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashSet;"))
})),
new CfLoad(ValueType.OBJECT, 1),
new CfInvoke(
@@ -1662,11 +1679,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/Collection;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/ArrayList;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Iterator;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Iterator;"))
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -1713,9 +1731,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/Collection;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/ArrayList;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/ArrayList;"))
})),
new CfLoad(ValueType.OBJECT, 1),
new CfInvoke(
@@ -1793,9 +1812,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Map;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashMap;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Iterator;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Map;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashMap;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Iterator;"))
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -1871,8 +1893,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Map;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashMap;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Map;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashMap;"))
})),
new CfLoad(ValueType.OBJECT, 1),
new CfInvoke(
@@ -1939,10 +1963,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/Collection;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashSet;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Iterator;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashSet;")),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Iterator;"))
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -1989,9 +2015,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/Collection;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/HashSet;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/HashSet;"))
})),
new CfLoad(ValueType.OBJECT, 1),
new CfInvoke(
@@ -2455,7 +2482,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType()
@@ -2625,7 +2652,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType), FrameType.intType()
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
+ FrameType.intType()
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.INT, 1),
@@ -2726,7 +2754,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.longType(),
FrameType.longHighType()
@@ -3194,7 +3222,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType()
@@ -3318,7 +3346,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3335,7 +3363,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3375,7 +3403,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3420,7 +3448,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5, 6},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3434,7 +3462,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5, 6},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3455,7 +3483,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3522,7 +3550,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3569,7 +3597,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3615,7 +3643,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -3644,7 +3672,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType(),
@@ -4033,7 +4061,7 @@
FrameType.longType(),
FrameType.longHighType(),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.charArrayType),
+ FrameType.initializedNonNullReference(options.itemFactory.charArrayType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType()
@@ -4077,7 +4105,7 @@
FrameType.longType(),
FrameType.longHighType(),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.charArrayType),
+ FrameType.initializedNonNullReference(options.itemFactory.charArrayType),
FrameType.intType()
})),
new CfLoad(ValueType.INT, 2),
@@ -4104,7 +4132,7 @@
FrameType.longType(),
FrameType.longHighType(),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.charArrayType),
+ FrameType.initializedNonNullReference(options.itemFactory.charArrayType),
FrameType.intType()
})),
new CfLoad(ValueType.LONG, 0),
@@ -4129,7 +4157,7 @@
FrameType.longType(),
FrameType.longHighType(),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.charArrayType),
+ FrameType.initializedNonNullReference(options.itemFactory.charArrayType),
FrameType.intType(),
FrameType.longType(),
FrameType.longHighType()
@@ -4170,7 +4198,7 @@
FrameType.longType(),
FrameType.longHighType(),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.charArrayType),
+ FrameType.initializedNonNullReference(options.itemFactory.charArrayType),
FrameType.intType(),
FrameType.longType(),
FrameType.longHighType(),
@@ -4217,7 +4245,7 @@
FrameType.longType(),
FrameType.longHighType(),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.charArrayType),
+ FrameType.initializedNonNullReference(options.itemFactory.charArrayType),
FrameType.intType()
})),
new CfNew(options.itemFactory.stringType),
@@ -6154,9 +6182,9 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/Comparator;"))
})),
new CfLoad(ValueType.OBJECT, 2),
@@ -6177,9 +6205,9 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/Comparator;"))
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
@@ -6246,8 +6274,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfIf(If.Type.NE, ValueType.OBJECT, label2),
@@ -6258,8 +6286,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.booleanArrayType),
@@ -6290,8 +6318,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label5,
@@ -6299,8 +6327,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6309,8 +6337,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.byteArrayType),
@@ -6341,8 +6369,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label9,
@@ -6350,8 +6378,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6360,8 +6388,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.charArrayType),
@@ -6392,8 +6420,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label13,
@@ -6401,8 +6429,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6411,8 +6439,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.doubleArrayType),
@@ -6443,8 +6471,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label17,
@@ -6452,8 +6480,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6462,8 +6490,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.floatArrayType),
@@ -6494,8 +6522,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label21,
@@ -6503,8 +6531,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6513,8 +6541,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.intArrayType),
@@ -6545,8 +6573,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label25,
@@ -6554,8 +6582,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6564,8 +6592,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.longArrayType),
@@ -6596,8 +6624,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label29,
@@ -6605,8 +6633,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6615,8 +6643,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.shortArrayType),
@@ -6647,8 +6675,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label33,
@@ -6656,8 +6684,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6666,8 +6694,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInstanceOf(options.itemFactory.createType("[Ljava/lang/Object;")),
@@ -6698,8 +6726,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label37,
@@ -6707,8 +6735,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6717,8 +6745,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.OBJECT, 1),
@@ -6769,8 +6797,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(1, ValueType.INT),
new CfGoto(label3),
@@ -6779,8 +6807,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfConstNumber(0, ValueType.INT),
label3,
@@ -6788,8 +6816,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -6817,7 +6845,9 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)})),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ })),
new CfLoad(ValueType.OBJECT, 0),
new CfInvoke(
182,
@@ -6830,7 +6860,9 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)}),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ }),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
label3),
@@ -6857,13 +6889,17 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)})),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ })),
new CfConstNumber(0, ValueType.INT),
label2,
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)}),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ }),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
label3),
@@ -6890,13 +6926,17 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)})),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ })),
new CfConstNumber(0, ValueType.INT),
label2,
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)}),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ }),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
label3),
@@ -6924,8 +6964,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 1),
new CfConstString(options.itemFactory.createString("defaultObj")),
@@ -6966,8 +7006,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/Supplier;"))
})),
new CfLoad(ValueType.OBJECT, 1),
@@ -7042,8 +7082,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.stringType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfReturn(ValueType.OBJECT),
@@ -7087,8 +7127,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/Supplier;"))
})),
new CfConstNull(),
@@ -7097,12 +7137,13 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/Supplier;"))
}),
new ArrayDeque<>(
- Arrays.asList(FrameType.initialized(options.itemFactory.stringType)))),
+ Arrays.asList(
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)))),
new CfStore(ValueType.OBJECT, 2),
label4,
new CfNew(options.itemFactory.createType("Ljava/lang/NullPointerException;")),
@@ -7122,8 +7163,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/Supplier;"))
})),
new CfLoad(ValueType.OBJECT, 0),
@@ -7180,8 +7221,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.stringType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInvoke(
@@ -7196,11 +7237,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.stringType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)
}),
new ArrayDeque<>(
- Arrays.asList(FrameType.initialized(options.itemFactory.stringType)))),
+ Arrays.asList(
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)))),
new CfReturn(ValueType.OBJECT),
label3),
ImmutableList.of(),
@@ -7252,10 +7294,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Optional;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Optional;")),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/Consumer;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Runnable;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Runnable;"))
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -7270,10 +7314,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Optional;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Optional;")),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/Consumer;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Runnable;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Runnable;"))
})),
new CfReturnVoid(),
label4),
@@ -7327,11 +7373,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalDouble;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/DoubleConsumer;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Runnable;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Runnable;"))
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -7346,11 +7393,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalDouble;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/DoubleConsumer;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Runnable;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Runnable;"))
})),
new CfReturnVoid(),
label4),
@@ -7404,11 +7452,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalInt;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/IntConsumer;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Runnable;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Runnable;"))
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -7423,11 +7472,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalInt;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/IntConsumer;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Runnable;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Runnable;"))
})),
new CfReturnVoid(),
label4),
@@ -7481,11 +7531,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalLong;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/LongConsumer;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Runnable;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Runnable;"))
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -7500,11 +7551,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalLong;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/LongConsumer;")),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Runnable;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Runnable;"))
})),
new CfReturnVoid(),
label4),
@@ -7539,7 +7591,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Optional;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Optional;"))
})),
new CfConstNumber(0, ValueType.INT),
label2,
@@ -7547,7 +7600,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Optional;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Optional;"))
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
new CfReturn(ValueType.INT),
@@ -7583,7 +7637,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalDouble;"))
})),
new CfConstNumber(0, ValueType.INT),
@@ -7592,7 +7646,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalDouble;"))
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
@@ -7629,7 +7683,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalInt;"))
})),
new CfConstNumber(0, ValueType.INT),
@@ -7638,7 +7692,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalInt;"))
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
@@ -7675,7 +7729,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalLong;"))
})),
new CfConstNumber(0, ValueType.INT),
@@ -7684,7 +7738,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalLong;"))
}),
new ArrayDeque<>(Arrays.asList(FrameType.intType()))),
@@ -7735,8 +7789,9 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Optional;")),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Optional;")),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/function/Supplier;"))
})),
new CfLoad(ValueType.OBJECT, 1),
@@ -7810,7 +7865,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Optional;"))
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Optional;"))
})),
new CfInvoke(
184,
@@ -7870,7 +7926,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalDouble;"))
})),
new CfInvoke(
@@ -7931,7 +7987,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalInt;"))
})),
new CfInvoke(
@@ -7992,7 +8048,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0},
new FrameType[] {
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/OptionalLong;"))
})),
new CfInvoke(
@@ -8136,7 +8192,9 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)})),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ })),
new CfLoad(ValueType.OBJECT, 0),
new CfInvoke(
184,
@@ -8151,10 +8209,12 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)}),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ }),
new ArrayDeque<>(
Arrays.asList(
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/util/stream/Stream;"))))),
new CfReturn(ValueType.OBJECT),
label3),
@@ -8196,7 +8256,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -8234,7 +8294,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType()
@@ -8257,7 +8317,9 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.stringType)})),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)
+ })),
new CfConstNumber(1, ValueType.INT),
new CfReturn(ValueType.INT),
label9),
@@ -8302,8 +8364,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/lang/CharSequence;"))
})),
new CfNew(options.itemFactory.stringBuilderType),
@@ -8343,10 +8405,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/lang/CharSequence;")),
- FrameType.initialized(options.itemFactory.stringBuilderType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType),
FrameType.intType()
})),
new CfLoad(ValueType.INT, 3),
@@ -8389,10 +8451,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/lang/CharSequence;")),
- FrameType.initialized(options.itemFactory.stringBuilderType)
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType)
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -8444,8 +8506,9 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Iterable;"))
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Iterable;"))
})),
new CfNew(options.itemFactory.stringBuilderType),
new CfStackInstruction(CfStackInstruction.Opcode.Dup),
@@ -8504,10 +8567,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Iterable;")),
- FrameType.initialized(options.itemFactory.stringBuilderType),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Iterator;"))
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Iterable;")),
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Iterator;"))
})),
new CfLoad(ValueType.OBJECT, 3),
new CfInvoke(
@@ -8558,10 +8623,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.charSequenceType),
- FrameType.initialized(options.itemFactory.createType("Ljava/lang/Iterable;")),
- FrameType.initialized(options.itemFactory.stringBuilderType),
- FrameType.initialized(options.itemFactory.createType("Ljava/util/Iterator;"))
+ FrameType.initializedNonNullReference(options.itemFactory.charSequenceType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/lang/Iterable;")),
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Ljava/util/Iterator;"))
})),
new CfLoad(ValueType.OBJECT, 2),
new CfInvoke(
@@ -8654,7 +8721,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType), FrameType.intType()
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
+ FrameType.intType()
})),
new CfLoad(ValueType.OBJECT, 0),
new CfInvoke(
@@ -8675,7 +8743,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -8686,7 +8754,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -8701,7 +8769,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -8805,7 +8873,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -8831,10 +8899,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.stringBuilderType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType),
FrameType.intType()
})),
new CfLoad(ValueType.INT, 4),
@@ -8860,10 +8928,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType(),
- FrameType.initialized(options.itemFactory.stringBuilderType)
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType)
})),
new CfLoad(ValueType.OBJECT, 3),
new CfInvoke(
@@ -8919,7 +8987,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -8956,7 +9024,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType()
@@ -8980,7 +9048,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -9019,7 +9087,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType()
@@ -9043,7 +9111,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -9100,7 +9168,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -9137,7 +9205,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType(),
FrameType.intType()
@@ -9161,7 +9229,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -9214,7 +9282,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType), FrameType.intType()
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
+ FrameType.intType()
})),
new CfLoad(ValueType.INT, 1),
new CfIf(If.Type.LE, ValueType.INT, label7),
@@ -9250,7 +9319,7 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
FrameType.intType(),
FrameType.intType()
})),
@@ -9273,7 +9342,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.stringType), FrameType.intType()
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
+ FrameType.intType()
})),
new CfLoad(ValueType.OBJECT, 0),
new CfConstNumber(0, ValueType.INT),
@@ -9353,12 +9423,12 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.throwableType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType)
}),
new ArrayDeque<>(
Arrays.asList(
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/lang/Exception;"))))),
new CfStore(ValueType.OBJECT, 2),
label4,
@@ -9366,8 +9436,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.initialized(options.itemFactory.throwableType),
- FrameType.initialized(options.itemFactory.throwableType)
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType),
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType)
})),
new CfReturnVoid(),
label5),
@@ -9430,10 +9500,12 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.throwableType)}),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.throwableType)
+ }),
new ArrayDeque<>(
Arrays.asList(
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("Ljava/lang/Exception;"))))),
new CfStore(ValueType.OBJECT, 1),
label4,
@@ -9467,12 +9539,13 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Lsun/misc/Unsafe;")),
- FrameType.initialized(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Lsun/misc/Unsafe;")),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
FrameType.longType(),
FrameType.longHighType(),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.OBJECT, 1),
@@ -9500,12 +9573,13 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("Lsun/misc/Unsafe;")),
- FrameType.initialized(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("Lsun/misc/Unsafe;")),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
FrameType.longType(),
FrameType.longHighType(),
- FrameType.initialized(options.itemFactory.objectType),
- FrameType.initialized(options.itemFactory.objectType)
+ FrameType.initializedNonNullReference(options.itemFactory.objectType),
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
})),
new CfLoad(ValueType.OBJECT, 0),
new CfLoad(ValueType.OBJECT, 1),
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordCfMethods.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordCfMethods.java
index e46b8d6..d3955b6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordCfMethods.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordCfMethods.java
@@ -122,9 +122,10 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.classType),
- FrameType.initialized(options.itemFactory.stringType)
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(options.itemFactory.classType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)
})),
new CfLoad(ValueType.OBJECT, 2),
new CfConstString(options.itemFactory.createString(";")),
@@ -142,13 +143,14 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.classType),
- FrameType.initialized(options.itemFactory.stringType)
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(options.itemFactory.classType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)
}),
new ArrayDeque<>(
Arrays.asList(
- FrameType.initialized(
+ FrameType.initializedNonNullReference(
options.itemFactory.createType("[Ljava/lang/String;"))))),
new CfStore(ValueType.OBJECT, 3),
label3,
@@ -198,11 +200,13 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.classType),
- FrameType.initialized(options.itemFactory.stringType),
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/String;")),
- FrameType.initialized(options.itemFactory.stringBuilderType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(options.itemFactory.classType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/String;")),
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType),
FrameType.intType()
})),
new CfLoad(ValueType.INT, 5),
@@ -267,11 +271,13 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4, 5},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.classType),
- FrameType.initialized(options.itemFactory.stringType),
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/String;")),
- FrameType.initialized(options.itemFactory.stringBuilderType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(options.itemFactory.classType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/String;")),
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType),
FrameType.intType()
})),
new CfIinc(5, 1),
@@ -281,11 +287,13 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1, 2, 3, 4},
new FrameType[] {
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/Object;")),
- FrameType.initialized(options.itemFactory.classType),
- FrameType.initialized(options.itemFactory.stringType),
- FrameType.initialized(options.itemFactory.createType("[Ljava/lang/String;")),
- FrameType.initialized(options.itemFactory.stringBuilderType)
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/Object;")),
+ FrameType.initializedNonNullReference(options.itemFactory.classType),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType),
+ FrameType.initializedNonNullReference(
+ options.itemFactory.createType("[Ljava/lang/String;")),
+ FrameType.initializedNonNullReference(options.itemFactory.stringBuilderType)
})),
new CfLoad(ValueType.OBJECT, 4),
new CfConstString(options.itemFactory.createString("]")),
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCfMethods.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCfMethods.java
index 527fb13..3a20e47 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCfMethods.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCfMethods.java
@@ -202,7 +202,7 @@
new int[] {0, 1, 2},
new FrameType[] {
FrameType.intType(),
- FrameType.initialized(options.itemFactory.intArrayType),
+ FrameType.initializedNonNullReference(options.itemFactory.intArrayType),
FrameType.intType()
})),
new CfLoad(ValueType.INT, 2),
@@ -224,7 +224,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.intType(), FrameType.initialized(options.itemFactory.intArrayType)
+ FrameType.intType(),
+ FrameType.initializedNonNullReference(options.itemFactory.intArrayType)
})),
new CfLoad(ValueType.OBJECT, 1),
new CfReturn(ValueType.OBJECT),
@@ -298,7 +299,8 @@
new Int2ObjectAVLTreeMap<>(
new int[] {0, 1},
new FrameType[] {
- FrameType.intType(), FrameType.initialized(options.itemFactory.stringType)
+ FrameType.intType(),
+ FrameType.initializedNonNullReference(options.itemFactory.stringType)
})),
new CfReturnVoid(),
label3),
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java b/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
index 162a1cc..0cb8e39 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/templates/CfUtilityMethodsForCodeOptimizations.java
@@ -66,7 +66,9 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)})),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ })),
new CfReturnVoid(),
label3),
ImmutableList.of(),
@@ -171,7 +173,9 @@
new CfFrame(
new Int2ObjectAVLTreeMap<>(
new int[] {0},
- new FrameType[] {FrameType.initialized(options.itemFactory.objectType)})),
+ new FrameType[] {
+ FrameType.initializedNonNullReference(options.itemFactory.objectType)
+ })),
new CfReturnVoid(),
label3),
ImmutableList.of(),
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/BottomCfFrameState.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/BottomCfFrameState.java
index 3684506..134b2d9 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/BottomCfFrameState.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/BottomCfFrameState.java
@@ -11,6 +11,7 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.ValueType;
import java.util.function.BiFunction;
@@ -97,6 +98,11 @@
}
@Override
+ public CfFrameState push(CfAnalysisConfig config, TypeElement type) {
+ return this;
+ }
+
+ @Override
public CfFrameState push(CfAnalysisConfig config, PreciseFrameType frameType) {
return this;
}
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfFrameState.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfFrameState.java
index b136b9b..437d01d 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfFrameState.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfFrameState.java
@@ -19,6 +19,7 @@
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.analysis.framework.intraprocedural.AbstractState;
import com.android.tools.r8.ir.analysis.type.PrimitiveTypeElement;
+import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.MemberType;
import com.android.tools.r8.ir.code.NumericType;
import com.android.tools.r8.ir.code.ValueType;
@@ -173,15 +174,18 @@
@SuppressWarnings("InconsistentOverloads")
public final CfFrameState popObject(
+ AppView<?> appView,
DexType expectedType,
CfAnalysisConfig config,
BiFunction<CfFrameState, PreciseFrameType, CfFrameState> fn) {
CfAssignability assignability = config.getAssignability();
+ DexItemFactory dexItemFactory = appView.dexItemFactory();
return pop(
(state, head) ->
head.isObject()
&& assignability.isAssignable(
- head.getObjectType(config.getCurrentContext().getHolderType()),
+ head.getObjectType(
+ dexItemFactory, config.getCurrentContext().getHolderType()),
expectedType)
? fn.apply(state, head)
: errorUnexpectedStack(head, expectedType));
@@ -224,6 +228,8 @@
public abstract CfFrameState push(CfAnalysisConfig config, DexType type);
+ public abstract CfFrameState push(CfAnalysisConfig config, TypeElement type);
+
public abstract CfFrameState push(CfAnalysisConfig config, PreciseFrameType frameType);
public final CfFrameState push(
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysis.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysis.java
index 9e4771a..688563d 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysis.java
@@ -32,6 +32,7 @@
import com.android.tools.r8.ir.analysis.framework.intraprocedural.cf.CfIntraproceduralDataflowAnalysis;
import com.android.tools.r8.ir.analysis.type.ClassTypeElement;
import com.android.tools.r8.ir.analysis.type.InterfaceCollection;
+import com.android.tools.r8.ir.analysis.type.ReferenceTypeElement;
import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.optimize.interfaces.collection.NonEmptyOpenClosedInterfacesCollection;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
@@ -173,10 +174,11 @@
FrameType array = stack.peekFirst();
FrameType value = stack.peekLast();
if (array.isInitializedNonNullReferenceType()) {
- DexType arrayType = array.asInitializedReferenceType().getInitializedType();
+ ReferenceTypeElement arrayType =
+ array.asInitializedNonNullReferenceType().getInitializedTypeWithInterfaces(appView);
if (arrayType.isArrayType()) {
processAssignment(
- value, arrayType.toArrayElementType(dexItemFactory), openInterfaceConsumer);
+ value, arrayType.asArrayType().getMemberType(), openInterfaceConsumer);
} else {
assert false;
}
@@ -235,16 +237,25 @@
FrameType fromType, DexType toType, Consumer<DexClass> openInterfaceConsumer) {
if (fromType.isInitializedNonNullReferenceType()) {
processAssignment(
- fromType.asInitializedNonNullReferenceType().getInitializedType(),
+ fromType.asInitializedNonNullReferenceType().getInitializedTypeWithInterfaces(appView),
toType,
openInterfaceConsumer);
}
}
private void processAssignment(
- DexType fromType, DexType toType, Consumer<DexClass> openInterfaceConsumer) {
- processAssignment(
- fromType.toTypeElement(appView), toType.toTypeElement(appView), openInterfaceConsumer);
+ FrameType fromType, TypeElement toType, Consumer<DexClass> openInterfaceConsumer) {
+ if (fromType.isInitializedNonNullReferenceType()) {
+ processAssignment(
+ fromType.asInitializedNonNullReferenceType().getInitializedTypeWithInterfaces(appView),
+ toType,
+ openInterfaceConsumer);
+ }
+ }
+
+ private void processAssignment(
+ ReferenceTypeElement fromType, DexType toType, Consumer<DexClass> openInterfaceConsumer) {
+ processAssignment(fromType, toType.toTypeElement(appView), openInterfaceConsumer);
}
private void processAssignment(
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ConcreteCfFrameState.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ConcreteCfFrameState.java
index f2a7432..0664659 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ConcreteCfFrameState.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ConcreteCfFrameState.java
@@ -22,6 +22,7 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.ValueType;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.FunctionUtils;
@@ -231,11 +232,23 @@
}
private static boolean isArrayTypeOrNull(FrameType frameType) {
- if (frameType.isInitializedNonNullReferenceType()
- && frameType.asInitializedNonNullReferenceType().getInitializedType().isArrayType()) {
- return true;
+ if (frameType.isInitializedReferenceType()) {
+ if (frameType.isNullType()) {
+ return true;
+ } else if (frameType.isInitializedNonNullReferenceTypeWithInterfaces()) {
+ return frameType
+ .asInitializedNonNullReferenceTypeWithInterfaces()
+ .getInitializedTypeWithInterfaces()
+ .isArrayType();
+ } else {
+ assert frameType.isInitializedNonNullReferenceTypeWithoutInterfaces();
+ return frameType
+ .asInitializedNonNullReferenceTypeWithoutInterfaces()
+ .getInitializedType()
+ .isArrayType();
+ }
}
- return frameType.isNullType();
+ return false;
}
@Override
@@ -273,6 +286,11 @@
}
@Override
+ public CfFrameState push(CfAnalysisConfig config, TypeElement type) {
+ return push(config, FrameType.initialized(type));
+ }
+
+ @Override
public CfFrameState push(CfAnalysisConfig config, PreciseFrameType frameType) {
int newStackHeight = stackHeight + frameType.getWidth();
if (newStackHeight > config.getMaxStack()) {
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ErroneousCfFrameState.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ErroneousCfFrameState.java
index 9acfefe..eb4d25f 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ErroneousCfFrameState.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ErroneousCfFrameState.java
@@ -11,7 +11,13 @@
import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
+import com.android.tools.r8.ir.analysis.type.ArrayTypeElement;
+import com.android.tools.r8.ir.analysis.type.ClassTypeElement;
+import com.android.tools.r8.ir.analysis.type.ReferenceTypeElement;
+import com.android.tools.r8.ir.analysis.type.TypeElement;
import com.android.tools.r8.ir.code.ValueType;
+import com.android.tools.r8.utils.Pair;
+import java.util.Iterator;
import java.util.function.BiFunction;
/** An analysis state representing that the code does not type check. */
@@ -57,10 +63,21 @@
if (frameType.isInitializedReferenceType()) {
if (frameType.isNullType()) {
return "null";
+ } else if (frameType.isInitializedNonNullReferenceTypeWithInterfaces()) {
+ ReferenceTypeElement initializedType =
+ frameType
+ .asInitializedNonNullReferenceTypeWithInterfaces()
+ .getInitializedTypeWithInterfaces();
+ if (initializedType.isArrayType()) {
+ return format(initializedType);
+ } else {
+ assert initializedType.isClassType();
+ return "initialized " + format(initializedType);
+ }
} else {
- assert frameType.isInitializedNonNullReferenceType();
+ assert frameType.isInitializedNonNullReferenceTypeWithoutInterfaces();
DexType initializedType =
- frameType.asInitializedNonNullReferenceType().getInitializedType();
+ frameType.asInitializedNonNullReferenceTypeWithoutInterfaces().getInitializedType();
if (initializedType.isArrayType()) {
return initializedType.getTypeName();
} else {
@@ -92,6 +109,45 @@
}
}
+ private static String format(TypeElement type) {
+ if (type.isArrayType()) {
+ ArrayTypeElement arrayType = type.asArrayType();
+ TypeElement baseType = arrayType.getBaseType();
+ assert baseType.isClassType() || baseType.isPrimitiveType();
+ boolean parenthesize =
+ baseType.isClassType() && !baseType.asClassType().getInterfaces().isEmpty();
+ StringBuilder result = new StringBuilder();
+ if (parenthesize) {
+ result.append("(");
+ }
+ result.append(format(baseType));
+ if (parenthesize) {
+ result.append(")");
+ }
+ for (int i = 0; i < arrayType.getNesting(); i++) {
+ result.append("[]");
+ }
+ return result.toString();
+ } else if (type.isClassType()) {
+ ClassTypeElement classType = type.asClassType();
+ StringBuilder result = new StringBuilder(classType.getClassType().getTypeName());
+ if (!classType.getInterfaces().isEmpty()) {
+ Iterator<Pair<DexType, Boolean>> iterator =
+ classType.getInterfaces().getInterfaceList().iterator();
+ result.append(" implements ").append(iterator.next().getFirst().getTypeName());
+ while (iterator.hasNext()) {
+ result.append(", ").append(iterator.next().getFirst().getTypeName());
+ }
+ }
+ return result.toString();
+ } else if (type.isNullType()) {
+ return "null";
+ } else {
+ assert type.isPrimitiveType();
+ return type.asPrimitiveType().getTypeName();
+ }
+ }
+
public static String formatExpected(ValueType valueType) {
return format(valueType);
}
@@ -186,6 +242,11 @@
}
@Override
+ public CfFrameState push(CfAnalysisConfig config, TypeElement type) {
+ return this;
+ }
+
+ @Override
public CfFrameState push(CfAnalysisConfig config, PreciseFrameType frameType) {
return this;
}
diff --git a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
index 8d6ee1d..b26a1cf 100644
--- a/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
+++ b/src/test/java/com/android/tools/r8/cf/bootstrap/BootstrapCurrentEqualityTest.java
@@ -100,11 +100,6 @@
.setMode(mode)
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
.addKeepRuleFiles(MAIN_KEEP)
- .addOptionsModification(
- options ->
- // TODO(b/236581210): Should only suppress AutoCloseable due to assignments from
- // ZipFile.
- options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
.compile()
.apply(c -> FileUtils.writeTextFile(map, c.getProguardMap()))
.writeToZip(jar);
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
index c491fac..04e2842 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8BootstrapTest.java
@@ -68,9 +68,6 @@
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
.addLibraryFiles(Jdk11TestUtils.getJdk11LibraryFiles(getStaticTemp()))
.addKeepRuleFiles(MAIN_KEEP)
- .addOptionsModification(
- // TODO(b/236581210): There should be no open interfaces.
- options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
.applyIf(
desugar,
builder ->
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
index f27071b..cb549f5 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/Java11R8CompilationTest.java
@@ -50,9 +50,6 @@
.setMinApi(parameters.getApiLevel())
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_11_JAR)
.addKeepRuleFiles(MAIN_KEEP)
- .addOptionsModification(
- // TODO(b/236581210): There should be no open interfaces.
- options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
.compile()
.inspect(this::assertNotEmpty)
.inspect(Java11R8CompilationTest::assertNoNests);
diff --git a/src/test/java/com/android/tools/r8/internal/GMSCoreLatestTest.java b/src/test/java/com/android/tools/r8/internal/GMSCoreLatestTest.java
index de90bf9..60f6fa7 100644
--- a/src/test/java/com/android/tools/r8/internal/GMSCoreLatestTest.java
+++ b/src/test/java/com/android/tools/r8/internal/GMSCoreLatestTest.java
@@ -110,8 +110,6 @@
"com.android.internal.location.ProviderRequest",
"com.google.protobuf.java_com_google_android_libraries_performance_primes_release"
+ "_gmscore__primes_bcdd2915GeneratedExtensionRegistryLite$Loader")
- .addOptionsModification(
- options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java b/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
index afc1811..b09cb00 100644
--- a/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
+++ b/src/test/java/com/android/tools/r8/internal/GMSCoreV10Test.java
@@ -196,8 +196,6 @@
"android.media.RemoteDisplayState$RemoteDisplayInfo",
"com.android.internal.location.ProviderProperties",
"com.android.internal.location.ProviderRequest")
- .addOptionsModification(
- options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
.allowDiagnosticMessages()
.allowUnusedProguardConfigurationRules()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/internal/YouTubeV1620Test.java b/src/test/java/com/android/tools/r8/internal/YouTubeV1620Test.java
index c8732a9..56aed18 100644
--- a/src/test/java/com/android/tools/r8/internal/YouTubeV1620Test.java
+++ b/src/test/java/com/android/tools/r8/internal/YouTubeV1620Test.java
@@ -91,9 +91,6 @@
keepAllProtosRule(),
keepDynamicMethodSignatureRule(),
keepNewMessageInfoSignatureRule())
- .addOptionsModification(
- options ->
- options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
.allowCheckDiscardedErrors(true));
assertRewrittenProtoSchemasMatch(
new CodeInspector(getProgramFiles()), r8CompileResult.inspector());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceRemovalTest.java b/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceRemovalTest.java
index 521d164..8b958fd 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceRemovalTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/unusedinterfaces/UnusedInterfaceRemovalTest.java
@@ -41,13 +41,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(UnusedInterfaceRemovalTest.class)
.addKeepMainRule(TestClass.class)
- .addOptionsModification(
- options ->
- // TODO(b/236581210): I is spuriously reported as being "open" due to lossy joins in
- // the analysis of cf code.
- options
- .getOpenClosedInterfacesOptions()
- .suppressSingleOpenInterface(Reference.classFromClass(I.class)))
.enableNoVerticalClassMergingAnnotations()
.enableNoHorizontalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/InterfaceInvokeWithNonTrivialButImpreciseStaticTypeTest.java b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/InterfaceInvokeWithNonTrivialButImpreciseStaticTypeTest.java
index 307032a..c7ca4d0 100644
--- a/src/test/java/com/android/tools/r8/optimize/argumentpropagation/InterfaceInvokeWithNonTrivialButImpreciseStaticTypeTest.java
+++ b/src/test/java/com/android/tools/r8/optimize/argumentpropagation/InterfaceInvokeWithNonTrivialButImpreciseStaticTypeTest.java
@@ -32,13 +32,6 @@
testForR8(parameters.getBackend())
.addInnerClasses(getClass())
.addKeepMainRule(Main.class)
- .addOptionsModification(
- options ->
- // TODO(b/236581210): I is spuriously reported as being "open" due to lossy joins in
- // the analysis of cf code.
- options
- .getOpenClosedInterfacesOptions()
- .suppressSingleOpenInterface(Reference.classFromClass(I.class)))
.enableNoHorizontalClassMergingAnnotations()
.enableNoVerticalClassMergingAnnotations()
.setMinApi(parameters.getApiLevel())
diff --git a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
index 6740f60..6df7b0a 100644
--- a/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/KeepAnnotatedMemberTest.java
@@ -81,7 +81,6 @@
.addDontWarnGoogle()
.addDontWarnJavax()
.addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
- .apply(this::suppressAllOpenInterfaces)
.compile();
}
@@ -95,7 +94,6 @@
.addDontWarnGoogle()
.addDontWarnJavax()
.addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
- .apply(this::suppressAllOpenInterfaces)
.compile();
}
@@ -121,7 +119,6 @@
.addDontWarnGoogle()
.addDontWarnJavax()
.addDontWarn("org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement")
- .apply(this::suppressAllOpenInterfaces)
.compile()
.inspect(
inspector -> {
@@ -213,8 +210,8 @@
.addKeepRules("-keepclassmembers class * { @" + PRESENT_ANNOTATION + " *** *(...); }")
.addDontWarnGoogle()
.addDontWarnJavaxNullableAnnotation()
- .apply(this::suppressAllOpenInterfaces)
.apply(this::configureHorizontalClassMerging)
+ .apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
@@ -232,7 +229,7 @@
.addDontWarnGoogle()
.addDontWarnJavaxNullableAnnotation()
.apply(this::configureHorizontalClassMerging)
- .apply(this::suppressAllOpenInterfaces)
+ .apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
assertRetainedClassesEqual(referenceInspector, ifThenKeepClassMembersInspector);
@@ -251,7 +248,7 @@
.addDontWarnGoogle()
.addDontWarnJavaxNullableAnnotation()
.apply(this::configureHorizontalClassMerging)
- .apply(this::suppressAllOpenInterfaces)
+ .apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
assertRetainedClassesEqual(referenceInspector, ifThenKeepClassesWithMembersInspector);
@@ -272,7 +269,7 @@
.addDontWarnGoogle()
.addDontWarnJavaxNullableAnnotation()
.apply(this::configureHorizontalClassMerging)
- .apply(this::suppressAllOpenInterfaces)
+ .apply(this::suppressZipFileAssignmentsToJavaLangAutoCloseable)
.compile()
.graphInspector();
assertRetainedClassesEqual(referenceInspector, ifHasMemberThenKeepClassInspector);
@@ -318,9 +315,11 @@
notInConditional);
}
- private void suppressAllOpenInterfaces(R8TestBuilder<?> testBuilder) {
- // TODO(b/236581210): There should be no open interfaces.
+ private void suppressZipFileAssignmentsToJavaLangAutoCloseable(R8TestBuilder<?> testBuilder) {
testBuilder.addOptionsModification(
- options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces());
+ options ->
+ options
+ .getOpenClosedInterfacesOptions()
+ .suppressZipFileAssignmentsToJavaLangAutoCloseable());
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java b/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
index 453028a..94bdbf1 100644
--- a/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keptgraph/WhyAreYouKeepingAllTest.java
@@ -47,10 +47,6 @@
.addProgramFiles(ToolHelper.R8_WITH_RELOCATED_DEPS_JAR)
.addKeepRuleFiles(MAIN_KEEP)
.addKeepRules(WHY_ARE_YOU_KEEPING_ALL)
- .addOptionsModification(
- // TODO(b/236581210): Should only suppress AutoCloseable due to assignments from
- // ZipFile.
- options -> options.getOpenClosedInterfacesOptions().suppressAllOpenInterfaces())
.collectStdout()
.compile()
.assertStdoutThatMatches(containsString("referenced in keep rule"))