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 2019/10/10 13:35:18 UTC

[isis] branch v2 updated: ISIS-2158: fixes the mixed-in association accept logic

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

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


The following commit(s) were added to refs/heads/v2 by this push:
     new 2bbca21  ISIS-2158: fixes the mixed-in association accept logic
2bbca21 is described below

commit 2bbca2122ef4e875a160b2168674617b2affdb34
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Oct 10 15:35:07 2019 +0200

    ISIS-2158: fixes the mixed-in association accept logic
    
    - seems one predicate got flipped during refactoring
---
 .../isis/config/registry/IsisBeanTypeRegistry.java | 27 +-------------------
 .../specimpl/OneToOneAssociationMixedIn.java       |  1 -
 .../metamodel/specloader/specimpl/Predicates.java  | 29 +++++++++++++++++++---
 .../DomainModelTest_usingGoodDomain.java           |  8 +++---
 4 files changed, 30 insertions(+), 35 deletions(-)

diff --git a/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
index cc8e8d4..7897ec9 100644
--- a/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
+++ b/core/config/src/main/java/org/apache/isis/config/registry/IsisBeanTypeRegistry.java
@@ -70,17 +70,11 @@ public final class IsisBeanTypeRegistry implements IsisComponentScanInterceptor,
      */
     private final Map<Class<?>, BeanSort> inbox = new HashMap<>();
 
-    //TODO replace this getters: don't expose the sets for modification!?
     @Getter private final Set<Class<?>> beanTypes = new HashSet<>();
     @Getter private final Set<Class<?>> entityTypes = new HashSet<>();
     @Getter private final Set<Class<?>> mixinTypes = new HashSet<>();
-    //    @Getter private final Set<Class<? extends FixtureScript>> fixtureScriptTypes = new HashSet<>();
     @Getter private final Set<Class<?>> viewModelTypes = new HashSet<>();
-    //    @Getter private final Set<Class<?>> xmlElementTypes = new HashSet<>();
-
-    //@Getter private final Set<Class<?>> iocManaged = new HashSet<>();
-    //@Getter private final Set<Class<?>> domainObjectTypes = new HashSet<>();
-    //
+    
     private final List<Set<? extends Class<? extends Object>>> allTypeSets = _Lists.of(
             beanTypes,
             entityTypes,
@@ -101,25 +95,6 @@ public final class IsisBeanTypeRegistry implements IsisComponentScanInterceptor,
         allTypeSets.forEach(Set::clear);
     }
 
-    // -- STREAM ALL
-
-    //	public Stream<Class<?>> streamAllTypes() {
-    //
-    //		return _Lists.of(
-    //				iocManaged,
-    //				entityTypes,
-    //				mixinTypes,
-    //				fixtureScriptTypes,
-    //				domainServiceTypes,
-    //				domainObjectTypes,
-    //				viewModelTypes,
-    //				xmlElementTypes)
-    //				.stream()
-    //				.distinct()
-    //				.flatMap(Collection::stream)
-    //				;
-    //	}
-
     // -- INBOX
 
     public void addToInbox(BeanSort sort, Class<?> type) {
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
index e19e52f..59657f1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -23,7 +23,6 @@ import java.util.List;
 import org.apache.isis.applib.Identifier;
 import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.commons.internal.base._Strings;
-import org.apache.isis.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.metamodel.consent.Consent;
 import org.apache.isis.metamodel.consent.InteractionInitiatedBy;
 import org.apache.isis.metamodel.facetapi.FacetHolder;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/Predicates.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/Predicates.java
index 537e349..fc8be2e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/Predicates.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/Predicates.java
@@ -46,6 +46,24 @@ final class Predicates {
         return false;
     }
     
+    static boolean isAssociationContributionVetoed(final ObjectAction contributeeAction) {
+        val notContributed = contributeeAction.getFacet(NotContributedFacet.class);
+        if(notContributed != null && notContributed.toAssociations()) {
+            return true;
+        }
+        return false;
+    }
+    
+    static boolean isGetterCandidate(final ObjectAction action) {
+        if(action.getParameterCount() != 0) {
+            return false;
+        }
+        if(!action.hasReturn()) {
+            return false;
+        }
+        return true;
+    }
+    
     static boolean isAlwaysHidden(final FacetHolder holder) {
         val hiddenFacet = holder.getFacet(HiddenFacet.class);
         return hiddenFacet != null && hiddenFacet.where() == Where.ANYWHERE;
@@ -58,7 +76,7 @@ final class Predicates {
         return Utils.contributeeParameterIndexOf(typeSpec, contributeeAction)!=-1;
     }
     
-    // -- HIGHER LEVEL
+    // -- HIGHER LEVEL - CONTRIBUTEES
     
     static Predicate<ObjectAction> isContributeeAssociation(
             final ObjectSpecification typeSpec) {
@@ -110,6 +128,8 @@ final class Predicates {
         };
     }
     
+    // -- HIGHER LEVEL - MIXINS
+    
     static boolean isMixedInAction(ObjectAction mixinTypeAction) {
         if(!isRequiredType(mixinTypeAction)) {
             return false;
@@ -127,10 +147,13 @@ final class Predicates {
         if(!isRequiredType(mixinAction)) {
             return false;
         }
-        if(isActionContributionVetoed(mixinAction)) {
+        if(isAlwaysHidden(mixinAction)) {
+            return false;
+        }
+        if(isAssociationContributionVetoed(mixinAction)) {
             return false;
         }
-        if(mixinAction.getParameterCount() != 0) {
+        if(!isGetterCandidate(mixinAction)) {
             return false;
         }
         if(!mixinAction.getSemantics().isSafeInNature()) {
diff --git a/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java b/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
index b688b5b..dec536e 100644
--- a/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
+++ b/examples/smoketests/src/test/java/org/apache/isis/testdomain/domainmodel/DomainModelTest_usingGoodDomain.java
@@ -24,7 +24,6 @@ import org.junit.jupiter.api.Test;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.TestPropertySource;
 
-import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.config.IsisPresets;
 import org.apache.isis.integtestsupport.validate.ValidateDomainModel;
 import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -37,7 +36,7 @@ import org.apache.isis.testdomain.model.good.ProperActionSupport;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import lombok.val;
 
@@ -62,8 +61,7 @@ class DomainModelTest_usingGoodDomain {
     
 //    @Inject private MetaModelService metaModelService;
 //    @Inject private JaxbService jaxbService;
-    
-    @Inject private FactoryService factoryService;
+//    @Inject private FactoryService factoryService;
     @Inject private SpecificationLoader specLoader;
 
     void debug() {
@@ -144,7 +142,7 @@ class DomainModelTest_usingGoodDomain {
         val mx_openRestApi = holderSpec.getObjectAction("openRestApi"); // built-in mixin support
         assertNotNull(mx_openRestApi);
         
-        assertNull(holderSpec.getAssociation("openRestApi")); // should not be picked up as a property
+        assertThrows(Exception.class, ()->holderSpec.getAssociation("openRestApi")); // should not be picked up as a property
         
     }