Skip to content

Commit

Permalink
Merge pull request #44 from domgom/support-kotlin-1.3.21
Browse files Browse the repository at this point in the history
Support for Kotlin 1.3.21 and coroutines 1.1.1
  • Loading branch information
konrad-kaminski committed May 30, 2019
2 parents 36a1d0b + e156f26 commit 8dc143d
Show file tree
Hide file tree
Showing 125 changed files with 468 additions and 527 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@ contexts/bean types are supported:
2. `DEFAULT_DISPATCHER` - a constant specifying the [`Dispatchers.Default`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental/-dispatchers/-default.html) context
3. `UNCONFINED` - a constant specifying the [`Dispatchers.Unconfined`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental/-dispatchers/-unconfined.html) context
4. [`Executor`](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html) type beans - converted to [`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-coroutine-context/) with [`asCoroutineDispatcher`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.experimental/java.util.concurrent.-executor/as-coroutine-dispatcher.html)
5. Rx1 [`Scheduler`](http://reactivex.io/RxJava/javadoc/io/reactivex/Scheduler.html) type beans - converted to [`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-coroutine-context/) with [`asCoroutineDispatcher`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-rx1/kotlinx.coroutines.experimental.rx1/rx.-scheduler/as-coroutine-dispatcher.html)
6. Rx2 [`Scheduler`](http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Scheduler.html) type beans - converted to [`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-coroutine-context/) with [`asCoroutineDispatcher`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-rx2/kotlinx.coroutines.experimental.rx2/io.reactivex.-scheduler/as-coroutine-dispatcher.html)
7. Reactor [`Scheduler`](https://projectreactor.io/docs/core/release/api/reactor/core/scheduler/Scheduler.html) type beans - converted to [`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-coroutine-context/) with [`asCoroutineDispatcher`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-reactor/kotlinx.coroutines.experimental.reactor/reactor.core.scheduler.-scheduler/as-coroutine-dispatcher.html)
5. Rx1 [`Scheduler`](http://reactivex.io/RxJava/javadoc/io/reactivex/Scheduler.html) type beans - converted to [`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-coroutine-context/) with [`asCoroutineDispatcher`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-rx1/kotlinx.coroutines.rx1/rx.-scheduler/as-coroutine-dispatcher.html)
6. Rx2 [`Scheduler`](http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Scheduler.html) type beans - converted to [`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-coroutine-context/) with [`asCoroutineDispatcher`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-rx2/kotlinx.coroutines.rx2/io.reactivex.-scheduler/as-coroutine-dispatcher.html)
7. Reactor [`Scheduler`](https://projectreactor.io/docs/core/release/api/reactor/core/scheduler/Scheduler.html) type beans - converted to [`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-coroutine-context/) with [`asCoroutineDispatcher`](https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-reactor/kotlinx.coroutines.reactor/reactor.core.scheduler.-scheduler/as-coroutine-dispatcher.html)
8. [`TaskScheduler`](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/scheduling/TaskScheduler.html) type beans - converted to [`CoroutineContext`](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines.experimental/-coroutine-context/) with `asCoroutineDispatcher` method of [`TaskSchedulerCoroutineContextResolver`](spring-kotlin-coroutine/src/main/kotlin/org/springframework/kotlin/experimental/coroutine/context/resolver/TaskSchedulerCoroutineContextResolver.kt)

You can also support your own types of beans or context names by providing Spring beans of type [`CoroutineContextResolver`](spring-kotlin-coroutine/src/main/kotlin/org/springframework/kotlin/experimental/coroutine/context/CoroutineContextResolver.kt):
Expand Down
10 changes: 2 additions & 8 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
buildscript {
ext.kotlin_version = "1.2.70"
ext.kotlin_coroutines_version = "0.26.0"
ext.kotlin_version = "1.3.21"
ext.kotlin_coroutines_version = "1.1.1"
ext.spock_version = '1.1-groovy-2.4'
ext.spring_version = "5.0.9.RELEASE"
ext.spring_data_version = "2.0.10.RELEASE"
Expand Down Expand Up @@ -47,11 +47,6 @@ subprojects {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
}

kotlin {
experimental {
coroutines "enable"
}
}
}

project(":spring-kotlin-coroutine") {
Expand All @@ -71,7 +66,6 @@ project(":spring-kotlin-coroutine") {
compile "org.springframework:spring-web:$spring_version", optional
compile "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version"
compile "org.jetbrains.kotlinx:kotlinx-coroutines-reactor:$kotlin_coroutines_version", optional
compile "org.jetbrains.kotlinx:kotlinx-coroutines-rx1:$kotlin_coroutines_version", optional
compile "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$kotlin_coroutines_version", optional
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ import test.TestRepository3
import test.TestRepository4

import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE
import static org.springframework.kotlin.experimental.coroutine.TestUtilsKt.asList
import static org.springframework.kotlin.experimental.coroutine.TestUtilsKt.runBlocking
import static org.springframework.kotlin.coroutine.TestUtilsKt.asList
import static org.springframework.kotlin.coroutine.TestUtilsKt.runBlocking

@SpringBootTest(classes = IntSpecConfiguration, webEnvironment = NONE)
@EnableAutoConfiguration
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package org.springframework.data.mongodb.repository

import org.springframework.kotlin.experimental.coroutine.EnableCoroutine
import org.springframework.kotlin.coroutine.EnableCoroutine

@EnableCoroutine
class IntSpecConfiguration {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package test

import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.channels.ReceiveChannel
import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document
import org.springframework.data.mongodb.core.mapping.Field
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package org.springframework.data.mongodb.repository.query;

import kotlin.coroutines.experimental.Continuation;
import kotlin.coroutines.Continuation;
import org.springframework.core.MethodParameter;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.lang.Nullable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
* limitations under the License.
*/

package org.springframework.kotlin.experimental.coroutine.util;
package org.springframework.kotlin.coroutine.util;

import kotlin.coroutines.experimental.Continuation;
import kotlin.coroutines.Continuation;
import kotlin.jvm.functions.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@
package org.springframework.data.mongodb.core

import com.mongodb.reactivestreams.client.MongoDatabase
import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.experimental.reactive.openSubscription
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.reactive.openSubscription

interface CoroutineDatabaseCallback<T> {
val reactiveDatabaseCallback: ReactiveDatabaseCallback<T>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import com.mongodb.ReadPreference
import com.mongodb.client.result.DeleteResult
import com.mongodb.client.result.UpdateResult
import com.mongodb.coroutines.client.CoroutineMongoCollection
import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.channels.ReceiveChannel
import org.bson.Document
import org.reactivestreams.Subscription
import org.springframework.data.geo.GeoResult
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ import com.mongodb.client.result.DeleteResult
import com.mongodb.client.result.UpdateResult
import com.mongodb.coroutines.client.CoroutineMongoCollection
import com.mongodb.coroutines.client.asCoroutineMongoCollection
import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.experimental.reactive.awaitFirst
import kotlinx.coroutines.experimental.reactive.awaitFirstOrDefault
import kotlinx.coroutines.experimental.reactive.awaitLast
import kotlinx.coroutines.experimental.reactive.awaitSingle
import kotlinx.coroutines.experimental.reactive.openSubscription
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.reactive.awaitFirst
import kotlinx.coroutines.reactive.awaitFirstOrDefault
import kotlinx.coroutines.reactive.awaitLast
import kotlinx.coroutines.reactive.awaitSingle
import kotlinx.coroutines.reactive.openSubscription
import org.bson.Document
import org.springframework.data.geo.GeoResult
import org.springframework.data.mongodb.core.aggregation.Aggregation
Expand Down Expand Up @@ -280,4 +280,4 @@ open class CoroutineMongoTemplate(

override fun <T> tail(query: Query, entityClass: Class<T>, collectionName: String): ReceiveChannel<T> =
reactiveMongoOperations.tail(query, entityClass, collectionName).openSubscription()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@

package org.springframework.data.mongodb.repository.query

import kotlinx.coroutines.experimental.runBlocking
import kotlinx.coroutines.runBlocking
import org.springframework.core.convert.converter.Converter
import org.springframework.data.convert.EntityInstantiators
import org.springframework.data.mongodb.core.CoroutineMongoOperations
import org.springframework.data.mongodb.core.query.Query
import org.springframework.data.repository.query.ParameterAccessor
import org.springframework.data.repository.query.RepositoryQuery
import org.springframework.kotlin.experimental.coroutine.util.executeSuspend
import kotlin.coroutines.experimental.Continuation
import org.springframework.kotlin.coroutine.util.executeSuspend
import kotlin.coroutines.Continuation

abstract class AbstractCoroutineMongoQuery(
private val method: CoroutineMongoQueryMethod,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@

package org.springframework.data.mongodb.repository.query

import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.experimental.channels.consumeEach
import kotlinx.coroutines.experimental.reactive.openSubscription
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.channels.consumeEach
import kotlinx.coroutines.reactive.openSubscription
import org.springframework.core.convert.converter.Converter
import org.springframework.data.convert.EntityInstantiators
import org.springframework.data.domain.Pageable
Expand All @@ -29,7 +29,7 @@ import org.springframework.data.mongodb.core.query.Query
import org.springframework.data.repository.query.ResultProcessor
import org.springframework.data.repository.util.ReactiveWrappers
import org.springframework.data.util.TypeInformation
import org.springframework.kotlin.experimental.coroutine.TypeMetaData
import org.springframework.kotlin.coroutine.TypeMetaData
import org.springframework.util.ClassUtils

interface CoroutineMongoQueryExecution {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ import org.springframework.data.repository.query.QueryMethod
import org.springframework.data.repository.util.ClassUtils.hasParameterOfType
import org.springframework.data.repository.util.ReactiveWrappers
import org.springframework.data.util.ClassTypeInformation
import org.springframework.kotlin.experimental.coroutine.isCoroutineCollection
import org.springframework.kotlin.experimental.coroutine.returnTypeMetadata
import org.springframework.kotlin.coroutine.isCoroutineCollection
import org.springframework.kotlin.coroutine.returnTypeMetadata
import org.springframework.util.ClassUtils
import java.lang.reflect.Method
import kotlin.coroutines.experimental.Continuation
import kotlin.coroutines.Continuation

open class CoroutineMongoQueryMethod(
val method: Method,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

package org.springframework.data.mongodb.repository.support

import kotlinx.coroutines.experimental.reactive.awaitFirstOrDefault
import kotlinx.coroutines.experimental.reactive.awaitSingle
import kotlinx.coroutines.reactive.awaitFirstOrDefault
import kotlinx.coroutines.reactive.awaitSingle
import org.springframework.data.mongodb.core.CoroutineMongoOperations
import org.springframework.data.mongodb.core.CoroutineMongoTemplate
import org.springframework.data.mongodb.repository.CoroutineMongoRepository
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package org.springframework.data.repository.coroutine

import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.channels.ReceiveChannel
import org.springframework.data.repository.NoRepositoryBean
import org.springframework.data.repository.Repository

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
* limitations under the License.
*/

package org.springframework.kotlin.experimental.coroutine.util
package org.springframework.kotlin.coroutine.util

import kotlin.coroutines.experimental.Continuation
import kotlin.coroutines.Continuation

interface SuspendExecutor {
fun <T> execute(cont: Continuation<T>, lambda: suspend () -> T): Any?
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
* limitations under the License.
*/

package org.springframework.kotlin.experimental.coroutine.util
package org.springframework.kotlin.coroutine.util

import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.experimental.channels.consumeEach
import kotlin.coroutines.experimental.Continuation
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.channels.consumeEach
import kotlin.coroutines.Continuation

fun <T> executeSuspend(cont: Continuation<T>, lambda: suspend () -> T): Any? =
DefaultSuspendExecutor.INSTANCE.execute(cont, lambda)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import org.springframework.cache.ehcache.EhCacheCacheManager
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean
import org.springframework.context.annotation.Bean
import org.springframework.core.io.ClassPathResource
import org.springframework.kotlin.experimental.coroutine.EnableCoroutine
import org.springframework.kotlin.coroutine.EnableCoroutine
import org.springframework.scheduling.annotation.EnableScheduling

@SpringBootApplication
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ package demo.app.event
import demo.app.util.logger
import demo.app.web.DemoApplicationEvent
import demo.app.web.SimpleEvent
import kotlinx.coroutines.experimental.delay
import kotlinx.coroutines.delay
import org.springframework.context.event.EventListener
import org.springframework.stereotype.Component

Expand All @@ -40,4 +40,4 @@ open class CoroutineListener {
companion object {
private val logger = logger()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@
package demo.app.service

import demo.app.util.logger
import kotlinx.coroutines.experimental.delay
import kotlinx.coroutines.delay
import org.springframework.cache.annotation.Cacheable
import org.springframework.kotlin.experimental.coroutine.annotation.Coroutine
import org.springframework.kotlin.experimental.coroutine.context.DEFAULT_DISPATCHER
import org.springframework.kotlin.coroutine.annotation.Coroutine
import org.springframework.kotlin.coroutine.context.DEFAULT_DISPATCHER
import org.springframework.scheduling.annotation.Scheduled
import org.springframework.stereotype.Component

Expand Down Expand Up @@ -73,4 +73,4 @@ open class DemoService {
companion object {
private val logger = logger()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ import demo.app.service.DemoService
import demo.app.util.logger
import org.springframework.context.ApplicationEvent
import org.springframework.context.ApplicationEventPublisher
import org.springframework.kotlin.experimental.coroutine.annotation.Coroutine
import org.springframework.kotlin.experimental.coroutine.context.DEFAULT_DISPATCHER
import org.springframework.kotlin.experimental.coroutine.event.CoroutineApplicationEventPublisher
import org.springframework.kotlin.experimental.coroutine.web.client.CoroutineRestOperations
import org.springframework.kotlin.coroutine.annotation.Coroutine
import org.springframework.kotlin.coroutine.context.DEFAULT_DISPATCHER
import org.springframework.kotlin.coroutine.event.CoroutineApplicationEventPublisher
import org.springframework.kotlin.coroutine.web.client.CoroutineRestOperations
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
import javax.servlet.http.HttpServletRequest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,17 @@
* limitations under the License.
*/

package org.springframework.kotlin.experimental.coroutine
package org.springframework.kotlin.coroutine

import kotlinx.coroutines.experimental.channels.ReceiveChannel
import kotlinx.coroutines.experimental.channels.consumeEach
import kotlinx.coroutines.experimental.runBlocking
import kotlinx.coroutines.experimental.suspendCancellableCoroutine
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.channels.consumeEach
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.suspendCancellableCoroutine
import java.util.Optional
import kotlin.coroutines.experimental.Continuation
import kotlin.coroutines.experimental.intrinsics.COROUTINE_SUSPENDED
import kotlin.coroutines.Continuation
import kotlin.coroutines.intrinsics.COROUTINE_SUSPENDED
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException

@Suppress("UNCHECKED_CAST")
fun <T: Any> runBlocking(lambda: (Continuation<T>) -> Any) = runBlocking {
Expand All @@ -43,4 +45,4 @@ fun <T> ReceiveChannel<T>.asList(): List<T> = runBlocking {
mutableListOf<T>().apply {
consumeEach { add(it) }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,20 @@
* limitations under the License.
*/

package org.springframework.kotlin.experimental.coroutine.util;
package org.springframework.kotlin.coroutine.util;

import kotlin.coroutines.experimental.Continuation;
import kotlin.coroutines.experimental.CoroutineContext;
import kotlin.coroutines.Continuation;
import kotlin.coroutines.CoroutineContext;
import kotlin.jvm.functions.Function2;
import kotlinx.coroutines.experimental.BuildersKt;
import kotlinx.coroutines.experimental.CoroutineScope;
import kotlinx.coroutines.experimental.CoroutineStart;
import kotlinx.coroutines.BuildersKt;
import kotlinx.coroutines.CoroutineScope;
import kotlinx.coroutines.CoroutineStart;

public abstract class CoroutineUtils {
private CoroutineUtils() {
}

static public <T> Object runCoroutine(final CoroutineContext context, final Function2<CoroutineScope, Continuation<? super T>, ? super T> fun, final Continuation<? super T> continuation) {
return BuildersKt.withContext(context, CoroutineStart.DEFAULT, fun, continuation);
return BuildersKt.withContext(context, fun, continuation);
}
}

0 comments on commit 8dc143d

Please sign in to comment.