Add overloaded method to avoid extra parentheses
It turns out that we can have a simple
`transform<String, String> { it.toLowerCase() }`
with extra parentheses around lambda and also another variant like
`split<String>({ p -> p }) { it.id("splitterEndpoint") }`.
Everything works with overloaded methods with and without extra
configurer parameter
* Upgrade dependencies, including Gradle
This commit is contained in:
@@ -36,7 +36,7 @@ fun flowLambda() =
|
|||||||
integrationFlow {
|
integrationFlow {
|
||||||
handle { m -> println(m.payload) }
|
handle { m -> println(m.payload) }
|
||||||
})
|
})
|
||||||
transform<String, String>({ it.toUpperCase() })
|
transform<String, String> { it.toUpperCase() }
|
||||||
}
|
}
|
||||||
----
|
----
|
||||||
====
|
====
|
||||||
|
|||||||
@@ -27,11 +27,11 @@ repositories {
|
|||||||
|
|
||||||
ext {
|
ext {
|
||||||
assertkVersion = '0.20'
|
assertkVersion = '0.20'
|
||||||
jacksonVersion = '2.10.0'
|
jacksonVersion = '2.10.1'
|
||||||
junitVersion = '5.5.2'
|
junitVersion = '5.5.2'
|
||||||
log4jVersion = '2.12.1'
|
log4jVersion = '2.12.1'
|
||||||
reactorVersion = 'Dysprosium-RC1'
|
reactorVersion = 'Dysprosium-SR1'
|
||||||
springIntegrationVersion = '5.2.1.RELEASE'
|
springIntegrationVersion = '5.2.2.RELEASE'
|
||||||
|
|
||||||
idPrefix = 'kotlin-dsl'
|
idPrefix = 'kotlin-dsl'
|
||||||
|
|
||||||
@@ -106,7 +106,6 @@ test {
|
|||||||
// suppress all console output during testing unless running `gradle -i`
|
// suppress all console output during testing unless running `gradle -i`
|
||||||
logging.captureStandardOutput(LogLevel.INFO)
|
logging.captureStandardOutput(LogLevel.INFO)
|
||||||
jacoco {
|
jacoco {
|
||||||
append = false
|
|
||||||
destinationFile = file("$buildDir/jacoco.exec")
|
destinationFile = file("$buildDir/jacoco.exec")
|
||||||
}
|
}
|
||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
version=0.0.3.BUILD-SNAPSHOT
|
version=0.0.3.BUILD-SNAPSHOT
|
||||||
kotlinVersion=1.3.50
|
kotlinVersion=1.3.61
|
||||||
|
|||||||
Binary file not shown.
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
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
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
29
spring-integration-kotlin-dsl/gradlew
vendored
29
spring-integration-kotlin-dsl/gradlew
vendored
@@ -154,19 +154,19 @@ if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
|
|||||||
else
|
else
|
||||||
eval `echo args$i`="\"$arg\""
|
eval `echo args$i`="\"$arg\""
|
||||||
fi
|
fi
|
||||||
i=$((i+1))
|
i=`expr $i + 1`
|
||||||
done
|
done
|
||||||
case $i in
|
case $i in
|
||||||
(0) set -- ;;
|
0) set -- ;;
|
||||||
(1) set -- "$args0" ;;
|
1) set -- "$args0" ;;
|
||||||
(2) set -- "$args0" "$args1" ;;
|
2) set -- "$args0" "$args1" ;;
|
||||||
(3) set -- "$args0" "$args1" "$args2" ;;
|
3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -175,14 +175,9 @@ save () {
|
|||||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||||
echo " "
|
echo " "
|
||||||
}
|
}
|
||||||
APP_ARGS=$(save "$@")
|
APP_ARGS=`save "$@"`
|
||||||
|
|
||||||
# Collect all arguments for the java command, following the shell quoting and substitution rules
|
# 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"
|
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" "$@"
|
exec "$JAVACMD" "$@"
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ fun integrationFlow(@BuilderInference flow: KotlinIntegrationFlowDefinition.() -
|
|||||||
*
|
*
|
||||||
* @author Artem Bilan
|
* @author Artem Bilan
|
||||||
*/
|
*/
|
||||||
inline fun <reified T> integrationFlow(crossinline gateway: (GatewayProxySpec) -> Unit = {},
|
inline fun <reified T> integrationFlow(
|
||||||
@BuilderInference flow: KotlinIntegrationFlowDefinition.() -> Unit):
|
crossinline gateway: (GatewayProxySpec) -> Unit = {},
|
||||||
IntegrationFlow {
|
@BuilderInference flow: KotlinIntegrationFlowDefinition.() -> Unit): IntegrationFlow {
|
||||||
|
|
||||||
val flowBuilder = IntegrationFlows.from(T::class.java) { gateway(it) }
|
val flowBuilder = IntegrationFlows.from(T::class.java) { gateway(it) }
|
||||||
flow(KotlinIntegrationFlowDefinition(flowBuilder))
|
flow(KotlinIntegrationFlowDefinition(flowBuilder))
|
||||||
|
|||||||
@@ -115,42 +115,71 @@ class KotlinIntegrationFlowDefinition(private val adaptee: IntegrationFlowDefini
|
|||||||
KotlinIntegrationFlowDefinition =
|
KotlinIntegrationFlowDefinition =
|
||||||
convert(T::class.java) { configurer(it) }
|
convert(T::class.java) { configurer(it) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inline function for [IntegrationFlowDefinition.transform] providing a `transform<MyTypeIn, MyTypeOut>()` variant
|
||||||
|
* with reified generic type.
|
||||||
|
*/
|
||||||
|
inline fun <reified P, T> transform(crossinline function: (P) -> T): KotlinIntegrationFlowDefinition =
|
||||||
|
transform(P::class.java) { function(it) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inline function for [IntegrationFlowDefinition.transform] providing a `transform<MyTypeIn, MyTypeOut>()` variant
|
* Inline function for [IntegrationFlowDefinition.transform] providing a `transform<MyTypeIn, MyTypeOut>()` variant
|
||||||
* with reified generic type.
|
* with reified generic type.
|
||||||
*/
|
*/
|
||||||
inline fun <reified P, T> transform(
|
inline fun <reified P, T> transform(
|
||||||
crossinline function: (P) -> T,
|
crossinline function: (P) -> T,
|
||||||
crossinline configurer: (GenericEndpointSpec<MessageTransformingHandler>) -> Unit = {}):
|
crossinline configurer: (GenericEndpointSpec<MessageTransformingHandler>) -> Unit):
|
||||||
KotlinIntegrationFlowDefinition =
|
KotlinIntegrationFlowDefinition =
|
||||||
transform(P::class.java, { function(it) }) { configurer(it) }
|
transform(P::class.java, { function(it) }) { configurer(it) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inline function for [IntegrationFlowDefinition.split] providing a `split<MyTypeIn>()` variant
|
||||||
|
* with reified generic type.
|
||||||
|
*/
|
||||||
|
inline fun <reified P> split(crossinline function: (P) -> Any): KotlinIntegrationFlowDefinition =
|
||||||
|
split(P::class.java) { function(it) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inline function for [IntegrationFlowDefinition.split] providing a `split<MyTypeIn>()` variant
|
* Inline function for [IntegrationFlowDefinition.split] providing a `split<MyTypeIn>()` variant
|
||||||
* with reified generic type.
|
* with reified generic type.
|
||||||
*/
|
*/
|
||||||
inline fun <reified P> split(
|
inline fun <reified P> split(
|
||||||
crossinline function: (P) -> Any,
|
crossinline function: (P) -> Any,
|
||||||
crossinline configurer: (SplitterEndpointSpec<MethodInvokingSplitter>) -> Unit = {}):
|
crossinline configurer: (SplitterEndpointSpec<MethodInvokingSplitter>) -> Unit):
|
||||||
KotlinIntegrationFlowDefinition =
|
KotlinIntegrationFlowDefinition =
|
||||||
split(P::class.java, { function(it) }) { configurer(it) }
|
split(P::class.java, { function(it) }) { configurer(it) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inline function for [IntegrationFlowDefinition.filter] providing a `filter<MyTypeIn>()` variant
|
||||||
|
* with reified generic type.
|
||||||
|
*/
|
||||||
|
inline fun <reified P> filter(crossinline function: (P) -> Boolean): KotlinIntegrationFlowDefinition =
|
||||||
|
filter(P::class.java) { function(it) }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inline function for [IntegrationFlowDefinition.filter] providing a `filter<MyTypeIn>()` variant
|
* Inline function for [IntegrationFlowDefinition.filter] providing a `filter<MyTypeIn>()` variant
|
||||||
* with reified generic type.
|
* with reified generic type.
|
||||||
*/
|
*/
|
||||||
inline fun <reified P> filter(
|
inline fun <reified P> filter(
|
||||||
crossinline function: (P) -> Boolean,
|
crossinline function: (P) -> Boolean,
|
||||||
crossinline configurer: (FilterEndpointSpec) -> Unit = {}): KotlinIntegrationFlowDefinition =
|
crossinline configurer: (FilterEndpointSpec) -> Unit): KotlinIntegrationFlowDefinition =
|
||||||
filter(P::class.java, { function(it) }) { configurer(it) }
|
filter(P::class.java, { function(it) }) { configurer(it) }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Inline function for [IntegrationFlowDefinition.filter] providing a `filter<MyTypeIn>()` variant
|
||||||
|
* with reified generic type.
|
||||||
|
*/
|
||||||
|
inline fun <reified P, T> route(crossinline function: (P) -> T): KotlinIntegrationFlowDefinition =
|
||||||
|
route(P::class.java) { function(it) }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inline function for [IntegrationFlowDefinition.filter] providing a `filter<MyTypeIn>()` variant
|
* Inline function for [IntegrationFlowDefinition.filter] providing a `filter<MyTypeIn>()` variant
|
||||||
* with reified generic type.
|
* with reified generic type.
|
||||||
*/
|
*/
|
||||||
inline fun <reified P, T> route(
|
inline fun <reified P, T> route(
|
||||||
crossinline function: (P) -> T,
|
crossinline function: (P) -> T,
|
||||||
crossinline configurer: (RouterSpec<T, MethodInvokingRouter>) -> Unit = {}):
|
crossinline configurer: (RouterSpec<T, MethodInvokingRouter>) -> Unit):
|
||||||
KotlinIntegrationFlowDefinition =
|
KotlinIntegrationFlowDefinition =
|
||||||
route(P::class.java, { function(it) }) { configurer(it) }
|
route(P::class.java, { function(it) }) { configurer(it) }
|
||||||
|
|
||||||
|
|||||||
@@ -206,15 +206,17 @@ class KotlinDslTests {
|
|||||||
@Bean
|
@Bean
|
||||||
fun functionFlow() =
|
fun functionFlow() =
|
||||||
integrationFlow<Function<String, String>>({ it.beanName("functionGateway") }) {
|
integrationFlow<Function<String, String>>({ it.beanName("functionGateway") }) {
|
||||||
transform<String, String>({ it.toUpperCase() })
|
transform<String, String> { it.toUpperCase() }
|
||||||
split<String>({ p -> p })
|
split<String> { p -> p }
|
||||||
|
split<String>({ p -> p }) { it.id("splitterEndpoint") }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
fun functionFlow2() =
|
fun functionFlow2() =
|
||||||
integrationFlow<Function<*, *>> {
|
integrationFlow<Function<*, *>> {
|
||||||
transform<String, String>({ it.toLowerCase() })
|
transform<String, String> { it.toLowerCase() }
|
||||||
route<Message<*>, Any?>({ m -> m.headers.replyChannel }) { it.id("router") }
|
route<Message<*>, Any?>({ null }) { it.defaultOutputToParentFlow() }
|
||||||
|
route<Message<*>, Any?> { m -> m.headers.replyChannel }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@@ -246,19 +248,19 @@ class KotlinDslTests {
|
|||||||
fun flowFromSupplier2() =
|
fun flowFromSupplier2() =
|
||||||
integrationFlow({ "testSupplier2" },
|
integrationFlow({ "testSupplier2" },
|
||||||
{ it.poller { it.trigger(OnlyOnceTrigger()) } }) {
|
{ it.poller { it.trigger(OnlyOnceTrigger()) } }) {
|
||||||
filter<Message<Any>>({ m -> m.payload is String })
|
filter<Message<Any>> { m -> m.payload is String }
|
||||||
channel { c -> c.queue("testSupplierResult2") }
|
channel { c -> c.queue("testSupplierResult2") }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
fun flowLambda() =
|
fun flowLambda() =
|
||||||
integrationFlow {
|
integrationFlow {
|
||||||
filter<String>({ it === "test" })
|
filter<String>({ it === "test" }) { it.id("filterEndpoint") }
|
||||||
wireTap(
|
wireTap(
|
||||||
integrationFlow {
|
integrationFlow {
|
||||||
channel { c -> c.queue("wireTapChannel") }
|
channel { c -> c.queue("wireTapChannel") }
|
||||||
})
|
})
|
||||||
transform<String, String>({ it.toUpperCase() })
|
transform<String, String> { it.toUpperCase() }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user