You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/01/24 17:36:38 UTC
[isis] branch master updated: ISIS-2944: fixes orphaned member support detection when using Introspection.ANNOTATION_REQUIRED
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 96663bb ISIS-2944: fixes orphaned member support detection when using Introspection.ANNOTATION_REQUIRED
96663bb is described below
commit 96663bb12ae13905dbe8ddefe6e2e0fa389d1e7b
Author: andi-huber <ah...@apache.org>
AuthorDate: Mon Jan 24 18:29:27 2022 +0100
ISIS-2944: fixes orphaned member support detection when using
Introspection.ANNOTATION_REQUIRED
- also refactors UNSATISFIED_DOMAIN_INCLUDE_SEMANTICS into
ProgrammingModelConstants
---
.../progmodel/ProgrammingModelConstants.java | 14 ++++++++---
...tionEnforcesMetamodelContributionValidator.java | 16 ++++++------
.../_OrphanedSupportingMethodValidator.java | 4 +--
.../specloader/specimpl/FacetedMethodsBuilder.java | 3 +--
.../DomainModelTest_usingBadDomain.java | 29 ++++++++--------------
5 files changed, 31 insertions(+), 35 deletions(-)
diff --git a/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java b/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
index e1e4502..d2bb56b 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/progmodel/ProgrammingModelConstants.java
@@ -320,13 +320,21 @@ public final class ProgrammingModelConstants {
+ "consider either removing the @Title annotation or renaming the method"),
ORPHANED_METHOD("${type}#${member}: is public, but orphaned (was not picked up by the framework); "
+ "reporting orphans, because the class is setup for member introspection, "
- + "without enforcing annotations")
+ + "without enforcing annotations"),
+ UNSATISFIED_DOMAIN_INCLUDE_SEMANTICS("${type}#${member}: "
+ + "has synthesized (effective) annotation @Domain.Include, "
+ + "is assumed to represent or support a property, collection or action.");
;
private final String template;
public String getMessage(final Identifier featureIdentifier) {
+ return getMessageForTypeAndMemberId(
+ featureIdentifier.getLogicalType().getClassName(),
+ featureIdentifier.getMemberLogicalName());
+ }
+ public String getMessageForTypeAndMemberId(final String type, final String memberId) {
return getMessage(Map.of(
- "type", featureIdentifier.getLogicalType().getClassName(),
- "member", featureIdentifier.getMemberLogicalName()));
+ "type", type,
+ "member", memberId));
}
public String getMessage(final Map<String, String> templateVars) {
return processMessageTemplate(template, templateVars);
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/DomainIncludeAnnotationEnforcesMetamodelContributionValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/DomainIncludeAnnotationEnforcesMetamodelContributionValidator.java
index 4f16df9..ca5b830 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/DomainIncludeAnnotationEnforcesMetamodelContributionValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/DomainIncludeAnnotationEnforcesMetamodelContributionValidator.java
@@ -35,6 +35,7 @@ import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.reflection._Annotations;
import org.apache.isis.commons.internal.reflection._ClassCache;
import org.apache.isis.commons.internal.reflection._Reflect;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.Validation;
import org.apache.isis.core.metamodel.commons.MethodUtil;
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -58,11 +59,6 @@ extends MetaModelVisitingValidatorAbstract {
private final _ClassCache classCache;
- /** exposed in support of JUnit tests */
- public static String VALIDATION_MESSAGE_TEMPLATE = "%s#%s: "
- + "has synthesized (effective) annotation @%s, "
- + "is assumed to represent or support a property, collection or action.";
-
@Inject
public DomainIncludeAnnotationEnforcesMetamodelContributionValidator(final MetaModelContext mmc) {
super(mmc);
@@ -134,10 +130,12 @@ extends MetaModelVisitingValidatorAbstract {
.collect(Collectors.joining("; "));
ValidationFailure.raiseFormatted(spec,
- VALIDATION_MESSAGE_TEMPLATE + " Unmet constraint(s): %s",
- spec.getFeatureIdentifier().getClassName(),
- _Reflect.methodToShortString(notPickedUpMethod),
- "Domain.Include",
+ Validation.UNSATISFIED_DOMAIN_INCLUDE_SEMANTICS
+ .getMessageForTypeAndMemberId(
+ spec.getFeatureIdentifier().getClassName(),
+ _Reflect.methodToShortString(notPickedUpMethod)
+ )
+ + " Unmet constraint(s): %s",
unmetContraints);
});
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/_OrphanedSupportingMethodValidator.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/_OrphanedSupportingMethodValidator.java
index ab4f1b3..6dd2a1b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/_OrphanedSupportingMethodValidator.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/methods/_OrphanedSupportingMethodValidator.java
@@ -42,8 +42,8 @@ class _OrphanedSupportingMethodValidator {
|| spec.getBeanSort().isManagedBeanNotContributing()
|| spec.isValue()
|| spec.getIntrospectionPolicy()
- .getMemberAnnotationPolicy()
- .isMemberAnnotationsRequired()) {
+ .getSupportMethodAnnotationPolicy()
+ .isSupportMethodAnnotationsRequired()) {
return; // ignore
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index d780a84..05a204e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -33,8 +33,8 @@ import org.springframework.lang.Nullable;
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.DomainObject;
-import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.annotation.Introspection.IntrospectionPolicy;
+import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.exceptions.unrecoverable.MetaModelException;
import org.apache.isis.commons.collections.Can;
import org.apache.isis.commons.internal.base._NullSafe;
@@ -491,7 +491,6 @@ implements HasMetaModelContext {
// exclude those that have eg. reserved prefixes
if (getFacetProcessor().recognizes(actionMethod)) {
// this is a potential orphan candidate, collect these, than use when validating
-
inspectedTypeSpec.getPotentialOrphans().add(actionMethod);
return false;
}
diff --git a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
index 587d0fc..e0074c4 100644
--- a/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
+++ b/regressiontests/stable-domainmodel/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingBadDomain.java
@@ -49,7 +49,7 @@ import org.apache.isis.core.config.environment.IsisSystemEnvironment;
import org.apache.isis.core.config.metamodel.specloader.IntrospectionMode;
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.core.config.progmodel.ProgrammingModelConstants;
-import org.apache.isis.core.metamodel.methods.DomainIncludeAnnotationEnforcesMetamodelContributionValidator;
+import org.apache.isis.core.config.progmodel.ProgrammingModelConstants.Validation;
import org.apache.isis.core.metamodel.specloader.SpecificationLoader;
import org.apache.isis.testdomain.conf.Configuration_headless;
import org.apache.isis.testdomain.model.bad.AmbiguousMixinAnnotations;
@@ -121,8 +121,7 @@ class DomainModelTest_usingBadDomain {
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedActionSupport.class)),
validationMessage(
"InvalidOrphanedActionSupport",
- "hideOrphaned()",
- "Domain.Include"));
+ "hideOrphaned()"));
val tester = testerFactory.objectTester(InvalidOrphanedActionSupport.class);
@@ -137,8 +136,7 @@ class DomainModelTest_usingBadDomain {
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedPropertySupport.class)),
validationMessage(
"InvalidOrphanedPropertySupport",
- "hideMyProperty()",
- "Domain.Include"));
+ "hideMyProperty()"));
val tester = testerFactory.objectTester(InvalidOrphanedPropertySupport.class);
@@ -152,8 +150,7 @@ class DomainModelTest_usingBadDomain {
Identifier.classIdentifier(LogicalType.fqcn(InvalidOrphanedCollectionSupport.class)),
validationMessage(
"InvalidOrphanedCollectionSupport",
- "hideMyCollection()",
- "Domain.Include"));
+ "hideMyCollection()"));
val tester = testerFactory.objectTester(InvalidOrphanedCollectionSupport.class);
@@ -193,16 +190,14 @@ class DomainModelTest_usingBadDomain {
InvalidMemberOverloadingWhenInherited.WhenAnnotationRequired.class)),
validationMessage(
"",
- "isActive()",
- "Domain.Include"));
+ "isActive()"));
validator.assertAnyFailuresContaining(
Identifier.classIdentifier(LogicalType.fqcn(
InvalidMemberOverloadingWhenInherited.WhenEncapsulationEnabled.class)),
validationMessage(
"",
- "isActive()",
- "Domain.Include"));
+ "isActive()"));
}
@Test
@@ -275,7 +270,7 @@ class DomainModelTest_usingBadDomain {
@ParameterizedTest
@ValueSource(classes = {
OrphanedMemberSupportDetection.WhenEncapsulationEnabled.class,
- //FIXME OrphanedMemberSupportDetection.WhenAnnotationRequired.class,
+ OrphanedMemberSupportDetection.WhenAnnotationRequired.class,
OrphanedMemberSupportDetection.WhenAnnotationOptional.class
})
void orphanedMemberSupportDiscovery(final Class<?> classUnderTest) {
@@ -385,13 +380,9 @@ class DomainModelTest_usingBadDomain {
private String validationMessage(
final String className,
- final String memberName,
- final String annotationName) {
- return String.format(
- DomainIncludeAnnotationEnforcesMetamodelContributionValidator.VALIDATION_MESSAGE_TEMPLATE,
- className,
- memberName,
- annotationName);
+ final String memberName) {
+ return Validation.UNSATISFIED_DOMAIN_INCLUDE_SEMANTICS
+ .getMessageForTypeAndMemberId(className, memberName);
}
}