You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/01/21 23:12:17 UTC

[isis] branch master updated (229a1f2 -> 01b627e)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from 229a1f2  ISIS-2480: adds schema creation support (JPA)
     new 3b0525c  ISIS-1628: no longer requires method to be overridden in mixin subclass.
     new 01b627e  ISIS-1628: no longer requires method to be overridden in mixin subclass.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../facets/object/mixin/MixinFacetAbstract.java    | 26 +++++++-----
 .../object/mixin/MixinFacetAbstract_Test.java      | 48 ++++++++++++++++++++++
 testing/fixtures/applib/pom.xml                    |  6 +++
 3 files changed, 69 insertions(+), 11 deletions(-)
 create mode 100644 core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java


[isis] 02/02: ISIS-1628: no longer requires method to be overridden in mixin subclass.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 01b627e8085cf8a29aa4ace57056886cb7c91a8b
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jan 21 23:11:49 2021 +0000

    ISIS-1628: no longer requires method to be overridden in mixin subclass.
---
 .../facets/object/mixin/MixinFacetAbstract.java    | 26 +++++++-----
 .../object/mixin/MixinFacetAbstract_Test.java      | 48 +++++++++++++++++++++-
 testing/fixtures/applib/pom.xml                    |  6 +++
 3 files changed, 67 insertions(+), 13 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
index cbc0708..caff110 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
@@ -33,8 +33,8 @@ import org.apache.isis.core.metamodel.spec.ManagedObject;
 
 import lombok.val;
 
-public abstract class MixinFacetAbstract 
-extends SingleValueFacetAbstract<String> 
+public abstract class MixinFacetAbstract
+extends SingleValueFacetAbstract<String>
 implements MixinFacet {
 
     private final Class<?> mixinType;
@@ -47,7 +47,7 @@ implements MixinFacet {
 
     public MixinFacetAbstract(
             final Class<?> mixinType,
-            final String value, 
+            final String value,
             final Constructor<?> constructor,
             final FacetHolder holder) {
 
@@ -76,7 +76,7 @@ implements MixinFacet {
         }
         if(!isMixinFor(domainPojo.getClass())) {
             throw _Exceptions.unrecoverableFormatted(
-                    "invalid mix-in declaration of type %s, unexpect owner type %s", 
+                    "invalid mix-in declaration of type %s, unexpect owner type %s",
                     mixinType, domainPojo.getClass());
         }
         try {
@@ -91,10 +91,14 @@ implements MixinFacet {
 
     @Override
     public boolean isCandidateForMain(Method method) {
-        return method.getName().equals(super.value()) &&
-                constructor.getDeclaringClass().equals(method.getDeclaringClass());
+        if (method.getName().equals(super.value())) {
+            final Class<?> constructorDeclaringClass = constructor.getDeclaringClass();
+            final Class<?> methodDeclaringClass = method.getDeclaringClass();
+            if (methodDeclaringClass.isAssignableFrom(constructorDeclaringClass)) return true;
+        }
+        return false;
     }
-    
+
     @Override
     public ManagedObject mixedIn(ManagedObject mixinAdapter, Policy policy) {
         val mixinPojo = mixinAdapter.getPojo();
@@ -104,17 +108,17 @@ implements MixinFacet {
                         : null;
     }
 
-    @Override 
+    @Override
     public void appendAttributesTo(final Map<String, Object> attributeMap) {
         super.appendAttributesTo(attributeMap);
         attributeMap.put("mixinType", mixinType);
         attributeMap.put("constructorType", constructorType);
     }
-    
+
     // -- HELPER
-    
+
     private Object holderPojoFor(Object mixinPojo, Policy policy) {
-        val mixinFields = mixinType.getDeclaredFields();
+        val mixinFields = mixinType.getFields();
         for (val mixinField : mixinFields) {
             if(mixinField.getType().isAssignableFrom(constructorType)) {
                 try {
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java
index 49575cb..9da5819 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java
@@ -1,4 +1,48 @@
+package org.apache.isis.core.metamodel.facets.object.mixin;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
 import static org.junit.jupiter.api.Assertions.*;
-class MixinFacetAbstract_isCandidateForMain_Test {
-  
+
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.val;
+
+class MixinFacetAbstract_Test {
+
+    public abstract static class Collection_numberOfChildren {
+        public Collection_numberOfChildren(Object contributee) {}
+        public int prop() { return 0; }
+    }
+
+    public static class SimpleObject {}
+    public static class SimpleObject_numberOfChildren extends Collection_numberOfChildren {
+        public SimpleObject_numberOfChildren(SimpleObject contributee) { super(contributee); }
+    }
+
+    @Nested
+    class isCandidateForMain {
+
+        @SneakyThrows
+        @Test
+        public void happy_case() {
+
+            // given
+            val constructor = Collection_numberOfChildren.class.getConstructor(Object.class);
+            val facet = new MixinFacetAbstract(Collection_numberOfChildren.class, "prop", constructor, null) {};
+
+            val propMethodInSubclass = SimpleObject_numberOfChildren.class.getMethod("prop");
+
+            // when
+            val candidate = facet.isCandidateForMain(propMethodInSubclass);
+
+            // then
+            Assertions.assertThat(candidate).isTrue();
+        }
+    }
 }
diff --git a/testing/fixtures/applib/pom.xml b/testing/fixtures/applib/pom.xml
index f39f5ff..9142a1b 100644
--- a/testing/fixtures/applib/pom.xml
+++ b/testing/fixtures/applib/pom.xml
@@ -72,6 +72,12 @@
 		</dependency>
 
 		<dependency>
+			<groupId>org.apache.isis.persistence</groupId>
+			<artifactId>isis-persistence-jpa-applib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
 			<groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-runtime</artifactId>
 			<scope>provided</scope>


[isis] 01/02: ISIS-1628: no longer requires method to be overridden in mixin subclass.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 3b0525c2fac27881f0b26c41e3de8fdb48eb0b96
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jan 21 23:11:27 2021 +0000

    ISIS-1628: no longer requires method to be overridden in mixin subclass.
---
 .../core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java   | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java
new file mode 100644
index 0000000..49575cb
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract_Test.java
@@ -0,0 +1,4 @@
+import static org.junit.jupiter.api.Assertions.*;
+class MixinFacetAbstract_isCandidateForMain_Test {
+  
+}