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/08 09:34:25 UTC
[isis] branch master updated: ISIS-2938: Don't allow DomainObject Annotation on Interfaces
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 5037c1d ISIS-2938: Don't allow DomainObject Annotation on Interfaces
5037c1d is described below
commit 5037c1d77396c50f5d57e718fbe9f6b8b17f9480
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Jan 8 10:34:13 2022 +0100
ISIS-2938: Don't allow DomainObject Annotation on Interfaces
---
.../DomainObjectAnnotationFacetFactory.java | 5 +++++
.../domainmodel/DomainModelTest_usingBadDomain.java | 8 ++++++++
.../model/bad/Configuration_usingInvalidDomain.java | 2 +-
...dDomain.java => InvalidDomainObjectOnInterface.java} | 17 +++++------------
4 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index f34e1f1..9c5ba65 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -138,6 +138,11 @@ implements
val facetHolder = processClassContext.getFacetHolder();
val cls = processClassContext.getCls();
+ if(cls.isInterface()) {
+ ValidationFailure.raiseFormatted(facetHolder,
+ "Cannot use @DomainObject on interface: %s", cls.getName());
+ }
+
if(processClassContext.synthesizeOnType(Value.class).isPresent()) {
ValidationFailure.raiseFormatted(facetHolder,
"Cannot use @DomainObject and @Value on the same type: %s", cls.getName());
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 ae98992..ddb9836 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
@@ -58,6 +58,7 @@ import org.apache.isis.testdomain.model.bad.AmbiguousTitle;
import org.apache.isis.testdomain.model.bad.Configuration_usingInvalidDomain;
import org.apache.isis.testdomain.model.bad.InvalidActionOverloading;
import org.apache.isis.testdomain.model.bad.InvalidContradictingTypeSemantics;
+import org.apache.isis.testdomain.model.bad.InvalidDomainObjectOnInterface;
import org.apache.isis.testdomain.model.bad.InvalidLogicalTypeNameClash;
import org.apache.isis.testdomain.model.bad.InvalidOrphanedActionSupport;
import org.apache.isis.testdomain.model.bad.InvalidOrphanedCollectionSupport;
@@ -217,6 +218,13 @@ class DomainModelTest_usingBadDomain {
);
}
+ @Test
+ void invalidDomainObjectOnInterface_shouldFail() {
+ validator.assertAnyFailuresContaining(
+ Identifier.classIdentifier(LogicalType.fqcn(InvalidDomainObjectOnInterface.class)),
+ "Cannot use @DomainObject on interface:");
+ }
+
// -- INCUBATING
@Test @Disabled("this case has no vaildation refiner yet")
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java
index 3f3cb68..7b8e1fb 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java
@@ -24,7 +24,7 @@ import org.springframework.context.annotation.Import;
@Configuration
@Import({
-
+ InvalidDomainObjectOnInterface.class // explicitly import interface
})
@ComponentScan(
basePackageClasses= {
diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/InvalidDomainObjectOnInterface.java
similarity index 70%
copy from regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java
copy to regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/InvalidDomainObjectOnInterface.java
index 3f3cb68..923e074 100644
--- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/Configuration_usingInvalidDomain.java
+++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/model/bad/InvalidDomainObjectOnInterface.java
@@ -18,18 +18,11 @@
*/
package org.apache.isis.testdomain.model.bad;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
+import org.apache.isis.applib.annotations.DomainObject;
+import org.apache.isis.applib.annotations.Nature;
-@Configuration
-@Import({
-
-})
-@ComponentScan(
- basePackageClasses= {
- Configuration_usingInvalidDomain.class
- })
-public class Configuration_usingInvalidDomain {
+// not allowed, should fail MM validation ISIS-2938
+@DomainObject(nature = Nature.VIEW_MODEL)
+public interface InvalidDomainObjectOnInterface {
}