You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2017/09/14 09:14:10 UTC

[1/9] incubator-freemarker git commit: FREEMARKER-55: narrow class/method visibilities as possible.

Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 742ed4fee -> f6eebd856


FREEMARKER-55: narrow class/method visibilities as possible.


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/40bd07b7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/40bd07b7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/40bd07b7

Branch: refs/heads/3
Commit: 40bd07b718262e30345c082ec4794ab2535b5fd8
Parents: 5f6a917
Author: Woonsan Ko <wo...@apache.org>
Authored: Wed Sep 13 10:49:36 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Wed Sep 13 10:49:36 2017 -0400

----------------------------------------------------------------------
 .../model/AbstractSpringTemplateCallableModel.java       |  4 ++--
 .../model/AbstractSpringTemplateDirectiveModel.java      |  4 ++--
 .../model/AbstractSpringTemplateFunctionModel.java       |  4 ++--
 .../apache/freemarker/spring/model/BindDirective.java    |  4 ++--
 .../freemarker/spring/model/BindErrorsDirective.java     |  4 ++--
 .../org/apache/freemarker/spring/model/EvalFunction.java |  6 +++---
 .../apache/freemarker/spring/model/MessageFunction.java  | 11 ++++++++---
 .../freemarker/spring/model/NestedPathDirective.java     |  4 ++--
 .../spring/model/SpringTemplateCallableHashModel.java    |  9 +++++----
 .../apache/freemarker/spring/model/ThemeFunction.java    |  5 +++--
 .../freemarker/spring/model/TransformFunction.java       |  6 +++---
 .../org/apache/freemarker/spring/model/UrlFunction.java  |  6 +++---
 12 files changed, 37 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
index 641fbdb..03142d6 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
@@ -34,7 +34,7 @@ import org.springframework.web.servlet.support.RequestContext;
 /**
  * Abstract TemplateCallableModel for derived classes to support Spring MVC based templating environment.
  */
-public abstract class AbstractSpringTemplateCallableModel implements TemplateCallableModel {
+abstract class AbstractSpringTemplateCallableModel implements TemplateCallableModel {
 
     private final HttpServletRequest request;
     private final HttpServletResponse response;
@@ -44,7 +44,7 @@ public abstract class AbstractSpringTemplateCallableModel implements TemplateCal
      * @param request servlet request
      * @param response servlet response
      */
-    public AbstractSpringTemplateCallableModel(HttpServletRequest request, HttpServletResponse response) {
+    protected AbstractSpringTemplateCallableModel(HttpServletRequest request, HttpServletResponse response) {
         this.request = request;
         this.response = response;
     }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java
index 0ce34d0..a02558f 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java
@@ -39,7 +39,7 @@ import org.springframework.web.servlet.view.AbstractTemplateView;
 /**
  * Abstract TemplateDirectiveModel for derived classes to support Spring MVC based templating environment.
  */
-public abstract class AbstractSpringTemplateDirectiveModel extends AbstractSpringTemplateCallableModel
+abstract class AbstractSpringTemplateDirectiveModel extends AbstractSpringTemplateCallableModel
         implements TemplateDirectiveModel {
 
     /**
@@ -47,7 +47,7 @@ public abstract class AbstractSpringTemplateDirectiveModel extends AbstractSprin
      * @param request servlet request
      * @param response servlet response
      */
-    public AbstractSpringTemplateDirectiveModel(HttpServletRequest request, HttpServletResponse response) {
+    protected AbstractSpringTemplateDirectiveModel(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java
index 137837c..90bd3df 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java
@@ -36,7 +36,7 @@ import org.springframework.web.servlet.view.AbstractTemplateView;
 /**
  * Abstract TemplateFunctionModel for derived classes to support Spring MVC based templating environment.
  */
-public abstract class AbstractSpringTemplateFunctionModel extends AbstractSpringTemplateCallableModel
+abstract class AbstractSpringTemplateFunctionModel extends AbstractSpringTemplateCallableModel
         implements TemplateFunctionModel {
 
     /**
@@ -44,7 +44,7 @@ public abstract class AbstractSpringTemplateFunctionModel extends AbstractSpring
      * @param request servlet request
      * @param response servlet response
      */
-    public AbstractSpringTemplateFunctionModel(HttpServletRequest request, HttpServletResponse response) {
+    protected AbstractSpringTemplateFunctionModel(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindDirective.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindDirective.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindDirective.java
index 99f5f86..1a3917c 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindDirective.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindDirective.java
@@ -62,7 +62,7 @@ import org.springframework.web.servlet.support.RequestContext;
  * because it is much easier to control escaping in FreeMarker Template expressions.
  * </P>
  */
-public class BindDirective extends AbstractSpringTemplateDirectiveModel {
+class BindDirective extends AbstractSpringTemplateDirectiveModel {
 
     public static final String NAME = "bind";
 
@@ -79,7 +79,7 @@ public class BindDirective extends AbstractSpringTemplateDirectiveModel {
                     false
                     );
 
-    public BindDirective(HttpServletRequest request, HttpServletResponse response) {
+    protected BindDirective(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindErrorsDirective.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindErrorsDirective.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindErrorsDirective.java
index 2b73780..2f6a93e 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindErrorsDirective.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/BindErrorsDirective.java
@@ -65,7 +65,7 @@ import org.springframework.web.servlet.support.RequestContext;
  * rather than depending on directives.
  * </P>
  */
-public class BindErrorsDirective extends AbstractSpringTemplateDirectiveModel {
+class BindErrorsDirective extends AbstractSpringTemplateDirectiveModel {
 
     public static final String NAME = "hasBindErrors";
 
@@ -79,7 +79,7 @@ public class BindErrorsDirective extends AbstractSpringTemplateDirectiveModel {
                     false
                     );
 
-    public BindErrorsDirective(HttpServletRequest request, HttpServletResponse response) {
+    protected BindErrorsDirective(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
index 39d210e..2c257c4 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
@@ -75,7 +75,7 @@ import org.springframework.web.servlet.support.RequestContext;
  * because it is much easier to control escaping in FreeMarker Template expressions.
  * </P>
  */
-public class EvalFunction extends AbstractSpringTemplateFunctionModel {
+class EvalFunction extends AbstractSpringTemplateFunctionModel {
 
     public static final String NAME = "eval";
 
@@ -93,12 +93,12 @@ public class EvalFunction extends AbstractSpringTemplateFunctionModel {
 
     private final ExpressionParser expressionParser = new SpelExpressionParser();
 
-    public EvalFunction(HttpServletRequest request, HttpServletResponse response) {
+    protected EvalFunction(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 
     @Override
-    public TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
+    protected TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext)
                     throws TemplateException {
         final String expressionString = CallableUtils.getStringArgument(args, EXPRESSION_PARAM_IDX, this);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
index f30e07b..c7b6db5 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
@@ -74,7 +74,7 @@ import org.springframework.web.servlet.support.RequestContext;
  * because it is much easier to control escaping in FreeMarker Template expressions.
  * </P>
  */
-public class MessageFunction extends AbstractSpringTemplateFunctionModel {
+class MessageFunction extends AbstractSpringTemplateFunctionModel {
 
     public static final String NAME = "message";
 
@@ -92,12 +92,12 @@ public class MessageFunction extends AbstractSpringTemplateFunctionModel {
                     false
                     );
 
-    public MessageFunction(HttpServletRequest request, HttpServletResponse response) {
+    protected MessageFunction(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 
     @Override
-    public TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
+    protected TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext)
                     throws TemplateException {
         final MessageSource messageSource = getMessageSource(requestContext);
@@ -149,6 +149,11 @@ public class MessageFunction extends AbstractSpringTemplateFunctionModel {
         return ARGS_LAYOUT;
     }
 
+    /**
+     * Get the {@link MessageSource} bean from the current application context.
+     * @param requestContext Spring Framework RequestContext
+     * @return the {@link MessageSource} bean from the current application context
+     */
     protected MessageSource getMessageSource(final RequestContext requestContext) {
         return requestContext.getMessageSource();
     }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java
index b24dfaf..43788f6 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/NestedPathDirective.java
@@ -54,7 +54,7 @@ import org.springframework.web.servlet.support.RequestContext;
  *   &lt;/@spring.nestedPath&gt;
  * </PRE>
  */
-public class NestedPathDirective extends AbstractSpringTemplateDirectiveModel {
+class NestedPathDirective extends AbstractSpringTemplateDirectiveModel {
 
     public static final String NAME = "nestedPath";
 
@@ -68,7 +68,7 @@ public class NestedPathDirective extends AbstractSpringTemplateDirectiveModel {
                     false
                     );
 
-    public NestedPathDirective(HttpServletRequest request, HttpServletResponse response) {
+    protected NestedPathDirective(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
index 4e42923..8afb4ab 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
@@ -68,6 +68,7 @@ public final class SpringTemplateCallableHashModel implements TemplateHashModel,
         modelsMap.put(EvalFunction.NAME, new EvalFunction(request, response));
     }
 
+    @Override
     public TemplateModel get(String key) throws TemplateException {
         return modelsMap.get(key);
     }
@@ -77,19 +78,19 @@ public final class SpringTemplateCallableHashModel implements TemplateHashModel,
         return false;
     }
 
-    public TemplateStringModel getNestedPathModel() throws TemplateException {
+    TemplateStringModel getNestedPathModel() throws TemplateException {
         return (TemplateStringModel) get(NESTED_PATH_MODEL);
     }
 
-    public void setNestedPathModel(TemplateStringModel nestedPathModel) {
+    void setNestedPathModel(TemplateStringModel nestedPathModel) {
         modelsMap.put(NESTED_PATH_MODEL, nestedPathModel);
     }
 
-    public TemplateModel getEvaluationContextModel() throws TemplateException {
+    TemplateModel getEvaluationContextModel() throws TemplateException {
         return (TemplateModel) get(EVALUATION_CONTEXT_MODEL);
     }
 
-    public void setEvaluationContextModel(TemplateModel evaluationContextModel) {
+    void setEvaluationContextModel(TemplateModel evaluationContextModel) {
         modelsMap.put(EVALUATION_CONTEXT_MODEL, evaluationContextModel);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/ThemeFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/ThemeFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/ThemeFunction.java
index 4f201ad..ca457a7 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/ThemeFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/ThemeFunction.java
@@ -57,14 +57,15 @@ import org.springframework.web.servlet.support.RequestContext;
  * because it is much easier to control escaping in FreeMarker Template expressions.
  * </P>
  */
-public class ThemeFunction extends MessageFunction {
+class ThemeFunction extends MessageFunction {
 
     public static final String NAME = "theme";
 
-    public ThemeFunction(HttpServletRequest request, HttpServletResponse response) {
+    protected ThemeFunction(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 
+    @Override
     protected MessageSource getMessageSource(final RequestContext requestContext) {
         return requestContext.getTheme().getMessageSource();
     }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
index 6110652..96258a7 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
@@ -50,7 +50,7 @@ import org.springframework.web.servlet.support.RequestContext;
  * because it is much easier to control escaping in FreeMarker Template expressions.
  * </P>
  */
-public class TransformFunction extends AbstractSpringTemplateFunctionModel {
+class TransformFunction extends AbstractSpringTemplateFunctionModel {
 
     public static final String NAME = "transform";
 
@@ -65,12 +65,12 @@ public class TransformFunction extends AbstractSpringTemplateFunctionModel {
                     false
                     );
 
-    public TransformFunction(HttpServletRequest request, HttpServletResponse response) {
+    protected TransformFunction(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 
     @Override
-    public TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
+    protected TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext)
                     throws TemplateException {
         final TemplateModel editorModel = CallableUtils.getOptionalArgument(args, PROPERTY_EDITOR_PARAM_IDX,

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/40bd07b7/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java
index 47c83ab..908b3de 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java
@@ -68,7 +68,7 @@ import org.springframework.web.util.UriUtils;
  * because it is much easier to control escaping in FreeMarker Template expressions.
  * </P>
  */
-public class UrlFunction extends AbstractSpringTemplateFunctionModel {
+class UrlFunction extends AbstractSpringTemplateFunctionModel {
 
     public static final String NAME = "url";
 
@@ -95,12 +95,12 @@ public class UrlFunction extends AbstractSpringTemplateFunctionModel {
                     true
                     );
 
-    public UrlFunction(HttpServletRequest request, HttpServletResponse response) {
+    protected UrlFunction(HttpServletRequest request, HttpServletResponse response) {
         super(request, response);
     }
 
     @Override
-    public TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
+    protected TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext)
                     throws TemplateException {
         final String value = CallableUtils.getStringArgument(args, VALUE_PARAM_IDX, this);


[3/9] incubator-freemarker git commit: FREEMARKER-55: simplifying test examples with no interim vars

Posted by dd...@apache.org.
FREEMARKER-55: simplifying test examples with no interim vars


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/f6abc305
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/f6abc305
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/f6abc305

Branch: refs/heads/3
Commit: f6abc3054e1fb571c221d874c2c2ed37bb8ecf7c
Parents: 3f6ee18
Author: Woonsan Ko <wo...@apache.org>
Authored: Wed Sep 13 12:21:10 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Wed Sep 13 12:21:10 2017 -0400

----------------------------------------------------------------------
 .../test/model/eval-function-basic-usages.ftl   | 15 +++++---------
 .../test/model/url-function-basic-usages.ftl    | 21 +++++++-------------
 2 files changed, 12 insertions(+), 24 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/f6abc305/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/eval-function-basic-usages.ftl
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/eval-function-basic-usages.ftl b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/eval-function-basic-usages.ftl
index b5b1dd6..2498b5f 100644
--- a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/eval-function-basic-usages.ftl
+++ b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/eval-function-basic-usages.ftl
@@ -20,26 +20,21 @@
 <html>
 <body>
 
-<#assign expression="T(java.lang.Math).max(12.34, 56.78)" />
-<div id="maxNumber">${spring.eval(expression)}</div>
+<div id="maxNumber">${spring.eval("T(java.lang.Math).max(12.34, 56.78)")}</div>
 
 <ul>
   <#list users as user>
     <li>
-      <#assign expression="user.id" />
-      <div id="user-${spring.eval(expression)!}">
-        <#assign expression="user.firstName + ' ' + user.lastName" />
-        ${spring.eval(expression)!}
+      <div id="user-${spring.eval('user.id')!}">
+        ${spring.eval("user.firstName + ' ' + user.lastName")!}
       </div>
     </li>
   </#list>
 </ul>
 
-<#assign expression="users[0].id" />
-<div id="firstUserId">${spring.eval(expression)!}</div>
+<div id="firstUserId">${spring.eval("users[0].id")!}</div>
 
-<#assign expression="{0,1,1,2,3,5,8,13}" />
-<#assign numbers=spring.eval(expression) />
+<#assign numbers=spring.eval("{0,1,1,2,3,5,8,13}") />
 <div id="fibonacci"><#list numbers as number>${number}<#sep>, </#list></div>
 
 </body>

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/f6abc305/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl
index 870ba3c..cd8ff79 100644
--- a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl
+++ b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl
@@ -21,41 +21,34 @@
 <body>
 
 <h2 id="usersListHeader">
-  <#assign pathInfo="/users/" />
-  <a href="${spring.url(pathInfo)}">Users List</a>
+  <a href="${spring.url('/users/')}">Users List</a>
 </h2>
 
 <h3 id="usersListHeaderWithSortParams">
-  <#assign pathInfo="/users/" />
-  <a href="${spring.url(pathInfo, sortField='birthDate', sortDirection='descending')}">Users List</a>
+  <a href="${spring.url('/users/', sortField='birthDate', sortDirection='descending')}">Users List</a>
 </h3>
 
 <h2 id="otherAppsUsersListHeader">
-  <#assign pathInfo="/users/" />
-  <a href="${spring.url(pathInfo, context='/otherapp')}">Users List</a>
+  <a href="${spring.url('/users/', context='/otherapp')}">Users List</a>
 </h2>
 
 <h3 id="otherAppsUsersListHeaderWithSortParams">
-  <#assign pathInfo="/users/" />
-  <a href="${spring.url(pathInfo, context='/otherapp', sortField='birthDate', sortDirection='descending')}">Users List</a>
+  <a href="${spring.url('/users/', context='/otherapp', sortField='birthDate', sortDirection='descending')}">Users List</a>
 </h3>
 
 <ul>
   <#list users as user>
     <li>
       <div id="user-${user.id!}">
-        <#assign pathInfo="/users/{userId}/" />
-        <a class="userIdLink" href="${spring.url(pathInfo, userId=user.id?string)}">${user.id!}</a>
-        <#assign pathInfo="/users/${user.id}/" />
-        <a class="userNameLink" href="${spring.url(pathInfo)}">${user.firstName!} ${user.lastName!}</a>
+        <a class="userIdLink" href="${spring.url('/users/{userId}/', userId=user.id?string)}">${user.id!}</a>
+        <a class="userNameLink" href="${spring.url('/users/${user.id}/')}">${user.firstName!} ${user.lastName!}</a>
       </div>
     </li>
   </#list>
 </ul>
 
 <div id="freeMarkerManualUrl">
-  <#assign pathInfo="http://freemarker.org/docs/index.html" />
-  <a href="${spring.url(pathInfo)}">Apache FreeMarker Manual</a>
+  <a href="${spring.url('http://freemarker.org/docs/index.html')}">Apache FreeMarker Manual</a>
 </div>
 
 </body>


[7/9] incubator-freemarker git commit: Merge branch '3' into feature/FREEMARKER-55-2

Posted by dd...@apache.org.
Merge branch '3' into feature/FREEMARKER-55-2


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/ba180d03
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/ba180d03
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/ba180d03

Branch: refs/heads/3
Commit: ba180d0337358fe2136b5a059cbfb98bd1ac6900
Parents: ed955ce 742ed4f
Author: Woonsan Ko <wo...@apache.org>
Authored: Wed Sep 13 21:36:54 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Wed Sep 13 21:36:54 2017 -0400

----------------------------------------------------------------------
 .../freemarker/core/ASTDollarInterpolation.java |  2 +-
 .../freemarker/core/ASTExpAddOrConcat.java      |  4 +--
 .../apache/freemarker/core/ASTExpression.java   |  8 +++---
 .../core/BuiltInForLegacyEscaping.java          |  2 +-
 .../core/BuiltInsForOutputFormatRelated.java    |  2 +-
 .../freemarker/core/BuiltInsForSequences.java   |  2 +-
 .../org/apache/freemarker/core/Environment.java | 28 ++++++++++++++++++++
 .../org/apache/freemarker/core/_EvalUtils.java  | 12 ++++-----
 8 files changed, 44 insertions(+), 16 deletions(-)
----------------------------------------------------------------------



[6/9] incubator-freemarker git commit: FREEMARKER-55: fixing javadocs

Posted by dd...@apache.org.
FREEMARKER-55: fixing javadocs


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/ed955cee
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/ed955cee
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/ed955cee

Branch: refs/heads/3
Commit: ed955cee700fc162568ae944cc6db516ebcd092c
Parents: 3c25f7a
Author: Woonsan Ko <wo...@apache.org>
Authored: Wed Sep 13 21:35:06 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Wed Sep 13 21:35:06 2017 -0400

----------------------------------------------------------------------
 .../spring/SpringResourceTemplateLoader.java     | 19 ++++---------------
 .../spring/web/view/PageContextServlet.java      |  4 ++--
 2 files changed, 6 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ed955cee/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java
index bf430b7..c8bee0b 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/SpringResourceTemplateLoader.java
@@ -54,7 +54,8 @@ public class SpringResourceTemplateLoader implements TemplateLoader, ResourceLoa
     private ResourceLoader resourceLoader;
 
     /**
-     * Base resource location which can be prepended to the template name internally when resolving a resource.
+     * Return base resource location which can be prepended to the template name internally when resolving a resource.
+     * @return base resource location which can be prepended to the template name internally when resolving a resource
      */
     public String getBaseLocation() {
         return baseLocation;
@@ -62,31 +63,22 @@ public class SpringResourceTemplateLoader implements TemplateLoader, ResourceLoa
 
     /**
      * Set base resource location which can be prepended to the template name internally when resolving a resource.
-     * @param baseLocation
+     * @param baseLocation base resource location which can be prepended to the template name internally when resolving a resource
      */
     public void setBaseLocation(String baseLocation) {
         this.baseLocation = baseLocation;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public void setResourceLoader(ResourceLoader resourceLoader) {
         this.resourceLoader = resourceLoader;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public TemplateLoaderSession createSession() {
         return null;
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public TemplateLoadingResult load(String name, TemplateLoadingSource ifSourceDiffersFrom,
             Serializable ifVersionDiffersFrom, TemplateLoaderSession session) throws IOException {
@@ -129,12 +121,9 @@ public class SpringResourceTemplateLoader implements TemplateLoader, ResourceLoa
         return new TemplateLoadingResult(source, version, resource.getInputStream(), null);
     }
 
-    /**
-     * {@inheritDoc}
-     */
     @Override
     public void resetState() {
-        // Does nothing
+        // Do nothing
     }
 
     @SuppressWarnings("serial")

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ed955cee/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/PageContextServlet.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/PageContextServlet.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/PageContextServlet.java
index 7b8e923..97f4321 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/PageContextServlet.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/web/view/PageContextServlet.java
@@ -27,8 +27,8 @@ import javax.servlet.ServletResponse;
 
 /**
  * A built-in internal servlet class to be used as page object in JSP tag libraries used in FreeMarker templates.
- *
- * @see javax.servlet.jsp.PageContext#getPage()
+ * JSP Tag Library implementations may invoke <code>javax.servlet.jsp.PageContext#getPage()</code> to get the
+ * reference of the servlet. So, this internal servlet implementation is provided for that.
  */
 @SuppressWarnings("serial")
 final class PageContextServlet extends GenericServlet {


[8/9] incubator-freemarker git commit: FREEMARKER-55: use Environment.formatToPlainText(model) if param value in url function is not string model.

Posted by dd...@apache.org.
FREEMARKER-55: use Environment.formatToPlainText(model) if param value in url function is not string model.


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/7c6f56cb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/7c6f56cb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/7c6f56cb

Branch: refs/heads/3
Commit: 7c6f56cb1f6d9576c6e4b5d30ba700cb3c23b3ba
Parents: ba180d0
Author: Woonsan Ko <wo...@apache.org>
Authored: Wed Sep 13 21:57:47 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Wed Sep 13 21:57:47 2017 -0400

----------------------------------------------------------------------
 .../org/apache/freemarker/spring/model/UrlFunction.java | 12 ++++++++----
 .../views/test/model/url-function-basic-usages.ftl      |  2 +-
 2 files changed, 9 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7c6f56cb/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java
index 908b3de..e2986a9 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/UrlFunction.java
@@ -123,20 +123,24 @@ class UrlFunction extends AbstractSpringTemplateFunctionModel {
                 paramNameModel = pair.getKey();
                 paramValueModel = pair.getValue();
 
-                if ((paramNameModel instanceof TemplateStringModel)
-                        && (paramValueModel instanceof TemplateStringModel)) {
+                if (paramNameModel instanceof TemplateStringModel) {
                     paramName = ((TemplateStringModel) paramNameModel).getAsString();
-                    paramValue = ((TemplateStringModel) paramValueModel).getAsString();
 
                     if (paramName.isEmpty()) {
                         CallableUtils.newArgumentValueException(PARAMS_PARAM_IDX,
                                 "Parameter name must be a non-blank string.", this);
                     }
 
+                    if (paramValueModel instanceof TemplateStringModel) {
+                        paramValue = ((TemplateStringModel) paramValueModel).getAsString();
+                    } else {
+                        paramValue = env.formatToPlainText(paramValueModel);
+                    }
+
                     params.add(new _KeyValuePair<String, String>(paramName, paramValue));
                 } else {
                     CallableUtils.newArgumentValueException(PARAMS_PARAM_IDX,
-                            "Parameter name and value must be string.", this);
+                            "Parameter name must be string.", this);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7c6f56cb/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl
index cd8ff79..e25a2d5 100644
--- a/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl
+++ b/freemarker-spring/src/test/resources/META-INF/web-resources/views/test/model/url-function-basic-usages.ftl
@@ -40,7 +40,7 @@
   <#list users as user>
     <li>
       <div id="user-${user.id!}">
-        <a class="userIdLink" href="${spring.url('/users/{userId}/', userId=user.id?string)}">${user.id!}</a>
+        <a class="userIdLink" href="${spring.url('/users/{userId}/', userId=user.id)}">${user.id!}</a>
         <a class="userNameLink" href="${spring.url('/users/${user.id}/')}">${user.firstName!} ${user.lastName!}</a>
       </div>
     </li>


[2/9] incubator-freemarker git commit: FREEMARKER-55: introducing CallableUtils#getAndUnwrap...(...) utils.

Posted by dd...@apache.org.
FREEMARKER-55: introducing CallableUtils#getAndUnwrap...(...) utils.


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/3f6ee183
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/3f6ee183
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/3f6ee183

Branch: refs/heads/3
Commit: 3f6ee183ab87e193c4eaa465652d5d8b204cd992
Parents: 40bd07b
Author: Woonsan Ko <wo...@apache.org>
Authored: Wed Sep 13 12:14:08 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Wed Sep 13 12:14:08 2017 -0400

----------------------------------------------------------------------
 .../freemarker/core/util/CallableUtils.java     | 153 +++++++++++++++++++
 .../AbstractSpringTemplateCallableModel.java    |  46 ++++++
 .../AbstractSpringTemplateDirectiveModel.java   |  23 +--
 .../AbstractSpringTemplateFunctionModel.java    |  23 +--
 .../freemarker/spring/model/EvalFunction.java   |   2 +-
 .../spring/model/MessageFunction.java           |   6 +-
 .../model/SpringTemplateCallableHashModel.java  |   4 +-
 .../spring/model/TransformFunction.java         |  12 +-
 8 files changed, 214 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3f6ee183/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
index 9bf96e2..0c8f09f 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
@@ -35,6 +35,7 @@ import org.apache.freemarker.core._ErrorDescriptionBuilder;
 import org.apache.freemarker.core._EvalUtils;
 import org.apache.freemarker.core._UnexpectedTypeErrorExplainerTemplateModel;
 import org.apache.freemarker.core.model.ArgumentArrayLayout;
+import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateCallableModel;
 import org.apache.freemarker.core.model.TemplateDirectiveModel;
@@ -302,6 +303,20 @@ public final class CallableUtils {
         return desc;
     }
 
+    private static _ErrorDescriptionBuilder getMessageBadGenericArgumentType(
+            Object argValue, int argIdx, Class<? extends TemplateModel>[] expectedTypes,
+            String expectedTypesDesc, TemplateCallableModel callable,
+            boolean calledAsFunction) {
+        _ErrorDescriptionBuilder desc = new _ErrorDescriptionBuilder(
+                getMessageArgumentProblem(
+                        callable, argIdx,
+                        new Object[]{ "should be ", new _DelayedAOrAn(expectedTypesDesc), ", but was ",
+                                new _DelayedAOrAn(argValue.getClass()),
+                                "." },
+                        calledAsFunction));
+        return desc;
+    }
+
     public static void executeWith0Arguments(
             TemplateDirectiveModel directive, CallPlace callPlace, Writer out, Environment env)
             throws IOException, TemplateException {
@@ -717,6 +732,144 @@ public final class CallableUtils {
                 calledAsFunction);
     }
 
+    // getAndUnwrapArgument(...)'s and getOptionalAndUnwrapArgument(...)'s
+
+    /**
+     * Convenience method to call
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     */
+    public static <T> T getAndUnwrapArgument(
+            TemplateModel[] args, int argIndex, Class<T> type, TemplateFunctionModel callable,
+            ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
+            throws TemplateException {
+        return unwrapAndCastArgumentValue(args[argIndex], argIndex, type, false, null, callable, true,
+                objectWrapperAndUnwrapper);
+    }
+
+    /**
+     * Convenience method to call
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     */
+    public static <T> T getAndUnwrapArgument(
+            TemplateModel[] args, int argIndex, Class<T> type, TemplateDirectiveModel callable,
+            ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
+            throws TemplateException {
+        return unwrapAndCastArgumentValue(args[argIndex], argIndex, type, false, null, callable, false,
+                objectWrapperAndUnwrapper);
+    }
+
+    /**
+     * Convenience method to call
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     */
+    public static <T> T getOptionalAndUnwrapArgument(
+            TemplateModel[] args, int argIndex, Class<T> type, TemplateFunctionModel callable,
+            ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
+            throws TemplateException {
+        return unwrapAndCastArgumentValue(args[argIndex], argIndex, type, true, null, callable, true,
+                objectWrapperAndUnwrapper);
+    }
+
+    /**
+     * Convenience method to call
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     */
+    public static <T> T getOptionalAndUnwrapArgument(
+            TemplateModel[] args, int argIndex, Class<T> type, TemplateDirectiveModel callable,
+            ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
+            throws TemplateException {
+        return unwrapAndCastArgumentValue(args[argIndex], argIndex, type, true, null, callable, false,
+                objectWrapperAndUnwrapper);
+    }
+
+    /**
+     * Convenience method to call
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     */
+    public static <T> T getOptionalAndUnwrapArgument(
+            TemplateModel[] args, int argIndex, Class<T> type, T defaultValue, TemplateFunctionModel callable,
+            ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
+            throws TemplateException {
+        return unwrapAndCastArgumentValue(args[argIndex], argIndex, type, true, defaultValue, callable, true,
+                objectWrapperAndUnwrapper);
+    }
+
+    /**
+     * Convenience method to call
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     */
+    public static <T> T getOptionalAndUnwrapArgument(
+            TemplateModel[] args, int argIndex, Class<T> type, T defaultValue, TemplateDirectiveModel callable,
+            ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
+            throws TemplateException {
+        return unwrapAndCastArgumentValue(args[argIndex], argIndex, type, true, defaultValue, callable, false,
+                objectWrapperAndUnwrapper);
+    }
+
+    /**
+     * Unwrap the argument to a plain Java object first and checks if the argument value is of the proper type,
+     * also, if it's {@code null}/omitted, in which case it can throw an exception or return a default value.
+     * <p>
+     * The point of this method is not only to decrease the boiler plate needed for these common checks, but also to
+     * standardize the error message content. If the checks themselves don't fit your needs, you should still use {@link
+     * #newArgumentValueTypeException(TemplateModel, int, Class, TemplateCallableModel, boolean)} and its overloads,
+     * also {@link #newNullOrOmittedArgumentException(int, TemplateCallableModel, boolean)} and its overloads to
+     * generate similar error messages.
+     *
+     * @param argValue
+     *         The argument value at the position of {@code argIdx}.
+     * @param argIdx
+     *         The index in the {@code args} array (assumed to be a valid index. This is information is needed for
+     *         proper error messages.
+     * @param type
+     *         The expected class of the unwrapped argument as plain Java object (not a {@link TemplateModel} subinterface).
+     *         {@code null} if there are no type restrictions.
+     * @param optional
+     *         If we allow the parameter to be {@code null} or omitted.
+     * @param defaultValue
+     *         The value to return if the parameter was {@code null} or omitted.
+     * @param callable
+     *         The {@link TemplateCallableModel} whose argument we cast; required for printing proper error message.
+     * @param calledAsFunction
+     *         Tells if the {@code callable} was called as function (as opposed to called as a directive). This
+     *         information is needed because a {@link TemplateCallableModel} might implements both {@link
+     *         TemplateFunctionModel} and {@link TemplateDirectiveModel}, in which case this method couldn't tell if the
+     *         argument of which we are casting.
+     * @param objectWrapperAndUnwrapper
+     *         The ObjectWrapperAndUnwrapper instance to use when unwrapping the argument to a plain Java object.
+     *
+     * @return The argument value of the proper type.
+     *
+     * @throws TemplateException
+     *         If the argument is not of the proper type or is non-optional yet {@code null}/omitted. The error message
+     *         describes the problem in detail, and is meant to be shown for the template author.
+     */
+    public static <T> T unwrapAndCastArgumentValue(
+            TemplateModel argValue, int argIdx, Class<T> type,
+            boolean optional, T defaultValue, TemplateCallableModel callable,
+            boolean calledAsFunction, ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
+            throws TemplateException {
+        if (objectWrapperAndUnwrapper == null) {
+            throw newGenericExecuteException("ObjectWrapperAndUnwrapper shouldn't be null.", callable,
+                    calledAsFunction);
+        }
+        final Object argValueObject = (argValue != null) ? objectWrapperAndUnwrapper.unwrap(argValue) : null;
+        if (argValueObject == null) {
+            if (optional) {
+                return defaultValue;
+            }
+            throw newNullOrOmittedArgumentException(argIdx, callable, calledAsFunction);
+        }
+        if (type == null || type.isInstance(argValueObject)) {
+            return (T) argValueObject;
+        }
+        throw new TemplateException(
+                getMessageBadGenericArgumentType(argValue, argIdx,
+                        new Class[] { type },
+                        type.getName(),
+                        callable, calledAsFunction));
+    }
+
     // Other type of arg:
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3f6ee183/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
index 03142d6..1c3d71b 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateCallableModel.java
@@ -24,12 +24,16 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.TemplateException;
+import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
 import org.apache.freemarker.core.model.TemplateCallableModel;
+import org.apache.freemarker.core.model.TemplateFunctionModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateStringModel;
+import org.apache.freemarker.core.util.CallableUtils;
 import org.springframework.web.servlet.support.BindStatus;
 import org.springframework.web.servlet.support.RequestContext;
+import org.springframework.web.servlet.view.AbstractTemplateView;
 
 /**
  * Abstract TemplateCallableModel for derived classes to support Spring MVC based templating environment.
@@ -66,6 +70,48 @@ abstract class AbstractSpringTemplateCallableModel implements TemplateCallableMo
     }
 
     /**
+     * Find {@link ObjectWrapperAndUnwrapper} from the environment.
+     * @param env environment
+     * @param calledAsFunction whether or not this is called from a {@link TemplateFunctionModel}.
+     * @return {@link ObjectWrapperAndUnwrapper} from the environment
+     * @throws TemplateException if the ObjectWrapper in the environment is not an ObjectWrapperAndUnwrapper
+     */
+    protected ObjectWrapperAndUnwrapper getObjectWrapperAndUnwrapper(Environment env, boolean calledAsFunction)
+            throws TemplateException {
+        final ObjectWrapper objectWrapper = env.getObjectWrapper();
+
+        if (!(objectWrapper instanceof ObjectWrapperAndUnwrapper)) {
+            CallableUtils.newGenericExecuteException(
+                    "The ObjectWrapper of environment isn't an instance of ObjectWrapperAndUnwrapper.", this,
+                    calledAsFunction);
+        }
+
+        return (ObjectWrapperAndUnwrapper) objectWrapper;
+    }
+
+    /**
+     * Find Spring {@link RequestContext} from the environment.
+     * @param env environment
+     * @param calledAsFunction whether or not this is called from a {@link TemplateFunctionModel}.
+     * @return Spring {@link RequestContext} from the environment
+     * @throws TemplateException if Spring {@link RequestContext} from the environment is not found
+     */
+    protected RequestContext getRequestContext(final Environment env, boolean calledAsFunction)
+            throws TemplateException {
+        TemplateModel rcModel = env.getVariable(AbstractTemplateView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE);
+
+        if (rcModel == null) {
+            CallableUtils.newGenericExecuteException(
+                    AbstractTemplateView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE + " not found.", this, false);
+        }
+
+        RequestContext requestContext = (RequestContext) getObjectWrapperAndUnwrapper(env, calledAsFunction)
+                .unwrap(rcModel);
+
+        return requestContext;
+    }
+
+    /**
      * Find {@link BindStatus} with no {@code htmlEscape} option from {@link RequestContext} by the {@code path}
      * and wrap it as a {@link TemplateModel}.
      * <P>

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3f6ee183/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java
index a02558f..c91b387 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateDirectiveModel.java
@@ -28,13 +28,10 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.freemarker.core.CallPlace;
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
 import org.apache.freemarker.core.model.TemplateDirectiveModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.util.CallableUtils;
 import org.springframework.web.servlet.support.RequestContext;
-import org.springframework.web.servlet.view.AbstractTemplateView;
 
 /**
  * Abstract TemplateDirectiveModel for derived classes to support Spring MVC based templating environment.
@@ -61,23 +58,9 @@ abstract class AbstractSpringTemplateDirectiveModel extends AbstractSpringTempla
     @Override
     public final void execute(TemplateModel[] args, CallPlace callPlace, Writer out, Environment env)
             throws TemplateException, IOException {
-        final ObjectWrapper objectWrapper = env.getObjectWrapper();
-
-        if (!(objectWrapper instanceof ObjectWrapperAndUnwrapper)) {
-            CallableUtils.newGenericExecuteException(
-                    "The ObjectWrapper of environment isn't an instance of ObjectWrapperAndUnwrapper.", this, false);
-        }
-
-        TemplateModel rcModel = env.getVariable(AbstractTemplateView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE);
-
-        if (rcModel == null) {
-            CallableUtils.newGenericExecuteException(
-                    AbstractTemplateView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE + " not found.", this, false);
-        }
-
-        RequestContext requestContext = (RequestContext) ((ObjectWrapperAndUnwrapper) objectWrapper).unwrap(rcModel);
-
-        executeInternal(args, callPlace, out, env, (ObjectWrapperAndUnwrapper) objectWrapper, requestContext);
+        final ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper = getObjectWrapperAndUnwrapper(env, false);
+        final RequestContext requestContext = getRequestContext(env, false);
+        executeInternal(args, callPlace, out, env, objectWrapperAndUnwrapper, requestContext);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3f6ee183/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java
index 90bd3df..afb3262 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/AbstractSpringTemplateFunctionModel.java
@@ -25,13 +25,10 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.freemarker.core.CallPlace;
 import org.apache.freemarker.core.Environment;
 import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.ObjectWrapperAndUnwrapper;
 import org.apache.freemarker.core.model.TemplateFunctionModel;
 import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.util.CallableUtils;
 import org.springframework.web.servlet.support.RequestContext;
-import org.springframework.web.servlet.view.AbstractTemplateView;
 
 /**
  * Abstract TemplateFunctionModel for derived classes to support Spring MVC based templating environment.
@@ -57,23 +54,9 @@ abstract class AbstractSpringTemplateFunctionModel extends AbstractSpringTemplat
      */
     @Override
     public TemplateModel execute(TemplateModel[] args, CallPlace callPlace, Environment env) throws TemplateException {
-        final ObjectWrapper objectWrapper = env.getObjectWrapper();
-
-        if (!(objectWrapper instanceof ObjectWrapperAndUnwrapper)) {
-            CallableUtils.newGenericExecuteException(
-                    "The ObjectWrapper of environment isn't an instance of ObjectWrapperAndUnwrapper.", this, true);
-        }
-
-        TemplateModel rcModel = env.getVariable(AbstractTemplateView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE);
-
-        if (rcModel == null) {
-            CallableUtils.newGenericExecuteException(
-                    AbstractTemplateView.SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE + " not found.", this, true);
-        }
-
-        RequestContext requestContext = (RequestContext) ((ObjectWrapperAndUnwrapper) objectWrapper).unwrap(rcModel);
-
-        return executeInternal(args, callPlace, env, (ObjectWrapperAndUnwrapper) objectWrapper, requestContext);
+        final ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper = getObjectWrapperAndUnwrapper(env, true);
+        final RequestContext requestContext = getRequestContext(env, true);
+        return executeInternal(args, callPlace, env, objectWrapperAndUnwrapper, requestContext);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3f6ee183/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
index 2c257c4..4710f6d 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/EvalFunction.java
@@ -106,7 +106,7 @@ class EvalFunction extends AbstractSpringTemplateFunctionModel {
 
         EvaluationContext evaluationContext = null;
         final SpringTemplateCallableHashModel springTemplateModel = getSpringTemplateCallableHashModel(env);
-        TemplateModel evaluationContextModel = springTemplateModel.get(EVALUATION_CONTEXT_VAR_NAME);
+        TemplateModel evaluationContextModel = springTemplateModel.getEvaluationContextModel();
 
         if (evaluationContextModel != null) {
             evaluationContext = (EvaluationContext) objectWrapperAndUnwrapper.unwrap(evaluationContextModel);

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3f6ee183/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
index c7b6db5..7ce8d40 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
@@ -108,10 +108,8 @@ class MessageFunction extends AbstractSpringTemplateFunctionModel {
 
         String message = null;
 
-        final TemplateModel messageResolvableModel = CallableUtils.getOptionalArgument(args,
-                MESSAGE_RESOLVABLE_PARAM_IDX, TemplateModel.class, this);
-        final MessageSourceResolvable messageResolvable = (messageResolvableModel != null)
-                ? (MessageSourceResolvable) objectWrapperAndUnwrapper.unwrap(messageResolvableModel) : null;
+        final MessageSourceResolvable messageResolvable = CallableUtils.getOptionalAndUnwrapArgument(args,
+                MESSAGE_RESOLVABLE_PARAM_IDX, MessageSourceResolvable.class, this, objectWrapperAndUnwrapper);
 
         if (messageResolvable != null) {
             message = messageSource.getMessage(messageResolvable, requestContext.getLocale());

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3f6ee183/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
index 8afb4ab..40f7d59 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/SpringTemplateCallableHashModel.java
@@ -48,12 +48,12 @@ public final class SpringTemplateCallableHashModel implements TemplateHashModel,
      * in Spring Framework JSP tag libraries.
      */
     // NOTE: The model name, "nestedPathModel", must be different from the "nestedPath" directive model's name.
-    public static final String NESTED_PATH_MODEL = "nestedPathModel";
+    private static final String NESTED_PATH_MODEL = "nestedPathModel";
 
     /**
      * Name of the internal evaluation context template model used by <code>EvalFunction</code> to cache <code>EvaluationContext</code>.
      */
-    public static final String EVALUATION_CONTEXT_MODEL = "evaluationContextModel";
+    private static final String EVALUATION_CONTEXT_MODEL = "evaluationContextModel";
 
     private Map<String, TemplateModel> modelsMap = new HashMap<>();
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3f6ee183/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
index 96258a7..cac1dd6 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
@@ -73,14 +73,10 @@ class TransformFunction extends AbstractSpringTemplateFunctionModel {
     protected TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext)
                     throws TemplateException {
-        final TemplateModel editorModel = CallableUtils.getOptionalArgument(args, PROPERTY_EDITOR_PARAM_IDX,
-                TemplateModel.class, this);
-        final PropertyEditor editor = (editorModel != null)
-                ? (PropertyEditor) objectWrapperAndUnwrapper.unwrap(editorModel) : null;
-
-        final TemplateModel valueModel = CallableUtils.getOptionalArgument(args, VALUE_PARAM_IDX, TemplateModel.class,
-                this);
-        final Object value = (valueModel != null) ? objectWrapperAndUnwrapper.unwrap(valueModel) : null;
+        final PropertyEditor editor = CallableUtils.getOptionalAndUnwrapArgument(args, PROPERTY_EDITOR_PARAM_IDX,
+                PropertyEditor.class, this, objectWrapperAndUnwrapper);
+        final Object value = CallableUtils.getOptionalAndUnwrapArgument(args, VALUE_PARAM_IDX,
+                null, this, objectWrapperAndUnwrapper);
 
         String valueAsString = null;
 


[4/9] incubator-freemarker git commit: FREEMARKER-55: renaming util methods to get*ArgumentAndUnwrap()

Posted by dd...@apache.org.
FREEMARKER-55: renaming util methods to get*ArgumentAndUnwrap()


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/a95c17f9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/a95c17f9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/a95c17f9

Branch: refs/heads/3
Commit: a95c17f9070b9a720fd4577ddf1506681840e295
Parents: f6abc30
Author: Woonsan Ko <wo...@apache.org>
Authored: Wed Sep 13 21:15:41 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Wed Sep 13 21:15:41 2017 -0400

----------------------------------------------------------------------
 .../org/apache/freemarker/core/util/CallableUtils.java    | 10 +++++-----
 .../apache/freemarker/spring/model/MessageFunction.java   |  2 +-
 .../apache/freemarker/spring/model/TransformFunction.java |  4 ++--
 3 files changed, 8 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/a95c17f9/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
index 0c8f09f..8f53df1 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
@@ -750,7 +750,7 @@ public final class CallableUtils {
      * Convenience method to call
      * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
      */
-    public static <T> T getAndUnwrapArgument(
+    public static <T> T getArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, TemplateDirectiveModel callable,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
             throws TemplateException {
@@ -762,7 +762,7 @@ public final class CallableUtils {
      * Convenience method to call
      * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
      */
-    public static <T> T getOptionalAndUnwrapArgument(
+    public static <T> T getOptionalArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, TemplateFunctionModel callable,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
             throws TemplateException {
@@ -774,7 +774,7 @@ public final class CallableUtils {
      * Convenience method to call
      * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
      */
-    public static <T> T getOptionalAndUnwrapArgument(
+    public static <T> T getOptionalArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, TemplateDirectiveModel callable,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
             throws TemplateException {
@@ -786,7 +786,7 @@ public final class CallableUtils {
      * Convenience method to call
      * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
      */
-    public static <T> T getOptionalAndUnwrapArgument(
+    public static <T> T getOptionalArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, T defaultValue, TemplateFunctionModel callable,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
             throws TemplateException {
@@ -798,7 +798,7 @@ public final class CallableUtils {
      * Convenience method to call
      * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
      */
-    public static <T> T getOptionalAndUnwrapArgument(
+    public static <T> T getOptionalArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, T defaultValue, TemplateDirectiveModel callable,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper)
             throws TemplateException {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/a95c17f9/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
index 7ce8d40..3755849 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/MessageFunction.java
@@ -108,7 +108,7 @@ class MessageFunction extends AbstractSpringTemplateFunctionModel {
 
         String message = null;
 
-        final MessageSourceResolvable messageResolvable = CallableUtils.getOptionalAndUnwrapArgument(args,
+        final MessageSourceResolvable messageResolvable = CallableUtils.getOptionalArgumentAndUnwrap(args,
                 MESSAGE_RESOLVABLE_PARAM_IDX, MessageSourceResolvable.class, this, objectWrapperAndUnwrapper);
 
         if (messageResolvable != null) {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/a95c17f9/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
----------------------------------------------------------------------
diff --git a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
index cac1dd6..f76cc4b 100644
--- a/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
+++ b/freemarker-spring/src/main/java/org/apache/freemarker/spring/model/TransformFunction.java
@@ -73,9 +73,9 @@ class TransformFunction extends AbstractSpringTemplateFunctionModel {
     protected TemplateModel executeInternal(TemplateModel[] args, CallPlace callPlace, Environment env,
             ObjectWrapperAndUnwrapper objectWrapperAndUnwrapper, RequestContext requestContext)
                     throws TemplateException {
-        final PropertyEditor editor = CallableUtils.getOptionalAndUnwrapArgument(args, PROPERTY_EDITOR_PARAM_IDX,
+        final PropertyEditor editor = CallableUtils.getOptionalArgumentAndUnwrap(args, PROPERTY_EDITOR_PARAM_IDX,
                 PropertyEditor.class, this, objectWrapperAndUnwrapper);
-        final Object value = CallableUtils.getOptionalAndUnwrapArgument(args, VALUE_PARAM_IDX,
+        final Object value = CallableUtils.getOptionalArgumentAndUnwrap(args, VALUE_PARAM_IDX,
                 null, this, objectWrapperAndUnwrapper);
 
         String valueAsString = null;


[9/9] incubator-freemarker git commit: FREEMARKER-55: Merged: Spring Directives/Functions to replace spring.tld tags (to be continued...)

Posted by dd...@apache.org.
FREEMARKER-55: Merged: Spring Directives/Functions to replace spring.tld tags (to be continued...)

Merge commit 'refs/pull/35/head' of https://github.com/apache/incubator-freemarker into 3


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/f6eebd85
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/f6eebd85
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/f6eebd85

Branch: refs/heads/3
Commit: f6eebd85657e86863bd6888f17a460e8be2635c8
Parents: 742ed4f 7c6f56c
Author: ddekany <dd...@apache.org>
Authored: Thu Sep 14 11:12:36 2017 +0200
Committer: ddekany <dd...@apache.org>
Committed: Thu Sep 14 11:13:43 2017 +0200

----------------------------------------------------------------------
 .../freemarker/core/util/CallableUtils.java     | 159 +++++++++++++++++++
 .../spring/SpringResourceTemplateLoader.java    |  19 +--
 .../AbstractSpringTemplateCallableModel.java    |  50 +++++-
 .../AbstractSpringTemplateDirectiveModel.java   |  27 +---
 .../AbstractSpringTemplateFunctionModel.java    |  27 +---
 .../freemarker/spring/model/BindDirective.java  |   4 +-
 .../spring/model/BindErrorsDirective.java       |   4 +-
 .../freemarker/spring/model/EvalFunction.java   |   8 +-
 .../spring/model/MessageFunction.java           |  17 +-
 .../spring/model/NestedPathDirective.java       |   4 +-
 .../model/SpringTemplateCallableHashModel.java  |  13 +-
 .../freemarker/spring/model/ThemeFunction.java  |   5 +-
 .../spring/model/TransformFunction.java         |  18 +--
 .../freemarker/spring/model/UrlFunction.java    |  18 ++-
 .../spring/web/view/PageContextServlet.java     |   4 +-
 .../test/model/eval-function-basic-usages.ftl   |  15 +-
 .../test/model/url-function-basic-usages.ftl    |  21 +--
 17 files changed, 283 insertions(+), 130 deletions(-)
----------------------------------------------------------------------



[5/9] incubator-freemarker git commit: FREEMARKER-55: adding calling example in javadoc reference.

Posted by dd...@apache.org.
FREEMARKER-55: adding calling example in javadoc reference.


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/3c25f7ae
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/3c25f7ae
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/3c25f7ae

Branch: refs/heads/3
Commit: 3c25f7ae5245b4d41379bc274193daaf0553ca25
Parents: a95c17f
Author: Woonsan Ko <wo...@apache.org>
Authored: Wed Sep 13 21:23:22 2017 -0400
Committer: Woonsan Ko <wo...@apache.org>
Committed: Wed Sep 13 21:23:22 2017 -0400

----------------------------------------------------------------------
 .../freemarker/core/util/CallableUtils.java       | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3c25f7ae/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
index 8f53df1..e0d371f 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/util/CallableUtils.java
@@ -736,7 +736,8 @@ public final class CallableUtils {
 
     /**
      * Convenience method to call
-     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, Object, TemplateCallableModel, boolean, ObjectWrapperAndUnwrapper)
+     * unwrapAndCastArgumentValue(args[argIndex], argIndex, type, false, null, callable, true, objectWrapperAndUnwrapper)}.
      */
     public static <T> T getAndUnwrapArgument(
             TemplateModel[] args, int argIndex, Class<T> type, TemplateFunctionModel callable,
@@ -748,7 +749,8 @@ public final class CallableUtils {
 
     /**
      * Convenience method to call
-     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, Object, TemplateCallableModel, boolean, ObjectWrapperAndUnwrapper)
+     * unwrapAndCastArgumentValue(args[argIndex], argIndex, type, false, null, callable, false, objectWrapperAndUnwrapper)}.
      */
     public static <T> T getArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, TemplateDirectiveModel callable,
@@ -760,7 +762,8 @@ public final class CallableUtils {
 
     /**
      * Convenience method to call
-     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, Object, TemplateCallableModel, boolean, ObjectWrapperAndUnwrapper)
+     * unwrapAndCastArgumentValue(args[argIndex], argIndex, type, true, null, callable, true, objectWrapperAndUnwrapper)}.
      */
     public static <T> T getOptionalArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, TemplateFunctionModel callable,
@@ -772,7 +775,8 @@ public final class CallableUtils {
 
     /**
      * Convenience method to call
-     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, Object, TemplateCallableModel, boolean, ObjectWrapperAndUnwrapper)
+     * unwrapAndCastArgumentValue(args[argIndex], argIndex, type, true, null, callable, false, objectWrapperAndUnwrapper)}.
      */
     public static <T> T getOptionalArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, TemplateDirectiveModel callable,
@@ -784,7 +788,8 @@ public final class CallableUtils {
 
     /**
      * Convenience method to call
-     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, Object, TemplateCallableModel, boolean, ObjectWrapperAndUnwrapper)
+     * unwrapAndCastArgumentValue(args[argIndex], argIndex, type, true, defaultValue, callable, true, objectWrapperAndUnwrapper)}.
      */
     public static <T> T getOptionalArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, T defaultValue, TemplateFunctionModel callable,
@@ -796,7 +801,8 @@ public final class CallableUtils {
 
     /**
      * Convenience method to call
-     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, TemplateModel, TemplateCallableModel, boolean)}.
+     * {@link #unwrapAndCastArgumentValue(TemplateModel, int, Class, boolean, Object, TemplateCallableModel, boolean, ObjectWrapperAndUnwrapper)
+     * unwrapAndCastArgumentValue(args[argIndex], argIndex, type, true, defaultValue, callable, false, objectWrapperAndUnwrapper)}.
      */
     public static <T> T getOptionalArgumentAndUnwrap(
             TemplateModel[] args, int argIndex, Class<T> type, T defaultValue, TemplateDirectiveModel callable,