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/08 15:32:36 UTC
[isis] branch v2 updated: ISIS-1998: extending MixinFacet to help
with early mixin-main method detection
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 7f774c2 ISIS-1998: extending MixinFacet to help with early mixin-main method detection
7f774c2 is described below
commit 7f774c2320ccf3ca865f27fd747417eef012e2d9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Oct 8 17:32:28 2019 +0200
ISIS-1998: extending MixinFacet to help with early mixin-main method
detection
---
.../main/java/org/apache/isis/metamodel/facets/FacetFactory.java | 2 +-
.../org/apache/isis/metamodel/facets/object/mixin/MixinFacet.java | 8 ++++++++
.../isis/metamodel/facets/object/mixin/MixinFacetAbstract.java | 7 +++++++
.../isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java | 8 +++++++-
.../specloader/specimpl/ObjectSpecificationAbstract.java | 2 +-
.../testdomain/domainmodel/DomainModelTest_usingGoodDomain.java | 2 +-
6 files changed, 25 insertions(+), 4 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactory.java
index 968bd9c..5fb998a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/FacetFactory.java
@@ -220,7 +220,7 @@ public interface FacetFactory {
super(cls, method, methodRemover, facetedMethod);
this.featureType = featureType;
- this.mixinMain = false;
+ this.mixinMain = isMixinMain;
}
/** JUnit support, historically not using 'isMixinMain' */
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacet.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacet.java
index 1649b4d..d376c1f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacet.java
@@ -19,6 +19,8 @@
package org.apache.isis.metamodel.facets.object.mixin;
+import java.lang.reflect.Method;
+
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.Collection;
import org.apache.isis.applib.annotation.DomainObject;
@@ -62,6 +64,12 @@ public interface MixinFacet extends SingleValueFacet<String> {
*/
Object instantiate(Object holderPojo);
+ /**
+ * Whether given method matches as a candidate for the mixin's main method.
+ * @param method
+ * @return whether has expected name and same declaring class
+ */
+ boolean isCandidateForMain(Method method);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetAbstract.java
index b4c399c..a19bdda 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetAbstract.java
@@ -21,6 +21,7 @@ package org.apache.isis.metamodel.facets.object.mixin;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.util.Map;
import org.apache.isis.metamodel.adapter.ObjectAdapter;
@@ -91,6 +92,12 @@ extends SingleValueFacetAbstract<String> implements MixinFacet {
}
@Override
+ public boolean isCandidateForMain(Method method) {
+ return method.getName().equals(super.value()) &&
+ constructor.getDeclaringClass().equals(method.getDeclaringClass());
+ }
+
+ @Override
public ObjectAdapter mixedIn(ManagedObject mixinAdapter, Policy policy) {
val mixinPojo = mixinAdapter.getPojo();
val holderPojo = holderPojoFor(mixinPojo, policy);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
index 4fa4b8a..4e70746 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/FacetedMethodsBuilder.java
@@ -46,6 +46,7 @@ import org.apache.isis.metamodel.facets.FacetedMethod;
import org.apache.isis.metamodel.facets.FacetedMethodParameter;
import org.apache.isis.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.metamodel.facets.object.facets.FacetsFacet;
+import org.apache.isis.metamodel.facets.object.mixin.MixinFacet;
import org.apache.isis.metamodel.methodutils.MethodScope;
import org.apache.isis.metamodel.spec.ObjectSpecification;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
@@ -565,9 +566,14 @@ public class FacetedMethodsBuilder {
* @param method
*/
private boolean isMixinMain(Method method) {
- if(!this.inspectedTypeSpec.isMixin()) {
+ val mixinFacet = inspectedTypeSpec.getFacet(MixinFacet.class);
+ if(mixinFacet==null) {
return false;
}
+ if(inspectedTypeSpec.isLessThan(IntrospectionState.TYPE_AND_MEMBERS_INTROSPECTED)) {
+ // members are not introspected yet, so make a guess
+ return mixinFacet.isCandidateForMain(method);
+ }
val mixinMember = inspectedTypeSpec.getMixedInMember(inspectedTypeSpec);
if(!mixinMember.isPresent()) {
return false;
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index fa24f6e..29c5817 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -322,7 +322,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
}
- private boolean isLessThan(IntrospectionState upTo) {
+ boolean isLessThan(IntrospectionState upTo) {
return this.introspectionState.compareTo(upTo) < 0;
}
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 87f83a6..b2391e9 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
@@ -47,7 +47,7 @@ import lombok.val;
})
@TestPropertySource({
IsisPresets.DebugValidation,
- IsisPresets.DebugProgrammingModel,
+ //IsisPresets.DebugProgrammingModel,
})
class DomainModelTest_usingGoodDomain {