diff --git a/spring-beans/src/main/kotlin/org/springframework/beans/factory/BeanFactoryExtension.kt b/spring-beans/src/main/kotlin/org/springframework/beans/factory/BeanFactoryExtension.kt deleted file mode 100644 index e7186535e26..00000000000 --- a/spring-beans/src/main/kotlin/org/springframework/beans/factory/BeanFactoryExtension.kt +++ /dev/null @@ -1,47 +0,0 @@ -package org.springframework.beans.factory - -import kotlin.reflect.KClass - -/** - * Extension for [BeanFactory] providing [KClass] based API. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -object BeanFactoryExtension { - - /** - * @see BeanFactory.getBean(Class) - */ - fun BeanFactory.getBean(requiredType: KClass) = getBean(requiredType.java) - - /** - * @see BeanFactory.getBean(Class) - */ - inline fun BeanFactory.getBean() = getBean(T::class.java) - - /** - * @see BeanFactory.getBean(String, Class) - */ - fun BeanFactory.getBean(name: String, requiredType: KClass) = - getBean(name, requiredType.java) - - /** - * @see BeanFactory.getBean(String, Class) - */ - inline fun BeanFactory.getBean(name: String) = - getBean(name, T::class.java) - - /** - * @see BeanFactory.getBean(Class, Object...) - */ - fun BeanFactory.getBean(requiredType: KClass, vararg args:Any) = - getBean(requiredType.java, *args) - - /** - * @see BeanFactory.getBean(Class, Object...) - */ - inline fun BeanFactory.getBean(vararg args:Any) = - getBean(T::class.java, *args) - -} diff --git a/spring-beans/src/main/kotlin/org/springframework/beans/factory/BeanFactoryExtensions.kt b/spring-beans/src/main/kotlin/org/springframework/beans/factory/BeanFactoryExtensions.kt new file mode 100644 index 00000000000..a0212402e27 --- /dev/null +++ b/spring-beans/src/main/kotlin/org/springframework/beans/factory/BeanFactoryExtensions.kt @@ -0,0 +1,60 @@ +package org.springframework.beans.factory + +import kotlin.reflect.KClass + + +/** + * Extension for [BeanFactory.getBean] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun BeanFactory.getBean(requiredType: KClass) = getBean(requiredType.java) + +/** + * Extension for [BeanFactory.getBean] providing a `getBean()` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun BeanFactory.getBean() = getBean(T::class.java) + +/** + * Extension for [BeanFactory.getBean] providing a [KClass] based variant. + * + * @see BeanFactory.getBean(String, Class) + * @author Sebastien Deleuze + * @since 5.0 + */ +fun BeanFactory.getBean(name: String, requiredType: KClass) = + getBean(name, requiredType.java) + +/** + * Extension for [BeanFactory.getBean] providing a `getBean("foo")` variant. + * + * @see BeanFactory.getBean(String, Class) + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun BeanFactory.getBean(name: String) = + getBean(name, T::class.java) + +/** + * Extension for [BeanFactory.getBean] providing a [KClass] based variant. + * + * @see BeanFactory.getBean(Class, Object...) + * @author Sebastien Deleuze + * @since 5.0 + */ +fun BeanFactory.getBean(requiredType: KClass, vararg args:Any) = + getBean(requiredType.java, *args) + +/** + * Extension for [BeanFactory.getBean] providing a `getBean(arg1, arg2)` variant. + * + * @see BeanFactory.getBean(Class, Object...) + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun BeanFactory.getBean(vararg args:Any) = + getBean(T::class.java, *args) diff --git a/spring-beans/src/main/kotlin/org/springframework/beans/factory/ListableBeanFactoryExtension.kt b/spring-beans/src/main/kotlin/org/springframework/beans/factory/ListableBeanFactoryExtension.kt deleted file mode 100644 index 28d6f0413a9..00000000000 --- a/spring-beans/src/main/kotlin/org/springframework/beans/factory/ListableBeanFactoryExtension.kt +++ /dev/null @@ -1,75 +0,0 @@ -package org.springframework.beans.factory - -import kotlin.reflect.KClass - -/** - * Extension for [ListableBeanFactory] providing [KClass] based API. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -object ListableBeanFactoryExtension { - - /** - * @see ListableBeanFactory.getBeanNamesForType(Class, boolean, boolean) - */ - fun ListableBeanFactory.getBeanNamesForType(type: KClass, - includeNonSingletons: Boolean = true, allowEagerInit: Boolean = true) = - getBeanNamesForType(type.java, includeNonSingletons, allowEagerInit) - - /** - * @see ListableBeanFactory.getBeanNamesForType(Class, boolean, boolean) - */ - inline fun ListableBeanFactory.getBeanNamesForType(includeNonSingletons: Boolean = true, allowEagerInit: Boolean = true) = - getBeanNamesForType(T::class.java, includeNonSingletons, allowEagerInit) - - /** - * @see ListableBeanFactory.getBeansOfType(Class, boolean, boolean) - */ - fun ListableBeanFactory.getBeansOfType(type: KClass, - includeNonSingletons: Boolean = true, allowEagerInit: Boolean = true) = - getBeansOfType(type.java, includeNonSingletons, allowEagerInit) - - /** - * @see ListableBeanFactory.getBeansOfType(Class, boolean, boolean) - */ - inline fun ListableBeanFactory.getBeansOfType(includeNonSingletons: Boolean = true, allowEagerInit: Boolean = true) = - getBeansOfType(T::class.java, includeNonSingletons, allowEagerInit) - - /** - * @see ListableBeanFactory.getBeanNamesForAnnotation - */ - fun ListableBeanFactory.getBeanNamesForAnnotation(type: KClass) = - getBeanNamesForAnnotation(type.java) - - /** - * @see ListableBeanFactory.getBeanNamesForAnnotation - */ - inline fun ListableBeanFactory.getBeanNamesForAnnotation() = - getBeanNamesForAnnotation(T::class.java) - - /** - * @see ListableBeanFactory.getBeansWithAnnotation - */ - fun ListableBeanFactory.getBeansWithAnnotation(type: KClass) = - getBeansWithAnnotation(type.java) - - /** - * @see ListableBeanFactory.getBeansWithAnnotation - */ - inline fun ListableBeanFactory.getBeansWithAnnotation() = - getBeansWithAnnotation(T::class.java) - - /** - * @see ListableBeanFactoryExtension.findAnnotationOnBean - */ - fun ListableBeanFactory.findAnnotationOnBean(beanName:String, type: KClass) = - findAnnotationOnBean(beanName, type.java) - - /** - * @see ListableBeanFactoryExtension.findAnnotationOnBean - */ - inline fun ListableBeanFactory.findAnnotationOnBean(beanName:String) = - findAnnotationOnBean(beanName, T::class.java) - -} diff --git a/spring-beans/src/main/kotlin/org/springframework/beans/factory/ListableBeanFactoryExtensions.kt b/spring-beans/src/main/kotlin/org/springframework/beans/factory/ListableBeanFactoryExtensions.kt new file mode 100644 index 00000000000..4f369865e0e --- /dev/null +++ b/spring-beans/src/main/kotlin/org/springframework/beans/factory/ListableBeanFactoryExtensions.kt @@ -0,0 +1,97 @@ +package org.springframework.beans.factory + +import kotlin.reflect.KClass + + +/** + * Extension for [ListableBeanFactory.getBeanNamesForType] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ListableBeanFactory.getBeanNamesForType(type: KClass, + includeNonSingletons: Boolean = true, allowEagerInit: Boolean = true) = + getBeanNamesForType(type.java, includeNonSingletons, allowEagerInit) + +/** + * Extension for [ListableBeanFactory.getBeanNamesForType] providing a `getBeanNamesForType()` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun ListableBeanFactory.getBeanNamesForType(includeNonSingletons: Boolean = true, allowEagerInit: Boolean = true) = + getBeanNamesForType(T::class.java, includeNonSingletons, allowEagerInit) + +/** + * Extension for [ListableBeanFactory.getBeansOfType] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ListableBeanFactory.getBeansOfType(type: KClass, + includeNonSingletons: Boolean = true, allowEagerInit: Boolean = true) = + getBeansOfType(type.java, includeNonSingletons, allowEagerInit) + +/** + * Extension for [ListableBeanFactory.getBeansOfType] providing a `getBeansOfType()` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun ListableBeanFactory.getBeansOfType(includeNonSingletons: Boolean = true, allowEagerInit: Boolean = true) = + getBeansOfType(T::class.java, includeNonSingletons, allowEagerInit) + +/** + * Extension for [ListableBeanFactory.getBeanNamesForAnnotation] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ListableBeanFactory.getBeanNamesForAnnotation(type: KClass) = + getBeanNamesForAnnotation(type.java) + +/** + * Extension for [ListableBeanFactory.getBeanNamesForAnnotation] providing a `getBeansOfType()` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun ListableBeanFactory.getBeanNamesForAnnotation() = + getBeanNamesForAnnotation(T::class.java) + +/** + * Extension for [ListableBeanFactory.getBeansWithAnnotation] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ListableBeanFactory.getBeansWithAnnotation(type: KClass) = + getBeansWithAnnotation(type.java) + +/** + * Extension for [ListableBeanFactory.getBeansWithAnnotation] providing a `getBeansWithAnnotation()` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun ListableBeanFactory.getBeansWithAnnotation() = + getBeansWithAnnotation(T::class.java) + +/** + * Extension for [ListableBeanFactory.findAnnotationOnBean] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ListableBeanFactory.findAnnotationOnBean(beanName:String, type: KClass) = + findAnnotationOnBean(beanName, type.java) + +/** + * Extension for [ListableBeanFactory.findAnnotationOnBean] providing a `findAnnotationOnBean("foo")` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun ListableBeanFactory.findAnnotationOnBean(beanName:String) = + findAnnotationOnBean(beanName, T::class.java) + diff --git a/spring-context/src/main/kotlin/org/springframework/context/annotation/AnnotationConfigApplicationContextExtension.kt b/spring-context/src/main/kotlin/org/springframework/context/annotation/AnnotationConfigApplicationContextExtension.kt deleted file mode 100644 index 427f0761cf1..00000000000 --- a/spring-context/src/main/kotlin/org/springframework/context/annotation/AnnotationConfigApplicationContextExtension.kt +++ /dev/null @@ -1,14 +0,0 @@ -package org.springframework.context.annotation - -/** - * Extension for [AnnotationConfigApplicationContext] providing - * `AnnotationConfigApplicationContext { }` style initialization. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -object AnnotationConfigApplicationContextExtension { - - fun AnnotationConfigApplicationContext(configure: AnnotationConfigApplicationContext.()->Unit) = - AnnotationConfigApplicationContext().apply(configure) -} diff --git a/spring-context/src/main/kotlin/org/springframework/context/annotation/AnnotationConfigApplicationContextExtensions.kt b/spring-context/src/main/kotlin/org/springframework/context/annotation/AnnotationConfigApplicationContextExtensions.kt new file mode 100644 index 00000000000..802598309c3 --- /dev/null +++ b/spring-context/src/main/kotlin/org/springframework/context/annotation/AnnotationConfigApplicationContextExtensions.kt @@ -0,0 +1,11 @@ +package org.springframework.context.annotation + +/** + * Extension for [AnnotationConfigApplicationContext] allowing + * `AnnotationConfigApplicationContext { ... }` style initialization. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun AnnotationConfigApplicationContext(configure: AnnotationConfigApplicationContext.()->Unit) = + AnnotationConfigApplicationContext().apply(configure) diff --git a/spring-context/src/main/kotlin/org/springframework/context/support/GenericApplicationContextExtension.kt b/spring-context/src/main/kotlin/org/springframework/context/support/GenericApplicationContextExtension.kt deleted file mode 100644 index 5e1dc33ede3..00000000000 --- a/spring-context/src/main/kotlin/org/springframework/context/support/GenericApplicationContextExtension.kt +++ /dev/null @@ -1,65 +0,0 @@ -package org.springframework.context.support - -import org.springframework.beans.factory.config.BeanDefinitionCustomizer -import org.springframework.context.ApplicationContext -import java.util.function.Supplier -import kotlin.reflect.KClass - -/** - * Extension for [GenericApplicationContext] providing [KClass] based API and - * avoiding specifying a class parameter for the [Supplier] based variant thanks to - * Kotlin reified type parameters. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -object GenericApplicationContextExtension { - - /** - * @see GenericApplicationContext.registerBean(Class, BeanDefinitionCustomizer...) - */ - fun GenericApplicationContext.registerBean(beanClass: KClass, - vararg customizers: BeanDefinitionCustomizer) { - registerBean(beanClass.java, *customizers) - } - - /** - * @see GenericApplicationContext.registerBean(Class, BeanDefinitionCustomizer...) - */ - inline fun GenericApplicationContext.registerBean(vararg customizers: BeanDefinitionCustomizer) { - registerBean(T::class.java, *customizers) - } - - /** - * @see GenericApplicationContext.registerBean(String, Class, BeanDefinitionCustomizer...) - */ - fun GenericApplicationContext.registerBean(beanName: String, beanClass: KClass, - vararg customizers: BeanDefinitionCustomizer) { - registerBean(beanName, beanClass.java, *customizers) - } - - /** - * @see GenericApplicationContext.registerBean(String, Class, BeanDefinitionCustomizer...) - */ - inline fun GenericApplicationContext.registerBean(beanName: String, vararg customizers: BeanDefinitionCustomizer) { - registerBean(beanName, T::class.java, *customizers) - } - - /** - * @see GenericApplicationContext.registerBean(Class, Supplier, BeanDefinitionCustomizer...) - */ - inline fun GenericApplicationContext.registerBean( - vararg customizers: BeanDefinitionCustomizer, crossinline function: (ApplicationContext) -> T) { - registerBean(T::class.java, Supplier { function.invoke(this) }, *customizers) - } - - /** - * @see GenericApplicationContext.registerBean(String, Class, Supplier, BeanDefinitionCustomizer...) - */ - inline fun GenericApplicationContext.registerBean(name: String, - vararg customizers: BeanDefinitionCustomizer, crossinline function: (ApplicationContext) -> T) { - registerBean(name, T::class.java, Supplier { function.invoke(this) }, *customizers) - } - - fun GenericApplicationContext(configure: GenericApplicationContext.()->Unit) = GenericApplicationContext().apply(configure) -} diff --git a/spring-context/src/main/kotlin/org/springframework/context/support/GenericApplicationContextExtensions.kt b/spring-context/src/main/kotlin/org/springframework/context/support/GenericApplicationContextExtensions.kt new file mode 100644 index 00000000000..7337dddb693 --- /dev/null +++ b/spring-context/src/main/kotlin/org/springframework/context/support/GenericApplicationContextExtensions.kt @@ -0,0 +1,80 @@ +package org.springframework.context.support + +import org.springframework.beans.factory.config.BeanDefinitionCustomizer +import org.springframework.context.ApplicationContext +import java.util.function.Supplier +import kotlin.reflect.KClass + + +/** + * Extension for [GenericApplicationContext.registerBean] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun GenericApplicationContext.registerBean(beanClass: KClass, + vararg customizers: BeanDefinitionCustomizer) { + registerBean(beanClass.java, *customizers) +} + +/** + * Extension for [GenericApplicationContext.registerBean] providing a `registerBean()` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun GenericApplicationContext.registerBean(vararg customizers: BeanDefinitionCustomizer) { + registerBean(T::class.java, *customizers) +} + +/** + * Extension for [GenericApplicationContext.registerBean] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun GenericApplicationContext.registerBean(beanName: String, beanClass: KClass, + vararg customizers: BeanDefinitionCustomizer) { + registerBean(beanName, beanClass.java, *customizers) +} + +/** + * Extension for [GenericApplicationContext.registerBean] providing a `registerBean("foo")` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun GenericApplicationContext.registerBean(beanName: String, vararg customizers: BeanDefinitionCustomizer) { + registerBean(beanName, T::class.java, *customizers) +} + +/** + * Extension for [GenericApplicationContext.registerBean] providing a `registerBean { Foo() }` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun GenericApplicationContext.registerBean( + vararg customizers: BeanDefinitionCustomizer, crossinline function: (ApplicationContext) -> T) { + registerBean(T::class.java, Supplier { function.invoke(this) }, *customizers) +} + +/** + * Extension for [GenericApplicationContext.registerBean] providing a `registerBean("foo") { Foo() }` variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun GenericApplicationContext.registerBean(name: String, + vararg customizers: BeanDefinitionCustomizer, crossinline function: (ApplicationContext) -> T) { + registerBean(name, T::class.java, Supplier { function.invoke(this) }, *customizers) +} + +/** + * Extension for [GenericApplicationContext] allowing `GenericApplicationContext { ... }` style initialization. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun GenericApplicationContext(configure: GenericApplicationContext.()->Unit) = GenericApplicationContext().apply(configure) + diff --git a/spring-context/src/main/kotlin/org/springframework/ui/ModelExtension.kt b/spring-context/src/main/kotlin/org/springframework/ui/ModelExtensions.kt similarity index 67% rename from spring-context/src/main/kotlin/org/springframework/ui/ModelExtension.kt rename to spring-context/src/main/kotlin/org/springframework/ui/ModelExtensions.kt index 6dc568a5d8b..201d714d3a9 100644 --- a/spring-context/src/main/kotlin/org/springframework/ui/ModelExtension.kt +++ b/spring-context/src/main/kotlin/org/springframework/ui/ModelExtensions.kt @@ -17,22 +17,15 @@ package org.springframework.ui /** - * Extension for [Model] providing idiomatic Kotlin API + * Extension for [Model.addAttribute] providing Array like setter. + * + * ```kotlin + * model["firstName"] = "Mario" + * ``` * * @author Mario Arias * @since 5.0 */ -object ModelExtension { - - /** Array like setter for [Model] - * - * ```kotlin - * model["firstName"] = "Mario" - * ``` - * - * @see Model.addAttribute - */ - operator fun Model.set(attributeName: String, attributeValue: Any) { - this.addAttribute(attributeName, attributeValue) - } +operator fun Model.set(attributeName: String, attributeValue: Any) { + this.addAttribute(attributeName, attributeValue) } diff --git a/spring-context/src/main/kotlin/org/springframework/ui/ModelMapExtension.kt b/spring-context/src/main/kotlin/org/springframework/ui/ModelMapExtensions.kt similarity index 66% rename from spring-context/src/main/kotlin/org/springframework/ui/ModelMapExtension.kt rename to spring-context/src/main/kotlin/org/springframework/ui/ModelMapExtensions.kt index 1b28d73551c..e98d929b416 100644 --- a/spring-context/src/main/kotlin/org/springframework/ui/ModelMapExtension.kt +++ b/spring-context/src/main/kotlin/org/springframework/ui/ModelMapExtensions.kt @@ -17,22 +17,16 @@ package org.springframework.ui /** - * Extension for [ModelMap] providing idiomatic Kotlin API + * + * Extension for [ModelMap] providing Array like setter. + * + * ```kotlin + * model["firstName"] = "Mario" + * ``` * * @author Mario Arias * @since 5.0 */ -object ModelMapExtension { - - /** Array like setter for [ModelMap] - * - * ```kotlin - * model["firstName"] = "Mario" - * ``` - * - * @see ModelMap.addAttribute - */ - operator fun ModelMap.set(attributeName: String, attributeValue: Any) { - this.addAttribute(attributeName, attributeValue) - } +operator fun ModelMap.set(attributeName: String, attributeValue: Any) { + this.addAttribute(attributeName, attributeValue) } diff --git a/spring-context/src/test/kotlin/org/springframework/context/support/GenericApplicationContextExtensionTests.kt b/spring-context/src/test/kotlin/org/springframework/context/support/GenericApplicationContextExtensionsTests.kt similarity index 85% rename from spring-context/src/test/kotlin/org/springframework/context/support/GenericApplicationContextExtensionTests.kt rename to spring-context/src/test/kotlin/org/springframework/context/support/GenericApplicationContextExtensionsTests.kt index ef38c0eb8b6..ad1660c4ebc 100644 --- a/spring-context/src/test/kotlin/org/springframework/context/support/GenericApplicationContextExtensionTests.kt +++ b/spring-context/src/test/kotlin/org/springframework/context/support/GenericApplicationContextExtensionsTests.kt @@ -2,11 +2,9 @@ package org.springframework.context.support import org.junit.Assert.assertNotNull import org.junit.Test -import org.springframework.context.support.GenericApplicationContextExtension.registerBean -import org.springframework.beans.factory.BeanFactoryExtension.getBean -import org.springframework.context.support.GenericApplicationContextExtension.GenericApplicationContext +import org.springframework.beans.factory.getBean -class GenericApplicationContextExtensionTests { +class GenericApplicationContextExtensionsTests { @Test fun registerBeanWithClass() { diff --git a/spring-context/src/test/kotlin/org/springframework/ui/ModelExtensionTests.kt b/spring-context/src/test/kotlin/org/springframework/ui/ModelExtensionsTests.kt similarity index 92% rename from spring-context/src/test/kotlin/org/springframework/ui/ModelExtensionTests.kt rename to spring-context/src/test/kotlin/org/springframework/ui/ModelExtensionsTests.kt index 21b6cad000d..bd41714d0f7 100644 --- a/spring-context/src/test/kotlin/org/springframework/ui/ModelExtensionTests.kt +++ b/spring-context/src/test/kotlin/org/springframework/ui/ModelExtensionsTests.kt @@ -19,10 +19,9 @@ package org.springframework.ui import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test -import org.springframework.ui.ModelExtension.set -class ModelExtensionTests { +class ModelExtensionsTests { @Test fun setAttribute() { diff --git a/spring-context/src/test/kotlin/org/springframework/ui/ModelMapExtensionTests.kt b/spring-context/src/test/kotlin/org/springframework/ui/ModelMapExtensionsTests.kt similarity index 91% rename from spring-context/src/test/kotlin/org/springframework/ui/ModelMapExtensionTests.kt rename to spring-context/src/test/kotlin/org/springframework/ui/ModelMapExtensionsTests.kt index d603b679d73..0b5bb99a8ab 100644 --- a/spring-context/src/test/kotlin/org/springframework/ui/ModelMapExtensionTests.kt +++ b/spring-context/src/test/kotlin/org/springframework/ui/ModelMapExtensionsTests.kt @@ -19,10 +19,9 @@ package org.springframework.ui import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue import org.junit.Test -import org.springframework.ui.ModelMapExtension.set -class ModelMapExtensionTests { +class ModelMapExtensionsTests { @Test fun setAttribute() { diff --git a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtension.kt b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtension.kt deleted file mode 100644 index d6d66c05fac..00000000000 --- a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtension.kt +++ /dev/null @@ -1,40 +0,0 @@ -package org.springframework.web.reactive.function - -import org.springframework.http.ReactiveHttpInputMessage -import reactor.core.publisher.Flux -import reactor.core.publisher.Mono -import kotlin.reflect.KClass - -/** - * Extension for [BodyExtactors] providing [KClass] based API and avoiding specifying - * a class parameter when possible thanks to Kotlin reified type parameters. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -object BodyExtractorsExtension { - - /** - * @see BodyExtactors.toMono - */ - inline fun toMono() : BodyExtractor, ReactiveHttpInputMessage> = - BodyExtractors.toMono(T::class.java) - - /** - * @see BodyExtactors.toMono - */ - fun toMono(elementClass: KClass) : BodyExtractor, ReactiveHttpInputMessage> = - BodyExtractors.toMono(elementClass.java) - - /** - * @see BodyExtactors.toFlux - */ - inline fun toFlux() : BodyExtractor, ReactiveHttpInputMessage> = - BodyExtractors.toFlux(T::class.java) - - /** - * @see BodyExtactors.toFlux - */ - fun toFlux(elementClass: KClass) : BodyExtractor, ReactiveHttpInputMessage> = - BodyExtractors.toFlux(elementClass.java) -} diff --git a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensions.kt b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensions.kt new file mode 100644 index 00000000000..cc92004282a --- /dev/null +++ b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyExtractorsExtensions.kt @@ -0,0 +1,42 @@ +package org.springframework.web.reactive.function + +import org.springframework.http.ReactiveHttpInputMessage +import reactor.core.publisher.Flux +import reactor.core.publisher.Mono +import kotlin.reflect.KClass + +/** + * Function for providing a `toMono()` alternative to `BodyExtractors.toMono(Foo::class.java)`. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun toMono() : BodyExtractor, ReactiveHttpInputMessage> = + BodyExtractors.toMono(T::class.java) + +/** + * Function for providing a `toMono(Foo::class)` alternative to `BodyExtractors.toMono(Foo::class.java)`. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun toMono(elementClass: KClass) : BodyExtractor, ReactiveHttpInputMessage> = + BodyExtractors.toMono(elementClass.java) + +/** + * Function for providing a `toFlux()` alternative to `BodyExtractors.toFlux(Foo::class.java)`. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun toFlux() : BodyExtractor, ReactiveHttpInputMessage> = + BodyExtractors.toFlux(T::class.java) + +/** + * Function for providing a `toFlux(Foo::class)` alternative to `BodyExtractors.toFlux(Foo::class.java)`. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun toFlux(elementClass: KClass) : BodyExtractor, ReactiveHttpInputMessage> = + BodyExtractors.toFlux(elementClass.java) diff --git a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtension.kt b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtension.kt deleted file mode 100644 index c380626a96a..00000000000 --- a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtension.kt +++ /dev/null @@ -1,27 +0,0 @@ -package org.springframework.web.reactive.function - -import org.reactivestreams.Publisher -import org.springframework.http.ReactiveHttpOutputMessage -import org.springframework.http.server.reactive.ServerHttpResponse - -/** - * Extension for [BodyInserters] providing [KClass] based API and avoiding specifying - * a class parameter when possible thanks to Kotlin reified type parameters. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -object BodyInsertersExtension { - - /** - * @see BodyInserters.fromPublisher - */ - inline fun , reified S : Any> fromPublisher(publisher: T) : BodyInserter = - BodyInserters.fromPublisher(publisher, S::class.java) - - /** - * @see BodyInserters.fromServerSentEvents - */ - inline fun , reified S : Any> fromServerSentEvents(publisher: T) : BodyInserter = - BodyInserters.fromServerSentEvents(publisher, S::class.java) -} diff --git a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensions.kt b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensions.kt new file mode 100644 index 00000000000..ac50aba2f4e --- /dev/null +++ b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/BodyInsertersExtensions.kt @@ -0,0 +1,23 @@ +package org.springframework.web.reactive.function + +import org.reactivestreams.Publisher +import org.springframework.http.ReactiveHttpOutputMessage +import org.springframework.http.server.reactive.ServerHttpResponse + +/** + * Function for providing a `fromPublisher(publisher)` alternative to `BodyInserters.fromPublisher(publisher, Foo::class.java)`. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun , reified S : Any> fromPublisher(publisher: T) : BodyInserter = + BodyInserters.fromPublisher(publisher, S::class.java) + +/** + * Function for providing a `fromServerSentEvents(publisher)` alternative to `BodyInserters.fromServerSentEvents(publisher, Foo::class.java)`. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +inline fun , reified S : Any> fromServerSentEvents(publisher: T) : BodyInserter = + BodyInserters.fromServerSentEvents(publisher, S::class.java) diff --git a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtension.kt b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtension.kt deleted file mode 100644 index db3207f5580..00000000000 --- a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtension.kt +++ /dev/null @@ -1,24 +0,0 @@ -package org.springframework.web.reactive.function.client - -import reactor.core.publisher.Flux -import reactor.core.publisher.Mono -import kotlin.reflect.KClass - -/** - * Extension for [ClientResponse] providing [KClass] based API. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -object ClientResponseExtension { - - /** - * @see ClientResponse.bodyToFlux - */ - fun ClientResponse.bodyToFlux(type: KClass) : Flux = bodyToFlux(type.java) - - /** - * @see ClientResponse.bodyToMono - */ - fun ClientResponse.bodyToMono(type: KClass) : Mono = bodyToMono(type.java) -} diff --git a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensions.kt b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensions.kt new file mode 100644 index 00000000000..c22f7391923 --- /dev/null +++ b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/client/ClientResponseExtensions.kt @@ -0,0 +1,24 @@ +package org.springframework.web.reactive.function.client + +import reactor.core.publisher.Flux +import reactor.core.publisher.Mono +import kotlin.reflect.KClass + + +/** + * Extension for [ClientResponse.bodyToMono] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ClientResponse.bodyToMono(type: KClass) : Mono = bodyToMono(type.java) + +/** + * Extension for [ClientResponse.bodyToFlux] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ClientResponse.bodyToFlux(type: KClass) : Flux = bodyToFlux(type.java) + + diff --git a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtension.kt b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtension.kt deleted file mode 100644 index f0d0c0f8235..00000000000 --- a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtension.kt +++ /dev/null @@ -1,22 +0,0 @@ -package org.springframework.web.reactive.function.server - -import kotlin.reflect.KClass - -/** - * Extension for [ServerRequest] providing [KClass] based API. - * - * @author Sebastien Deleuze - * @since 5.0 - */ -object ServerRequestExtension { - - /** - * @see ServerRequest.bodyToMono - */ - fun ServerRequest.bodyToMono(type: KClass) = bodyToMono(type.java) - - /** - * @see ServerRequest.bodyToFlux - */ - fun ServerRequest.bodyToFlux(type: KClass) = bodyToFlux(type.java) -} diff --git a/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensions.kt b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensions.kt new file mode 100644 index 00000000000..c9dd5c5ae38 --- /dev/null +++ b/spring-web-reactive/src/main/kotlin/org/springframework/web/reactive/function/server/ServerRequestExtensions.kt @@ -0,0 +1,20 @@ +package org.springframework.web.reactive.function.server + +import kotlin.reflect.KClass + + +/** + * Extension for [ServerRequest.bodyToMono] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ServerRequest.bodyToMono(type: KClass) = bodyToMono(type.java) + +/** + * Extension for [ServerRequest.bodyToFlux] providing a [KClass] based variant. + * + * @author Sebastien Deleuze + * @since 5.0 + */ +fun ServerRequest.bodyToFlux(type: KClass) = bodyToFlux(type.java) diff --git a/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtension.kt b/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtension.kt deleted file mode 100644 index e5f49165f20..00000000000 --- a/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtension.kt +++ /dev/null @@ -1,116 +0,0 @@ -package org.springframework.web.client - -import org.springframework.http.HttpEntity -import org.springframework.http.HttpMethod -import org.springframework.http.RequestEntity -import java.net.URI - -/** - * Extension for [RestOperations] providing [KClass] based API and avoiding specifying - * a class parameter when possible thanks to Kotlin reified type parameters. - * - * @author Jon Schneider - * @author Sebastien Deleuze - * @since 5.0 - */ -object RestOperationsExtension { - - /** - * @see RestOperations.getForObject - */ - @Throws(RestClientException::class) - inline fun RestOperations.getForObject(url: String, vararg uriVariables: Any) = - getForObject(url, T::class.java, *uriVariables) - - /** - * @see RestOperations.getForObject - */ - @Throws(RestClientException::class) - inline fun RestOperations.getForObject(url: String, uriVariables: Map) = - getForObject(url, T::class.java, uriVariables) - - /** - * @see RestOperations.getForObject - */ - @Throws(RestClientException::class) - inline fun RestOperations.getForObject(url: URI) = - getForObject(url, T::class.java) - - /** - * @see RestOperations.getForEntity - */ - @Throws(RestClientException::class) - inline fun RestOperations.getForEntity(url: String, vararg uriVariables: Any) = - getForEntity(url, T::class.java, *uriVariables) - - /** - * @see RestOperations.postForObject - */ - @Throws(RestClientException::class) - inline fun RestOperations.postForObject(url: String, request: Any, vararg uriVariables: Any) = - postForObject(url, request, T::class.java, *uriVariables) - - /** - * @see RestOperations.postForObject - */ - @Throws(RestClientException::class) - inline fun RestOperations.postForObject(url: String, request: Any, uriVariables: Map) = - postForObject(url, request, T::class.java, uriVariables) - - /** - * @see RestOperations.postForObject - */ - @Throws(RestClientException::class) - inline fun RestOperations.postForObject(url: URI, request: Any) = - postForObject(url, request, T::class.java) - - /** - * @see RestOperations.postForEntity - */ - @Throws(RestClientException::class) - inline fun RestOperations.postForEntity(url: String, request: Any, vararg uriVariables: Any) = - postForEntity(url, request, T::class.java, *uriVariables) - - /** - * @see RestOperations.postForEntity - */ - @Throws(RestClientException::class) - inline fun RestOperations.postForEntity(url: String, request: Any, uriVariables: Map) = - postForEntity(url, request, T::class.java, uriVariables) - - /** - * @see RestOperations.postForEntity - */ - @Throws(RestClientException::class) - inline fun RestOperations.postForEntity(url: URI, request: Any) = - postForEntity(url, request, T::class.java) - - /** - * @see RestOperations.exchange - */ - @Throws(RestClientException::class) - inline fun RestOperations.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, vararg uriVariables: Any) = - exchange(url, method, requestEntity, T::class.java, *uriVariables) - - /** - * @see RestOperations.exchange - */ - @Throws(RestClientException::class) - inline fun RestOperations.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, uriVariables: Map) = - exchange(url, method, requestEntity, T::class.java, uriVariables) - - /** - * @see RestOperations.exchange - */ - @Throws(RestClientException::class) - inline fun RestOperations.exchange(url: URI, method: HttpMethod, requestEntity: HttpEntity<*>) = - exchange(url, method, requestEntity, T::class.java) - - /** - * @see RestOperations.exchange - */ - @Throws(RestClientException::class) - inline fun RestOperations.exchange(requestEntity: RequestEntity<*>) = - exchange(requestEntity, T::class.java) - -} diff --git a/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtensions.kt b/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtensions.kt new file mode 100644 index 00000000000..c74be74ec63 --- /dev/null +++ b/spring-web/src/main/kotlin/org/springframework/web/client/RestOperationsExtensions.kt @@ -0,0 +1,159 @@ +package org.springframework.web.client + +import org.springframework.http.HttpEntity +import org.springframework.http.HttpMethod +import org.springframework.http.RequestEntity +import java.net.URI + + +/** + * Extension for [RestOperations.getForObject] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.getForObject(url: String, vararg uriVariables: Any) = + getForObject(url, T::class.java, *uriVariables) + +/** + * Extension for [RestOperations.getForObject] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.getForObject(url: String, uriVariables: Map) = + getForObject(url, T::class.java, uriVariables) + +/** + * Extension for [RestOperations.getForObject] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.getForObject(url: URI) = + getForObject(url, T::class.java) + +/** + * Extension for [RestOperations.getForEntity] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.getForEntity(url: String, vararg uriVariables: Any) = + getForEntity(url, T::class.java, *uriVariables) + +/** + * Extension for [RestOperations.postForObject] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.postForObject(url: String, request: Any, vararg uriVariables: Any) = + postForObject(url, request, T::class.java, *uriVariables) + +/** + * Extension for [RestOperations.postForObject] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.postForObject(url: String, request: Any, uriVariables: Map) = + postForObject(url, request, T::class.java, uriVariables) + +/** + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.postForObject(url: URI, request: Any) = + postForObject(url, request, T::class.java) + +/** + * Extension for [RestOperations.postForEntity] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.postForEntity(url: String, request: Any, vararg uriVariables: Any) = + postForEntity(url, request, T::class.java, *uriVariables) + +/** + * Extension for [RestOperations.postForEntity] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.postForEntity(url: String, request: Any, uriVariables: Map) = + postForEntity(url, request, T::class.java, uriVariables) + +/** + * Extension for [RestOperations.postForEntity] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.postForEntity(url: URI, request: Any) = + postForEntity(url, request, T::class.java) + +/** + * Extension for [RestOperations.exchange] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, vararg uriVariables: Any) = + exchange(url, method, requestEntity, T::class.java, *uriVariables) + +/** + * Extension for [RestOperations.exchange] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.exchange(url: String, method: HttpMethod, requestEntity: HttpEntity<*>, uriVariables: Map) = + exchange(url, method, requestEntity, T::class.java, uriVariables) + +/** + * Extension for [RestOperations.exchange] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.exchange(url: URI, method: HttpMethod, requestEntity: HttpEntity<*>) = + exchange(url, method, requestEntity, T::class.java) + +/** + * Extension for [RestOperations.exchange] avoiding specifying thanks to Kotlin reified type parameters. + * + * @author Jon Schneider + * @author Sebastien Deleuze + * @since 5.0 + */ +@Throws(RestClientException::class) +inline fun RestOperations.exchange(requestEntity: RequestEntity<*>) = + exchange(requestEntity, T::class.java)