You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/03/24 11:17:24 UTC
[isis] 01/02: ISIS-2586: in ServiceInjector#injectServicesInto(T
domainObject) make domainObject nullable
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch release-2.0.0-M5-RC2
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 534d9b4b4e0de992754dfcbd146e8f86b00e74b9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Mar 24 09:13:03 2021 +0100
ISIS-2586: in ServiceInjector#injectServicesInto(T domainObject) make
domainObject nullable
(cherry picked from commit aa8afaf88195089e7707636cb1d1cf1f90126be3)
---
.../applib/services/inject/ServiceInjector.java | 39 +++-------------------
.../metamodel/_testing/ServiceInjectorLegacy.java | 15 +++++++--
.../_testing/ServiceInjector_forTesting.java | 6 +---
.../metamodel/services/ServiceInjectorDefault.java | 34 ++++++++-----------
4 files changed, 32 insertions(+), 62 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/inject/ServiceInjector.java b/api/applib/src/main/java/org/apache/isis/applib/services/inject/ServiceInjector.java
index ebd6107..6f9a305 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/inject/ServiceInjector.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/inject/ServiceInjector.java
@@ -18,12 +18,7 @@
*/
package org.apache.isis.applib.services.inject;
-import java.util.NoSuchElementException;
-import java.util.function.Consumer;
-
-import org.springframework.beans.factory.InjectionPoint;
-
-import lombok.val;
+import javax.annotation.Nullable;
/**
* Resolves injection points using the
@@ -36,39 +31,13 @@ import lombok.val;
public interface ServiceInjector {
/**
- * Injects domain services into the object, and calls the provided
- * {@link Consumer} for any non-resolvable injection points.
- *
- * @param domainObject
- * @param onNotResolvable
- * @param <T>
- * @return
- */
- <T> T injectServicesInto(final T domainObject, Consumer<InjectionPoint> onNotResolvable);
-
- /**
- * Injecs domain services into the object, and throws a
- * {@link NoSuchElementException} for any injection points that cannot be resolved.
+ * Injects domain services into the object.
*
* @param domainObject
* @param <T>
- * @return
+ * @return domainObject with injection points resolved
*/
- default <T> T injectServicesInto(final T domainObject) {
-
- return injectServicesInto(domainObject, injectionPoint->{
-
- val injectionPointName = injectionPoint.toString();
- val requiredType = injectionPoint.getDeclaredType();
- val msg = String
- .format("Could not resolve injection point [%s] in target '%s' of required type '%s'",
- injectionPointName,
- domainObject.getClass().getName(),
- requiredType);
- throw new NoSuchElementException(msg);
- });
+ <T> @Nullable T injectServicesInto(final @Nullable T domainObject);
- // ...
- }
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceInjectorLegacy.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceInjectorLegacy.java
index 418fada..3a7471d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceInjectorLegacy.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceInjectorLegacy.java
@@ -24,6 +24,7 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Map;
+import java.util.NoSuchElementException;
import java.util.function.Consumer;
import java.util.function.Predicate;
@@ -61,8 +62,18 @@ public class ServiceInjectorLegacy implements ServiceInjector {
private final Map<Class<?>, Field[]> fieldsByClassCache = _Maps.newConcurrentHashMap();
@Override
- public <T> T injectServicesInto(T domainObject, Consumer<InjectionPoint> onNotResolvable) {
- injectServices(domainObject, onNotResolvable);
+ public <T> T injectServicesInto(T domainObject) {
+ injectServices(domainObject, injectionPoint->{
+
+ val injectionPointName = injectionPoint.toString();
+ val requiredType = injectionPoint.getDeclaredType();
+ val msg = String
+ .format("Could not resolve injection point [%s] in target '%s' of required type '%s'",
+ injectionPointName,
+ domainObject.getClass().getName(),
+ requiredType);
+ throw new NoSuchElementException(msg);
+ });
return domainObject;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceInjector_forTesting.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceInjector_forTesting.java
index 902a15e..f2a0ed5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceInjector_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/_testing/ServiceInjector_forTesting.java
@@ -18,12 +18,8 @@
*/
package org.apache.isis.core.metamodel._testing;
-import java.util.function.Consumer;
-
import static java.util.Objects.requireNonNull;
-import org.springframework.beans.factory.InjectionPoint;
-
import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.specloader.InjectorMethodEvaluatorDefault;
@@ -40,7 +36,7 @@ class ServiceInjector_forTesting implements ServiceInjector {
private ServiceInjector delegate;
@Override
- public <T> T injectServicesInto(T domainObject, Consumer<InjectionPoint> onNotResolvable) {
+ public <T> T injectServicesInto(T domainObject) {
if(delegate==null) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
index 7b86b98..1ad3e78 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/services/ServiceInjectorDefault.java
@@ -18,12 +18,10 @@
*/
package org.apache.isis.core.metamodel.services;
-import java.util.function.Consumer;
-
+import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Named;
-import org.springframework.beans.factory.InjectionPoint;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.annotation.Primary;
@@ -33,6 +31,8 @@ import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.OrderPrecedence;
import org.apache.isis.applib.services.inject.ServiceInjector;
+import lombok.RequiredArgsConstructor;
+
/**
*
* @since 2.0
@@ -43,29 +43,23 @@ import org.apache.isis.applib.services.inject.ServiceInjector;
@Order(OrderPrecedence.EARLY)
@Primary
@Qualifier("Default")
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class ServiceInjectorDefault implements ServiceInjector {
private final AutowireCapableBeanFactory autowireCapableBeanFactory;
- @Inject
- public ServiceInjectorDefault(AutowireCapableBeanFactory autowireCapableBeanFactory) {
- this.autowireCapableBeanFactory = autowireCapableBeanFactory;
- }
-
@Override
- public <T> T injectServicesInto(T domainObject, Consumer<InjectionPoint> onNotResolvable) {
- injectServices(domainObject, onNotResolvable);
- return domainObject;
- }
-
- // -- HELPERS
-
- private void injectServices(final Object targetPojo, Consumer<InjectionPoint> onNotResolvable) {
-
- autowireCapableBeanFactory.autowireBeanProperties(
- targetPojo,
- AutowireCapableBeanFactory.AUTOWIRE_NO, false);
+ public <T> @Nullable T injectServicesInto(final @Nullable T domainObject) {
+ if(domainObject!=null) {
+
+ autowireCapableBeanFactory.autowireBeanProperties(
+ domainObject,
+ AutowireCapableBeanFactory.AUTOWIRE_NO,
+ /*dependencyCheck*/ false);
+ }
+
+ return domainObject;
}