Browse Source

Polishing.

Move QuerydslPredicateExecutor hints to RepositoryRuntimeHints.

See #4244
Original pull request: #4245
pull/4283/head
Mark Paluch 3 years ago
parent
commit
33902b5061
No known key found for this signature in database
GPG Key ID: 4406B84C1661DCD1
  1. 26
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/aot/MongoRuntimeHints.java
  2. 35
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/RepositoryRuntimeHints.java
  3. 26
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/aot/RepositoryRuntimeHintsUnitTests.java

26
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/aot/MongoRuntimeHints.java

@ -31,8 +31,6 @@ import org.springframework.data.mongodb.core.mapping.event.ReactiveAfterConvertC @@ -31,8 +31,6 @@ import org.springframework.data.mongodb.core.mapping.event.ReactiveAfterConvertC
import org.springframework.data.mongodb.core.mapping.event.ReactiveAfterSaveCallback;
import org.springframework.data.mongodb.core.mapping.event.ReactiveBeforeConvertCallback;
import org.springframework.data.mongodb.core.mapping.event.ReactiveBeforeSaveCallback;
import org.springframework.data.mongodb.repository.support.QuerydslMongoPredicateExecutor;
import org.springframework.data.mongodb.repository.support.ReactiveQuerydslMongoPredicateExecutor;
import org.springframework.lang.Nullable;
import org.springframework.util.ClassUtils;
@ -66,7 +64,6 @@ class MongoRuntimeHints implements RuntimeHintsRegistrar { @@ -66,7 +64,6 @@ class MongoRuntimeHints implements RuntimeHintsRegistrar {
MemberCategory.INVOKE_PUBLIC_METHODS));
}
registerQuerydslHints(hints, classLoader);
}
private static void registerTransactionProxyHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
@ -83,27 +80,4 @@ class MongoRuntimeHints implements RuntimeHintsRegistrar { @@ -83,27 +80,4 @@ class MongoRuntimeHints implements RuntimeHintsRegistrar {
}
}
/**
* Register hints for Querydsl integration.
*
* @param hints must not be {@literal null}.
* @param classLoader can be {@literal null}.
* @since 4.0.1
*/
private static void registerQuerydslHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
if (ClassUtils.isPresent("com.querydsl.core.types.Predicate", classLoader)) {
if (isReactorPresent()) {
hints.reflection().registerType(ReactiveQuerydslMongoPredicateExecutor.class,
MemberCategory.INVOKE_PUBLIC_METHODS, MemberCategory.INVOKE_DECLARED_CONSTRUCTORS);
}
if (MongoAotPredicates.isSyncClientPresent(classLoader)) {
hints.reflection().registerType(QuerydslMongoPredicateExecutor.class, MemberCategory.INVOKE_PUBLIC_METHODS,
MemberCategory.INVOKE_DECLARED_CONSTRUCTORS);
}
}
}
}

35
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/aot/RepositoryRuntimeHints.java

@ -17,13 +17,15 @@ package org.springframework.data.mongodb.repository.aot; @@ -17,13 +17,15 @@ package org.springframework.data.mongodb.repository.aot;
import static org.springframework.data.mongodb.aot.MongoAotPredicates.*;
import java.util.Arrays;
import java.util.List;
import org.springframework.aot.hint.MemberCategory;
import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.RuntimeHintsRegistrar;
import org.springframework.aot.hint.TypeReference;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.data.mongodb.aot.MongoAotPredicates;
import org.springframework.data.mongodb.repository.support.QuerydslMongoPredicateExecutor;
import org.springframework.data.mongodb.repository.support.ReactiveQuerydslMongoPredicateExecutor;
import org.springframework.data.querydsl.QuerydslUtils;
import org.springframework.lang.Nullable;
@ -37,25 +39,42 @@ class RepositoryRuntimeHints implements RuntimeHintsRegistrar { @@ -37,25 +39,42 @@ class RepositoryRuntimeHints implements RuntimeHintsRegistrar {
public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
hints.reflection().registerTypes(
Arrays.asList(TypeReference.of("org.springframework.data.mongodb.repository.support.SimpleMongoRepository")),
List.of(TypeReference.of("org.springframework.data.mongodb.repository.support.SimpleMongoRepository")),
builder -> builder.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
MemberCategory.INVOKE_PUBLIC_METHODS));
if (isReactorPresent()) {
hints.reflection().registerTypes(
Arrays.asList(
List.of(
TypeReference.of("org.springframework.data.mongodb.repository.support.SimpleReactiveMongoRepository")),
builder -> builder.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
MemberCategory.INVOKE_PUBLIC_METHODS));
}
if (QuerydslUtils.QUERY_DSL_PRESENT) {
registerQuerydslHints(hints, classLoader);
}
}
/**
* Register hints for Querydsl integration.
*
* @param hints must not be {@literal null}.
* @param classLoader can be {@literal null}.
* @since 4.0.2
*/
private static void registerQuerydslHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
if (isReactorPresent()) {
hints.reflection().registerType(ReactiveQuerydslMongoPredicateExecutor.class,
MemberCategory.INVOKE_PUBLIC_METHODS, MemberCategory.INVOKE_DECLARED_CONSTRUCTORS);
}
hints.reflection().registerType(
TypeReference.of("org.springframework.data.mongodb.repository.support.QuerydslMongoPredicateExecutor"),
hint -> hint.withMembers(MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_PUBLIC_METHODS)
.onReachableType(QuerydslPredicateExecutor.class));
if (MongoAotPredicates.isSyncClientPresent(classLoader)) {
hints.reflection().registerType(QuerydslMongoPredicateExecutor.class, MemberCategory.INVOKE_PUBLIC_METHODS,
MemberCategory.INVOKE_DECLARED_CONSTRUCTORS);
}
}
}

26
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/aot/MongoRuntimeHintsUnitTests.java → spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/aot/RepositoryRuntimeHintsUnitTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2022 the original author or authors.
* Copyright 2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.mongodb.aot;
package org.springframework.data.mongodb.repository.aot;
import static org.assertj.core.api.Assertions.*;
@ -28,27 +28,17 @@ import org.springframework.data.mongodb.repository.support.ReactiveQuerydslMongo @@ -28,27 +28,17 @@ import org.springframework.data.mongodb.repository.support.ReactiveQuerydslMongo
import com.mongodb.client.MongoClient;
/**
* Unit tests for {@link RepositoryRuntimeHints}.
*
* @author Christoph Strobl
*/
class MongoRuntimeHintsUnitTests {
@Test // GH-4244
void doesNotRegisterTypesForQuerydslIntegrationWhenQuerydslNotPresent() {
RuntimeHints runtimeHints = new RuntimeHints();
new MongoRuntimeHints().registerHints(runtimeHints, new HidingClassLoader("com.querydsl"));
assertThat(runtimeHints)
.matches(RuntimeHintsPredicates.reflection().onType(QuerydslMongoPredicateExecutor.class).negate()
.and(RuntimeHintsPredicates.reflection().onType(ReactiveQuerydslMongoPredicateExecutor.class).negate()));
}
class RepositoryRuntimeHintsUnitTests {
@Test // GH-4244
void registersTypesForQuerydslIntegration() {
RuntimeHints runtimeHints = new RuntimeHints();
new MongoRuntimeHints().registerHints(runtimeHints, null);
new RepositoryRuntimeHints().registerHints(runtimeHints, null);
assertThat(runtimeHints).matches(RuntimeHintsPredicates.reflection().onType(QuerydslMongoPredicateExecutor.class)
.and(RuntimeHintsPredicates.reflection().onType(ReactiveQuerydslMongoPredicateExecutor.class)));
@ -58,7 +48,7 @@ class MongoRuntimeHintsUnitTests { @@ -58,7 +48,7 @@ class MongoRuntimeHintsUnitTests {
void onlyRegistersReactiveTypesForQuerydslIntegrationWhenNoSyncClientPresent() {
RuntimeHints runtimeHints = new RuntimeHints();
new MongoRuntimeHints().registerHints(runtimeHints, HidingClassLoader.hide(MongoClient.class));
new RepositoryRuntimeHints().registerHints(runtimeHints, HidingClassLoader.hide(MongoClient.class));
assertThat(runtimeHints).matches(RuntimeHintsPredicates.reflection().onType(QuerydslMongoPredicateExecutor.class)
.negate().and(RuntimeHintsPredicates.reflection().onType(ReactiveQuerydslMongoPredicateExecutor.class)));
@ -69,7 +59,7 @@ class MongoRuntimeHintsUnitTests { @@ -69,7 +59,7 @@ class MongoRuntimeHintsUnitTests {
void doesNotRegistersReactiveTypesForQuerydslIntegrationWhenReactorNotPresent() {
RuntimeHints runtimeHints = new RuntimeHints();
new MongoRuntimeHints().registerHints(runtimeHints, new HidingClassLoader("reactor.core"));
new RepositoryRuntimeHints().registerHints(runtimeHints, new HidingClassLoader("reactor.core"));
assertThat(runtimeHints).matches(RuntimeHintsPredicates.reflection().onType(QuerydslMongoPredicateExecutor.class)
.and(RuntimeHintsPredicates.reflection().onType(ReactiveQuerydslMongoPredicateExecutor.class).negate()));
Loading…
Cancel
Save