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 12:28:48 UTC

[isis] 07/07: ISIS-2199: reinstates code that had been commented out.

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 a3cbd174df45740a6d86150e36c190955f06d89c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Dec 3 12:22:34 2019 +0000

    ISIS-2199: reinstates code that had been commented out.
    
    This is the supporting method validation logic.  It's not exactly clear to me if the orphan validation stuff still applies, at least not if explict actions annotations are in use.
---
 .../MethodPrefixBasedFacetFactoryAbstract.java     | 103 ++++++++++-----------
 .../specloader/specimpl/FacetedMethodsBuilder.java |   2 +-
 2 files changed, 52 insertions(+), 53 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
index 7f33bc3..5652795 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/MethodPrefixBasedFacetFactoryAbstract.java
@@ -19,12 +19,20 @@
 
 package org.apache.isis.metamodel.facets;
 
+import lombok.val;
+
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.isis.metamodel.facetapi.FeatureType;
 import org.apache.isis.metamodel.progmodel.ProgrammingModel;
+import org.apache.isis.metamodel.spec.ObjectSpecification;
+import org.apache.isis.metamodel.spec.feature.Contributed;
+import org.apache.isis.metamodel.specloader.validator.MetaModelValidator;
+import org.apache.isis.metamodel.specloader.validator.MetaModelValidatorVisiting;
+import org.apache.isis.metamodel.specloader.validator.ValidationFailures;
 
 public abstract class MethodPrefixBasedFacetFactoryAbstract
 extends FacetFactoryAbstract
@@ -51,60 +59,51 @@ implements MethodPrefixBasedFacetFactory {
     }
 
  
-    
     @Override
     public void refineProgrammingModel(ProgrammingModel programmingModel) {
-    
-        
-//XXX[2161] replaced by SupportingMethodValidatorRefinerFactory, which changes behavior!     
-        
-//        if(orphanValidation == OrphanValidation.DONT_VALIDATE) {
-//            return;
-//        }
-//
-//        val noParamsOnly = _Config.getConfiguration().getBoolean(
-//                ISIS_REFLECTOR_VALIDATOR_NO_PARAMS_ONLY_KEY,
-//                ISIS_REFLECTOR_VALIDATOR_NO_PARAMS_ONLY_DEFAULT);
-//
-//        programmingModel.addValidator(new MetaModelValidatorVisiting.Visitor() {
-//
-//            @Override
-//            public boolean visit(final ObjectSpecification objectSpec, final ValidationFailures validationFailures) {
-//
-//                
-//                val objectActionStream = objectSpec.streamObjectActions(Contributed.EXCLUDED);
-//                
-//                objectActionStream.forEach(objectAction->{
-//                    for (final String prefix : prefixes) {
-//                        String actionId = objectAction.getId();
-//
-//                        if (actionId.startsWith(prefix) && prefix.length() < actionId.length()) {
-//
-//                            val explanation =
-//                                    objectAction.getParameterCount() > 0 && 
-//                                    noParamsOnly &&
-//                                    (Objects.equals(prefix, MethodLiteralConstants.HIDE_PREFIX) || 
-//                                            Objects.equals(prefix, MethodLiteralConstants.DISABLE_PREFIX))
-//                                    ? " (note that such methods must have no parameters, '"
-//                                        + ISIS_REFLECTOR_VALIDATOR_NO_PARAMS_ONLY_KEY
-//                                        + "' config property)"
-//                                            : "";
-//
-//                            val message = "%s#%s: has prefix %s, is probably intended as a supporting method for a property, collection or action%s.  If the method is intended to be an action, then rename and use @ActionLayout(named=\"...\") or ignore completely using @Programmatic";
-//                            validationFailures.add(
-//                                    objectSpec.getIdentifier(),
-//                                    message,
-//                                    objectSpec.getIdentifier().getClassName(),
-//                                    actionId,
-//                                    prefix,
-//                                    explanation);
-//                        }
-//                    }
-//                });
-//
-//                return true;
-//            
-//        });
+
+        if(orphanValidation == OrphanValidation.DONT_VALIDATE) {
+            return;
+        }
+
+        val noParamsOnly = getConfiguration().getReflector().getValidator().isNoParamsOnly();
+
+        programmingModel.addValidator((objectSpec, metaModelValidator) -> {
+
+            val objectActionStream = objectSpec.streamObjectActions(Contributed.EXCLUDED);
+
+            objectActionStream.forEach(objectAction->{
+                for (final String prefix : prefixes) {
+                    String actionId = objectAction.getId();
+
+                    if (actionId.startsWith(prefix) && prefix.length() < actionId.length()) {
+
+                        val explanation =
+                                objectAction.getParameterCount() > 0 &&
+                                noParamsOnly &&
+                                (Objects.equals(prefix, MethodLiteralConstants.HIDE_PREFIX) ||
+                                        Objects.equals(prefix, MethodLiteralConstants.DISABLE_PREFIX))
+                                ? " (note that such methods must have no parameters, '"
+                                    + "isis.reflector.validator.no-params-only"
+                                    + "' config property)"
+                                        : "";
+
+                        val message = "%s#%s: has prefix %s, is probably intended as a supporting method for a property, collection or action%s.  If the method is intended to be an action, then rename and use @ActionLayout(named=\"...\") or ignore completely using @Programmatic";
+                        metaModelValidator.onFailure(
+                                objectSpec,
+                                objectSpec.getIdentifier(),
+                                message,
+                                objectSpec.getIdentifier().getClassName(),
+                                actionId,
+                                prefix,
+                                explanation);
+                    }
+                }
+            });
+
+            return true;
+
+        });
     }
 
 }
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 b8fcfa0..0cb82f6 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
@@ -488,8 +488,8 @@ public class FacetedMethodsBuilder {
         if (getFacetProcessor().recognizes(actionMethod)) {
             return false;
         }
+
         // we have a valid action candidate, so fall through
-        
         log.debug("  identified action {}", actionMethod);
         return true;
     }