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())