From 5ec1e20242bd47e87f822375ba34c39ef423b6d1 Mon Sep 17 00:00:00 2001 From: sokomishalov Date: Sat, 2 Nov 2019 14:25:38 +0300 Subject: [PATCH 1/2] 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 From 65dc2afe9d54c785333b34559de3f2a846a972d4 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 2 Dec 2021 14:49:46 +0100 Subject: [PATCH 2/2] Polish "Add Kotlin extensions for Cache and CacheManager" See gh-23927 --- .../springframework/cache/CacheExtensions.kt | 8 ++++---- .../cache/CacheManagerExtensions.kt | 18 +++++++++++++++++- .../cache/CacheExtensionsTest.kt | 19 ++++++++++++++++++- .../cache/CacheManagerExtensionsTest.kt | 19 ++++++++++++++++++- 4 files changed, 57 insertions(+), 7 deletions(-) diff --git a/spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt b/spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt index fe0f3d5deb..df6a4737bd 100644 --- a/spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt +++ b/spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2021 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. @@ -21,7 +21,7 @@ package org.springframework.cache * Extension for [Cache.get] providing a `get()` variant. * * @author Mikhael Sokolov - * @since 5.2 + * @since 6.0 */ @Suppress("EXTENSION_SHADOWED_BY_MEMBER") inline fun Cache.get(key: Any): T? = get(key, T::class.java) @@ -30,7 +30,7 @@ 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 + * @since 6.0 */ @Suppress("EXTENSION_SHADOWED_BY_MEMBER") operator fun Cache.get(key: Any): Cache.ValueWrapper? = get(key) @@ -39,6 +39,6 @@ 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 + * @since 6.0 */ 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 index bc26566370..afa7d43124 100644 --- a/spring-context/src/main/kotlin/org/springframework/cache/CacheManagerExtensions.kt +++ b/spring-context/src/main/kotlin/org/springframework/cache/CacheManagerExtensions.kt @@ -1,9 +1,25 @@ +/* + * Copyright 2002-2021 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 [CacheManager.getCache(name)] providing a `cm[name]` variant. * * @author Mikhael Sokolov - * @since 5.2 + * @since 6.0 */ 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 index 28d52f92f3..70f98c38e2 100644 --- a/spring-context/src/test/kotlin/org/springframework/cache/CacheExtensionsTest.kt +++ b/spring-context/src/test/kotlin/org/springframework/cache/CacheExtensionsTest.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2002-2021 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 import org.junit.jupiter.api.Assertions.assertEquals @@ -27,5 +43,6 @@ class CacheExtensionsTest { assertEquals("v", cache.get("k", String::class.java)) } - private fun createCache(cacheName: String = "c"): Cache = ConcurrentMapCacheManager(cacheName).getCache(cacheName)!! + 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 index 43765e407a..95bd32e384 100644 --- a/spring-context/src/test/kotlin/org/springframework/cache/CacheManagerExtensionsTest.kt +++ b/spring-context/src/test/kotlin/org/springframework/cache/CacheManagerExtensionsTest.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2002-2021 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 import org.junit.jupiter.api.Assertions.assertNotEquals @@ -12,5 +28,6 @@ class CacheManagerExtensionsTest { assertNotEquals(null, cm["c"]) } - private fun createCacheManager(cacheName: String = "c"): CacheManager = ConcurrentMapCacheManager(cacheName) + private fun createCacheManager(cacheName: String = "c"): CacheManager = + ConcurrentMapCacheManager(cacheName) } \ No newline at end of file