Skip to content

Commit 1bd94df

Browse files
committed
use ConcurrentHashMap
1 parent 4f41100 commit 1bd94df

File tree

1 file changed

+7
-4
lines changed
  • library/src/main/java/com/hoc081098/viewbindingdelegate/internal

1 file changed

+7
-4
lines changed

library/src/main/java/com/hoc081098/viewbindingdelegate/internal/cache.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,25 @@
2525
package com.hoc081098.viewbindingdelegate.internal
2626

2727
import androidx.annotation.AnyThread
28-
import androidx.collection.ArrayMap
2928
import androidx.viewbinding.ViewBinding
3029
import java.lang.reflect.Method
30+
import java.util.concurrent.ConcurrentHashMap
3131

3232
@AnyThread
3333
internal sealed interface MethodCache {
3434
fun <T : ViewBinding> getOrPut(clazz: Class<T>): Method
3535
}
3636

3737
private abstract class AbstractMethodCache : MethodCache {
38-
private val cache: MutableMap<Class<out ViewBinding>, Method> = ArrayMap()
38+
private val cache: MutableMap<Class<out ViewBinding>, Method> = ConcurrentHashMap()
3939

4040
override fun <T : ViewBinding> getOrPut(clazz: Class<T>) =
4141
measureNanoTime("[${this::class.java.simpleName}-getOrPut] class=$clazz") {
42-
synchronized(cache) {
43-
cache.getOrPut(clazz) { clazz.findMethod() }
42+
cache[clazz]?.let { return@measureNanoTime it }
43+
44+
clazz.findMethod().also {
45+
// Cache update.
46+
cache[clazz] = it
4447
}
4548
}
4649

0 commit comments

Comments
 (0)