Update unit tests for join of type elements
Change-Id: I268c06bbcb3183e4db25d72b80564e45117f38a2
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 72cbe7d..c283797 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
@@ -28,7 +28,6 @@
Nullability nullability,
NullabilityVariants<ArrayTypeElement> variants) {
super(nullability);
- assert memberTypeLattice.isPrimitiveType() || memberTypeLattice.nullability().isMaybeNull();
this.memberTypeLattice = memberTypeLattice;
this.variants = variants;
}
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeTest.java
index 4f15b2d..3e83719 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeLatticeTest.java
@@ -4,6 +4,8 @@
package com.android.tools.r8.ir.analysis.type;
import static com.android.tools.r8.ir.analysis.type.ClassTypeElement.computeLeastUpperBoundOfInterfaces;
+import static com.android.tools.r8.ir.analysis.type.Nullability.definitelyNotNull;
+import static com.android.tools.r8.ir.analysis.type.Nullability.maybeNull;
import static com.android.tools.r8.ir.analysis.type.TypeElement.fromDexType;
import static com.android.tools.r8.ir.analysis.type.TypeElement.getBottom;
import static com.android.tools.r8.ir.analysis.type.TypeElement.getTop;
@@ -88,10 +90,25 @@
return TypeElement.fromDexType(type, nullability, appView);
}
+ private ClassTypeElement element(DexType type, Nullability nullability, DexType... interfaces) {
+ assert type.isClassType();
+ InterfaceCollection.Builder interfaceCollectionBuilder = InterfaceCollection.builder();
+ Arrays.asList(interfaces).forEach(interfaceCollectionBuilder::addKnownInterface);
+ return ClassTypeElement.create(type, nullability, appView, interfaceCollectionBuilder.build());
+ }
+
private ArrayTypeElement array(int nesting, DexType base) {
return (ArrayTypeElement) element(factory.createArrayType(nesting, base));
}
+ private ArrayTypeElement array(TypeElement baseType) {
+ return array(baseType, maybeNull());
+ }
+
+ private ArrayTypeElement array(TypeElement baseType, Nullability nullability) {
+ return ArrayTypeElement.create(baseType, nullability);
+ }
+
private TypeElement join(TypeElement... elements) {
assertTrue(elements.length > 1);
return TypeElement.join(Arrays.asList(elements), appView);
@@ -374,63 +391,59 @@
@Test
public void joinDistinctTypesPrimitiveArrays() {
assertEquals(
- array(2, factory.objectType),
- join(
- array(3, factory.intType),
- array(3, factory.floatType)));
+ array(
+ array(
+ element(
+ factory.objectType,
+ definitelyNotNull(),
+ factory.cloneableType,
+ factory.serializableType))),
+ join(array(3, factory.intType), array(3, factory.floatType)));
}
@Test
public void joinDistinctTypesNestingOnePrimitiveArrays() {
assertEquals(
- element(factory.objectType),
- join(
- array(1, factory.intType),
- array(1, factory.floatType)));
+ element(factory.objectType, maybeNull(), factory.cloneableType, factory.serializableType),
+ join(array(1, factory.intType), array(1, factory.floatType)));
assertEquals(
- element(factory.objectType),
- join(
- array(1, factory.longType),
- array(1, factory.intType)));
+ element(factory.objectType, maybeNull(), factory.cloneableType, factory.serializableType),
+ join(array(1, factory.longType), array(1, factory.intType)));
// Test primitive types smaller than int.
assertEquals(
- element(factory.objectType),
- join(
- array(1, factory.intType),
- array(1, factory.byteType)));
+ element(factory.objectType, maybeNull(), factory.cloneableType, factory.serializableType),
+ join(array(1, factory.intType), array(1, factory.byteType)));
assertEquals(
- element(factory.objectType),
- join(
- array(1, factory.charType),
- array(1, factory.shortType)));
+ element(factory.objectType, maybeNull(), factory.cloneableType, factory.serializableType),
+ join(array(1, factory.charType), array(1, factory.shortType)));
}
@Test
public void joinDistinctTypesNestingOneRightPrimitiveArrays() {
assertEquals(
- element(factory.objectType),
- join(
- array(5, factory.intType),
- array(1, factory.floatType)));
+ element(factory.objectType, maybeNull(), factory.cloneableType, factory.serializableType),
+ join(array(5, factory.intType), array(1, factory.floatType)));
}
@Test
public void joinDistinctTypesNestingOneLeftPrimitiveArrays() {
assertEquals(
- element(factory.objectType),
- join(
- array(1, factory.intType),
- array(5, factory.floatType)));
+ element(factory.objectType, maybeNull(), factory.cloneableType, factory.serializableType),
+ join(array(1, factory.intType), array(5, factory.floatType)));
}
@Test
public void joinDistinctNestingPrimitiveArrays() {
assertEquals(
- array(2, factory.objectType),
- join(
- array(3, factory.intType),
- array(4, factory.intType)));
+ array(
+ array(
+ element(
+ factory.objectType,
+ maybeNull(),
+ factory.cloneableType,
+ factory.serializableType))),
+ join(array(3, factory.intType), array(4, factory.intType)));
}
@Test
@@ -519,10 +532,10 @@
assertTrue(
lessThanOrEqualUpToNullability(
element(factory.objectType, Nullability.maybeNull()),
- element(factory.objectType, Nullability.definitelyNotNull())));
+ element(factory.objectType, definitelyNotNull())));
assertTrue(
lessThanOrEqualUpToNullability(
- element(factory.objectType, Nullability.definitelyNotNull()),
+ element(factory.objectType, definitelyNotNull()),
element(factory.objectType, Nullability.maybeNull())));
assertFalse(
lessThanOrEqualUpToNullability(array(3, factory.stringType), array(4, factory.stringType)));
@@ -535,7 +548,7 @@
@Test
public void testSelfOrderWithoutSubtypingInfo() {
DexType type = factory.createType("Lmy/Type;");
- TypeElement nonNullType = fromDexType(type, Nullability.definitelyNotNull(), appView);
+ TypeElement nonNullType = fromDexType(type, definitelyNotNull(), appView);
ReferenceTypeElement nullableType =
nonNullType.asReferenceType().getOrCreateVariant(Nullability.maybeNull());
assertTrue(strictlyLessThan(nonNullType, nullableType));