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/05 22:34:38 UTC
[isis] branch v2 updated: ISIS-2158: some minor refinements reg.
MixinFacet
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 f2af6d8 ISIS-2158: some minor refinements reg. MixinFacet
f2af6d8 is described below
commit f2af6d8282532887b1235496f301d182e3bf65a6
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sun Oct 6 00:34:25 2019 +0200
ISIS-2158: some minor refinements reg. MixinFacet
---
.../isis/commons/internal/reflection/_Reflect.java | 13 +++++++++
.../facets/object/mixin/MixinIntendedAs.java | 4 +--
.../facets/object/mixin/MixinFacetAbstract.java | 8 +++---
.../mixin/MixinFacetForDomainObjectAnnotation.java | 25 ++++++++---------
.../object/mixin/MixinFacetForMixinAnnotation.java | 31 +++++++++++-----------
.../mixin/MixinFacetForMixinAnnotationFactory.java | 2 +-
6 files changed, 45 insertions(+), 38 deletions(-)
diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java b/core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
index 258fb50..46a97e9 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/reflection/_Reflect.java
@@ -29,10 +29,12 @@ import java.beans.PropertyDescriptor;
import java.lang.annotation.Annotation;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.Optional;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.function.Consumer;
@@ -408,5 +410,16 @@ public final class _Reflect {
return false;
}
+ public static Optional<Constructor<?>> getPublic1ArgConstructor(Class<?> cls) {
+ val constructors = cls.getConstructors();
+ for (val constructor : constructors) {
+ if(constructor.getParameterCount()==1 &&
+ Modifier.isPublic(constructor.getModifiers())) {
+ return Optional.of(constructor);
+ }
+ }
+ return Optional.empty();
+ }
+
}
diff --git a/core/detached-tests/src/test/java/org/apache/isis/metamodel/facets/object/mixin/MixinIntendedAs.java b/core/detached-tests/src/test/java/org/apache/isis/metamodel/facets/object/mixin/MixinIntendedAs.java
index 26839e8..4ee2062 100644
--- a/core/detached-tests/src/test/java/org/apache/isis/metamodel/facets/object/mixin/MixinIntendedAs.java
+++ b/core/detached-tests/src/test/java/org/apache/isis/metamodel/facets/object/mixin/MixinIntendedAs.java
@@ -88,8 +88,8 @@ abstract class MixinIntendedAs {
facetHolder);
programmingModel.getList().stream()
- .filter(facetFactory->!facetFactory.getClass().getSimpleName().startsWith("Grid"))
- .peek(facetFactory->System.out.println("### " + facetFactory.getClass().getName()))
+// .filter(facetFactory->!facetFactory.getClass().getSimpleName().startsWith("Grid"))
+// .peek(facetFactory->System.out.println("### " + facetFactory.getClass().getName()))
.forEach(facetFactory->facetFactory.process(processClassContext));
return facetHolder;
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 d3bfb11..b4c399c 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
@@ -19,8 +19,6 @@
package org.apache.isis.metamodel.facets.object.mixin;
-import static org.apache.isis.commons.internal.base._With.tryOrDefault;
-
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@@ -47,13 +45,13 @@ extends SingleValueFacetAbstract<String> implements MixinFacet {
public MixinFacetAbstract(
final Class<?> mixinType,
final String value,
- final Class<?> constructorType,
+ final Constructor<?> constructor,
final FacetHolder holder) {
super(type(), value, holder);
this.mixinType = mixinType;
- this.constructorType = constructorType;
- this.constructor = tryOrDefault(()->mixinType.getConstructor(constructorType), null);
+ this.constructor = constructor;
+ this.constructorType = constructor.getParameterTypes()[0];
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
index 331b653..1e67e52 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
@@ -19,11 +19,13 @@
package org.apache.isis.metamodel.facets.object.mixin;
+import java.lang.reflect.Constructor;
import java.util.Optional;
import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.commons.internal.reflection._Reflect;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.facetapi.FacetHolder;
@@ -38,7 +40,7 @@ public class MixinFacetForDomainObjectAnnotation extends MixinFacetAbstract {
private MixinFacetForDomainObjectAnnotation(
final Class<?> mixinType,
final String value,
- final Class<?> constructorType,
+ final Constructor<?> constructorType,
final FacetHolder holder) {
super(mixinType, value, constructorType, holder);
@@ -53,21 +55,16 @@ public class MixinFacetForDomainObjectAnnotation extends MixinFacetAbstract {
return domainObjectIfAny
.filter(domainObject -> domainObject.nature() == Nature.MIXIN)
.map(domainObject -> {
- val constructors = candidateMixinType.getConstructors();
- for (val constructor : constructors) {
- if(constructor.getParameterCount() != 1) {
- continue;
- }
- val constructorTypes = constructor.getParameterTypes();
- val constructorType = constructorTypes[0];
- return new MixinFacetForDomainObjectAnnotation(
+
+ val constructorIfAny = _Reflect.getPublic1ArgConstructor(candidateMixinType);
+
+ return constructorIfAny
+ .map(constructor -> new MixinFacetForDomainObjectAnnotation(
candidateMixinType,
domainObject.mixinMethod(),
- constructorType,
- facetHolder);
- }
- // else
- return null;
+ constructor,
+ facetHolder))
+ .orElse(null);
})
.orElse(null);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
index c12ae82..f8aaad2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
@@ -23,9 +23,12 @@ import java.lang.reflect.Constructor;
import org.apache.isis.applib.annotation.Mixin;
import org.apache.isis.applib.services.inject.ServiceInjector;
+import org.apache.isis.commons.internal.reflection._Reflect;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.facetapi.FacetHolder;
+import lombok.val;
+
public class MixinFacetForMixinAnnotation extends MixinFacetAbstract {
public static Class<? extends Facet> type() {
@@ -35,31 +38,27 @@ public class MixinFacetForMixinAnnotation extends MixinFacetAbstract {
private MixinFacetForMixinAnnotation(
final Class<?> mixinType,
final String value,
- final Class<?> constructorType,
+ final Constructor<?> constructor,
final FacetHolder holder) {
- super(mixinType, value, constructorType, holder);
+ super(mixinType, value, constructor, holder);
}
public static MixinFacet create(
+ final Mixin mixin,
final Class<?> candidateMixinType,
final FacetHolder facetHolder,
final ServiceInjector servicesInjector) {
- final Mixin mixin = candidateMixinType.getAnnotation(Mixin.class);
- if(mixin == null) {
- return null;
- }
- final Constructor<?>[] constructors = candidateMixinType.getConstructors();
- for (Constructor<?> constructor : constructors) {
- final Class<?>[] constructorTypes = constructor.getParameterTypes();
- if(constructorTypes.length != 1) {
- continue;
- }
- final Class<?> constructorType = constructorTypes[0];
- return new MixinFacetForMixinAnnotation(candidateMixinType, mixin.method(), constructorType, facetHolder);
- }
- return null;
+ val constructorIfAny = _Reflect.getPublic1ArgConstructor(candidateMixinType);
+ return constructorIfAny
+ .map(constructor -> new MixinFacetForMixinAnnotation(
+ candidateMixinType,
+ mixin.method(),
+ constructor,
+ facetHolder))
+ .orElse(null);
+
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
index d0671c4..1c0a4ba 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
@@ -52,7 +52,7 @@ extends FacetFactoryAbstract implements MetaModelValidatorRefiner {
val facetHolder = processClassContext.getFacetHolder();
val mixinFacet = MixinFacetForMixinAnnotation
- .create(candidateMixinType, facetHolder, getServiceInjector());
+ .create(mixinIfAny.get(), candidateMixinType, facetHolder, getServiceInjector());
facetHolder.addFacet(mixinFacet);
}