This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new e64c29c989 ISIS-3293: update java-doc
e64c29c989 is described below
commit e64c29c989e973be120a3b48c6a5522d3ba5db19
Author: Andi Huber <[email protected]>
AuthorDate: Thu Nov 24 16:55:17 2022 +0100
ISIS-3293: update java-doc
---
.../java/org/apache/causeway/applib/ViewModel.java | 9 ++++----
.../ViewModelFacetForViewModelInterface.java | 26 ++++++++++------------
2 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/api/applib/src/main/java/org/apache/causeway/applib/ViewModel.java
b/api/applib/src/main/java/org/apache/causeway/applib/ViewModel.java
index 8b1bd3bd83..7005deda65 100644
--- a/api/applib/src/main/java/org/apache/causeway/applib/ViewModel.java
+++ b/api/applib/src/main/java/org/apache/causeway/applib/ViewModel.java
@@ -32,13 +32,14 @@ import
org.apache.causeway.applib.services.registry.ServiceRegistry;
* <p>
* Contract:
* <ul>
- * <li>there is a single public constructor</li>
- * <li>it may have arbitrary many arguments of arbitrary type</li>
+ * <li>there is either exactly one public constructor or if there are more
than one,
+ * then only one of these is annotated with any of {@code @Inject} or {@code
@Autowired(required=true)}
+ * (meta-annotations are also considered)</li>
+ * <li>the constructor may have arbitrary many arguments of arbitrary type</li>
* <li>first {@link String} argument found is passed in the view-model's
memento</li>
* <li>any other arguments are resolved via the {@link ServiceRegistry} -
* if no <i>Bean</i> can be found a {@link NoSuchElementException} is
thrown</li>
- * <li>@Inject or @Autowired annotations are not required on the
constructor</li>
- * <li>there is no support for Spring programming model specific annotations
on constructor arguments (perhaps future work)</li>
+ * <li>there is no support for <i>Spring</i> programming model specific
annotations on constructor arguments (perhaps future work)</li>
* </ul>
* Naturally this also allows for the idiom of passing in the {@link
ServiceInjector} as an argument
* and programmatically resolve any field-style injection points via {@link
ServiceInjector#injectServicesInto(Object)},
diff --git
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
index 4b3da2b6bc..cb7bebce29 100644
---
a/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
+++
b/core/metamodel/src/main/java/org/apache/causeway/core/metamodel/facets/object/viewmodel/ViewModelFacetForViewModelInterface.java
@@ -68,22 +68,20 @@ extends ViewModelFacetAbstract {
val publicConstructors =
ProgrammingModelConstants.ViewmodelConstructor.PUBLIC_ANY.getAll(cls);
if(explicitInjectConstructors.getCardinality().isMultiple()) {
- if(!explicitInjectConstructors.getCardinality().isOne()) {
- ValidationFailure.raiseFormatted(holder,
-
ProgrammingModelConstants.Validation.VIEWMODEL_MULTIPLE_CONSTRUCTORS_WITH_INJECT_SEMANTICS
- .getMessage(Map.of(
- "type", cls.getName(),
- "found",
explicitInjectConstructors.getCardinality().isMultiple()
- ? "{" +
explicitInjectConstructors.stream()
- .map(Constructor::toString)
-
.collect(Collectors.joining(", ")) + "}"
- : "none")));
- return Optional.empty();
- }
- }
+ ValidationFailure.raiseFormatted(holder,
+
ProgrammingModelConstants.Validation.VIEWMODEL_MULTIPLE_CONSTRUCTORS_WITH_INJECT_SEMANTICS
+ .getMessage(Map.of(
+ "type", cls.getName(),
+ "found",
explicitInjectConstructors.getCardinality().isMultiple()
+ ? "{" +
explicitInjectConstructors.stream()
+ .map(Constructor::toString)
+ .collect(Collectors.joining(",
")) + "}"
+ : "none")));
+
+ return Optional.empty();
- if(explicitInjectConstructors.getCardinality().isZero()) {
+ } else if(explicitInjectConstructors.getCardinality().isZero()) {
// in absence of a constructor with inject semantics there
must be exactly one public to pick instead