Canonicalize method rule flags
Fixes: b/278482400
Change-Id: I432bde3ac80d04e9f1e3f121335bd5028d0d87e3
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoImpl.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoImpl.java
index d91553e..b86c569 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoImpl.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileMethodRuleInfoImpl.java
@@ -4,16 +4,18 @@
package com.android.tools.r8.profile.art;
+import com.android.tools.r8.utils.ArrayUtils;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class ArtProfileMethodRuleInfoImpl implements ArtProfileMethodRuleInfo {
- private static final ArtProfileMethodRuleInfoImpl EMPTY = new ArtProfileMethodRuleInfoImpl(0);
+ private static final ArtProfileMethodRuleInfoImpl[] INSTANCES =
+ ArrayUtils.initialize(new ArtProfileMethodRuleInfoImpl[8], ArtProfileMethodRuleInfoImpl::new);
private final int flags;
- ArtProfileMethodRuleInfoImpl(int flags) {
+ private ArtProfileMethodRuleInfoImpl(int flags) {
this.flags = flags;
}
@@ -22,7 +24,7 @@
}
public static ArtProfileMethodRuleInfoImpl empty() {
- return EMPTY;
+ return INSTANCES[0];
}
public int getFlags() {
@@ -163,7 +165,9 @@
}
public ArtProfileMethodRuleInfoImpl build() {
- return new ArtProfileMethodRuleInfoImpl(flags);
+ assert 0 <= flags;
+ assert flags < INSTANCES.length;
+ return INSTANCES[flags];
}
}
}
diff --git a/src/main/java/com/android/tools/r8/utils/ArrayUtils.java b/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
index 3e5104a..d90c8e5 100644
--- a/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ArrayUtils.java
@@ -10,6 +10,7 @@
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
+import java.util.function.IntFunction;
import java.util.function.IntPredicate;
import java.util.function.Predicate;
@@ -49,6 +50,13 @@
return results;
}
+ public static <T> T[] initialize(T[] array, IntFunction<T> fn) {
+ for (int i = 0; i < array.length; i++) {
+ array[i] = fn.apply(i);
+ }
+ return array;
+ }
+
public static <T> boolean isEmpty(T[] array) {
return array.length == 0;
}