blob: d554d50fd7dc5a49c4da7a5c292fbfa73a6a872b [file] [log] [blame]
// Copyright (c) 2020, 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.utils.codeinspector;
import static com.android.tools.r8.TestBase.toDexType;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.ir.optimize.enums.EnumDataMap;
import com.android.tools.r8.utils.DescriptorUtils;
public class EnumUnboxingInspector {
private final DexItemFactory dexItemFactory;
private final EnumDataMap unboxedEnums;
public EnumUnboxingInspector(DexItemFactory dexItemFactory, EnumDataMap unboxedEnums) {
this.dexItemFactory = dexItemFactory;
this.unboxedEnums = unboxedEnums;
}
public EnumUnboxingInspector assertUnboxed(String typeName) {
assertTrue(
unboxedEnums.isUnboxedEnum(
dexItemFactory.createType(DescriptorUtils.javaTypeToDescriptor(typeName))));
return this;
}
public EnumUnboxingInspector assertUnboxed(Class<? extends Enum<?>> clazz) {
assertTrue(clazz.getTypeName(), unboxedEnums.isUnboxedEnum(toDexType(clazz, dexItemFactory)));
return this;
}
@SafeVarargs
public final EnumUnboxingInspector assertUnboxed(Class<? extends Enum<?>>... classes) {
for (Class<? extends Enum<?>> clazz : classes) {
assertUnboxed(clazz);
}
return this;
}
public EnumUnboxingInspector assertUnboxedIf(boolean condition, Class<? extends Enum<?>> clazz) {
if (condition) {
assertUnboxed(clazz);
} else {
assertNotUnboxed(clazz);
}
return this;
}
@SafeVarargs
public final EnumUnboxingInspector assertUnboxedIf(
boolean condition, Class<? extends Enum<?>>... classes) {
for (Class<? extends Enum<?>> clazz : classes) {
assertUnboxedIf(condition, clazz);
}
return this;
}
public EnumUnboxingInspector assertNotUnboxed(Class<? extends Enum<?>> clazz) {
assertFalse(clazz.getTypeName(), unboxedEnums.isUnboxedEnum(toDexType(clazz, dexItemFactory)));
return this;
}
@SafeVarargs
public final EnumUnboxingInspector assertNotUnboxed(Class<? extends Enum<?>>... classes) {
for (Class<? extends Enum<?>> clazz : classes) {
assertNotUnboxed(clazz);
}
return this;
}
}