Reestablish ids for synthetics.
Bug: b/226978292
Change-Id: Ieb9c2bf51d260ca97dfa2cd23a2228c6516d41e6
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
index e2a6f66..edc591e 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticNaming.java
@@ -12,6 +12,8 @@
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.structural.Equatable;
import com.android.tools.r8.utils.structural.Ordered;
+import it.unimi.dsi.fastutil.ints.IntArraySet;
+import it.unimi.dsi.fastutil.ints.IntSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -23,64 +25,67 @@
private KindGenerator generator = new KindGenerator();
// Global synthetics.
- public final SyntheticKind RECORD_TAG = generator.forGlobalClass();
- public final SyntheticKind API_MODEL_STUB = generator.forGlobalClass();
+ public final SyntheticKind RECORD_TAG = generator.forGlobalClass(1);
+ public final SyntheticKind API_MODEL_STUB = generator.forGlobalClass(33);
// Classpath only synthetics in the global type namespace.
- public final SyntheticKind RETARGET_STUB = generator.forGlobalClasspathClass();
- public final SyntheticKind EMULATED_INTERFACE_MARKER_CLASS = generator.forGlobalClasspathClass();
+ public final SyntheticKind RETARGET_STUB = generator.forGlobalClasspathClass(36);
+ public final SyntheticKind EMULATED_INTERFACE_MARKER_CLASS =
+ generator.forGlobalClasspathClass(29);
// Fixed suffix synthetics. Each has a hygienic prefix type.
public final SyntheticKind ENUM_UNBOXING_LOCAL_UTILITY_CLASS =
- generator.forFixedClass("$EnumUnboxingLocalUtility");
+ generator.forFixedClass(24, "$EnumUnboxingLocalUtility");
public final SyntheticKind ENUM_UNBOXING_SHARED_UTILITY_CLASS =
- generator.forFixedClass("$EnumUnboxingSharedUtility");
- public final SyntheticKind COMPANION_CLASS = generator.forFixedClass("$-CC");
+ generator.forFixedClass(25, "$EnumUnboxingSharedUtility");
+ public final SyntheticKind COMPANION_CLASS = generator.forFixedClass(2, "$-CC");
public final SyntheticKind EMULATED_INTERFACE_CLASS =
- generator.forFixedClass(InterfaceDesugaringForTesting.EMULATED_INTERFACE_CLASS_SUFFIX);
- public final SyntheticKind RETARGET_CLASS = generator.forFixedClass("RetargetClass");
- public final SyntheticKind RETARGET_INTERFACE = generator.forFixedClass("RetargetInterface");
- public final SyntheticKind WRAPPER = generator.forFixedClass("$Wrapper");
- public final SyntheticKind VIVIFIED_WRAPPER = generator.forFixedClass("$VivifiedWrapper");
- public final SyntheticKind INIT_TYPE_ARGUMENT = generator.forFixedClass("-IA");
+ generator.forFixedClass(3, InterfaceDesugaringForTesting.EMULATED_INTERFACE_CLASS_SUFFIX);
+ public final SyntheticKind RETARGET_CLASS = generator.forFixedClass(20, "RetargetClass");
+ public final SyntheticKind RETARGET_INTERFACE = generator.forFixedClass(21, "RetargetInterface");
+ public final SyntheticKind WRAPPER = generator.forFixedClass(22, "$Wrapper");
+ public final SyntheticKind VIVIFIED_WRAPPER = generator.forFixedClass(23, "$VivifiedWrapper");
+ public final SyntheticKind INIT_TYPE_ARGUMENT = generator.forFixedClass(5, "-IA");
public final SyntheticKind HORIZONTAL_INIT_TYPE_ARGUMENT_1 =
- generator.forFixedClass(SYNTHETIC_CLASS_SEPARATOR + "IA$1");
+ generator.forFixedClass(6, SYNTHETIC_CLASS_SEPARATOR + "IA$1");
public final SyntheticKind HORIZONTAL_INIT_TYPE_ARGUMENT_2 =
- generator.forFixedClass(SYNTHETIC_CLASS_SEPARATOR + "IA$2");
+ generator.forFixedClass(7, SYNTHETIC_CLASS_SEPARATOR + "IA$2");
public final SyntheticKind HORIZONTAL_INIT_TYPE_ARGUMENT_3 =
- generator.forFixedClass(SYNTHETIC_CLASS_SEPARATOR + "IA$3");
- public final SyntheticKind ENUM_CONVERSION = generator.forFixedClass("$EnumConversion");
+ generator.forFixedClass(8, SYNTHETIC_CLASS_SEPARATOR + "IA$3");
+ public final SyntheticKind ENUM_CONVERSION = generator.forFixedClass(31, "$EnumConversion");
// Locally generated synthetic classes.
- public final SyntheticKind LAMBDA = generator.forInstanceClass("Lambda");
+ public final SyntheticKind LAMBDA = generator.forInstanceClass(4, "Lambda");
// TODO(b/214901256): Sharing of synthetic classes may lead to duplicate method errors.
public final SyntheticKind NON_FIXED_INIT_TYPE_ARGUMENT =
- generator.forNonSharableInstanceClass("$IA");
- public final SyntheticKind CONST_DYNAMIC = generator.forInstanceClass("$Condy");
+ generator.forNonSharableInstanceClass(35, "$IA");
+ public final SyntheticKind CONST_DYNAMIC = generator.forInstanceClass(30, "$Condy");
// Method synthetics.
public final SyntheticKind ENUM_UNBOXING_CHECK_NOT_ZERO_METHOD =
- generator.forSingleMethod("CheckNotZero");
- public final SyntheticKind RECORD_HELPER = generator.forSingleMethod("Record");
- public final SyntheticKind BACKPORT = generator.forSingleMethod("Backport");
+ generator.forSingleMethod(27, "CheckNotZero");
+ public final SyntheticKind RECORD_HELPER = generator.forSingleMethod(9, "Record");
+ public final SyntheticKind BACKPORT = generator.forSingleMethod(10, "Backport");
public final SyntheticKind BACKPORT_WITH_FORWARDING =
- generator.forSingleMethod("BackportWithForwarding");
+ generator.forSingleMethod(34, "BackportWithForwarding");
public final SyntheticKind STATIC_INTERFACE_CALL =
- generator.forSingleMethod("StaticInterfaceCall");
- public final SyntheticKind TO_STRING_IF_NOT_NULL = generator.forSingleMethod("ToStringIfNotNull");
- public final SyntheticKind THROW_CCE_IF_NOT_NULL = generator.forSingleMethod("ThrowCCEIfNotNull");
- public final SyntheticKind THROW_IAE = generator.forSingleMethod("ThrowIAE");
- public final SyntheticKind THROW_ICCE = generator.forSingleMethod("ThrowICCE");
- public final SyntheticKind THROW_NSME = generator.forSingleMethod("ThrowNSME");
- public final SyntheticKind TWR_CLOSE_RESOURCE = generator.forSingleMethod("TwrCloseResource");
- public final SyntheticKind SERVICE_LOADER = generator.forSingleMethod("ServiceLoad");
- public final SyntheticKind OUTLINE = generator.forSingleMethod("Outline");
- public final SyntheticKind API_CONVERSION = generator.forSingleMethod("APIConversion");
+ generator.forSingleMethod(11, "StaticInterfaceCall");
+ public final SyntheticKind TO_STRING_IF_NOT_NULL =
+ generator.forSingleMethod(12, "ToStringIfNotNull");
+ public final SyntheticKind THROW_CCE_IF_NOT_NULL =
+ generator.forSingleMethod(13, "ThrowCCEIfNotNull");
+ public final SyntheticKind THROW_IAE = generator.forSingleMethod(14, "ThrowIAE");
+ public final SyntheticKind THROW_ICCE = generator.forSingleMethod(15, "ThrowICCE");
+ public final SyntheticKind THROW_NSME = generator.forSingleMethod(16, "ThrowNSME");
+ public final SyntheticKind TWR_CLOSE_RESOURCE = generator.forSingleMethod(17, "TwrCloseResource");
+ public final SyntheticKind SERVICE_LOADER = generator.forSingleMethod(18, "ServiceLoad");
+ public final SyntheticKind OUTLINE = generator.forSingleMethod(19, "Outline");
+ public final SyntheticKind API_CONVERSION = generator.forSingleMethod(26, "APIConversion");
public final SyntheticKind API_CONVERSION_PARAMETERS =
- generator.forSingleMethod("APIConversionParameters");
- public final SyntheticKind ARRAY_CONVERSION = generator.forSingleMethod("$ArrayConversion");
- public final SyntheticKind API_MODEL_OUTLINE = generator.forSingleMethod("ApiModelOutline");
+ generator.forSingleMethod(28, "APIConversionParameters");
+ public final SyntheticKind ARRAY_CONVERSION = generator.forSingleMethod(37, "$ArrayConversion");
+ public final SyntheticKind API_MODEL_OUTLINE = generator.forSingleMethod(32, "ApiModelOutline");
private final List<SyntheticKind> ALL_KINDS = generator.getAllKinds();
@@ -89,48 +94,49 @@
}
public SyntheticKind fromId(int id) {
- if (0 < id && id <= ALL_KINDS.size()) {
- return ALL_KINDS.get(id - 1);
+ for (SyntheticKind kind : ALL_KINDS) {
+ if (kind.getId() == id) {
+ return kind;
+ }
}
return null;
}
private static class KindGenerator {
- private int nextId = 1;
private List<SyntheticKind> kinds = new ArrayList<>();
-
- private int getNextId() {
- return nextId++;
- }
+ private IntSet usedIds = new IntArraySet();
private SyntheticKind register(SyntheticKind kind) {
+ if (!usedIds.add(kind.getId())) {
+ throw new Unreachable("Invalid reuse of synthetic kind id: " + kind.getId());
+ }
kinds.add(kind);
return kind;
}
- SyntheticKind forSingleMethod(String descriptor) {
- return register(new SyntheticMethodKind(getNextId(), descriptor));
+ SyntheticKind forSingleMethod(int id, String descriptor) {
+ return register(new SyntheticMethodKind(id, descriptor));
}
// TODO(b/214901256): Remove once fixed.
- SyntheticKind forNonSharableInstanceClass(String descriptor) {
- return register(new SyntheticClassKind(getNextId(), descriptor, false));
+ SyntheticKind forNonSharableInstanceClass(int id, String descriptor) {
+ return register(new SyntheticClassKind(id, descriptor, false));
}
- SyntheticKind forInstanceClass(String descriptor) {
- return register(new SyntheticClassKind(getNextId(), descriptor, true));
+ SyntheticKind forInstanceClass(int id, String descriptor) {
+ return register(new SyntheticClassKind(id, descriptor, true));
}
- SyntheticKind forFixedClass(String descriptor) {
- return register(new SyntheticFixedClassKind(getNextId(), descriptor, false));
+ SyntheticKind forFixedClass(int id, String descriptor) {
+ return register(new SyntheticFixedClassKind(id, descriptor, false));
}
- SyntheticKind forGlobalClass() {
- return register(new SyntheticFixedClassKind(getNextId(), "", true));
+ SyntheticKind forGlobalClass(int id) {
+ return register(new SyntheticFixedClassKind(id, "", true));
}
- SyntheticKind forGlobalClasspathClass() {
- return register(new SyntheticFixedClassKind(getNextId(), "", false));
+ SyntheticKind forGlobalClasspathClass(int id) {
+ return register(new SyntheticFixedClassKind(id, "", false));
}
List<SyntheticKind> getAllKinds() {