Skip to content

Commit 3e40216

Browse files
DATAMONGO-2086 - Polishing.
Add fix for bound reified type in fluent MapReduce operations. Also add missing reified type extension to FindDistinct with projection.
1 parent 9f22bf2 commit 3e40216

8 files changed

+46
-14
lines changed

spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensions.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,12 @@ inline fun <reified T : Any> ExecutableFindOperation.FindWithProjection<*>.asTyp
6565
*/
6666
fun <T : Any> ExecutableFindOperation.DistinctWithProjection.asType(resultType: KClass<T>): ExecutableFindOperation.TerminatingDistinct<T> =
6767
`as`(resultType.java);
68+
69+
/**
70+
* Extension for [ExecutableFindOperation.DistinctWithProjection. as] leveraging reified type parameters.
71+
*
72+
* @author Christoph Strobl
73+
* @since 2.1
74+
*/
75+
inline fun <reified T : Any> ExecutableFindOperation.DistinctWithProjection.asType(): ExecutableFindOperation.DistinctWithProjection =
76+
`as`(T::class.java)

spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensions.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ inline fun <reified T : Any> ExecutableMapReduceOperation.mapReduce(): Executabl
4141
* @author Christoph Strobl
4242
* @since 2.1
4343
*/
44-
fun <T : Any> ExecutableMapReduceOperation.MapReduceWithProjection<T>.asType(resultType: KClass<T>): ExecutableMapReduceOperation.MapReduceWithQuery<T> =
44+
fun <T : Any> ExecutableMapReduceOperation.MapReduceWithProjection<*>.asType(resultType: KClass<T>): ExecutableMapReduceOperation.MapReduceWithQuery<T> =
4545
`as`(resultType.java)
4646

4747
/**
@@ -50,5 +50,5 @@ fun <T : Any> ExecutableMapReduceOperation.MapReduceWithProjection<T>.asType(res
5050
* @author Christoph Strobl
5151
* @since 2.1
5252
*/
53-
inline fun <reified T : Any> ExecutableMapReduceOperation.MapReduceWithProjection<T>.asType(): ExecutableMapReduceOperation.MapReduceWithQuery<T> =
53+
inline fun <reified T : Any> ExecutableMapReduceOperation.MapReduceWithProjection<*>.asType(): ExecutableMapReduceOperation.MapReduceWithQuery<T> =
5454
`as`(T::class.java)

spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensions.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,12 @@ inline fun <reified T : Any> ReactiveFindOperation.FindWithProjection<*>.asType(
6161
*/
6262
fun <T : Any> ReactiveFindOperation.DistinctWithProjection.asType(resultType: KClass<T>): ReactiveFindOperation.TerminatingDistinct<T> =
6363
`as`(resultType.java);
64+
65+
/**
66+
* Extension for [ReactiveFindOperation.DistinctWithProjection. as] leveraging reified type parameters.
67+
*
68+
* @author Christoph Strobl
69+
* @since 2.1
70+
*/
71+
inline fun <reified T : Any> ReactiveFindOperation.DistinctWithProjection.asType(): ReactiveFindOperation.DistinctWithProjection =
72+
`as`(T::class.java)

spring-data-mongodb/src/main/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensions.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ inline fun <reified T : Any> ReactiveMapReduceOperation.mapReduce(): ReactiveMap
4141
* @author Christoph Strobl
4242
* @since 2.1
4343
*/
44-
fun <T : Any> ReactiveMapReduceOperation.MapReduceWithProjection<T>.asType(resultType: KClass<T>): ReactiveMapReduceOperation.MapReduceWithQuery<T> =
44+
fun <T : Any> ReactiveMapReduceOperation.MapReduceWithProjection<*>.asType(resultType: KClass<T>): ReactiveMapReduceOperation.MapReduceWithQuery<T> =
4545
`as`(resultType.java)
4646

4747
/**
@@ -50,5 +50,5 @@ fun <T : Any> ReactiveMapReduceOperation.MapReduceWithProjection<T>.asType(resul
5050
* @author Christoph Strobl
5151
* @since 2.1
5252
*/
53-
inline fun <reified T : Any> ReactiveMapReduceOperation.MapReduceWithProjection<T>.asType(): ReactiveMapReduceOperation.MapReduceWithQuery<T> =
53+
inline fun <reified T : Any> ReactiveMapReduceOperation.MapReduceWithProjection<*>.asType(): ReactiveMapReduceOperation.MapReduceWithQuery<T> =
5454
`as`(T::class.java)

spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableFindOperationExtensionsTests.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,11 @@ class ExecutableFindOperationExtensionsTests {
7373
distinctWithProjection.asType(User::class)
7474
verify(distinctWithProjection).`as`(User::class.java)
7575
}
76+
77+
@Test // DATAMONGO-2086
78+
fun `ExecutableFindOperation#DistinctWithProjection#asType() with reified type parameter extension should call its Java counterpart`() {
79+
80+
distinctWithProjection.asType<User>()
81+
verify(distinctWithProjection).`as`(User::class.java)
82+
}
7683
}

spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ExecutableMapReduceOperationExtensionsTests.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,17 @@ class ExecutableMapReduceOperationExtensionsTests {
4949
verify(operation).mapReduce(First::class.java)
5050
}
5151

52-
@Test // DATAMONGO-1929
52+
@Test // DATAMONGO-1929, DATAMONGO-2086
5353
fun `ExecutableMapReduceOperation#MapReduceWithProjection#asType(KClass) extension should call its Java counterpart`() {
5454

55-
operationWithProjection.asType(First::class)
56-
verify(operationWithProjection).`as`(First::class.java)
55+
operationWithProjection.asType(User::class)
56+
verify(operationWithProjection).`as`(User::class.java)
5757
}
5858

59-
@Test // DATAMONGO-1929
59+
@Test // DATAMONGO-1929, DATAMONGO-2086
6060
fun `ExecutableMapReduceOperation#MapReduceWithProjection#asType() with reified type parameter extension should call its Java counterpart`() {
6161

62-
operationWithProjection.asType()
63-
verify(operationWithProjection).`as`(First::class.java)
62+
operationWithProjection.asType<User>()
63+
verify(operationWithProjection).`as`(User::class.java)
6464
}
6565
}

spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveFindOperationExtensionsTests.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,11 @@ class ReactiveFindOperationExtensionsTests {
7272
distinctWithProjection.asType(User::class)
7373
verify(distinctWithProjection).`as`(User::class.java)
7474
}
75+
76+
@Test // DATAMONGO-2086
77+
fun `ReactiveFind#DistinctWithProjection#asType() with reified type parameter extension should call its Java counterpart`() {
78+
79+
distinctWithProjection.asType<User>()
80+
verify(distinctWithProjection).`as`(User::class.java)
81+
}
7582
}

spring-data-mongodb/src/test/kotlin/org/springframework/data/mongodb/core/ReactiveMapReduceOperationExtensionsTests.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@ class ReactiveMapReduceOperationExtensionsTests {
5252
@Test // DATAMONGO-1929
5353
fun `ReactiveMapReduceOperation#MapReduceWithProjection#asType(KClass) extension should call its Java counterpart`() {
5454

55-
operationWithProjection.asType(First::class)
56-
verify(operationWithProjection).`as`(First::class.java)
55+
operationWithProjection.asType(User::class)
56+
verify(operationWithProjection).`as`(User::class.java)
5757
}
5858

5959
@Test // DATAMONGO-1929
6060
fun `ReactiveMapReduceOperation#MapReduceWithProjection#asType() with reified type parameter extension should call its Java counterpart`() {
6161

62-
operationWithProjection.asType()
63-
verify(operationWithProjection).`as`(First::class.java)
62+
operationWithProjection.asType<User>()
63+
verify(operationWithProjection).`as`(User::class.java)
6464
}
6565
}

0 commit comments

Comments
 (0)