[go: nahoru, domu]

Move collection-ktx extensions into main artifact

It's no longer necessary to keep kotlin extensions in a separate
artifact since we pull in Kotlin stdlib into the main artifact. To
improve visibility, but keep compatibility with existing -ktx users, we
can keep publishing an empty -ktx artifact, but move all the extensions
into the main artifact.

Relnote: "Migrate colection-ktx extensions into the main artifact,
  androidx.collection:collection. This change makes the pre-existing
  -ktx extensions accessible to Kotlin users without requiring the -ktx
  dependency, while still maintaining compatibility for existing users.
  Maintaining these extensions in a separate -ktx artifact is no longer
  beneficial since the main artifact has moved to Kotlin."

Test: cd collection && ./gradlew bOS
Change-Id: I6eef28fa8fcb929df5979a29a869ca8aa0828215
diff --git a/collection/collection-ktx/api/current.ignore b/collection/collection-ktx/api/current.ignore
index d3b4cdf..fba439e 100644
--- a/collection/collection-ktx/api/current.ignore
+++ b/collection/collection-ktx/api/current.ignore
@@ -1,3 +1,3 @@
 // Baseline format: 1.0
-RemovedClass: androidx.collection.LongSparseArrayKt:
-    Removed class androidx.collection.LongSparseArrayKt
+RemovedPackage: androidx.collection:
+    Removed package androidx.collection
diff --git a/collection/collection-ktx/api/current.txt b/collection/collection-ktx/api/current.txt
index 222eeb5..e6f50d0 100644
--- a/collection/collection-ktx/api/current.txt
+++ b/collection/collection-ktx/api/current.txt
@@ -1,33 +1 @@
 // Signature format: 4.0
-package androidx.collection {
-
-  public final class ArrayMapKt {
-    method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
-    method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-  }
-
-  public final class ArraySetKt {
-    method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
-    method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
-  }
-
-  public final class LruCacheKt {
-    method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
-  }
-
-  public final class SparseArrayKt {
-    method public static inline operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
-    method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
-    method public static inline <T> T! getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T? defaultValue);
-    method public static inline <T> T! getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
-    method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
-    method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
-    method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
-    method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T? value);
-    method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T? value);
-    method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
-  }
-
-}
-
diff --git a/collection/collection-ktx/api/public_plus_experimental_current.txt b/collection/collection-ktx/api/public_plus_experimental_current.txt
index 222eeb5..e6f50d0 100644
--- a/collection/collection-ktx/api/public_plus_experimental_current.txt
+++ b/collection/collection-ktx/api/public_plus_experimental_current.txt
@@ -1,33 +1 @@
 // Signature format: 4.0
-package androidx.collection {
-
-  public final class ArrayMapKt {
-    method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
-    method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-  }
-
-  public final class ArraySetKt {
-    method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
-    method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
-  }
-
-  public final class LruCacheKt {
-    method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
-  }
-
-  public final class SparseArrayKt {
-    method public static inline operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
-    method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
-    method public static inline <T> T! getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T? defaultValue);
-    method public static inline <T> T! getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
-    method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
-    method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
-    method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
-    method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T? value);
-    method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T? value);
-    method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
-  }
-
-}
-
diff --git a/collection/collection-ktx/api/restricted_current.ignore b/collection/collection-ktx/api/restricted_current.ignore
index d3b4cdf..fba439e 100644
--- a/collection/collection-ktx/api/restricted_current.ignore
+++ b/collection/collection-ktx/api/restricted_current.ignore
@@ -1,3 +1,3 @@
 // Baseline format: 1.0
-RemovedClass: androidx.collection.LongSparseArrayKt:
-    Removed class androidx.collection.LongSparseArrayKt
+RemovedPackage: androidx.collection:
+    Removed package androidx.collection
diff --git a/collection/collection-ktx/api/restricted_current.txt b/collection/collection-ktx/api/restricted_current.txt
index 222eeb5..e6f50d0 100644
--- a/collection/collection-ktx/api/restricted_current.txt
+++ b/collection/collection-ktx/api/restricted_current.txt
@@ -1,33 +1 @@
 // Signature format: 4.0
-package androidx.collection {
-
-  public final class ArrayMapKt {
-    method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
-    method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-  }
-
-  public final class ArraySetKt {
-    method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
-    method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
-  }
-
-  public final class LruCacheKt {
-    method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
-  }
-
-  public final class SparseArrayKt {
-    method public static inline operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
-    method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
-    method public static inline <T> T! getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T? defaultValue);
-    method public static inline <T> T! getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
-    method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
-    method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
-    method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
-    method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
-    method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T? value);
-    method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T? value);
-    method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
-  }
-
-}
-
diff --git a/collection/collection-ktx/build.gradle b/collection/collection-ktx/build.gradle
index 827b83c..3e9fcb7 100644
--- a/collection/collection-ktx/build.gradle
+++ b/collection/collection-ktx/build.gradle
@@ -23,10 +23,6 @@
 
 dependencies {
     api(project(":collection:collection"))
-    api(libs.kotlinStdlib)
-    testImplementation(libs.junit)
-    testImplementation(libs.truth)
-    testImplementation(project(":internal-testutils-truth"))
 }
 
 androidx {
diff --git a/collection/collection-ktx/src/main/java/androidx/collection/LruCache.kt b/collection/collection-ktx/src/main/java/androidx/collection/LruCache.kt
deleted file mode 100644
index 261003a..0000000
--- a/collection/collection-ktx/src/main/java/androidx/collection/LruCache.kt
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.collection
-
-/**
- * Creates an [LruCache] with the given parameters.
- *
- * @param maxSize for caches that do not specify [sizeOf], this is
- * the maximum number of entries in the cache. For all other caches,
- * this is the maximum sum of the sizes of the entries in this cache.
- * @param sizeOf function that returns the size of the entry for key and value in
- * user-defined units. The default implementation returns 1.
- * @param create a create called after a cache miss to compute a value for the corresponding key.
- * Returns the computed value or null if no value can be computed. The default implementation
- * returns null.
- * @param onEntryRemoved a function called for entries that have been evicted or removed.
- *
- * @see LruCache.sizeOf
- * @see LruCache.create
- * @see LruCache.entryRemoved
- */
-public inline fun <K : Any, V : Any> lruCache(
-    maxSize: Int,
-    crossinline sizeOf: (key: K, value: V) -> Int = { _, _ -> 1 },
-    @Suppress("USELESS_CAST") // https://youtrack.jetbrains.com/issue/KT-21946
-    crossinline create: (key: K) -> V? = { null as V? },
-    crossinline onEntryRemoved: (evicted: Boolean, key: K, oldValue: V, newValue: V?) -> Unit =
-        { _, _, _, _ -> }
-): LruCache<K, V> {
-    return object : LruCache<K, V>(maxSize) {
-        override fun sizeOf(key: K, value: V) = sizeOf(key, value)
-        override fun create(key: K) = create(key)
-        override fun entryRemoved(evicted: Boolean, key: K, oldValue: V, newValue: V?) {
-            onEntryRemoved(evicted, key, oldValue, newValue)
-        }
-    }
-}
diff --git a/collection/collection/api/current.txt b/collection/collection/api/current.txt
index d075f9f..4f07e02 100644
--- a/collection/collection/api/current.txt
+++ b/collection/collection/api/current.txt
@@ -18,6 +18,11 @@
     method public java.util.Collection<V!> values();
   }
 
+  public final class ArrayMapKt {
+    method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
+    method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
   public final class ArraySet<E> implements java.util.Collection<E> java.util.Set<E> {
     ctor public ArraySet();
     ctor public ArraySet(int);
@@ -45,6 +50,11 @@
     method public E! valueAt(int);
   }
 
+  public final class ArraySetKt {
+    method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
+    method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
+  }
+
   public final class CircularArray<E> {
     ctor public CircularArray(optional int minCapacity);
     ctor public CircularArray();
@@ -146,6 +156,10 @@
     method public void trimToSize(int maxSize);
   }
 
+  public final class LruCacheKt {
+    method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
+  }
+
   public class SimpleArrayMap<K, V> {
     ctor public SimpleArrayMap(optional int capacity);
     ctor public SimpleArrayMap();
@@ -203,5 +217,19 @@
     property public final boolean isEmpty;
   }
 
+  public final class SparseArrayKt {
+    method public static inline operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
+    method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+    method public static inline <T> T! getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T? defaultValue);
+    method public static inline <T> T! getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
+    method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
+    method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
+    method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
+    method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T? value);
+    method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T? value);
+    method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
+  }
+
 }
 
diff --git a/collection/collection/api/public_plus_experimental_current.txt b/collection/collection/api/public_plus_experimental_current.txt
index d075f9f..4f07e02 100644
--- a/collection/collection/api/public_plus_experimental_current.txt
+++ b/collection/collection/api/public_plus_experimental_current.txt
@@ -18,6 +18,11 @@
     method public java.util.Collection<V!> values();
   }
 
+  public final class ArrayMapKt {
+    method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
+    method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
   public final class ArraySet<E> implements java.util.Collection<E> java.util.Set<E> {
     ctor public ArraySet();
     ctor public ArraySet(int);
@@ -45,6 +50,11 @@
     method public E! valueAt(int);
   }
 
+  public final class ArraySetKt {
+    method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
+    method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
+  }
+
   public final class CircularArray<E> {
     ctor public CircularArray(optional int minCapacity);
     ctor public CircularArray();
@@ -146,6 +156,10 @@
     method public void trimToSize(int maxSize);
   }
 
+  public final class LruCacheKt {
+    method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
+  }
+
   public class SimpleArrayMap<K, V> {
     ctor public SimpleArrayMap(optional int capacity);
     ctor public SimpleArrayMap();
@@ -203,5 +217,19 @@
     property public final boolean isEmpty;
   }
 
+  public final class SparseArrayKt {
+    method public static inline operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
+    method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+    method public static inline <T> T! getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T? defaultValue);
+    method public static inline <T> T! getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
+    method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
+    method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
+    method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
+    method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T? value);
+    method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T? value);
+    method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
+  }
+
 }
 
diff --git a/collection/collection/api/restricted_current.txt b/collection/collection/api/restricted_current.txt
index d075f9f..4f07e02 100644
--- a/collection/collection/api/restricted_current.txt
+++ b/collection/collection/api/restricted_current.txt
@@ -18,6 +18,11 @@
     method public java.util.Collection<V!> values();
   }
 
+  public final class ArrayMapKt {
+    method public static inline <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf();
+    method public static <K, V> androidx.collection.ArrayMap<K,V> arrayMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
   public final class ArraySet<E> implements java.util.Collection<E> java.util.Set<E> {
     ctor public ArraySet();
     ctor public ArraySet(int);
@@ -45,6 +50,11 @@
     method public E! valueAt(int);
   }
 
+  public final class ArraySetKt {
+    method public static inline <T> androidx.collection.ArraySet<T> arraySetOf();
+    method public static <T> androidx.collection.ArraySet<T> arraySetOf(T?... values);
+  }
+
   public final class CircularArray<E> {
     ctor public CircularArray(optional int minCapacity);
     ctor public CircularArray();
@@ -146,6 +156,10 @@
     method public void trimToSize(int maxSize);
   }
 
+  public final class LruCacheKt {
+    method public static inline <K, V> androidx.collection.LruCache<K,V> lruCache(int maxSize, optional kotlin.jvm.functions.Function2<? super K,? super V,java.lang.Integer> sizeOf, optional kotlin.jvm.functions.Function1<? super K,? extends V> create, optional kotlin.jvm.functions.Function4<? super java.lang.Boolean,? super K,? super V,? super V,kotlin.Unit> onEntryRemoved);
+  }
+
   public class SimpleArrayMap<K, V> {
     ctor public SimpleArrayMap(optional int capacity);
     ctor public SimpleArrayMap();
@@ -203,5 +217,19 @@
     property public final boolean isEmpty;
   }
 
+  public final class SparseArrayKt {
+    method public static inline operator <T> boolean contains(androidx.collection.SparseArrayCompat<T>, int key);
+    method public static inline <T> void forEach(androidx.collection.SparseArrayCompat<T>, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> action);
+    method public static inline <T> T! getOrDefault(androidx.collection.SparseArrayCompat<T>, int key, T? defaultValue);
+    method public static inline <T> T! getOrElse(androidx.collection.SparseArrayCompat<T>, int key, kotlin.jvm.functions.Function0<? extends T> defaultValue);
+    method public static inline <T> int getSize(androidx.collection.SparseArrayCompat<T>);
+    method public static inline <T> boolean isNotEmpty(androidx.collection.SparseArrayCompat<T>);
+    method public static <T> kotlin.collections.IntIterator keyIterator(androidx.collection.SparseArrayCompat<T>);
+    method public static operator <T> androidx.collection.SparseArrayCompat<T> plus(androidx.collection.SparseArrayCompat<T>, androidx.collection.SparseArrayCompat<T> other);
+    method @Deprecated public static <T> boolean remove(androidx.collection.SparseArrayCompat<T>, int key, T? value);
+    method public static inline operator <T> void set(androidx.collection.SparseArrayCompat<T>, int key, T? value);
+    method public static <T> java.util.Iterator<T> valueIterator(androidx.collection.SparseArrayCompat<T>);
+  }
+
 }
 
diff --git a/collection/collection/build.gradle b/collection/collection/build.gradle
index 12369f29..bb4dead 100644
--- a/collection/collection/build.gradle
+++ b/collection/collection/build.gradle
@@ -50,6 +50,7 @@
             dependencies {
                 implementation(libs.kotlinTestJunit)
                 implementation(libs.truth)
+                implementation(project(":internal-testutils-truth"))
             }
         }
     }
diff --git a/collection/collection-ktx/src/main/java/androidx/collection/ArrayMap.kt b/collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt
similarity index 100%
rename from collection/collection-ktx/src/main/java/androidx/collection/ArrayMap.kt
rename to collection/collection/src/jvmMain/kotlin/androidx/collection/ArrayMap.kt
diff --git a/collection/collection-ktx/src/main/java/androidx/collection/ArraySet.kt b/collection/collection/src/jvmMain/kotlin/androidx/collection/ArraySet.kt
similarity index 100%
rename from collection/collection-ktx/src/main/java/androidx/collection/ArraySet.kt
rename to collection/collection/src/jvmMain/kotlin/androidx/collection/ArraySet.kt
diff --git a/collection/collection/src/jvmMain/kotlin/androidx/collection/LruCache.kt b/collection/collection/src/jvmMain/kotlin/androidx/collection/LruCache.kt
index 8545481..3d33871 100644
--- a/collection/collection/src/jvmMain/kotlin/androidx/collection/LruCache.kt
+++ b/collection/collection/src/jvmMain/kotlin/androidx/collection/LruCache.kt
@@ -305,3 +305,37 @@
         }
     }
 }
+
+/**
+ * Creates an [LruCache] with the given parameters.
+ *
+ * @param maxSize for caches that do not specify [sizeOf], this is
+ * the maximum number of entries in the cache. For all other caches,
+ * this is the maximum sum of the sizes of the entries in this cache.
+ * @param sizeOf function that returns the size of the entry for key and value in
+ * user-defined units. The default implementation returns 1.
+ * @param create a create called after a cache miss to compute a value for the corresponding key.
+ * Returns the computed value or null if no value can be computed. The default implementation
+ * returns null.
+ * @param onEntryRemoved a function called for entries that have been evicted or removed.
+ *
+ * @see LruCache.sizeOf
+ * @see LruCache.create
+ * @see LruCache.entryRemoved
+ */
+public inline fun <K : Any, V : Any> lruCache(
+    maxSize: Int,
+    crossinline sizeOf: (key: K, value: V) -> Int = { _, _ -> 1 },
+    @Suppress("USELESS_CAST") // https://youtrack.jetbrains.com/issue/KT-21946
+    crossinline create: (key: K) -> V? = { null as V? },
+    crossinline onEntryRemoved: (evicted: Boolean, key: K, oldValue: V, newValue: V?) -> Unit =
+        { _, _, _, _ -> }
+): LruCache<K, V> {
+    return object : LruCache<K, V>(maxSize) {
+        override fun sizeOf(key: K, value: V) = sizeOf(key, value)
+        override fun create(key: K) = create(key)
+        override fun entryRemoved(evicted: Boolean, key: K, oldValue: V, newValue: V?) {
+            onEntryRemoved(evicted, key, oldValue, newValue)
+        }
+    }
+}
diff --git a/collection/collection-ktx/src/main/java/androidx/collection/SparseArray.kt b/collection/collection/src/jvmMain/kotlin/androidx/collection/SparseArray.kt
similarity index 92%
rename from collection/collection-ktx/src/main/java/androidx/collection/SparseArray.kt
rename to collection/collection/src/jvmMain/kotlin/androidx/collection/SparseArray.kt
index ec4a980..625a48e 100644
--- a/collection/collection-ktx/src/main/java/androidx/collection/SparseArray.kt
+++ b/collection/collection/src/jvmMain/kotlin/androidx/collection/SparseArray.kt
@@ -1,11 +1,11 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright 2022 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *       http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,8 +14,6 @@
  * limitations under the License.
  */
 
-@file:Suppress("NOTHING_TO_INLINE") // Aliases to public API.
-
 package androidx.collection
 
 import kotlin.DeprecationLevel.HIDDEN
@@ -24,9 +22,11 @@
 public inline val <T> SparseArrayCompat<T>.size: Int get() = size()
 
 /** Returns true if the collection contains [key]. */
+@Suppress("NOTHING_TO_INLINE")
 public inline operator fun <T> SparseArrayCompat<T>.contains(key: Int): Boolean = containsKey(key)
 
 /** Allows the use of the index operator for storing values in the collection. */
+@Suppress("NOTHING_TO_INLINE")
 public inline operator fun <T> SparseArrayCompat<T>.set(key: Int, value: T): Unit = put(key, value)
 
 /** Creates a new collection by adding or replacing entries from [other]. */
@@ -40,6 +40,7 @@
 }
 
 /** Return the value corresponding to [key], or [defaultValue] when not present. */
+@Suppress("NOTHING_TO_INLINE")
 public inline fun <T> SparseArrayCompat<T>.getOrDefault(key: Int, defaultValue: T): T =
     get(key, defaultValue)
 
@@ -48,6 +49,7 @@
     get(key) ?: defaultValue()
 
 /** Return true when the collection contains elements. */
+@Suppress("NOTHING_TO_INLINE")
 public inline fun <T> SparseArrayCompat<T>.isNotEmpty(): Boolean = !isEmpty
 
 /** Removes the entry for [key] only if it is mapped to [value]. */
diff --git a/collection/collection-ktx/src/test/java/androidx/collection/ArrayMapTest.kt b/collection/collection/src/jvmTest/kotlin/androidx/collection/ArrayMapExtensionsTest.kt
similarity index 77%
rename from collection/collection-ktx/src/test/java/androidx/collection/ArrayMapTest.kt
rename to collection/collection/src/jvmTest/kotlin/androidx/collection/ArrayMapExtensionsTest.kt
index 8c002dd..e326e0f 100644
--- a/collection/collection-ktx/src/test/java/androidx/collection/ArrayMapTest.kt
+++ b/collection/collection/src/jvmTest/kotlin/androidx/collection/ArrayMapExtensionsTest.kt
@@ -1,11 +1,11 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright 2022 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *       http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,22 +17,25 @@
 package androidx.collection
 
 import com.google.common.truth.Truth.assertThat
-import org.junit.Assert.assertEquals
+import kotlin.test.assertEquals
 import org.junit.Test
 
-class ArrayMapTest {
-    @Test fun empty() {
+internal class ArrayMapExtensionsTest {
+    @Test
+    fun empty() {
         val map = arrayMapOf<String, String>()
         assertEquals(0, map.size)
     }
 
-    @Test fun nonEmpty() {
+    @Test
+    fun nonEmpty() {
         val map = arrayMapOf("foo" to "bar", "bar" to "baz")
         assertThat(map).containsExactly("foo", "bar", "bar", "baz")
     }
 
-    @Test fun duplicateKeyKeepsLast() {
+    @Test
+    fun duplicateKeyKeepsLast() {
         val map = arrayMapOf("foo" to "bar", "foo" to "baz")
         assertThat(map).containsExactly("foo", "baz")
     }
-}
+}
\ No newline at end of file
diff --git a/collection/collection-ktx/src/test/java/androidx/collection/ArraySetTest.kt b/collection/collection/src/jvmTest/kotlin/androidx/collection/ArraySetExtensionsTest.kt
similarity index 77%
rename from collection/collection-ktx/src/test/java/androidx/collection/ArraySetTest.kt
rename to collection/collection/src/jvmTest/kotlin/androidx/collection/ArraySetExtensionsTest.kt
index 71a561d..6575af7 100644
--- a/collection/collection-ktx/src/test/java/androidx/collection/ArraySetTest.kt
+++ b/collection/collection/src/jvmTest/kotlin/androidx/collection/ArraySetExtensionsTest.kt
@@ -1,11 +1,11 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright 2022 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *       http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -17,17 +17,19 @@
 package androidx.collection
 
 import com.google.common.truth.Truth.assertThat
-import org.junit.Assert.assertEquals
+import kotlin.test.assertEquals
 import org.junit.Test
 
-class ArraySetTest {
-    @Test fun empty() {
+internal class ArraySetExtensionsTest {
+    @Test
+    fun empty() {
         val set = arraySetOf<String>()
         assertEquals(0, set.size)
     }
 
-    @Test fun nonEmpty() {
+    @Test
+    fun nonEmpty() {
         val set = arraySetOf("foo", "bar", "baz")
         assertThat(set).containsExactly("foo", "bar", "baz")
     }
-}
+}
\ No newline at end of file
diff --git a/collection/collection-ktx/src/test/java/androidx/collection/LongSparseArrayTest.kt b/collection/collection/src/jvmTest/kotlin/androidx/collection/LongSparseArrayExtensionsTest.kt
similarity index 87%
rename from collection/collection-ktx/src/test/java/androidx/collection/LongSparseArrayTest.kt
rename to collection/collection/src/jvmTest/kotlin/androidx/collection/LongSparseArrayExtensionsTest.kt
index 9fd88e6..7cbc3e1 100644
--- a/collection/collection-ktx/src/test/java/androidx/collection/LongSparseArrayTest.kt
+++ b/collection/collection/src/jvmTest/kotlin/androidx/collection/LongSparseArrayExtensionsTest.kt
@@ -1,11 +1,11 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright 2022 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *       http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,22 +24,25 @@
 import org.junit.Assert.assertTrue
 import org.junit.Test
 
-class LongSparseArrayTest {
-    @Test fun sizeProperty() {
+internal class LongSparseArrayExtensionsTest {
+    @Test
+    fun sizeProperty() {
         val array = LongSparseArray<String>()
         assertEquals(0, array.size)
         array.put(1L, "one")
         assertEquals(1, array.size)
     }
 
-    @Test fun containsOperator() {
+    @Test
+    fun containsOperator() {
         val array = LongSparseArray<String>()
         assertFalse(1L in array)
         array.put(1L, "one")
         assertTrue(1L in array)
     }
 
-    @Test fun containsOperatorWithValue() {
+    @Test
+    fun containsOperatorWithValue() {
         val array = LongSparseArray<String>()
 
         array.put(1L, "one")
@@ -49,13 +52,15 @@
         assertTrue(2L in array)
     }
 
-    @Test fun setOperator() {
+    @Test
+    fun setOperator() {
         val array = LongSparseArray<String>()
         array[1L] = "one"
         assertEquals("one", array.get(1L))
     }
 
-    @Test fun plusOperator() {
+    @Test
+    fun plusOperator() {
         val first = LongSparseArray<String>().apply { put(1L, "one") }
         val second = LongSparseArray<String>().apply { put(2L, "two") }
         val combined = first + second
@@ -66,7 +71,8 @@
         assertEquals("two", combined.valueAt(1))
     }
 
-    @Test fun getOrDefault() {
+    @Test
+    fun getOrDefault() {
         val array = LongSparseArray<Any>()
         val default = Any()
         assertSame(default, array.getOrDefault(1L, default))
@@ -74,7 +80,8 @@
         assertEquals("one", array.getOrDefault(1L, default))
     }
 
-    @Test fun getOrElse() {
+    @Test
+    fun getOrElse() {
         val array = LongSparseArray<Any>()
         val default = Any()
         assertSame(default, array.getOrElse(1L) { default })
@@ -82,14 +89,16 @@
         assertEquals("one", array.getOrElse(1L) { fail() })
     }
 
-    @Test fun isNotEmpty() {
+    @Test
+    fun isNotEmpty() {
         val array = LongSparseArray<String>()
         assertFalse(array.isNotEmpty())
         array.put(1L, "one")
         assertTrue(array.isNotEmpty())
     }
 
-    @Test fun forEach() {
+    @Test
+    fun forEach() {
         val array = LongSparseArray<String>()
         array.forEach { _, _ -> fail() }
 
@@ -107,7 +116,8 @@
         assertThat(values).containsExactly("one", "two", "six")
     }
 
-    @Test fun keyIterator() {
+    @Test
+    fun keyIterator() {
         val array = LongSparseArray<String>()
         assertFalse(array.keyIterator().hasNext())
 
@@ -125,7 +135,8 @@
         assertFalse(iterator.hasNext())
     }
 
-    @Test fun valueIterator() {
+    @Test
+    fun valueIterator() {
         val array = LongSparseArray<String>()
         assertFalse(array.valueIterator().hasNext())
 
diff --git a/collection/collection-ktx/src/test/java/androidx/collection/LruCacheTest.kt b/collection/collection/src/jvmTest/kotlin/androidx/collection/LruCacheExtensionsTest.kt
similarity index 87%
rename from collection/collection-ktx/src/test/java/androidx/collection/LruCacheTest.kt
rename to collection/collection/src/jvmTest/kotlin/androidx/collection/LruCacheExtensionsTest.kt
index 66e93fd..6a4b1ea 100644
--- a/collection/collection-ktx/src/test/java/androidx/collection/LruCacheTest.kt
+++ b/collection/collection/src/jvmTest/kotlin/androidx/collection/LruCacheExtensionsTest.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright 2022 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,21 +20,24 @@
 import org.junit.Assert.assertTrue
 import org.junit.Test
 
-class LruCacheTest {
+internal class LruCacheExtensionsTest {
     private data class TestData(val x: String = "bla")
 
-    @Test fun size() {
+    @Test
+    fun size() {
         val cache = lruCache<String, TestData>(200, { k, (x) -> k.length * x.length })
         cache.put("long", TestData())
         assertEquals(cache.size(), 12)
     }
 
-    @Test fun create() {
+    @Test
+    fun create() {
         val cache = lruCache<String, TestData>(200, create = { key -> TestData("$key foo") })
         assertEquals(cache.get("kung"), TestData("kung foo"))
     }
 
-    @Test fun onEntryRemoved() {
+    @Test
+    fun onEntryRemoved() {
         var wasCalled = false
 
         val cache = lruCache<String, TestData>(
diff --git a/collection/collection-ktx/src/test/java/androidx/collection/SparseArrayCompatTest.kt b/collection/collection/src/jvmTest/kotlin/androidx/collection/SparseArrayCompatExtensionsTest.kt
similarity index 87%
rename from collection/collection-ktx/src/test/java/androidx/collection/SparseArrayCompatTest.kt
rename to collection/collection/src/jvmTest/kotlin/androidx/collection/SparseArrayCompatExtensionsTest.kt
index fad7b65..e18ca63 100644
--- a/collection/collection-ktx/src/test/java/androidx/collection/SparseArrayCompatTest.kt
+++ b/collection/collection/src/jvmTest/kotlin/androidx/collection/SparseArrayCompatExtensionsTest.kt
@@ -1,11 +1,11 @@
 /*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright 2022 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *       http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,22 +24,25 @@
 import org.junit.Assert.assertTrue
 import org.junit.Test
 
-class SparseArrayCompatTest {
-    @Test fun sizeProperty() {
+internal class SparseArrayCompatExtensionsTest {
+    @Test
+    fun sizeProperty() {
         val array = SparseArrayCompat<String>()
         assertEquals(0, array.size)
         array.put(1, "one")
         assertEquals(1, array.size)
     }
 
-    @Test fun containsOperator() {
+    @Test
+    fun containsOperator() {
         val array = SparseArrayCompat<String>()
         assertFalse(1 in array)
         array.put(1, "one")
         assertTrue(1 in array)
     }
 
-    @Test fun containsOperatorWithItem() {
+    @Test
+    fun containsOperatorWithItem() {
         val array = SparseArrayCompat<String>()
 
         array.put(1, "one")
@@ -49,13 +52,15 @@
         assertTrue(2 in array)
     }
 
-    @Test fun setOperator() {
+    @Test
+    fun setOperator() {
         val array = SparseArrayCompat<String>()
         array[1] = "one"
         assertEquals("one", array.get(1))
     }
 
-    @Test fun plusOperator() {
+    @Test
+    fun plusOperator() {
         val first = SparseArrayCompat<String>().apply { put(1, "one") }
         val second = SparseArrayCompat<String>().apply { put(2, "two") }
         val combined = first + second
@@ -66,7 +71,8 @@
         assertEquals("two", combined.valueAt(1))
     }
 
-    @Test fun getOrDefault() {
+    @Test
+    fun getOrDefault() {
         val array = SparseArrayCompat<Any>()
         val default = Any()
         assertSame(default, array.getOrDefault(1, default))
@@ -74,7 +80,8 @@
         assertEquals("one", array.getOrDefault(1, default))
     }
 
-    @Test fun getOrElse() {
+    @Test
+    fun getOrElse() {
         val array = SparseArrayCompat<Any>()
         val default = Any()
         assertSame(default, array.getOrElse(1) { default })
@@ -82,14 +89,16 @@
         assertEquals("one", array.getOrElse(1) { fail() })
     }
 
-    @Test fun isNotEmpty() {
+    @Test
+    fun isNotEmpty() {
         val array = SparseArrayCompat<String>()
         assertFalse(array.isNotEmpty())
         array.put(1, "one")
         assertTrue(array.isNotEmpty())
     }
 
-    @Test fun forEach() {
+    @Test
+    fun forEach() {
         val array = SparseArrayCompat<String>()
         array.forEach { _, _ -> fail() }
 
@@ -107,7 +116,8 @@
         assertThat(values).containsExactly("one", "two", "six")
     }
 
-    @Test fun keyIterator() {
+    @Test
+    fun keyIterator() {
         val array = SparseArrayCompat<String>()
         assertFalse(array.keyIterator().hasNext())
 
@@ -125,7 +135,8 @@
         assertFalse(iterator.hasNext())
     }
 
-    @Test fun valueIterator() {
+    @Test
+    fun valueIterator() {
         val array = SparseArrayCompat<String>()
         assertFalse(array.valueIterator().hasNext())