diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 7a9aaaf401326..3622804d3b51a 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2691,9 +2691,9 @@ public class PackageParser { certSha256 = certSha256.replace(":", "").toLowerCase(); pkg.usesStaticLibraries = ArrayUtils.add(pkg.usesStaticLibraries, lname); pkg.usesStaticLibrariesVersions = ArrayUtils.appendInt( - pkg.usesStaticLibrariesVersions, version); + pkg.usesStaticLibrariesVersions, version, true); pkg.usesStaticLibrariesCertDigests = ArrayUtils.appendElement(String.class, - pkg.usesStaticLibrariesCertDigests, certSha256); + pkg.usesStaticLibrariesCertDigests, certSha256, true); XmlUtils.skipCurrentTag(parser); diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java index cb3a250a377db..2b1625432d521 100644 --- a/core/java/com/android/internal/util/ArrayUtils.java +++ b/core/java/com/android/internal/util/ArrayUtils.java @@ -260,10 +260,19 @@ public class ArrayUtils { */ @SuppressWarnings("unchecked") public static @NonNull T[] appendElement(Class kind, @Nullable T[] array, T element) { + return appendElement(kind, array, element, false); + } + + /** + * Adds value to given array. + */ + @SuppressWarnings("unchecked") + public static @NonNull T[] appendElement(Class kind, @Nullable T[] array, T element, + boolean allowDuplicates) { final T[] result; final int end; if (array != null) { - if (contains(array, element)) return array; + if (!allowDuplicates && contains(array, element)) return array; end = array.length; result = (T[])Array.newInstance(kind, end + 1); System.arraycopy(array, 0, result, 0, end); @@ -299,17 +308,19 @@ public class ArrayUtils { } /** - * Adds value to given array if not already present, providing set-like - * behavior. + * Adds value to given array. */ - public static @NonNull int[] appendInt(@Nullable int[] cur, int val) { + public static @NonNull int[] appendInt(@Nullable int[] cur, int val, + boolean allowDuplicates) { if (cur == null) { return new int[] { val }; } final int N = cur.length; - for (int i = 0; i < N; i++) { - if (cur[i] == val) { - return cur; + if (!allowDuplicates) { + for (int i = 0; i < N; i++) { + if (cur[i] == val) { + return cur; + } } } int[] ret = new int[N + 1]; @@ -318,6 +329,14 @@ public class ArrayUtils { return ret; } + /** + * Adds value to given array if not already present, providing set-like + * behavior. + */ + public static @NonNull int[] appendInt(@Nullable int[] cur, int val) { + return appendInt(cur, val, false); + } + /** * Removes value from given array if present, providing set-like behavior. */