diff --git a/spring-integration-kotlin-dsl/README.adoc b/spring-integration-kotlin-dsl/README.adoc index 5d4e796..2628d10 100644 --- a/spring-integration-kotlin-dsl/README.adoc +++ b/spring-integration-kotlin-dsl/README.adoc @@ -36,7 +36,7 @@ fun flowLambda() = integrationFlow { handle { m -> println(m.payload) } }) - transform({ it.toUpperCase() }) + transform { it.toUpperCase() } } ---- ==== diff --git a/spring-integration-kotlin-dsl/build.gradle b/spring-integration-kotlin-dsl/build.gradle index a090c09..0057783 100644 --- a/spring-integration-kotlin-dsl/build.gradle +++ b/spring-integration-kotlin-dsl/build.gradle @@ -27,11 +27,11 @@ repositories { ext { assertkVersion = '0.20' - jacksonVersion = '2.10.0' + jacksonVersion = '2.10.1' junitVersion = '5.5.2' log4jVersion = '2.12.1' - reactorVersion = 'Dysprosium-RC1' - springIntegrationVersion = '5.2.1.RELEASE' + reactorVersion = 'Dysprosium-SR1' + springIntegrationVersion = '5.2.2.RELEASE' idPrefix = 'kotlin-dsl' @@ -106,7 +106,6 @@ test { // suppress all console output during testing unless running `gradle -i` logging.captureStandardOutput(LogLevel.INFO) jacoco { - append = false destinationFile = file("$buildDir/jacoco.exec") } useJUnitPlatform() diff --git a/spring-integration-kotlin-dsl/gradle.properties b/spring-integration-kotlin-dsl/gradle.properties index ba83c68..3e7a656 100644 --- a/spring-integration-kotlin-dsl/gradle.properties +++ b/spring-integration-kotlin-dsl/gradle.properties @@ -1,2 +1,2 @@ version=0.0.3.BUILD-SNAPSHOT -kotlinVersion=1.3.50 +kotlinVersion=1.3.61 diff --git a/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.jar b/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf..cc4fdc2 100644 Binary files a/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.jar and b/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.jar differ diff --git a/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.properties b/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.properties index 5028f28..9492014 100644 --- a/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.properties +++ b/spring-integration-kotlin-dsl/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/spring-integration-kotlin-dsl/gradlew b/spring-integration-kotlin-dsl/gradlew index 83f2acf..2fe81a7 100755 --- a/spring-integration-kotlin-dsl/gradlew +++ b/spring-integration-kotlin-dsl/gradlew @@ -154,19 +154,19 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -175,14 +175,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/IntegrationFlowDsl.kt b/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/IntegrationFlowDsl.kt index 50b57b0..453d0c7 100644 --- a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/IntegrationFlowDsl.kt +++ b/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/IntegrationFlowDsl.kt @@ -49,9 +49,9 @@ fun integrationFlow(@BuilderInference flow: KotlinIntegrationFlowDefinition.() - * * @author Artem Bilan */ -inline fun integrationFlow(crossinline gateway: (GatewayProxySpec) -> Unit = {}, - @BuilderInference flow: KotlinIntegrationFlowDefinition.() -> Unit): - IntegrationFlow { +inline fun integrationFlow( + crossinline gateway: (GatewayProxySpec) -> Unit = {}, + @BuilderInference flow: KotlinIntegrationFlowDefinition.() -> Unit): IntegrationFlow { val flowBuilder = IntegrationFlows.from(T::class.java) { gateway(it) } flow(KotlinIntegrationFlowDefinition(flowBuilder)) diff --git a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/KotlinIntegrationFlowDefinition.kt b/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/KotlinIntegrationFlowDefinition.kt index f9f83e1..239477f 100644 --- a/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/KotlinIntegrationFlowDefinition.kt +++ b/spring-integration-kotlin-dsl/src/main/kotlin/org/springframework/integration/dsl/KotlinIntegrationFlowDefinition.kt @@ -115,42 +115,71 @@ class KotlinIntegrationFlowDefinition(private val adaptee: IntegrationFlowDefini KotlinIntegrationFlowDefinition = convert(T::class.java) { configurer(it) } + /** + * Inline function for [IntegrationFlowDefinition.transform] providing a `transform()` variant + * with reified generic type. + */ + inline fun transform(crossinline function: (P) -> T): KotlinIntegrationFlowDefinition = + transform(P::class.java) { function(it) } + /** * Inline function for [IntegrationFlowDefinition.transform] providing a `transform()` variant * with reified generic type. */ inline fun transform( crossinline function: (P) -> T, - crossinline configurer: (GenericEndpointSpec) -> Unit = {}): + crossinline configurer: (GenericEndpointSpec) -> Unit): KotlinIntegrationFlowDefinition = transform(P::class.java, { function(it) }) { configurer(it) } + /** + * Inline function for [IntegrationFlowDefinition.split] providing a `split()` variant + * with reified generic type. + */ + inline fun split(crossinline function: (P) -> Any): KotlinIntegrationFlowDefinition = + split(P::class.java) { function(it) } + /** * Inline function for [IntegrationFlowDefinition.split] providing a `split()` variant * with reified generic type. */ inline fun split( crossinline function: (P) -> Any, - crossinline configurer: (SplitterEndpointSpec) -> Unit = {}): + crossinline configurer: (SplitterEndpointSpec) -> Unit): KotlinIntegrationFlowDefinition = split(P::class.java, { function(it) }) { configurer(it) } + /** + * Inline function for [IntegrationFlowDefinition.filter] providing a `filter()` variant + * with reified generic type. + */ + inline fun filter(crossinline function: (P) -> Boolean): KotlinIntegrationFlowDefinition = + filter(P::class.java) { function(it) } + + /** * Inline function for [IntegrationFlowDefinition.filter] providing a `filter()` variant * with reified generic type. */ inline fun filter( crossinline function: (P) -> Boolean, - crossinline configurer: (FilterEndpointSpec) -> Unit = {}): KotlinIntegrationFlowDefinition = + crossinline configurer: (FilterEndpointSpec) -> Unit): KotlinIntegrationFlowDefinition = filter(P::class.java, { function(it) }) { configurer(it) } + /** + * Inline function for [IntegrationFlowDefinition.filter] providing a `filter()` variant + * with reified generic type. + */ + inline fun route(crossinline function: (P) -> T): KotlinIntegrationFlowDefinition = + route(P::class.java) { function(it) } + /** * Inline function for [IntegrationFlowDefinition.filter] providing a `filter()` variant * with reified generic type. */ inline fun route( crossinline function: (P) -> T, - crossinline configurer: (RouterSpec) -> Unit = {}): + crossinline configurer: (RouterSpec) -> Unit): KotlinIntegrationFlowDefinition = route(P::class.java, { function(it) }) { configurer(it) } diff --git a/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt b/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt index 6b0b86e..35fb618 100644 --- a/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt +++ b/spring-integration-kotlin-dsl/src/test/kotlin/org/springframework/integration/dsl/kotlin/test/KotlinDslTests.kt @@ -206,15 +206,17 @@ class KotlinDslTests { @Bean fun functionFlow() = integrationFlow>({ it.beanName("functionGateway") }) { - transform({ it.toUpperCase() }) - split({ p -> p }) + transform { it.toUpperCase() } + split { p -> p } + split({ p -> p }) { it.id("splitterEndpoint") } } @Bean fun functionFlow2() = integrationFlow> { - transform({ it.toLowerCase() }) - route, Any?>({ m -> m.headers.replyChannel }) { it.id("router") } + transform { it.toLowerCase() } + route, Any?>({ null }) { it.defaultOutputToParentFlow() } + route, Any?> { m -> m.headers.replyChannel } } @Bean @@ -246,19 +248,19 @@ class KotlinDslTests { fun flowFromSupplier2() = integrationFlow({ "testSupplier2" }, { it.poller { it.trigger(OnlyOnceTrigger()) } }) { - filter>({ m -> m.payload is String }) + filter> { m -> m.payload is String } channel { c -> c.queue("testSupplierResult2") } } @Bean fun flowLambda() = integrationFlow { - filter({ it === "test" }) + filter({ it === "test" }) { it.id("filterEndpoint") } wireTap( integrationFlow { channel { c -> c.queue("wireTapChannel") } }) - transform({ it.toUpperCase() }) + transform { it.toUpperCase() } } }