diff --git a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensions.kt b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensions.kt index da9bec417..1892e8b43 100644 --- a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensions.kt +++ b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensions.kt @@ -65,3 +65,12 @@ inline fun ExecutableFindOperation.FindWithProjection<*>.asTyp */ fun ExecutableFindOperation.DistinctWithProjection.asType(resultType: KClass): ExecutableFindOperation.TerminatingDistinct = `as`(resultType.java); + +/** + * Extension for [ExecutableFindOperation.DistinctWithProjection. as] leveraging reified type parameters. + * + * @author Christoph Strobl + * @since 2.1 + */ +inline fun ExecutableFindOperation.DistinctWithProjection.asType(): ExecutableFindOperation.DistinctWithProjection = + `as`(T::class.java) diff --git a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensions.kt b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensions.kt index 9e5b4706c..1ae83dac1 100644 --- a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensions.kt +++ b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensions.kt @@ -41,7 +41,7 @@ inline fun ExecutableMapReduceOperation.mapReduce(): Executabl * @author Christoph Strobl * @since 2.1 */ -fun ExecutableMapReduceOperation.MapReduceWithProjection.asType(resultType: KClass): ExecutableMapReduceOperation.MapReduceWithQuery = +fun ExecutableMapReduceOperation.MapReduceWithProjection<*>.asType(resultType: KClass): ExecutableMapReduceOperation.MapReduceWithQuery = `as`(resultType.java) /** @@ -50,5 +50,5 @@ fun ExecutableMapReduceOperation.MapReduceWithProjection.asType(res * @author Christoph Strobl * @since 2.1 */ -inline fun ExecutableMapReduceOperation.MapReduceWithProjection.asType(): ExecutableMapReduceOperation.MapReduceWithQuery = +inline fun ExecutableMapReduceOperation.MapReduceWithProjection<*>.asType(): ExecutableMapReduceOperation.MapReduceWithQuery = `as`(T::class.java) diff --git a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensions.kt b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensions.kt index 815d7efa5..95949097f 100644 --- a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensions.kt +++ b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensions.kt @@ -61,3 +61,12 @@ inline fun ReactiveFindOperation.FindWithProjection<*>.asType( */ fun ReactiveFindOperation.DistinctWithProjection.asType(resultType: KClass): ReactiveFindOperation.TerminatingDistinct = `as`(resultType.java); + +/** + * Extension for [ReactiveFindOperation.DistinctWithProjection. as] leveraging reified type parameters. + * + * @author Christoph Strobl + * @since 2.1 + */ +inline fun ReactiveFindOperation.DistinctWithProjection.asType(): ReactiveFindOperation.DistinctWithProjection = + `as`(T::class.java) diff --git a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensions.kt b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensions.kt index 6524ef266..4e4f8b575 100644 --- a/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensions.kt +++ b/spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensions.kt @@ -41,7 +41,7 @@ inline fun ReactiveMapReduceOperation.mapReduce(): ReactiveMap * @author Christoph Strobl * @since 2.1 */ -fun ReactiveMapReduceOperation.MapReduceWithProjection.asType(resultType: KClass): ReactiveMapReduceOperation.MapReduceWithQuery = +fun ReactiveMapReduceOperation.MapReduceWithProjection<*>.asType(resultType: KClass): ReactiveMapReduceOperation.MapReduceWithQuery = `as`(resultType.java) /** @@ -50,5 +50,5 @@ fun ReactiveMapReduceOperation.MapReduceWithProjection.asType(resul * @author Christoph Strobl * @since 2.1 */ -inline fun ReactiveMapReduceOperation.MapReduceWithProjection.asType(): ReactiveMapReduceOperation.MapReduceWithQuery = +inline fun ReactiveMapReduceOperation.MapReduceWithProjection<*>.asType(): ReactiveMapReduceOperation.MapReduceWithQuery = `as`(T::class.java) diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensionsTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensionsTests.kt index 40edc7029..bcecc1c98 100644 --- a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensionsTests.kt +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensionsTests.kt @@ -73,4 +73,11 @@ class ExecutableFindOperationExtensionsTests { distinctWithProjection.asType(User::class) verify(distinctWithProjection).`as`(User::class.java) } + + @Test // DATAMONGO-2086 + fun `ExecutableFindOperation#DistinctWithProjection#asType() with reified type parameter extension should call its Java counterpart`() { + + distinctWithProjection.asType() + verify(distinctWithProjection).`as`(User::class.java) + } } diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensionsTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensionsTests.kt index 630e4d953..0cddce066 100644 --- a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensionsTests.kt +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensionsTests.kt @@ -49,17 +49,17 @@ class ExecutableMapReduceOperationExtensionsTests { verify(operation).mapReduce(First::class.java) } - @Test // DATAMONGO-1929 + @Test // DATAMONGO-1929, DATAMONGO-2086 fun `ExecutableMapReduceOperation#MapReduceWithProjection#asType(KClass) extension should call its Java counterpart`() { - operationWithProjection.asType(First::class) - verify(operationWithProjection).`as`(First::class.java) + operationWithProjection.asType(User::class) + verify(operationWithProjection).`as`(User::class.java) } - @Test // DATAMONGO-1929 + @Test // DATAMONGO-1929, DATAMONGO-2086 fun `ExecutableMapReduceOperation#MapReduceWithProjection#asType() with reified type parameter extension should call its Java counterpart`() { - operationWithProjection.asType() - verify(operationWithProjection).`as`(First::class.java) + operationWithProjection.asType() + verify(operationWithProjection).`as`(User::class.java) } } diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensionsTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensionsTests.kt index 22cdd36c8..c0fa17077 100644 --- a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensionsTests.kt +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensionsTests.kt @@ -72,4 +72,11 @@ class ReactiveFindOperationExtensionsTests { distinctWithProjection.asType(User::class) verify(distinctWithProjection).`as`(User::class.java) } + + @Test // DATAMONGO-2086 + fun `ReactiveFind#DistinctWithProjection#asType() with reified type parameter extension should call its Java counterpart`() { + + distinctWithProjection.asType() + verify(distinctWithProjection).`as`(User::class.java) + } } diff --git a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensionsTests.kt b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensionsTests.kt index 55a8dd8a6..0cb6d095b 100644 --- a/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensionsTests.kt +++ b/spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensionsTests.kt @@ -49,17 +49,17 @@ class ReactiveMapReduceOperationExtensionsTests { verify(operation).mapReduce(First::class.java) } - @Test // DATAMONGO-1929 + @Test // DATAMONGO-1929, DATAMONGO-2086 fun `ReactiveMapReduceOperation#MapReduceWithProjection#asType(KClass) extension should call its Java counterpart`() { - operationWithProjection.asType(First::class) - verify(operationWithProjection).`as`(First::class.java) + operationWithProjection.asType(User::class) + verify(operationWithProjection).`as`(User::class.java) } - @Test // DATAMONGO-1929 + @Test // DATAMONGO-1929, DATAMONGO-2086 fun `ReactiveMapReduceOperation#MapReduceWithProjection#asType() with reified type parameter extension should call its Java counterpart`() { - operationWithProjection.asType() - verify(operationWithProjection).`as`(First::class.java) + operationWithProjection.asType() + verify(operationWithProjection).`as`(User::class.java) } }