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 2019/12/03 09:42:20 UTC
[isis] 06/08: ISIS-2195: refactoring MethodUtil#removeMethods,
removing use of boolean (replace with enum)
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 b418ff6c5d225f976d902f0f71d25c7ee73c90e1
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Dec 3 07:33:38 2019 +0000
ISIS-2195: refactoring MethodUtil#removeMethods, removing use of boolean (replace with enum)
Also removes SpecificationTraverser ... inlines its single method
---
.../CanBeVoid.java} | 21 +++---------
.../isis/metamodel/commons/ClassExtensions.java | 6 ++--
.../apache/isis/metamodel/commons/MethodUtil.java | 17 +++++-----
.../isis/metamodel/facetapi/MethodRemover.java | 21 ++++++------
.../apache/isis/metamodel/facets/FacetFactory.java | 5 +--
.../metamodel/facets/MethodRemoverConstants.java | 3 +-
.../CollectionAccessorFacetViaAccessorFactory.java | 5 +--
.../RemoveStaticGettersAndSettersFacetFactory.java | 5 +--
.../PropertyAccessorFacetViaAccessorFactory.java | 3 +-
.../specloader/specimpl/FacetedMethodsBuilder.java | 38 ++++++++++------------
.../metamodel/facets/MethodRemoverForTesting.java | 7 ++--
11 files changed, 62 insertions(+), 69 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/traverser/SpecificationTraverser.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/CanBeVoid.java
similarity index 60%
rename from core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/traverser/SpecificationTraverser.java
rename to core/metamodel/src/main/java/org/apache/isis/metamodel/commons/CanBeVoid.java
index 6ad9798..bc7d73d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/specloader/traverser/SpecificationTraverser.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/CanBeVoid.java
@@ -17,22 +17,9 @@
* under the License.
*/
-package org.apache.isis.metamodel.specloader.traverser;
-
-import java.lang.reflect.Method;
-import java.util.function.Consumer;
-
-public class SpecificationTraverser {
-
- /**
- * Traverses the return types of each method.
- *
- * <p>
- * It's possible for there to be multiple return types: the generic type,
- * and the parameterized type.
- */
- public void traverseTypes(final Method method, final Consumer<Class<?>> onTypeDiscovered) {
- new TypeExtractorMethodReturn(method).forEach(onTypeDiscovered);
- }
+package org.apache.isis.metamodel.commons;
+public enum CanBeVoid {
+ TRUE,
+ FALSE
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/ClassExtensions.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/ClassExtensions.java
index 98a6c7b..245cf38 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/ClassExtensions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/ClassExtensions.java
@@ -155,11 +155,13 @@ public final class ClassExtensions {
return ClassUtil.defaultByPrimitiveType.get(type);
}
- public static boolean isCompatibleAsReturnType(final Class<?> returnTypeExtendee, final boolean canBeVoid, final Class<?> type) {
+ public static boolean isCompatibleAsReturnType(final Class<?> returnTypeExtendee, final CanBeVoid canBeVoid, final Class<?> type) {
+ boolean mayBeVoid = canBeVoid == CanBeVoid.TRUE;
+
if (returnTypeExtendee == null) {
return true;
}
- if (canBeVoid && (type == void.class)) {
+ if (mayBeVoid && (type == void.class)) {
return true;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodUtil.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodUtil.java
index 798ef39..186c9cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodUtil.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/commons/MethodUtil.java
@@ -153,13 +153,14 @@ public class MethodUtil {
* </ul>
* If the returnType is specified as null then the return type is ignored.
*
- * @param forClass
* @param name
- * @param returnType
- * @param onRemoval
+ * @param onRemoval
* @param paramTypes
* the set of parameters the method should have, if null then is
* ignored
+ * @param forClass
+ * @param returnType
+ * @param canBeVoid
* @return Method
*/
public static void removeMethods(
@@ -167,24 +168,24 @@ public class MethodUtil {
MethodScope forClass,
String prefix,
Class<?> returnType,
- boolean canBeVoid,
- int paramCount,
+ CanBeVoid canBeVoid,
+ int paramCount,
Consumer<Method> onMatch) {
methods.removeIf(method ->
matches(method, forClass, prefix, returnType, canBeVoid, paramCount, onMatch));
}
-
+
private static boolean matches(
Method method,
MethodScope forClass,
String prefix,
Class<?> returnType,
- boolean canBeVoid,
+ CanBeVoid canBeVoid,
int paramCount,
Consumer<Method> onMatch) {
-
+
if (!inScope(method, forClass)) {
return false;
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/MethodRemover.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/MethodRemover.java
index ea9de98..493c025 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/MethodRemover.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facetapi/MethodRemover.java
@@ -22,6 +22,7 @@ package org.apache.isis.metamodel.facetapi;
import java.lang.reflect.Method;
import java.util.function.Consumer;
+import org.apache.isis.metamodel.commons.CanBeVoid;
import org.apache.isis.metamodel.methodutils.MethodScope;
/**
@@ -33,27 +34,27 @@ public interface MethodRemover {
* Locate all methods (that the implementation should somehow know about)
* that match the criteria and remove them from the implementation's list so
* that they are not considered for subsequent scans.
- *
* @param methodScope
* - whether looking for <tt>static</tt> (class) or
* instance-level methods.
+ * @param canBeVoid
* @param onRemoval receives any methods that were removed
*/
void removeMethods(
- MethodScope methodScope,
- String prefix,
- Class<?> returnType,
- boolean canBeVoid,
+ MethodScope methodScope,
+ String prefix,
+ Class<?> returnType,
+ CanBeVoid canBeVoid,
int paramCount,
Consumer<Method> onRemoval
- );
+ );
/*variant with noop consumer*/
default void removeMethods(
- MethodScope methodScope,
- String prefix,
- Class<?> returnType,
- boolean canBeVoid,
+ MethodScope methodScope,
+ String prefix,
+ Class<?> returnType,
+ CanBeVoid canBeVoid,
int paramCount) {
removeMethods(methodScope, prefix, returnType, canBeVoid, paramCount, removedMethod -> {});
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 b4afccc..eeb6f73 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
@@ -29,6 +29,7 @@ import java.util.function.Supplier;
import org.apache.isis.commons.internal.exceptions._Exceptions;
import org.apache.isis.commons.internal.reflection._Annotations;
+import org.apache.isis.metamodel.commons.CanBeVoid;
import org.apache.isis.metamodel.facetapi.Facet;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facetapi.FeatureType;
@@ -113,7 +114,7 @@ public interface FacetFactory {
@Override
- public void removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final boolean canBeVoid, final int paramCount, Consumer<Method> onRemoval) {
+ public void removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final CanBeVoid canBeVoid, final int paramCount, Consumer<Method> onRemoval) {
methodRemover.removeMethods(methodScope, prefix, returnType, canBeVoid, paramCount, onRemoval);
}
@@ -171,7 +172,7 @@ public interface FacetFactory {
}
@Override
- public void removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final boolean canBeVoid, final int paramCount, Consumer<Method> onRemoval) {
+ public void removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final CanBeVoid canBeVoid, final int paramCount, Consumer<Method> onRemoval) {
methodRemover.removeMethods(methodScope, prefix, returnType, canBeVoid, paramCount, onRemoval);
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodRemoverConstants.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodRemoverConstants.java
index 254ce21..7a29d84 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodRemoverConstants.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodRemoverConstants.java
@@ -22,6 +22,7 @@ package org.apache.isis.metamodel.facets;
import java.lang.reflect.Method;
import java.util.function.Consumer;
+import org.apache.isis.metamodel.commons.CanBeVoid;
import org.apache.isis.metamodel.facetapi.MethodRemover;
import org.apache.isis.metamodel.methodutils.MethodScope;
@@ -29,7 +30,7 @@ public class MethodRemoverConstants {
public static MethodRemover NOOP = new MethodRemover() {
@Override
- public void removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final boolean canBeVoid, final int paramCount, Consumer<Method> onRemoval) {
+ public void removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final CanBeVoid canBeVoid, final int paramCount, Consumer<Method> onRemoval) {
}
@Override
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
index 13f39b8..1ea5042 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/collections/accessor/CollectionAccessorFacetViaAccessorFactory.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Method;
import java.util.Collection;
import java.util.List;
+import org.apache.isis.metamodel.commons.CanBeVoid;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facetapi.FeatureType;
import org.apache.isis.metamodel.facetapi.MethodRemover;
@@ -97,8 +98,8 @@ extends PropertyOrCollectionIdentifyingFacetFactoryAbstract {
methodRemover.removeMethods(
MethodScope.OBJECT,
MethodLiteralConstants.GET_PREFIX,
- Collection.class,
- false,
+ Collection.class,
+ CanBeVoid.FALSE,
0,
methodListToAppendTo::add
);
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java
index d57f77b..7ae8721 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/object/ignore/isis/RemoveStaticGettersAndSettersFacetFactory.java
@@ -19,6 +19,7 @@
package org.apache.isis.metamodel.facets.object.ignore.isis;
+import org.apache.isis.metamodel.commons.CanBeVoid;
import org.apache.isis.metamodel.facetapi.FeatureType;
import org.apache.isis.metamodel.facets.FacetFactoryAbstract;
import org.apache.isis.metamodel.methodutils.MethodScope;
@@ -35,8 +36,8 @@ public class RemoveStaticGettersAndSettersFacetFactory extends FacetFactoryAbstr
@Override
public void process(final ProcessClassContext processClassContext) {
- processClassContext.removeMethods(MethodScope.CLASS, "get", null, false, 0);
- processClassContext.removeMethods(MethodScope.CLASS, "set", null, false, 0);
+ processClassContext.removeMethods(MethodScope.CLASS, "get", null, CanBeVoid.FALSE, 0);
+ processClassContext.removeMethods(MethodScope.CLASS, "set", null, CanBeVoid.FALSE, 0);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java
index 6ee0210..b51f3e8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/properties/accessor/PropertyAccessorFacetViaAccessorFactory.java
@@ -22,6 +22,7 @@ package org.apache.isis.metamodel.facets.properties.accessor;
import java.lang.reflect.Method;
import java.util.List;
+import org.apache.isis.metamodel.commons.CanBeVoid;
import org.apache.isis.metamodel.facetapi.FacetHolder;
import org.apache.isis.metamodel.facetapi.FacetUtil;
import org.apache.isis.metamodel.facetapi.FeatureType;
@@ -98,7 +99,7 @@ public class PropertyAccessorFacetViaAccessorFactory extends PropertyOrCollectio
}
private static void appendMatchingMethods(final MethodRemover methodRemover, final String prefix, final Class<?> returnType, final List<Method> methodListToAppendTo) {
- methodRemover.removeMethods(MethodScope.OBJECT, prefix, returnType, false, 0, methodListToAppendTo::add);
+ methodRemover.removeMethods(MethodScope.OBJECT, prefix, returnType, CanBeVoid.FALSE, 0, methodListToAppendTo::add);
}
@Override
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 0cb0855..8e8d1d7 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
@@ -20,10 +20,7 @@
package org.apache.isis.metamodel.specloader.specimpl;
import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -34,6 +31,7 @@ import org.apache.isis.commons.exceptions.IsisException;
import org.apache.isis.commons.internal.collections._Lists;
import org.apache.isis.commons.internal.collections._Sets;
import org.apache.isis.commons.internal.reflection._Annotations;
+import org.apache.isis.metamodel.commons.CanBeVoid;
import org.apache.isis.metamodel.commons.MethodUtil;
import org.apache.isis.metamodel.commons.ToString;
import org.apache.isis.metamodel.exceptions.MetaModelException;
@@ -51,7 +49,7 @@ import org.apache.isis.metamodel.spec.ObjectSpecification;
import org.apache.isis.metamodel.specloader.SpecificationLoader;
import org.apache.isis.metamodel.specloader.classsubstitutor.ClassSubstitutor;
import org.apache.isis.metamodel.specloader.facetprocessor.FacetProcessor;
-import org.apache.isis.metamodel.specloader.traverser.SpecificationTraverser;
+import org.apache.isis.metamodel.specloader.traverser.TypeExtractorMethodReturn;
import lombok.val;
import lombok.extern.log4j.Log4j2;
@@ -92,7 +90,7 @@ public class FacetedMethodsBuilder {
MethodScope methodScope,
String prefix,
Class<?> returnType,
- boolean canBeVoid,
+ CanBeVoid canBeVoid,
int paramCount,
Consumer<Method> onRemoval) {
@@ -137,7 +135,6 @@ public class FacetedMethodsBuilder {
private final FacetProcessor facetProcessor;
- private final SpecificationTraverser specificationTraverser = new SpecificationTraverser();
private final ClassSubstitutor classSubstitutor = new ClassSubstitutor();
private final SpecificationLoader specificationLoader;
@@ -252,7 +249,7 @@ public class FacetedMethodsBuilder {
// Ensure all return types are known
val typesToLoad = _Sets.<Class<?>>newHashSet();
for (val method : associationCandidateMethods) {
- specificationTraverser.traverseTypes(method, typesToLoad::add);
+ new TypeExtractorMethodReturn(method).forEach(typesToLoad::add);
}
typesToLoad.remove(introspectedClass);
@@ -464,13 +461,13 @@ public class FacetedMethodsBuilder {
}
val typesToLoad = _Sets.<Class<?>>newHashSet();
- specificationTraverser.traverseTypes(actionMethod, typesToLoad::add);
+ new TypeExtractorMethodReturn(actionMethod).forEach(typesToLoad::add);
val specLoader = getSpecificationLoader();
val anyLoadedAsNull = typesToLoad.stream()
.map(typeToLoad->specLoader.loadSpecification(typeToLoad, IntrospectionState.TYPE_INTROSPECTED))
- .anyMatch(spec->spec==null);
+ .anyMatch(Objects::isNull);
if (anyLoadedAsNull) {
return false;
@@ -535,8 +532,12 @@ public class FacetedMethodsBuilder {
// ////////////////////////////////////////////////////////////////////////////
/**
- * As per {@link #findAndRemovePrefixedNonVoidMethods(org.apache.isis.metamodel.methodutils.MethodScope, String, Class, int, java.util.List)},
- * but appends to provided {@link List} (collecting parameter pattern).
+ *
+ * @param methodScope
+ * @param prefix
+ * @param returnType
+ * @param paramCount
+ * @param onRemoved - collecting parameter
*/
private void findAndRemovePrefixedNonVoidMethods(
final MethodScope methodScope,
@@ -545,24 +546,19 @@ public class FacetedMethodsBuilder {
final int paramCount,
final Consumer<Method> onRemoved) {
- findAndRemovePrefixedMethods(methodScope, prefix, returnType, false, paramCount, onRemoved);
+ findAndRemovePrefixedMethods(methodScope, prefix, returnType, CanBeVoid.FALSE, paramCount, onRemoved);
}
- /**
- * Searches for all methods matching the prefix and returns them, also
- * removing it from the {@link #methodsRemaining array of methods} if found.
- * @param onMatch
- */
private void findAndRemovePrefixedMethods(
final MethodScope methodScope,
final String prefix,
final Class<?> returnType,
- final boolean canBeVoid,
- final int paramCount,
+ final CanBeVoid canBeVoid,
+ final int paramCount,
Consumer<Method> onMatch) {
methodRemover.acceptRemaining(methodsRemaining->{
- MethodUtil.removeMethods(methodsRemaining, methodScope, prefix, returnType, canBeVoid, paramCount, onMatch);
+ MethodUtil.removeMethods(methodsRemaining, methodScope, prefix, returnType, canBeVoid, paramCount, onMatch);
});
}
diff --git a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/MethodRemoverForTesting.java b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/MethodRemoverForTesting.java
index 7fe4bf5..d6ab31e 100644
--- a/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/MethodRemoverForTesting.java
+++ b/core/metamodel/src/test/java/org/apache/isis/metamodel/facets/MethodRemoverForTesting.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
+import org.apache.isis.metamodel.commons.CanBeVoid;
import org.apache.isis.metamodel.facetapi.MethodRemover;
import org.apache.isis.metamodel.methodutils.MethodScope;
@@ -77,14 +78,14 @@ public class MethodRemoverForTesting implements MethodRemover {
public MethodScope methodScope;
public String prefix;
public Class<?> returnType;
- public boolean canBeVoid;
+ public CanBeVoid canBeVoid;
public int paramCount;
}
- private final List<RemoveMethodsArgs> removeMethodsArgs = new ArrayList<RemoveMethodsArgs>();
+ private final List<RemoveMethodsArgs> removeMethodsArgs = new ArrayList<>();
@Override
- public void removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final boolean canBeVoid, final int paramCount, Consumer<Method> onRemoval) {
+ public void removeMethods(final MethodScope methodScope, final String prefix, final Class<?> returnType, final CanBeVoid canBeVoid, final int paramCount, Consumer<Method> onRemoval) {
removeMethodsArgs.add(new RemoveMethodsArgs(methodScope, prefix, returnType, canBeVoid, paramCount));
}