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 2020/01/09 18:25:40 UTC
[isis] 01/11: ISIS-2250: refactors SpecificationLoaderDefault
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 4ae7a3d621b1867fb249302f9d77f389866b3380
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jan 9 11:44:27 2020 +0000
ISIS-2250: refactors SpecificationLoaderDefault
use constructor injection where possible.
---
.../specloader/SpecificationLoaderDefault.java | 83 +++++++++++++---------
.../metamodel/MetaModelContext_forTesting.java | 3 +-
2 files changed, 50 insertions(+), 36 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
index 59b5b38..59f3d68 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/SpecificationLoaderDefault.java
@@ -35,7 +35,6 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import org.apache.isis.applib.annotation.OrderPrecedence;
-import org.apache.isis.applib.services.inject.ServiceInjector;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.applib.util.schema.CommonDtoUtils;
import org.apache.isis.commons.internal.base._Blackhole;
@@ -96,18 +95,19 @@ import lombok.extern.log4j.Log4j2;
@Log4j2
public class SpecificationLoaderDefault implements SpecificationLoader {
- @Inject private ProgrammingModelService programmingModelService;
- @Inject private IsisConfiguration isisConfiguration;
- @Inject private IsisSystemEnvironment isisSystemEnvironment;
- @Inject private ServiceRegistry serviceRegistry;
- @Inject private IsisBeanTypeRegistryHolder isisBeanTypeRegistryHolder;
- @Inject private ClassSubstitutor classSubstitutor = new ClassSubstitutorDefault(); // default for testing purposes only, overwritten in prod
+ private final IsisConfiguration isisConfiguration;
+ private final IsisSystemEnvironment isisSystemEnvironment;
+ private final ServiceRegistry serviceRegistry;
+ private final IsisBeanTypeRegistryHolder isisBeanTypeRegistryHolder;
+ private final ClassSubstitutor classSubstitutor = new ClassSubstitutorDefault();
+
+ private final ProgrammingModel programmingModel;
+ private final PostProcessor postProcessor;
- private ProgrammingModel programmingModel;
- private FacetProcessor facetProcessor;
- private PostProcessor postProcessor;
@Getter private MetaModelContext metaModelContext; // cannot inject, would cause circular dependency
-
+
+ private FacetProcessor facetProcessor;
+
private final SpecificationCacheDefault<ObjectSpecification> cache =
new SpecificationCacheDefault<>();
@@ -117,30 +117,48 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
@Getter
private boolean metamodelFullyIntrospected = false;
+ @Inject
+ public SpecificationLoaderDefault(
+ final ProgrammingModelService programmingModelService,
+ final IsisConfiguration isisConfiguration,
+ final IsisSystemEnvironment isisSystemEnvironment,
+ final ServiceRegistry serviceRegistry,
+ final IsisBeanTypeRegistryHolder isisBeanTypeRegistryHolder) {
+ this(
+ programmingModelService.getProgrammingModel(),
+ isisConfiguration,
+ isisSystemEnvironment,
+ serviceRegistry,
+ isisBeanTypeRegistryHolder);
+ }
+
+ SpecificationLoaderDefault(
+ final ProgrammingModel programmingModel,
+ final IsisConfiguration isisConfiguration,
+ final IsisSystemEnvironment isisSystemEnvironment,
+ final ServiceRegistry serviceRegistry,
+ final IsisBeanTypeRegistryHolder isisBeanTypeRegistryHolder) {
+ this.programmingModel = programmingModel;
+ this.postProcessor = new PostProcessor(programmingModel);
+ this.isisConfiguration = isisConfiguration;
+ this.isisSystemEnvironment = isisSystemEnvironment;
+ this.serviceRegistry = serviceRegistry;
+ this.isisBeanTypeRegistryHolder = isisBeanTypeRegistryHolder;
+ }
+
/** JUnit Test Support */
- public static SpecificationLoaderDefault getInstance (
- IsisConfiguration isisConfiguration,
- IsisSystemEnvironment isisSystemEnvironment,
- ServiceRegistry serviceRegistry,
- ServiceInjector serviceInjector,
- ProgrammingModel programmingModel,
- IsisBeanTypeRegistryHolder isisBeanTypeRegistryHolder) {
+ public static SpecificationLoaderDefault getInstance(
+ final IsisConfiguration isisConfiguration,
+ final IsisSystemEnvironment isisSystemEnvironment,
+ final ServiceRegistry serviceRegistry,
+ final ProgrammingModel programmingModel,
+ final IsisBeanTypeRegistryHolder isisBeanTypeRegistryHolder) {
- val instance = new SpecificationLoaderDefault();
+ val instance = new SpecificationLoaderDefault(programmingModel, isisConfiguration, isisSystemEnvironment, serviceRegistry, isisBeanTypeRegistryHolder);
instance.metaModelContext = serviceRegistry.lookupServiceElseFail(MetaModelContext.class);
-
- instance.isisConfiguration = isisConfiguration;
- instance.isisSystemEnvironment = isisSystemEnvironment;
- instance.serviceRegistry = serviceRegistry;
- instance.programmingModel = programmingModel;
-
instance.facetProcessor = new FacetProcessor(programmingModel, instance.metaModelContext);
- instance.postProcessor = new PostProcessor(programmingModel);
-
- instance.isisBeanTypeRegistryHolder = isisBeanTypeRegistryHolder;
-
-
+
return instance;
}
@@ -152,9 +170,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
log.debug("initialising {}", this);
}
this.metaModelContext = serviceRegistry.lookupServiceElseFail(MetaModelContext.class);
- this.programmingModel = programmingModelService.getProgrammingModel();
this.facetProcessor = new FacetProcessor(programmingModel, metaModelContext);
- this.postProcessor = new PostProcessor(programmingModel);
}
/**
@@ -276,7 +292,6 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
disposeMetaModel();
facetProcessor.shutdown();
postProcessor.shutdown();
- postProcessor = null;
facetProcessor = null;
}
@@ -300,7 +315,7 @@ public class SpecificationLoaderDefault implements SpecificationLoader {
public boolean loadSpecifications(Class<?>... domainTypes) {
// ensure that all types are loadable
if (Arrays.stream(domainTypes)
- .map(domainType -> classSubstitutor.getClass(domainType))
+ .map(classSubstitutor::getClass)
.anyMatch(Objects::isNull)) {
return false;
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
index 709eb69..c464e20 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/MetaModelContext_forTesting.java
@@ -236,8 +236,7 @@ public final class MetaModelContext_forTesting implements MetaModelContext {
specificationLoader = SpecificationLoaderDefault.getInstance(
configuration,
environment,
- serviceRegistry,
- serviceInjector,
+ serviceRegistry,
programmingModel,
isisBeanTypeRegistryHolder);