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..df6a4737bd --- /dev/null +++ b/spring-context/src/main/kotlin/org/springframework/cache/CacheExtensions.kt @@ -0,0 +1,44 @@ +/* + * 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 [Cache.get] providing a `get()` variant. + * + * @author Mikhael Sokolov + * @since 6.0 + */ +@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 6.0 + */ +@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 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 new file mode 100644 index 0000000000..afa7d43124 --- /dev/null +++ b/spring-context/src/main/kotlin/org/springframework/cache/CacheManagerExtensions.kt @@ -0,0 +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 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 new file mode 100644 index 0000000000..70f98c38e2 --- /dev/null +++ b/spring-context/src/test/kotlin/org/springframework/cache/CacheExtensionsTest.kt @@ -0,0 +1,48 @@ +/* + * 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 +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..95bd32e384 --- /dev/null +++ b/spring-context/src/test/kotlin/org/springframework/cache/CacheManagerExtensionsTest.kt @@ -0,0 +1,33 @@ +/* + * 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 +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