You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2019/05/23 19:24:23 UTC

[sling-org-apache-sling-scripting-sightly-compiler] 01/01: SLING-6779 - [htl-maven-plugin] No warning / error on wrong options

This is an automated email from the ASF dual-hosted git repository.

radu pushed a commit to branch issue/SLING-6779
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-compiler.git

commit 9b790d2e1bf81d1dcaf3cef60299fc080654aa55
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Thu May 23 21:23:40 2019 +0200

    SLING-6779 - [htl-maven-plugin] No warning / error on wrong options
    
    * started adapting code to report unknown options
---
 .../sightly/impl/filter/AbstractFilter.java        | 22 ++++++++++++++++++++-
 .../scripting/sightly/impl/filter/Filter.java      | 12 +++++++++++
 .../sightly/impl/filter/FormatFilter.java          | 23 ++++++++++++++++++++--
 .../scripting/sightly/impl/filter/I18nFilter.java  | 20 +++++++++++--------
 4 files changed, 66 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/AbstractFilter.java b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/AbstractFilter.java
index f72ded7..9f2f931 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/AbstractFilter.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/AbstractFilter.java
@@ -20,6 +20,9 @@ package org.apache.sling.scripting.sightly.impl.filter;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.function.Supplier;
 
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
@@ -43,6 +46,21 @@ public abstract class AbstractFilter implements Filter {
         return 1;
     }
 
+    @Override
+    public Expression apply(Expression expression, ExpressionContext expressionContext) {
+        boolean filter = false;
+        for (String option : getOptions()) {
+            if (expression.containsOption(option)) {
+                filter = true;
+                break;
+            }
+        }
+        if (filter) {
+            return apply(expression, getFilterOptions(expression, getOptions()));
+        }
+        return expression;
+    }
+
     /**
      * Collects the options passed in the {@code options} array into a new map while removing them from the original expression.
      *
@@ -50,7 +68,7 @@ public abstract class AbstractFilter implements Filter {
      * @param options    the options of interest for the {@link Filter}
      * @return a map with the retrieved options; the map can be empty if none of the options were found
      */
-    protected Map<String, ExpressionNode> getFilterOptions(Expression expression, String... options) {
+    protected Map<String, ExpressionNode> getFilterOptions(Expression expression, Set<String> options) {
         Map<String, ExpressionNode> collector = new HashMap<>();
         for (String option : options) {
             ExpressionNode optionNode = expression.removeOption(option);
@@ -61,6 +79,8 @@ public abstract class AbstractFilter implements Filter {
         return collector;
     }
 
+    protected abstract Expression apply(Expression expression, Map<String, ExpressionNode> options);
+
     @Override
     public int hashCode() {
         return super.hashCode();
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/Filter.java b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/Filter.java
index be239ef..44d7288 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/Filter.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/Filter.java
@@ -18,6 +18,9 @@
  ******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.filter;
 
+import java.util.Collections;
+import java.util.Set;
+
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 
 /**
@@ -45,4 +48,13 @@ public interface Filter extends Comparable<Filter> {
      */
     int priority();
 
+    /**
+     * Provides the option names this {@code Filter} will process.
+     *
+     * @return a set of option names
+     */
+    default Set<String> getOptions() {
+        return Collections.emptySet();
+    }
+
 }
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
index 1962dc1..0af52dd 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/FormatFilter.java
@@ -18,6 +18,11 @@
  ******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.filter;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
 import org.apache.sling.scripting.sightly.compiler.expression.nodes.MapLiteral;
@@ -33,6 +38,9 @@ public class FormatFilter extends AbstractFilter {
     public static final String FORMAT_LOCALE_OPTION = "formatLocale";
     public static final String TIMEZONE_OPTION = "timezone";
 
+    private static final Set<String> OPTIONS =
+            new HashSet<>(Arrays.asList(FORMAT_OPTION, TYPE_OPTION, FORMAT_LOCALE_OPTION, TIMEZONE_OPTION));
+
     private static final class FormatFilterLoader {
         private static final FormatFilter INSTANCE = new FormatFilter();
     }
@@ -48,8 +56,14 @@ public class FormatFilter extends AbstractFilter {
     public Expression apply(Expression expression, ExpressionContext expressionContext) {
         //todo: if the expression is a string constant, we can produce the transformation at
         //compile time, with no need of a runtime function
-        if (!expression.containsOption(FORMAT_OPTION) || expressionContext == ExpressionContext.PLUGIN_DATA_SLY_USE || expressionContext
-                == ExpressionContext.PLUGIN_DATA_SLY_TEMPLATE || expressionContext == ExpressionContext.PLUGIN_DATA_SLY_CALL) {
+        boolean filter = false;
+        for (String option : OPTIONS) {
+            if (expression.containsOption(option)) {
+                filter = true;
+                break;
+            }
+        }
+        if (!filter) {
             return expression;
         }
         ExpressionNode translation =
@@ -62,4 +76,9 @@ public class FormatFilter extends AbstractFilter {
                                 TIMEZONE_OPTION)));
         return expression.withNode(translation);
     }
+
+    @Override
+    public Set<String> getOptions() {
+        return OPTIONS;
+    }
 }
diff --git a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
index 5275b13..16b9228 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/impl/filter/I18nFilter.java
@@ -18,7 +18,10 @@
  ******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.filter;
 
+import java.util.Arrays;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.sling.scripting.sightly.compiler.expression.Expression;
 import org.apache.sling.scripting.sightly.compiler.expression.ExpressionNode;
@@ -35,6 +38,8 @@ public final class I18nFilter extends AbstractFilter {
     public static final String LOCALE_OPTION = "locale";
     public static final String BASENAME_OPTION = "basename";
 
+    private static final Set<String> OPTIONS = new HashSet<>(Arrays.asList(I18N_OPTION, HINT_OPTION, LOCALE_OPTION, BASENAME_OPTION));
+
     private static final class I18nFilterLoader {
         private static final I18nFilter INSTANCE = new I18nFilter();
     }
@@ -51,16 +56,15 @@ public final class I18nFilter extends AbstractFilter {
     }
 
     @Override
-    public Expression apply(Expression expression, ExpressionContext expressionContext) {
-        if (!expression.containsOption(I18N_OPTION) || expressionContext == ExpressionContext.PLUGIN_DATA_SLY_USE || expressionContext
-                == ExpressionContext.PLUGIN_DATA_SLY_TEMPLATE || expressionContext == ExpressionContext.PLUGIN_DATA_SLY_CALL) {
-            return expression;
-        }
-        Map <String, ExpressionNode> options = getFilterOptions(expression, HINT_OPTION, LOCALE_OPTION, BASENAME_OPTION);
-        ExpressionNode translation = new RuntimeCall(RuntimeCall.I18N, expression.getRoot(), new MapLiteral
-                (options));
+    protected Expression apply(Expression expression, Map<String, ExpressionNode> options) {
+        ExpressionNode translation = new RuntimeCall(RuntimeCall.I18N, expression.getRoot(), new MapLiteral(options));
         expression.removeOption(I18N_OPTION);
         expression.getOptions().put(FormatFilter.FORMAT_LOCALE_OPTION, options.get(LOCALE_OPTION));
         return expression.withNode(translation);
     }
+
+    @Override
+    public Set<String> getOptions() {
+        return OPTIONS;
+    }
 }