You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by ah...@apache.org on 2025/02/21 05:56:38 UTC
(causeway) branch main updated: CAUSEWAY-3859: Java record refactoring (part 31)
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/causeway.git
The following commit(s) were added to refs/heads/main by this push:
new a9c05eb0782 CAUSEWAY-3859: Java record refactoring (part 31)
a9c05eb0782 is described below
commit a9c05eb07828c5a3d8f8a40b2ae02d8edbc5d902
Author: andi-huber <ah...@apache.org>
AuthorDate: Fri Feb 21 06:56:32 2025 +0100
CAUSEWAY-3859: Java record refactoring (part 31)
---
.../commons/internal/ioc/_IocContainer_Spring.java | 2 +-
.../internal/ioc/_SingletonBeanProvider.java | 53 +++++++++++++---------
.../_testing/MetaModelContext_forTesting.java | 2 +-
.../_testing/ServiceRegistry_forTesting.java | 4 +-
.../context/MetaModelContext_usingSpring.java | 2 +-
.../services/registry/ServiceRegistryDefault.java | 4 +-
.../title/TitlesAndTranslationsValidator.java | 10 ++--
.../menubars/bootstrap/MenuBarsServiceBSTest.java | 2 +-
.../SpringServiceProvisioningTest.java | 18 ++++----
9 files changed, 53 insertions(+), 44 deletions(-)
diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer_Spring.java b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer_Spring.java
index dd984a84b2e..41716dd386e 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer_Spring.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_IocContainer_Spring.java
@@ -61,7 +61,7 @@ public Stream<_SingletonBeanProvider> streamAllBeans() {
return Stream.of(springContext.getBeanDefinitionNames())
.map(name->{
var type = ClassUtils.getUserClass(springContext.getType(name));
- var beanAdapter = _SingletonBeanProvider.of(name, type, ()->springContext.getBean(name));
+ var beanAdapter = new _SingletonBeanProvider(name, type, ()->springContext.getBean(name));
return beanAdapter;
});
}
diff --git a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_SingletonBeanProvider.java b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_SingletonBeanProvider.java
index a4463867264..829d21f1f5e 100644
--- a/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_SingletonBeanProvider.java
+++ b/commons/src/main/java/org/apache/causeway/commons/internal/ioc/_SingletonBeanProvider.java
@@ -18,53 +18,46 @@
*/
package org.apache.causeway.commons.internal.ioc;
+import java.util.Objects;
import java.util.Optional;
import java.util.function.Predicate;
import java.util.function.Supplier;
+import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.apache.causeway.commons.internal.exceptions._Exceptions;
-import lombok.EqualsAndHashCode;
-import org.jspecify.annotations.NonNull;
-import lombok.ToString;
-import lombok.Value;
-
/**
* @since 2.0
*/
-@Value(staticConstructor = "of")
-public final class _SingletonBeanProvider {
+public record _SingletonBeanProvider(
+ /**
+ * Unique bean name (not an alias).
+ * Corresponds to the logical-type-name (Causeway semantics).
+ */
+ @NonNull String id,
+ @NonNull Class<?> beanClass,
+
+ //@ToString.Exclude @EqualsAndHashCode.Exclude
+ @NonNull Supplier<?> beanProvider) {
// -- TEST FACTORIES
public static <T> _SingletonBeanProvider forTestingLazy(
final String logicalTypeName, final Class<T> beanClass, final Supplier<T> beanProvider) {
- return _SingletonBeanProvider.of(logicalTypeName, beanClass, beanProvider);
+ return new _SingletonBeanProvider(logicalTypeName, beanClass, beanProvider);
}
public static <T> _SingletonBeanProvider forTestingLazy(
final Class<T> beanClass, final Supplier<T> beanProvider) {
- return _SingletonBeanProvider.of(beanClass.getName(), beanClass, beanProvider);
+ return new _SingletonBeanProvider(beanClass.getName(), beanClass, beanProvider);
}
public static <T> _SingletonBeanProvider forTesting(final T bean) {
- return _SingletonBeanProvider.of(bean.getClass().getName(), bean.getClass(), ()->bean);
+ return new _SingletonBeanProvider(bean.getClass().getName(), bean.getClass(), ()->bean);
}
- // -- CONSTRUCTION
-
- /**
- * Unique bean name (not an alias).
- * Corresponds to the logical-type-name (Causeway semantics).
- */
- private final @NonNull String id;
- private final @NonNull Class<?> beanClass;
-
- @ToString.Exclude @EqualsAndHashCode.Exclude
- private final @NonNull Supplier<?> beanProvider;
-
public Optional<?> lookupInstance() {
return Optional.ofNullable(beanProvider.get());
}
@@ -81,6 +74,22 @@ public boolean isCandidateFor(final @Nullable Class<?> requiredType) {
return requiredType.isAssignableFrom(beanClass);
}
+ @Override
+ public final boolean equals(final Object obj) {
+ return obj instanceof _SingletonBeanProvider other
+ ? Objects.equals(this.id(), other.id())
+ && Objects.equals(this.beanClass(), other.beanClass())
+ : false;
+ }
+ @Override
+ public final int hashCode() {
+ return Objects.hash(id, beanClass);
+ }
+ @Override
+ public final String toString() {
+ return "SingletonBeanProvider[id=%s, beanClass=%s]".formatted(id, beanClass);
+ }
+
// -- UTILITY
public static Predicate<_SingletonBeanProvider> satisfying(final Class<?> requiredType) {
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
index 20cd7d57bf6..0ab8804d2e3 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/MetaModelContext_forTesting.java
@@ -566,7 +566,7 @@ private final Map<String, ManagedObject> collectBeansOfKnownSort() {
private Optional<ServiceInstance> toServiceInstance(final _SingletonBeanProvider managedBeanAdapter) {
var servicePojo = managedBeanAdapter.getInstanceElseFail();
- if(ProgrammingModelConstants.TypeVetoMarker.anyMatchOn(managedBeanAdapter.getBeanClass())) {
+ if(ProgrammingModelConstants.TypeVetoMarker.anyMatchOn(managedBeanAdapter.beanClass())) {
return Optional.empty();
}
return getSpecificationLoader()
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/ServiceRegistry_forTesting.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/ServiceRegistry_forTesting.java
index a5c509d2687..8b1616bcb5c 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/ServiceRegistry_forTesting.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/_testing/ServiceRegistry_forTesting.java
@@ -119,10 +119,10 @@ private Set<_SingletonBeanProvider> registeredBeans() {
if(registeredBeans.isEmpty()) {
streamBeans()
.filter(_NullSafe::isPresent)
- .peek(bean->_Assert.assertTrue(_Strings.isNotEmpty(bean.getId())))
+ .peek(bean->_Assert.assertTrue(_Strings.isNotEmpty(bean.id())))
.forEach(bean->{
registeredBeans.add(bean);
- registeredBeanById.put(bean.getId(), bean);
+ registeredBeanById.put(bean.id(), bean);
});
triggerPostInit.set(true);
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
index 78422ec20ab..752b7f6fa8f 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/context/MetaModelContext_usingSpring.java
@@ -208,7 +208,7 @@ private ManagedObject toManagedObject(final _SingletonBeanProvider managedBeanAd
.map(serviceSpec->ManagedObject.service(serviceSpec, servicePojo))
.orElseThrow(()->_Exceptions.unrecoverable(
"Cannot wrap vetoed service of type '%s'",
- managedBeanAdapter.getBeanClass()));
+ managedBeanAdapter.beanClass()));
}
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
index 6e398fd8712..4b0a698a6e7 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/registry/ServiceRegistryDefault.java
@@ -96,14 +96,14 @@ private Map<String, _SingletonBeanProvider> enumerateContributingDomainServices(
.streamAllBeans()
.filter(contributes())
.forEach(singletonProvider->
- managedBeanAdapterByName.put(singletonProvider.getId(), singletonProvider));
+ managedBeanAdapterByName.put(singletonProvider.id(), singletonProvider));
return managedBeanAdapterByName;
}
private Predicate<_SingletonBeanProvider> contributes() {
return singletonProvider->singletonProvider!=null
- ? causewayBeanTypeRegistry.containsManagedBeansContributing(singletonProvider.getBeanClass())
+ ? causewayBeanTypeRegistry.containsManagedBeansContributing(singletonProvider.beanClass())
// do not register unknown sort
: false;
}
diff --git a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitlesAndTranslationsValidator.java b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitlesAndTranslationsValidator.java
index 2cafe91c980..02b332ccf27 100644
--- a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitlesAndTranslationsValidator.java
+++ b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/services/title/TitlesAndTranslationsValidator.java
@@ -60,19 +60,19 @@ private void validateServiceTitles() {
.forEach(managedBeanAdapter->{
var domainService = managedBeanAdapter.lookupInstance().orElse(null);
- var logicalTypeName = managedBeanAdapter.getId();
+ var logicalTypeName = managedBeanAdapter.id();
if(domainService == null) {
var deficiencyOrigin = Identifier.classIdentifier(
- LogicalType.eager(managedBeanAdapter.getBeanClass(), logicalTypeName));
+ LogicalType.eager(managedBeanAdapter.beanClass(), logicalTypeName));
ValidationFailure.raise(
specificationLoader,
deficiencyOrigin,
String.format(
"Failed to get instance of service bean %s",
- managedBeanAdapter.getId())
+ managedBeanAdapter.id())
);
return; // next
}
@@ -87,14 +87,14 @@ private void validateServiceTitles() {
e.printStackTrace();
var deficiencyOrigin = Identifier.classIdentifier(
- LogicalType.eager(managedBeanAdapter.getBeanClass(), logicalTypeName));
+ LogicalType.eager(managedBeanAdapter.beanClass(), logicalTypeName));
ValidationFailure.raise(
specificationLoader,
deficiencyOrigin,
String.format(
"Failed to get title for service bean %s",
- managedBeanAdapter.getId())
+ managedBeanAdapter.id())
);
}
diff --git a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
index 4846bc620ac..acc5a41512b 100644
--- a/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
+++ b/core/runtimeservices/src/test/java/org/apache/causeway/core/runtimeservices/menubars/bootstrap/MenuBarsServiceBSTest.java
@@ -72,7 +72,7 @@ protected void afterSetUp() {
assertNotNull(getSpecificationLoader().loadSpecification(Bar.class));
assertTrue(getServiceRegistry().streamRegisteredBeans()
- .anyMatch(bean->bean.getBeanClass().equals(Bar.class)));
+ .anyMatch(bean->bean.beanClass().equals(Bar.class)));
assertTrue(getMetaModelContext().streamServiceAdapters()
.anyMatch(domainObject->domainObject.getSpecification().getCorrespondingClass().equals(Bar.class)));
diff --git a/regressiontests/bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/SpringServiceProvisioningTest.java b/regressiontests/bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/SpringServiceProvisioningTest.java
index 7ba442f6bc0..3a0d60a6d70 100644
--- a/regressiontests/bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/SpringServiceProvisioningTest.java
+++ b/regressiontests/bootstrapping/src/test/java/org/apache/causeway/testdomain/bootstrapping/SpringServiceProvisioningTest.java
@@ -49,8 +49,8 @@
//import org.apache.causeway.testdomain.Incubating;
@SpringBootTest(
- classes = {
- Configuration_headless.class,
+ classes = {
+ Configuration_headless.class,
},
properties = {
// "causeway.core.meta-model.introspector.parallelize=false",
@@ -64,8 +64,8 @@
})
//@Incubating("with development work on 'v2' the reference list of services constantly changes")
class SpringServiceProvisioningTest {
-
- @Inject private ServiceRegistry serviceRegistry;
+
+ @Inject private ServiceRegistry serviceRegistry;
@Inject private CausewaySystemEnvironment causewaySystemEnvironment;
@BeforeEach
@@ -77,7 +77,7 @@ void beforeEach() {
void dump_all() throws IOException {
final List<String> beans = causewaySystemEnvironment.getIocContainer().streamAllBeans()
- .map(_SingletonBeanProvider::getId)
+ .map(_SingletonBeanProvider::id)
.sorted()
.collect(Collectors.toList());
@@ -91,7 +91,7 @@ void dump_all() throws IOException {
void builtInServices_shouldBeSetUp() throws IOException {
var managedServices = serviceRegistry.streamRegisteredBeans()
- .map(_SingletonBeanProvider::getBeanClass)
+ .map(_SingletonBeanProvider::beanClass)
.map(Class::getName)
.collect(Collectors.toCollection(TreeSet::new));
@@ -100,14 +100,14 @@ void builtInServices_shouldBeSetUp() throws IOException {
.filter(entry->!entry.startsWith("#"))
.filter(entry->!entry.startsWith("org.apache.causeway.testdomain."))
.collect(Collectors.toCollection(TreeSet::new));
-
+
assertFalse(expectedSingletons.isEmpty());
-
+
var servicesFound = toStringJoiningNewLine(managedServices);
System.out.println("--- Services discovered by Causeway ---");
System.out.println(servicesFound);
System.out.println("--------------------------------");
-
+
// same as managedServices.containsAll(singletonSet) but more verbose in case of
// failure
assertEquals(toStringJoiningNewLine(expectedSingletons),