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
}