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 {
 
 }