From 5ec1e20242bd47e87f822375ba34c39ef423b6d1 Mon Sep 17 00:00:00 2001 From: sokomishalov Date: Sat, 2 Nov 2019 14:25:38 +0300 Subject: [PATCH] Add Kotlin extensions for Cache and CacheManager See gh-23927 --- .../springframework/cache/CacheExtensions.kt | 44 +++++++++++++++++++ .../cache/CacheManagerExtensions.kt | 9 ++++ .../cache/CacheExtensionsTest.kt | 31 +++++++++++++ .../cache/CacheManagerExtensionsTest.kt | 16 +++++++ 4 files changed, 100 insertions(+) create mode 100644 spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt create mode 100644 spring-context/src/main/kotlin/org/springframework/cache/CacheManagerExtensions.kt create mode 100644 spring-context/src/test/kotlin/org/springframework/cache/CacheExtensionsTest.kt create mode 100644 spring-context/src/test/kotlin/org/springframework/cache/CacheManagerExtensionsTest.kt diff --git a/spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt b/spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt new file mode 100644 index 0000000000..fe0f3d5deb --- /dev/null +++ b/spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2002-2019 the original author or authors. + * + * 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 + * + * https://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 org.springframework.cache + + +/** + * Extension for [Cache.get] providing a `get()` variant. + * + * @author Mikhael Sokolov + * @since 5.2 + */ +@Suppress("EXTENSION_SHADOWED_BY_MEMBER") +inline fun Cache.get(key: Any): T? = get(key, T::class.java) + +/** + * Extension for [Cache.get] providing a `foo[key]` variant. + * + * @author Mikhael Sokolov + * @since 5.2 + */ +@Suppress("EXTENSION_SHADOWED_BY_MEMBER") +operator fun Cache.get(key: Any): Cache.ValueWrapper? = get(key) + +/** + * Extension for [Cache.put] providing a `foo[key]` variant. + * + * @author Mikhael Sokolov + * @since 5.2 + */ +operator fun Cache.set(key: Any, value: Any?) = put(key, value) \ No newline at end of file diff --git a/spring-context/src/main/kotlin/org/springframework/cache/CacheManagerExtensions.kt b/spring-context/src/main/kotlin/org/springframework/cache/CacheManagerExtensions.kt new file mode 100644 index 0000000000..bc26566370 --- /dev/null +++ b/spring-context/src/main/kotlin/org/springframework/cache/CacheManagerExtensions.kt @@ -0,0 +1,9 @@ +package org.springframework.cache + +/** + * Extension for [CacheManager.getCache(name)] providing a `cm[name]` variant. + * + * @author Mikhael Sokolov + * @since 5.2 + */ +operator fun CacheManager.get(name: String): Cache? = getCache(name) \ No newline at end of file diff --git a/spring-context/src/test/kotlin/org/springframework/cache/CacheExtensionsTest.kt b/spring-context/src/test/kotlin/org/springframework/cache/CacheExtensionsTest.kt new file mode 100644 index 0000000000..28d52f92f3 --- /dev/null +++ b/spring-context/src/test/kotlin/org/springframework/cache/CacheExtensionsTest.kt @@ -0,0 +1,31 @@ +package org.springframework.cache + +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Test +import org.springframework.cache.concurrent.ConcurrentMapCacheManager + +class CacheExtensionsTest { + + @Test + fun `Check inline get variant`() { + val cache = createCache() + cache.put("k", "v") + assertEquals("v", cache.get("k")) + } + + @Test + fun `Check operator get variant`() { + val cache = createCache() + cache.put("k", "v") + assertEquals("v", cache["k"]?.get() as String?) + } + + @Test + fun `Check operator set variant`() { + val cache = createCache() + cache["k"] = "v" + assertEquals("v", cache.get("k", String::class.java)) + } + + private fun createCache(cacheName: String = "c"): Cache = ConcurrentMapCacheManager(cacheName).getCache(cacheName)!! +} \ No newline at end of file diff --git a/spring-context/src/test/kotlin/org/springframework/cache/CacheManagerExtensionsTest.kt b/spring-context/src/test/kotlin/org/springframework/cache/CacheManagerExtensionsTest.kt new file mode 100644 index 0000000000..43765e407a --- /dev/null +++ b/spring-context/src/test/kotlin/org/springframework/cache/CacheManagerExtensionsTest.kt @@ -0,0 +1,16 @@ +package org.springframework.cache + +import org.junit.jupiter.api.Assertions.assertNotEquals +import org.junit.jupiter.api.Test +import org.springframework.cache.concurrent.ConcurrentMapCacheManager + +class CacheManagerExtensionsTest { + + @Test + fun `Check operator get variant`() { + val cm = createCacheManager("c") + assertNotEquals(null, cm["c"]) + } + + private fun createCacheManager(cacheName: String = "c"): CacheManager = ConcurrentMapCacheManager(cacheName) +} \ No newline at end of file