incubator-freemarker git commit: Trying to fix test failing in Travis environment

2017-08-07 Thread ddekany
Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 1785ef025 -> 89d436965


Trying to fix test failing in Travis environment


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

Branch: refs/heads/3
Commit: 89d4369658ae4e45fd88104f26cdbe4676970337
Parents: 1785ef0
Author: ddekany 
Authored: Tue Aug 8 02:13:05 2017 +0200
Committer: ddekany 
Committed: Tue Aug 8 02:13:05 2017 +0200

--
 .../freemarker/core/TemplateConfigurationTest.java  | 16 +++-
 1 file changed, 15 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/89d43696/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateConfigurationTest.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateConfigurationTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateConfigurationTest.java
index bd1405c..6d16893 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateConfigurationTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateConfigurationTest.java
@@ -139,6 +139,20 @@ public class TemplateConfigurationTest {
 NON_DEFAULT_TZ = tz;
 }
 
+
+private static final TimeZone NON_DEFAULT_SQL_TZ;
+static {
+TimeZone defaultTZ = DEFAULT_CFG.getSQLDateAndTimeTimeZone();
+TimeZone tz = TimeZone.getTimeZone("UTC");
+if (tz.equals(defaultTZ)) {
+tz = TimeZone.getTimeZone("GMT+01");
+if (tz.equals(defaultTZ)) {
+throw new AssertionError("Couldn't chose a non-default SQL 
time zone");
+}
+}
+NON_DEFAULT_SQL_TZ = tz;
+}
+
 private static final Locale NON_DEFAULT_LOCALE =
 DEFAULT_CFG.getLocale().equals(Locale.US) ? Locale.GERMAN : 
Locale.US;
 
@@ -153,7 +167,7 @@ public class TemplateConfigurationTest {
 
 // "MutableProcessingConfiguration" settings:
 SETTING_ASSIGNMENTS.put("APIBuiltinEnabled", true);
-SETTING_ASSIGNMENTS.put("SQLDateAndTimeTimeZone", NON_DEFAULT_TZ);
+SETTING_ASSIGNMENTS.put("SQLDateAndTimeTimeZone", NON_DEFAULT_SQL_TZ);
 SETTING_ASSIGNMENTS.put("URLEscapingCharset", StandardCharsets.UTF_16);
 SETTING_ASSIGNMENTS.put("autoFlush", false);
 SETTING_ASSIGNMENTS.put("booleanFormat", "J,N");



incubator-freemarker git commit: Show more info about test failures on Travis

2017-08-07 Thread ddekany
Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 e3e4afc74 -> 1785ef025


Show more info about test failures on Travis


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

Branch: refs/heads/3
Commit: 1785ef025d991149bd70c13f9c608ccf65757e64
Parents: e3e4afc
Author: ddekany 
Authored: Tue Aug 8 01:29:08 2017 +0200
Committer: ddekany 
Committed: Tue Aug 8 01:29:08 2017 +0200

--
 build.gradle | 8 +++-
 1 file changed, 7 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/1785ef02/build.gradle
--
diff --git a/build.gradle b/build.gradle
index b5e545b..d94794f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -234,7 +234,13 @@ subprojects {
 }
 }
 }
-
+
+test {
+testLogging {
+exceptionFormat = "full"
+}
+}
+
 jar {
 manifest {   // org.gradle.api.plugins.osgi.OsgiManifest
 version versionForOSGi



incubator-freemarker git commit: Trying to fix Travis build (Oracle Java 7 gone)

2017-08-07 Thread ddekany
Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 379324207 -> e3e4afc74


Trying to fix Travis build (Oracle Java 7 gone)


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

Branch: refs/heads/3
Commit: e3e4afc740edf16b29a2c2841a57f4b1db74729e
Parents: 3793242
Author: ddekany 
Authored: Tue Aug 8 01:01:46 2017 +0200
Committer: ddekany 
Committed: Tue Aug 8 01:01:46 2017 +0200

--
 .travis.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/e3e4afc7/.travis.yml
--
diff --git a/.travis.yml b/.travis.yml
index 2ce753f..cc8e4d9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,7 +6,7 @@ jdk:
 - openjdk8
 env:
   global:
-  - 
freemarker_build_boot_classpath_java_7=/usr/lib/jvm/java-7-openjdk/jre/lib/rt.jar
-  - 
freemarker_build_boot_classpath_java_8=/usr/lib/jvm/java-8-openjdk/jre/lib/rt.jar
+  - 
freemarker_build_boot_classpath_java_7=/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar
+  - 
freemarker_build_boot_classpath_java_8=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar
 install:
 - ./gradlew assemble javadoc



incubator-freemarker git commit: Trying to fix Travis build (Oracle Java 7 gone)

2017-08-07 Thread ddekany
Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 b867458aa -> 379324207


Trying to fix Travis build (Oracle Java 7 gone)


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

Branch: refs/heads/3
Commit: 37932420726188e8415e1ba03a1327cd296c2190
Parents: b867458
Author: ddekany 
Authored: Tue Aug 8 00:57:33 2017 +0200
Committer: ddekany 
Committed: Tue Aug 8 00:57:33 2017 +0200

--
 .travis.yml | 9 ++---
 1 file changed, 6 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/37932420/.travis.yml
--
diff --git a/.travis.yml b/.travis.yml
index db4aec6..2ce753f 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,9 +1,12 @@
 language: java
+#before_install:
+#  - sudo apt-get -qq update
+#  - sudo apt-get install -y openjdk-7-jre
 jdk:
-- oraclejdk8
+- openjdk8
 env:
   global:
-  - 
freemarker_build_boot_classpath_java_7=/usr/lib/jvm/java-7-oracle/jre/lib/rt.jar
-  - 
freemarker_build_boot_classpath_java_8=/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar
+  - 
freemarker_build_boot_classpath_java_7=/usr/lib/jvm/java-7-openjdk/jre/lib/rt.jar
+  - 
freemarker_build_boot_classpath_java_8=/usr/lib/jvm/java-8-openjdk/jre/lib/rt.jar
 install:
 - ./gradlew assemble javadoc



[jira] [Commented] (FREEMARKER-64) FM3 Unification and improvement of function-like constructs

2017-08-07 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/FREEMARKER-64?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16117466#comment-16117466
 ] 

ASF GitHub Bot commented on FREEMARKER-64:
--

Github user asfgit closed the pull request at:

https://github.com/apache/incubator-freemarker/pull/32


> FM3 Unification and improvement of function-like constructs
> ---
>
> Key: FREEMARKER-64
> URL: https://issues.apache.org/jira/browse/FREEMARKER-64
> Project: Apache Freemarker
>  Issue Type: New Feature
>  Components: engine
>Affects Versions: 3.0.0
>Reporter: Daniel Dekany
>Assignee: Daniel Dekany
>
> FREEMARKER-63 has introduced {{TemplateFunctionModel}}, which is the type of 
> values that {{#function}} creates. It should also replace 
> {{TemplateMethodModel}} and {{TemplateMethodModelEx}}, so that we have only 
> one interface for function-like things. (If that doesn't work out well, we at 
> least should remove the deprecated {{TemplateMethodModel}}, and then rename 
> {{TemplateMethodModelEx}} to that name. Also, we need to support the explicit 
> selection overloaded Java methods - see in {{CallPlace}}).
> As {{TemplateFunctionModel}} supports both positional and named parameters, 
> the expression language has to be upgraded to support that too.
> Things like `?isMethod` and `?isFunction` have to be reworked as well.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)


[7/8] incubator-freemarker git commit: FREEMARKER-64: Removed TemplateMethodModel, using TemplateFunctionModel everywhere instead. Some refinement of existing TemplateCallableModel API-s, most importa

2017-08-07 Thread ddekany
FREEMARKER-64: Removed TemplateMethodModel, using TemplateFunctionModel 
everywhere instead. Some refinement of existing TemplateCallableModel API-s, 
most importantly, the support for null argumenArrayLayout. Removed `?isMethod` 
(use `isFunction` instead) and `?isMacro` (use `isDirective` instead).


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

Branch: refs/heads/3
Commit: 8d5263f2aa0fca589ed67b6f6ccbbd8780ece5ef
Parents: 1333a71
Author: ddekany 
Authored: Mon Aug 7 20:44:33 2017 +0200
Committer: ddekany 
Committed: Tue Aug 8 00:11:19 2017 +0200

--
 .gitignore  |   2 +
 FM3-CHANGE-LOG.txt  |  19 +-
 .../core/FM2ASTToFM3SourceConverter.java|   4 +
 .../converter/FM2ToFM3ConverterTest.java|   4 +
 ...a8DefaultObjectWrapperBridgeMethodsTest.java |  19 +-
 .../impl/Java8DefaultObjectWrapperTest.java |  43 +--
 .../freemarker/core/DirectiveCallPlaceTest.java |   6 +-
 .../EnvironmentGetTemplateVariantsTest.java |   2 +-
 .../core/TheadInterruptingSupportTest.java  |   6 +-
 .../impl/AbstractParallelIntrospectionTest.java |   9 +-
 .../CommonSupertypeForUnwrappingHintTest.java   |   8 +-
 .../model/impl/DefaultObjectWrapperTest.java|  34 ++-
 .../core/model/impl/EnumModelsTest.java |  11 +-
 .../core/model/impl/ErrorMessagesTest.java  |  24 +-
 .../impl/FineTuneMethodAppearanceTest.java  |   3 +-
 .../core/model/impl/StaticModelsTest.java   |  11 +-
 .../templatesuite/CoreTemplateTestSuite.java|   4 +-
 .../core/templatesuite/models/MultiModel2.java  |  33 +--
 .../models/SimpleTestFunction.java  |  44 +++
 .../templatesuite/models/SimpleTestMethod.java  |  50 
 .../core/templatesuite/models/TestMethod.java   |  16 --
 .../core/userpkg/AllFeaturesDirective.java  |   2 +-
 .../core/userpkg/AllFeaturesFunction.java   |   2 +-
 .../core/userpkg/NamedVarargsOnlyDirective.java |   2 +-
 .../userpkg/PositionalVarargsOnlyDirective.java |   2 +-
 .../userpkg/PositionalVarargsOnlyFunction.java  |   2 +-
 .../core/userpkg/TwoNamedParamsDirective.java   |   2 +-
 .../TwoNestedContentParamsDirective.java|   2 +-
 .../userpkg/TwoPositionalParamsDirective.java   |   2 +-
 .../userpkg/TwoPositionalParamsFunction.java|   2 +-
 .../core/userpkg/UpperCaseDirective.java|   2 +-
 .../core/valueformat/NumberFormatTest.java  |   2 +-
 .../org/apache/freemarker/core/ast-builtins.ast |   4 +-
 .../org/apache/freemarker/core/ast-range.ast|   6 +-
 .../templatesuite/expected/number-literal.txt   |  10 +-
 .../templatesuite/expected/type-builtins.txt|  28 +-
 .../core/templatesuite/templates/list2.ftl  |   2 +-
 .../templatesuite/templates/number-literal.ftl  |   2 +-
 .../templates/string-builtins3.ftl  |  32 +--
 .../templatesuite/templates/type-builtins.ftl   |   7 +-
 .../freemarker/core/ASTDynamicTopLevelCall.java |  77 +++--
 .../apache/freemarker/core/ASTExpBuiltIn.java   |  68 +++--
 .../freemarker/core/ASTExpFunctionCall.java | 229 +++
 .../freemarker/core/ASTExpListLiteral.java  |   5 +-
 .../freemarker/core/ASTExpMethodCall.java   | 226 ---
 .../freemarker/core/BuiltInsForDates.java   |  30 +-
 .../core/BuiltInsForExistenceHandling.java  |  49 ++--
 .../core/BuiltInsForMultipleTypes.java  | 114 
 .../BuiltInsForNestedContentParameters.java |  20 +-
 .../freemarker/core/BuiltInsForNodes.java   |  38 ++-
 .../freemarker/core/BuiltInsForSequences.java   | 126 
 .../core/BuiltInsForStringsBasic.java   | 287 ---
 .../core/BuiltInsForStringsEncoding.java|  19 +-
 .../freemarker/core/BuiltInsForStringsMisc.java |  20 +-
 .../core/BuiltInsForStringsRegexp.java  |  51 ++--
 .../org/apache/freemarker/core/Environment.java |  21 +-
 .../org/apache/freemarker/core/MessageUtil.java |   2 +-
 .../freemarker/core/NonFunctionException.java   |  62 
 .../freemarker/core/NonMethodException.java |  62 
 .../apache/freemarker/core/_CallableUtils.java  |  61 ++--
 .../core/_ObjectBuilderSettingEvaluator.java|  31 +-
 .../freemarker/core/debug/DebugModel.java   |   2 +-
 .../core/debug/RmiDebugModelImpl.java   |   4 +-
 .../core/model/ArgumentArrayLayout.java |  18 ++
 .../core/model/GeneralPurposeNothing.java   |  18 +-
 .../core/model/TemplateCallableModel.java   |  11 +-
 .../core/model/TemplateDirectiveModel.java  |  45 ++-
 .../core/model/TemplateFunctionModel.java   |  10 +
 

[5/8] incubator-freemarker git commit: FREEMARKER-64: Removed TemplateMethodModel, using TemplateFunctionModel everywhere instead. Some refinement of existing TemplateCallableModel API-s, most importa

2017-08-07 Thread ddekany
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8d5263f2/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
--
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
index ce3ff56..9311626 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
@@ -20,13 +20,13 @@
 package org.apache.freemarker.core;
 
 import java.util.ArrayList;
-import java.util.List;
 import java.util.StringTokenizer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.freemarker.core.model.ArgumentArrayLayout;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
-import org.apache.freemarker.core.model.TemplateMethodModel;
+import org.apache.freemarker.core.model.TemplateFunctionModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateScalarModel;
@@ -69,20 +69,25 @@ class BuiltInsForStringsBasic {
 
 static class containsBI extends ASTExpBuiltIn {
 
-private class BIMethod implements TemplateMethodModel {
+private class BIMethod implements TemplateFunctionModel {
 
 private final String s;
 
 private BIMethod(String s) {
 this.s = s;
 }
-
+
 @Override
-public TemplateModel execute(List args) 
throws TemplateModelException {
-checkMethodArgCount(args, 1);
-return s.contains(getStringMethodArg(args, 0))
+public TemplateModel execute(TemplateModel[] args, CallPlace 
callPlace, Environment env)
+throws TemplateException {
+return s.contains(_CallableUtils.castArgToString(args, 0))
 ? TemplateBooleanModel.TRUE : 
TemplateBooleanModel.FALSE;
 }
+
+@Override
+public ArgumentArrayLayout getFunctionArgumentArrayLayout() {
+return ArgumentArrayLayout.SINGLE_POSITIONAL_PARAMETER;
+}
 }
 
 @Override
@@ -94,19 +99,24 @@ class BuiltInsForStringsBasic {
 
 static class ends_withBI extends BuiltInForString {
 
-private class BIMethod implements TemplateMethodModel {
+private class BIMethod implements TemplateFunctionModel {
 private String s;
 
 private BIMethod(String s) {
 this.s = s;
 }
-
+
 @Override
-public TemplateModel execute(List args) 
throws TemplateModelException {
-checkMethodArgCount(args, 1);
+public TemplateModel execute(TemplateModel[] args, CallPlace 
callPlace, Environment env)
+throws TemplateException {
 return s.endsWith(getStringMethodArg(args, 0)) ?
 TemplateBooleanModel.TRUE : TemplateBooleanModel.FALSE;
 }
+
+@Override
+public ArgumentArrayLayout getFunctionArgumentArrayLayout() {
+return ArgumentArrayLayout.SINGLE_POSITIONAL_PARAMETER;
+}
 }
 
 @Override
@@ -117,19 +127,24 @@ class BuiltInsForStringsBasic {
 
 static class ensure_ends_withBI extends BuiltInForString {
 
-private class BIMethod implements TemplateMethodModel {
+private class BIMethod implements TemplateFunctionModel {
 private String s;
 
 private BIMethod(String s) {
 this.s = s;
 }
-
+
 @Override
-public TemplateModel execute(List args) 
throws TemplateModelException {
-checkMethodArgCount(args, 1);
+public TemplateModel execute(TemplateModel[] args, CallPlace 
callPlace, Environment env)
+throws TemplateException {
 String suffix = getStringMethodArg(args, 0);
 return new SimpleScalar(s.endsWith(suffix) ? s : s + suffix);
 }
+
+@Override
+public ArgumentArrayLayout getFunctionArgumentArrayLayout() {
+return ArgumentArrayLayout.SINGLE_POSITIONAL_PARAMETER;
+}
 }
 
 @Override
@@ -140,27 +155,28 @@ class BuiltInsForStringsBasic {
 
 static class ensure_starts_withBI extends BuiltInForString {
 
-private class BIMethod implements TemplateMethodModel {
+private class BIMethod implements TemplateFunctionModel {
 private String s;
 
 private BIMethod(String s) {
 this.s = s;
 }
-  

[3/8] incubator-freemarker git commit: FREEMARKER-64: Removed TemplateMethodModel, using TemplateFunctionModel everywhere instead. Some refinement of existing TemplateCallableModel API-s, most importa

2017-08-07 Thread ddekany
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8d5263f2/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/IncludePage.java
--
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/IncludePage.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/IncludePage.java
index c500c8c..0f2a061 100644
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/IncludePage.java
+++ 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/IncludePage.java
@@ -185,7 +185,7 @@ public class IncludePage implements TemplateDirectiveModel {
 }
 
 @Override
-public ArgumentArrayLayout getArgumentArrayLayout() {
+public ArgumentArrayLayout getDirectiveArgumentArrayLayout() {
 return ARGS_LAYOUT;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8d5263f2/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/CustomTagAndELFunctionCombiner.java
--
diff --git 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/CustomTagAndELFunctionCombiner.java
 
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/CustomTagAndELFunctionCombiner.java
deleted file mode 100644
index ff9db12..000
--- 
a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/jsp/CustomTagAndELFunctionCombiner.java
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.freemarker.servlet.jsp;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.List;
-
-import org.apache.freemarker.core.Environment;
-import org.apache.freemarker.core.TemplateException;
-import org.apache.freemarker.core._UnexpectedTypeErrorExplainerTemplateModel;
-import org.apache.freemarker.core.model.ArgumentArrayLayout;
-import org.apache.freemarker.core.CallPlace;
-import org.apache.freemarker.core.model.TemplateDirectiveModel;
-import org.apache.freemarker.core.model.TemplateMethodModel;
-import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.model.impl.JavaMethodModel;
-import org.apache.freemarker.core.util.BugException;
-import org.apache.freemarker.core.util._ClassUtil;
-
-/**
- * Used when a custom JSP tag and an EL function uses the same name in a tag 
library, to invoke a single FTL value from
- * the two. As FTL as no separate namespace for "tags" and functions, both 
aspect has to be implemented by the same
- * value.
- */
-@SuppressWarnings("rawtypes")
-class CustomTagAndELFunctionCombiner {
-
-/**
- * @param customTag
- *A {@link TemplateDirectiveModel}.
- */
-static TemplateModel combine(TemplateModel customTag, TemplateMethodModel 
elFunction) {
-if (customTag instanceof TemplateDirectiveModel) {
-return elFunction instanceof JavaMethodModel //
-? new TemplateDirectiveModelAndSimpleMethodModel( //
-(TemplateDirectiveModel) customTag, 
(JavaMethodModel) elFunction) //
-: new TemplateDirectiveModelAndTemplateMethodModelEx( //
-(TemplateDirectiveModel) customTag, elFunction);
-} else {
-throw new BugException(
-"Unexpected custom JSP tag class: " + 
_ClassUtil.getShortClassNameOfObject(customTag));
-}
-}
-
-/**
- * Tells if the value can be used as the "custom tag" parameter to
- * {@link #combine(TemplateModel, TemplateMethodModel)}.
- */
-static boolean canBeCombinedAsCustomTag(TemplateModel tm) {
-return (tm instanceof TemplateDirectiveModel) && !(tm instanceof 
CombinedTemplateModel);
-}
-
-/**
- * Tells if the value can be used as the "EL function" parameter to
- * {@link #combine(TemplateModel, TemplateMethodModel)}.
- */
-static boolean canBeCombinedAsELFunction(TemplateModel tm) {
-return tm instanceof TemplateMethodModel && !(tm instanceof 
CombinedTemplateModel);
-  

[GitHub] incubator-freemarker pull request #32: FREEMARKER-64: FM3 Unification and im...

2017-08-07 Thread asfgit
Github user asfgit closed the pull request at:

https://github.com/apache/incubator-freemarker/pull/32


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[4/8] incubator-freemarker git commit: FREEMARKER-64: Removed TemplateMethodModel, using TemplateFunctionModel everywhere instead. Some refinement of existing TemplateCallableModel API-s, most importa

2017-08-07 Thread ddekany
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8d5263f2/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapper.java
--
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapper.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapper.java
index 1a0e251..9d797ce 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapper.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/impl/DefaultObjectWrapper.java
@@ -42,7 +42,9 @@ import java.util.ResourceBundle;
 import java.util.Set;
 import java.util.WeakHashMap;
 
+import org.apache.freemarker.core.CallPlace;
 import org.apache.freemarker.core.Configuration;
+import org.apache.freemarker.core.NonTemplateCallPlace;
 import org.apache.freemarker.core.Version;
 import org.apache.freemarker.core._CoreAPI;
 import org.apache.freemarker.core._DelayedFTLTypeDescription;
@@ -55,8 +57,8 @@ import org.apache.freemarker.core.model.RichObjectWrapper;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateCollectionModel;
 import org.apache.freemarker.core.model.TemplateDateModel;
+import org.apache.freemarker.core.model.TemplateFunctionModel;
 import org.apache.freemarker.core.model.TemplateHashModel;
-import org.apache.freemarker.core.model.TemplateMethodModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateModelAdapter;
 import org.apache.freemarker.core.model.TemplateModelException;
@@ -481,7 +483,7 @@ public class DefaultObjectWrapper implements 
RichObjectWrapper {
  * Wraps a Java method so that it can be called from templates, without 
wrapping its parent ("this") object. The
  * result is almost the same as that you would get by wrapping the parent 
object then getting the method from the
  * resulting {@link TemplateHashModel} by name. Except, if the wrapped 
method is overloaded, with this method you
- * explicitly select a an overload, while otherwise you would get a {@link 
TemplateMethodModel} that selects an
+ * explicitly select an overload, while otherwise you would get a {@link 
OverloadedJavaMethodModel} that selects an
  * overload each time it's called based on the argument values.
  *
  * @param object The object whose method will be called, or {@code null} 
if {@code method} is a static method.
@@ -489,8 +491,8 @@ public class DefaultObjectWrapper implements 
RichObjectWrapper {
  * @param method The method to call, which must be an (inherited) member 
of the class of {@code object}, as
  *  described by {@link Method#invoke(Object, Object...)}
  */
-public TemplateMethodModel wrap(Object object, Method method) {
-return new JavaMethodModel(object, method, method.getParameterTypes(), 
this);
+public TemplateFunctionModel wrap(Object object, Method method) {
+return new SimpleJavaMethodModel(object, method, 
method.getParameterTypes(), this);
 }
 
 /**
@@ -582,7 +584,7 @@ public class DefaultObjectWrapper implements 
RichObjectWrapper {
 // This is for transparent interop with other wrappers (and ourselves)
 // Passing the targetClass allows e.g. a Jython-aware method that 
declares a
 // PyObject as its argument to receive a PyObject from a Jython-aware 
TemplateModel
-// passed as an argument to TemplateMethodModel etc.
+// passed as an argument to TemplateFunctionModel etc.
 if (model instanceof AdapterTemplateModel) {
 Object wrapped = ((AdapterTemplateModel) 
model).getAdaptedObject(targetClass);
 if (targetClass == Object.class || 
targetClass.isInstance(wrapped)) {
@@ -1040,10 +1042,13 @@ public class DefaultObjectWrapper implements 
RichObjectWrapper {
  * constructor. Overloaded constructors and varargs are supported. Only 
public constructors will be called.
  *
  * @param clazz The class whose constructor we will call.
- * @param arguments The list of {@link TemplateModel}-s to pass to the 
constructor after unwrapping them
+ * @param args The list of {@link TemplateModel}-s to pass to the 
constructor after unwrapping them
+ * @param callPlace Where the constructor is called from (which may 
contains information useful for overloaded
+ *  constructor selection); you may want to use {@link 
NonTemplateCallPlace#INSTANCE}.
+ * if you call this from Java code.
  * @return The instance created; it's not wrapped into {@link 
TemplateModel}.
  */
-public Object newInstance(Class clazz, List/**/ arguments)
+public Object newInstance(Class clazz, TemplateModel[] args, CallPlace 
callPlace)
 throws TemplateModelException {
  

[1/8] incubator-freemarker git commit: FREEMARKER-64: TemplateModel and TemplateModelEx changes (but they will be probably replaced by TemplateFunctionModel later): Removed FM2 `TemplateMethodModel`,

2017-08-07 Thread ddekany
Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 a3311d52e -> b867458aa


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/1333a715/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
--
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
index e8cd15c..ce3ff56 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/BuiltInsForStringsBasic.java
@@ -27,7 +27,6 @@ import java.util.regex.Pattern;
 
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateMethodModel;
-import org.apache.freemarker.core.model.TemplateMethodModelEx;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateScalarModel;
@@ -70,7 +69,7 @@ class BuiltInsForStringsBasic {
 
 static class containsBI extends ASTExpBuiltIn {
 
-private class BIMethod implements TemplateMethodModelEx {
+private class BIMethod implements TemplateMethodModel {
 
 private final String s;
 
@@ -79,9 +78,9 @@ class BuiltInsForStringsBasic {
 }
 
 @Override
-public Object exec(List args) throws TemplateModelException {
+public TemplateModel execute(List args) 
throws TemplateModelException {
 checkMethodArgCount(args, 1);
-return s.indexOf(getStringMethodArg(args, 0)) != -1
+return s.contains(getStringMethodArg(args, 0))
 ? TemplateBooleanModel.TRUE : 
TemplateBooleanModel.FALSE;
 }
 }
@@ -95,7 +94,7 @@ class BuiltInsForStringsBasic {
 
 static class ends_withBI extends BuiltInForString {
 
-private class BIMethod implements TemplateMethodModelEx {
+private class BIMethod implements TemplateMethodModel {
 private String s;
 
 private BIMethod(String s) {
@@ -103,7 +102,7 @@ class BuiltInsForStringsBasic {
 }
 
 @Override
-public Object exec(List args) throws TemplateModelException {
+public TemplateModel execute(List args) 
throws TemplateModelException {
 checkMethodArgCount(args, 1);
 return s.endsWith(getStringMethodArg(args, 0)) ?
 TemplateBooleanModel.TRUE : TemplateBooleanModel.FALSE;
@@ -118,7 +117,7 @@ class BuiltInsForStringsBasic {
 
 static class ensure_ends_withBI extends BuiltInForString {
 
-private class BIMethod implements TemplateMethodModelEx {
+private class BIMethod implements TemplateMethodModel {
 private String s;
 
 private BIMethod(String s) {
@@ -126,7 +125,7 @@ class BuiltInsForStringsBasic {
 }
 
 @Override
-public Object exec(List args) throws TemplateModelException {
+public TemplateModel execute(List args) 
throws TemplateModelException {
 checkMethodArgCount(args, 1);
 String suffix = getStringMethodArg(args, 0);
 return new SimpleScalar(s.endsWith(suffix) ? s : s + suffix);
@@ -141,7 +140,7 @@ class BuiltInsForStringsBasic {
 
 static class ensure_starts_withBI extends BuiltInForString {
 
-private class BIMethod implements TemplateMethodModelEx {
+private class BIMethod implements TemplateMethodModel {
 private String s;
 
 private BIMethod(String s) {
@@ -149,7 +148,7 @@ class BuiltInsForStringsBasic {
 }
 
 @Override
-public Object exec(List args) throws TemplateModelException {
+public TemplateModel execute(List args) 
throws TemplateModelException {
 checkMethodArgCount(args, 1, 3);
 
 final String checkedPrefix = getStringMethodArg(args, 0);
@@ -190,7 +189,7 @@ class BuiltInsForStringsBasic {
 
 static class index_ofBI extends ASTExpBuiltIn {
 
-private class BIMethod implements TemplateMethodModelEx {
+private class BIMethod implements TemplateMethodModel {
 
 private final String s;
 
@@ -199,7 +198,7 @@ class BuiltInsForStringsBasic {
 }
 
 @Override
-public Object exec(List args) throws TemplateModelException {
+public TemplateModel execute(List args) 
throws TemplateModelException {
 int argCnt = args.size();
 checkMethodArgCount(argCnt, 1, 2);
 

[6/8] incubator-freemarker git commit: FREEMARKER-64: Removed TemplateMethodModel, using TemplateFunctionModel everywhere instead. Some refinement of existing TemplateCallableModel API-s, most importa

2017-08-07 Thread ddekany
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/8d5263f2/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDynamicTopLevelCall.java
--
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDynamicTopLevelCall.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDynamicTopLevelCall.java
index 3fe5f74..f579f6f 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDynamicTopLevelCall.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDynamicTopLevelCall.java
@@ -101,6 +101,7 @@ class ASTDynamicTopLevelCall extends ASTDirective 
implements CallPlace  {
 TemplateCallableModel callableValue;
 TemplateDirectiveModel directive;
 TemplateFunctionModel function;
+ArgumentArrayLayout argsLayout;
 boolean nestedContentSupported;
 {
 TemplateModel callableValueTM = callableValueExp._eval(env);
@@ -108,6 +109,7 @@ class ASTDynamicTopLevelCall extends ASTDirective 
implements CallPlace  {
 callableValue = (TemplateCallableModel) callableValueTM;
 directive = (TemplateDirectiveModel) callableValueTM;
 function = null;
+argsLayout = directive.getDirectiveArgumentArrayLayout();
 nestedContentSupported = directive.isNestedContentSupported();
 } else if (callableValueTM instanceof TemplateFunctionModel) {
 if (!allowCallingFunctions) {
@@ -117,6 +119,7 @@ class ASTDynamicTopLevelCall extends ASTDirective 
implements CallPlace  {
 callableValue = (TemplateCallableModel) callableValueTM;
 directive = null;
 function = (TemplateFunctionModel) callableValue;
+argsLayout = function.getFunctionArgumentArrayLayout();
 nestedContentSupported = false;
 } else if (callableValueTM == null) {
 throw InvalidReferenceException.getInstance(callableValueExp, 
env);
@@ -129,7 +132,39 @@ class ASTDynamicTopLevelCall extends ASTDirective 
implements CallPlace  {
 throw new _MiscTemplateException(env, "Nested content is not 
supported by this directive.");
 }
 
-ArgumentArrayLayout argsLayout = 
callableValue.getArgumentArrayLayout();
+TemplateModel[] execArgs = argsLayout != null
+? getExecuteArgsBasedOnLayout(argsLayout, callableValue, env)
+: getExecuteArgsWithoutLayout(callableValue, env);
+
+if (directive != null) {
+directive.execute(execArgs, this, env.getOut(), env);
+} else {
+TemplateModel result = function.execute(execArgs, this, env);
+if (result == null) {
+throw new _MiscTemplateException(env, "Function has returned 
no value (or null)");
+}
+// TODO [FM3] Implement it when we have a such language... it 
should work like `${f()}`.
+throw new BugException("Top-level function call not yet 
implemented");
+}
+
+return null;
+}
+
+private TemplateModel[] getExecuteArgsWithoutLayout(TemplateCallableModel 
callableValue, Environment env)
+throws TemplateException {
+if (namedArgs != null) {
+throw new _MiscTemplateException(env, 
getNamedArgumentsNotSupportedMessage(callableValue, namedArgs[0]));
+}
+TemplateModel[] execArgs = new TemplateModel[positionalArgs.length];
+for (int i = 0; i < positionalArgs.length; i++) {
+ASTExpression positionalArg = positionalArgs[i];
+execArgs[i] = positionalArg.eval(env);
+}
+return execArgs;
+}
+
+private TemplateModel[] getExecuteArgsBasedOnLayout(ArgumentArrayLayout 
argsLayout, TemplateCallableModel callableValue,
+Environment env) throws TemplateException {
 int predefPosArgCnt = 
argsLayout.getPredefinedPositionalArgumentCount();
 int posVarargsArgIdx = argsLayout.getPositionalVarargsArgumentIndex();
 
@@ -157,7 +192,7 @@ class ASTDynamicTopLevelCall extends ASTDirective 
implements CallPlace  {
 }
 execArgs[posVarargsArgIdx] = varargsSeq;
 } else if (positionalArgs != null && positionalArgs.length > 
predefPosArgCnt) {
-checkSupportsAnyParameters(callableValue, env);
+checkSupportsAnyParameters(callableValue, argsLayout, env);
 List validPredefNames = 
argsLayout.getPredefinedNamedArgumentsMap().getKeys();
 _ErrorDescriptionBuilder errorDesc = new _ErrorDescriptionBuilder(
 "The target ", FTLUtil.getCallableTypeName(callableValue), 
" ",
@@ -194,16 +229,11 @@ class ASTDynamicTopLevelCall extends ASTDirective 
implements CallPlace  {
 } else {
 if (namedVarargsHash == null) {
 

[GitHub] incubator-freemarker pull request #32: FREEMARKER-64: FM3 Unification and im...

2017-08-07 Thread ddekany
GitHub user ddekany opened a pull request:

https://github.com/apache/incubator-freemarker/pull/32

FREEMARKER-64: FM3 Unification and improvement of function-like constructs

What's done: Replaced TemplateMethodModel and TemplateMethodModelEx with 
TemplateFunctionModel. Some refinements in other TemplateCallableModel API-s. 
Built-ins like `?isMethod`, `?isTransform`, `?isMacro` are not removed, in 
favor of `?isDirective` and `?isFunction`. 

What's still missing: calling functions with named parameters.

You can merge this pull request into a Git repository by running:

$ git pull https://github.com/ddekany/incubator-freemarker FREEMARKER-64

Alternatively you can review and apply these changes as the patch at:

https://github.com/apache/incubator-freemarker/pull/32.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

This closes #32






---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---


[jira] [Commented] (FREEMARKER-63) FM3 Unification and improvement of directive-like constructs

2017-08-07 Thread ASF GitHub Bot (JIRA)

[ 
https://issues.apache.org/jira/browse/FREEMARKER-63?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16117453#comment-16117453
 ] 

ASF GitHub Bot commented on FREEMARKER-63:
--

Github user asfgit closed the pull request at:

https://github.com/apache/incubator-freemarker/pull/30


> FM3 Unification and improvement of directive-like constructs
> 
>
> Key: FREEMARKER-63
> URL: https://issues.apache.org/jira/browse/FREEMARKER-63
> Project: Apache Freemarker
>  Issue Type: New Feature
>  Components: engine
>Affects Versions: 3.0.0
>Reporter: Daniel Dekany
>Assignee: Daniel Dekany
>
> In FreeMarker 3 all kind of directive-like user defined objects (macros, 
> {{TemplateDirectiveModel}}-s, {{TempalteTransfromModel}}-s, etc) has to be 
> united under a single {{TemplateModel}} subinterface, which support all the 
> features supported by the replaced FM2 concepts (e.g. nested content 
> execution, loop variables, passing parameters by position and by name, 
> varargs in both cases, call place bound caching, etc.). Obviously, the 
> template language has to support calling this new interface, and then the old 
> ones has to be removed.
> Furthermore, as a new feature in FM3, passing parameter both by position and 
> by name in the same invocation (as in {{<@image "foo.jpg" alt="Foo" />}}) 
> need to be supported.
> (Similarly, {{#function}} and {{TempalteMethodModel}} will have to be 
> generalized and united, but that will be in a separate issue.)



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)


[20/21] incubator-freemarker git commit: FREEMARKER-63: Lot of refinement in the API-s and implementation. #macro now creates a `TemplateDirectiveModel`, and #function now creates `TemplateFunctionMod

2017-08-07 Thread ddekany
FREEMARKER-63: Lot of refinement in the API-s and implementation. #macro now 
creates a `TemplateDirectiveModel`, and #function now creates 
`TemplateFunctionModel` (though the function/method call syntax doesn't yet 
allow named parameters). Test suite passes.


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

Branch: refs/heads/3
Commit: 3cacd9ed04a231af67e3964525fd592b97da1665
Parents: da4c332
Author: ddekany 
Authored: Thu Aug 3 23:11:57 2017 +0200
Committer: ddekany 
Committed: Thu Aug 3 23:11:57 2017 +0200

--
 FM3-CHANGE-LOG.txt  |  48 ++-
 .../freemarker/core/CanonicalFormTest.java  |   4 +-
 .../freemarker/core/DirectiveCallPlaceTest.java |   1 -
 .../EnvironmentGetTemplateVariantsTest.java |   1 -
 .../core/MistakenlyPublicMacroAPIsTest.java |  21 +-
 .../core/ParsingErrorMessagesTest.java  |  65 +++-
 .../core/TemplateCallableModelTest.java | 140 +--
 .../core/TheadInterruptingSupportTest.java  |   1 -
 .../core/userpkg/AllFeaturesDirective.java  |   9 +-
 .../core/userpkg/AllFeaturesFunction.java   | 114 ++
 .../core/userpkg/NamedVarargsOnlyDirective.java |   5 +-
 .../userpkg/PositionalVarargsOnlyDirective.java |  13 +-
 .../userpkg/PositionalVarargsOnlyFunction.java  |  62 +++
 .../core/userpkg/TestTemplateCallableModel.java |  88 +
 .../userpkg/TestTemplateDirectiveModel.java |  88 -
 .../core/userpkg/TwoNamedParamsDirective.java   |   5 +-
 .../TwoNestedContentParamsDirective.java|   5 +-
 .../userpkg/TwoPositionalParamsDirective.java   |   5 +-
 .../userpkg/TwoPositionalParamsFunction.java|  63 +++
 .../core/userpkg/UpperCaseDirective.java|   2 +-
 .../core/util/StringToIndexMapTest.java |   5 +
 .../core/valueformat/NumberFormatTest.java  |   2 +-
 .../org/apache/freemarker/core/ast-1.ast|  24 +-
 .../apache/freemarker/core/ast-assignments.ast  |   3 +-
 .../freemarker/core/cano-macro-and-function.ftl |  43 +++
 .../core/cano-macro-and-function.ftl.out|  42 ++
 .../org/apache/freemarker/core/cano-macros.ftl  |  29 --
 .../apache/freemarker/core/cano-macros.ftl.out  |  28 --
 .../core/templatesuite/expected/macros2.txt |  22 --
 .../templatesuite/templates/api-builtins.ftl|  20 +-
 .../core/templatesuite/templates/boolean.ftl|   8 +-
 .../templatesuite/templates/comparisons.ftl | 216 +--
 .../templates/date-type-builtins.ftl|  32 +-
 .../templatesuite/templates/dateparsing.ftl |   4 +-
 .../templates/existence-operators.ftl   |  34 +-
 .../core/templatesuite/templates/hashconcat.ftl |   2 +-
 .../templates/identifier-non-ascii.ftl  |   2 +-
 .../core/templatesuite/templates/list.ftl   |   2 +-
 .../core/templatesuite/templates/list2.ftl  |   2 +-
 .../core/templatesuite/templates/list3.ftl  |   8 +-
 .../core/templatesuite/templates/listhash.ftl   |   2 +-
 .../core/templatesuite/templates/macros.ftl |  17 +-
 .../core/templatesuite/templates/macros2.ftl|  35 --
 .../templates/number-math-builtins.ftl  |  68 ++--
 .../core/templatesuite/templates/recover.ftl|   8 +-
 .../core/templatesuite/templates/root.ftl   |   2 +-
 .../templates/sequence-builtins.ftl |  18 +-
 .../templates/string-builtin-coercion.ftl   |  24 +-
 .../templates/string-builtins-regexps.ftl   |   6 +-
 .../core/templatesuite/templates/var-layers.ftl |   2 +-
 .../freemarker/core/templatesuite/testcases.xml |   1 -
 .../org/apache/freemarker/core/ASTDirMacro.java | 325 
 .../freemarker/core/ASTDirMacroOrFunction.java  | 369 ++
 .../apache/freemarker/core/ASTDirNested.java|  91 ++---
 .../apache/freemarker/core/ASTDirReturn.java|   2 +-
 .../freemarker/core/ASTDynamicTopLevelCall.java | 164 
 .../org/apache/freemarker/core/ASTElement.java  |   4 +-
 .../freemarker/core/ASTExpBuiltInVariable.java  |   4 +-
 .../freemarker/core/ASTExpListLiteral.java  |   8 +-
 .../freemarker/core/ASTExpMethodCall.java   | 117 +-
 .../apache/freemarker/core/ASTStaticText.java   |   2 +-
 .../core/BuiltInsForMultipleTypes.java  |  14 +-
 .../freemarker/core/BuiltInsForStringsMisc.java |   1 -
 .../org/apache/freemarker/core/CallPlace.java   | 195 ++
 ...lPlaceCustomDataInitializationException.java |   3 +-
 .../org/apache/freemarker/core/Environment.java | 379 +++
 .../apache/freemarker/core/LocalContext.java|   2 +-
 .../org/apache/freemarker/core/MessageUtil.java |   2 +-
 .../freemarker/core/NonDirectiveException.java  |  63 +++
 

[09/21] incubator-freemarker git commit: FREEMARKER-63: Removed TemplateTransformModel and the old TemplateDirectiveModel, renamed TemplateDirectiveModel2 to TemplateDirectiveModel. Removed the tempor

2017-08-07 Thread ddekany
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/52a5f9eb/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java
--
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java
new file mode 100644
index 000..2a34703
--- /dev/null
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/model/ArgumentArrayLayout.java
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core.model;
+
+import org.apache.freemarker.core.util.StringToIndexMap;
+
+/**
+ * {@link TemplateCallableModel} subinterfaces define a method called {@code 
execute}, which has an argument array
+ * parameter, whose layout this class describes. Each parameter has a constant 
index in this array, which is the same
+ * for all invocations of the same {@link TemplateCallableModel} object 
(regardless if there are omitted optional
+ * parameters). Thus, the argument values can always be accessed at these 
constant indexes; no runtime name lookup is
+ * needed inside the {@code execute} method of the {@link 
TemplateCallableModel} implementation. The
+ * {@link ArgumentArrayLayout} object is usually stored a static final field 
of the {@link TemplateCallableModel}
+ * implementation class.
+ * 
+ * The layout of the array is as follows:
+ * 
+ * 
+ * {@link #getPredefinedPositionalArgumentCount()} elements for the 
predefined positional parameters. Index 0
+ * corresponds to the 1st positional parameter. For omitted parameters the 
corresponding array element is {@code
+ * null}.
+ * 
+ * {@link #getPredefinedNamedArgumentsMap()}{@code .size()} elements for 
the predefined named arguments. These are at
+ * the indexes returned by {@link #getPredefinedNamedArgumentsMap()}{@code 
.get(String name)}. For omitted arguments
+ * the corresponding array element is {@code null}.
+ * 
+ * If there's a positional varargs argument, then one element for the 
positional varargs parameter, at
+ * index {@link #getPositionalVarargsArgumentIndex()}.
+ * 
+ * If there's a named varargs argument, then one element for the 
positional varargs parameter, at
+ * index {@link #getNamedVarargsArgumentIndex()}.
+ * 
+ * 
+ * The length of the array is {@link #getTotalLength()}}, or more, in which 
case the extra elements should be
+ * ignored.
+ * 
+ * Instances of this class are immutable, thread-safe objects.
+ */
+public final class ArgumentArrayLayout {
+private final int predefinedPositionalArgumentCount;
+private final StringToIndexMap predefinedNamedArgumentsMap;
+
+private final int positionalVarargsArgumentIndex;
+private final int namedVarargsArgumentIndex;
+private final int arrayLength;
+
+/** Constant to be used when the {@link TemplateCallableModel} has no 
parameters. */
+public static final ArgumentArrayLayout PARAMETERLESS = new 
ArgumentArrayLayout(
+0, false,
+null, false);
+
+/** Constant to be used when the {@link TemplateCallableModel} has 1 
positional parameter, and no others. */
+public static final ArgumentArrayLayout SINGLE_POSITIONAL_PARAMETER = new 
ArgumentArrayLayout(
+1, false,
+null, false);
+
+/**
+ * Creates a new instance, or returns some of the equivalent static 
constants (such as {@link #PARAMETERLESS} or
+ * {@link #SINGLE_POSITIONAL_PARAMETER}).
+ *
+ * @param predefinedPositionalArgumentCount
+ * The highest allowed number of positional arguments, not 
counting the positional varargs argument. The
+ * actual positional argument count can be less than this if there 
are optional positional argument. When
+ * calling the {@code execute} method of the {@link 
TemplateCallableModel}, this many items will be reserved
+ * for the positional arguments in the argument array (not 
counting the item for the positional varargs
+ * argument, if there's one). Positional 

[02/21] incubator-freemarker git commit: FREEMARKER-63: Very early state. Until it's fully functional, the new interface is called TemplateDirectiveModel2, and is invoked with <~...> instead of <@...>

2017-08-07 Thread ddekany
FREEMARKER-63:  Very early state. Until it's fully functional, the new 
interface is called TemplateDirectiveModel2, and is invoked with <~...> instead 
of <@...>. Later it will replace TemplateDirectiveModel and the syntax will be 
<@...>.


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

Branch: refs/heads/3
Commit: c28a78bd8dad4bfd3a37a90a26fbb15639d33604
Parents: 4295e24
Author: ddekany 
Authored: Mon Jul 24 20:26:29 2017 +0200
Committer: ddekany 
Committed: Tue Jul 25 00:39:22 2017 +0200

--
 .../core/TemplateCallableModelTest.java | 130 ++
 .../freemarker/core/model/ConstantsTest.java|  21 +
 .../core/userpkg/AllFeaturesDirective.java  | 133 ++
 .../userpkg/TestTemplateDirectiveModel.java |  88 
 .../core/userpkg/TwoNamedParamsDirective.java   |  85 
 .../userpkg/TwoPositionalParamsDirective.java   |  71 
 .../core/ASTDirDynamicDirectiveCall.java| 422 +++
 .../freemarker/core/NonNumericalException.java  |  12 +-
 .../NonUserDefinedDirectiveLikeException.java   |   1 +
 .../core/TemplateCallableModelUtils.java|  48 +++
 .../core/UnexpectedTypeException.java   |  69 ++-
 .../freemarker/core/_DelayedJQuotedListing.java |  46 ++
 .../apache/freemarker/core/model/CallPlace.java | 173 
 .../apache/freemarker/core/model/Constants.java |  36 +-
 .../core/model/TemplateCallableModel.java   |  86 
 .../core/model/TemplateDirectiveModel2.java |  28 ++
 .../core/model/TemplateFunctionModel.java   |  25 ++
 .../apache/freemarker/core/util/FTLUtil.java|   1 +
 freemarker-core/src/main/javacc/FTL.jj  | 309 --
 19 files changed, 1729 insertions(+), 55 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/c28a78bd/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
new file mode 100644
index 000..67b73d0
--- /dev/null
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.freemarker.core;
+
+import java.io.IOException;
+
+import org.apache.freemarker.core.userpkg.AllFeaturesDirective;
+import org.apache.freemarker.core.userpkg.TwoNamedParamsDirective;
+import org.apache.freemarker.core.userpkg.TwoPositionalParamsDirective;
+import org.apache.freemarker.test.TemplateTest;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TemplateCallableModelTest extends TemplateTest {
+
+@Before
+public void addCommonData() {
+addToDataModel("a", new AllFeaturesDirective());
+addToDataModel("p", new TwoPositionalParamsDirective());
+addToDataModel("n", new TwoNamedParamsDirective());
+}
+
+@Test
+public void testBasicCall() throws IOException, TemplateException {
+assertOutput("<~p />",
+"#p(p1=null, p2=null)");
+assertOutput("<~p 1 />",
+"#p(p1=1, p2=null)");
+assertOutput("<~p 1, 2 />",
+"#p(p1=1, p2=2)");
+
+assertOutput("<~n />",
+"#n(n1=null, n2=null)");
+assertOutput("<~n n1=11/>",
+"#n(n1=11, n2=null)");
+assertOutput("<~n n1=11 n2=22/>",
+"#n(n1=11, n2=22)");
+
+assertOutput("<~a />",
+"#a(p1=null, p2=null, pOthers=[], n1=null, n2=null, 
nOthers={})");
+assertOutput("<~a 1, 2 />",
+

[04/21] incubator-freemarker git commit: FREEMARKER-63: Very early state. Some cleanups. Temporarily added support for calling legacy ASTDirMacro-s with the also temporary <~...>syntax.

2017-08-07 Thread ddekany
FREEMARKER-63:  Very early state. Some cleanups. Temporarily added support for 
calling legacy ASTDirMacro-s with the also temporary <~...>syntax.


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

Branch: refs/heads/3
Commit: fbbfadb443efac2009439564f1d3c664ff8a51b0
Parents: 46c7501
Author: ddekany 
Authored: Thu Jul 27 18:20:37 2017 +0200
Committer: ddekany 
Committed: Thu Jul 27 18:20:37 2017 +0200

--
 .../core/TemplateCallableModelTest.java | 23 +++
 .../core/userpkg/AllFeaturesDirective.java  |  4 +-
 .../core/userpkg/TwoNamedParamsDirective.java   |  2 +-
 .../userpkg/TwoPositionalParamsDirective.java   |  2 +-
 .../core/userpkg/UpperCaseDirective.java| 71 
 .../freemarker/core/ASTDirDynamicCall.java  | 35 +-
 .../org/apache/freemarker/core/ASTDirList.java  |  2 +-
 .../org/apache/freemarker/core/ASTDirMacro.java | 10 +--
 .../apache/freemarker/core/ASTDirNested.java| 10 +--
 .../freemarker/core/ASTDirUserDefined.java  |  1 +
 .../org/apache/freemarker/core/Environment.java | 60 ++---
 .../apache/freemarker/core/LocalContext.java|  3 +-
 .../apache/freemarker/core/model/CallPlace.java |  5 +-
 .../core/model/TemplateCallableModel.java   | 24 ---
 .../core/model/TemplateDirectiveModel2.java | 27 +---
 .../freemarker/core/util/StringToIndexMap.java  |  2 +-
 .../freemarker/core/util/_ArrayAdapterList.java | 62 +
 .../apache/freemarker/core/util/_ArrayList.java | 58 
 18 files changed, 277 insertions(+), 124 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/fbbfadb4/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
index 536727a..f5c1b61 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/TemplateCallableModelTest.java
@@ -24,6 +24,7 @@ import java.io.IOException;
 import org.apache.freemarker.core.userpkg.AllFeaturesDirective;
 import org.apache.freemarker.core.userpkg.TwoNamedParamsDirective;
 import org.apache.freemarker.core.userpkg.TwoPositionalParamsDirective;
+import org.apache.freemarker.core.userpkg.UpperCaseDirective;
 import org.apache.freemarker.test.TemplateTest;
 import org.junit.Before;
 import org.junit.Test;
@@ -143,4 +144,26 @@ public class TemplateCallableModelTest extends 
TemplateTest {
 assertErrorContains("<~p n1=9 />", "doesn't have any by-name-passed");
 }
 
+@Test
+public void testMacros() throws IOException, TemplateException {
+assertOutput("<#macro m a b=22><#list 1..2 as n>[<#nested a * n, b * 
n>]"
++ "<~m 11; i, j>${i} ${j} <~m a=1 b=2; i, j>${i} 
${j}",
+"[11 22][22 44] [1 2][2 4]");
+assertOutput("<#macro m a b others...>[a=${a}, b=${b}<#if 
others?hasContent>, "
++ "<#if others?isSequence>"
++ "<#list others as v>${v}<#sep>, "
++ "<#else>"
++ "<#list others as k, v>${k}=${v}<#sep>, "
++ "]"
++ ""
++ "<~m 1, 2 /> <~m 1, 2, 3, 4 /> <~m a=1 b=2 /> <~m 
a=1 b=2 c=3 d=4 />",
+"[a=1, b=2] [a=1, b=2, 3, 4] [a=1, b=2] [a=1, b=2, c=3, d=4]");
+}
+
+@Test
+public void testFilterDirective() throws IOException, TemplateException {
+addToDataModel("uc", new UpperCaseDirective());
+assertOutput("<~uc>foo ${1 + 1}", "FOO 2");
+}
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/fbbfadb4/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
index 91e6d2a..59f084d 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
+++ 

[12/21] incubator-freemarker git commit: FREEMARKER-63: Fixed failing test. (Now the test suite passes.)

2017-08-07 Thread ddekany
FREEMARKER-63: Fixed failing test. (Now the test suite passes.)


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

Branch: refs/heads/3
Commit: 126c506984ea1e006b719ebb3ae92a4207c4c9f2
Parents: 52a5f9e
Author: ddekany 
Authored: Sun Jul 30 15:57:46 2017 +0200
Committer: ddekany 
Committed: Sun Jul 30 15:57:46 2017 +0200

--
 .../java/org/apache/freemarker/core/DirectiveCallPlaceTest.java | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/126c5069/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
index 37cd2b6..94cd199 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
@@ -110,12 +110,11 @@ public class DirectiveCallPlaceTest extends TemplateTest {
 @Override
 public void execute(TemplateModel[] args, final CallPlace callPlace, 
Writer out, final Environment env)
 throws TemplateException, IOException {
-if (callPlace.hasNestedContent()) {
+if (!callPlace.hasNestedContent()) {
 return;
 }
 
 final String convertedText;
-
 if (callPlace.isNestedOutputCacheable()) {
 try {
 convertedText = (String) callPlace.getOrCreateCustomData(
@@ -135,7 +134,7 @@ public class DirectiveCallPlaceTest extends TemplateTest {
 convertedText = convertBodyText(callPlace, env);
 }
 
-env.getOut().write(convertedText);
+out.write(convertedText);
 }
 
 @Override



[10/21] incubator-freemarker git commit: FREEMARKER-63: Removed TemplateTransformModel and the old TemplateDirectiveModel, renamed TemplateDirectiveModel2 to TemplateDirectiveModel. Removed the tempor

2017-08-07 Thread ddekany
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/52a5f9eb/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirUserDefined.java
--
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirUserDefined.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirUserDefined.java
deleted file mode 100644
index 931280c..000
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirUserDefined.java
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.freemarker.core;
-
-import java.io.IOException;
-import java.lang.ref.Reference;
-import java.lang.ref.SoftReference;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.freemarker.core.model.TemplateDirectiveModel;
-import org.apache.freemarker.core.model.TemplateModel;
-import org.apache.freemarker.core.model.TemplateTransformModel;
-import org.apache.freemarker.core.util.CommonSupplier;
-import org.apache.freemarker.core.util._StringUtil;
-
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
-/**
- * AST directive node: {@code <@exp .../>} or {@code <@exp ...>...}. 
Calls an user-defined directive (like a
- * macro).
- */
-// TODO [FM3][CF] Remove
-final class ASTDirUserDefined extends ASTDirective implements 
DirectiveCallPlace {
-
-private ASTExpression nameExp;
-private Map namedArgs;
-private List positionalArgs, bodyParameterNames;
-private transient volatile 
SoftReference/*List>*/ sortedNamedArgsCache;
-private CustomDataHolder customDataHolder;
-
-ASTDirUserDefined(ASTExpression nameExp,
- Map namedArgs,
- TemplateElements children,
- List bodyParameterNames) {
-this.nameExp = nameExp;
-this.namedArgs = namedArgs;
-setChildren(children);
-this.bodyParameterNames = bodyParameterNames;
-}
-
-ASTDirUserDefined(ASTExpression nameExp,
- List positionalArgs,
- TemplateElements children,
- List bodyParameterNames) {
-this.nameExp = nameExp;
-this.positionalArgs = positionalArgs;
-setChildren(children);
-this.bodyParameterNames = bodyParameterNames;
-}
-
-@Override
-ASTElement[] accept(Environment env) throws TemplateException, IOException 
{
-TemplateModel tm = nameExp.eval(env);
-if (tm == ASTDirMacro.DO_NOTHING_MACRO) return null; // shortcut here.
-if (tm instanceof ASTDirMacro) {
-ASTDirMacro macro = (ASTDirMacro) tm;
-if (macro.isFunction()) {
-throw new _MiscTemplateException(env,
-"Routine ", new _DelayedJQuote(macro.getName()), " is 
a function, not a directive. "
-+ "Functions can only be called from expressions, like 
in ${f()}, ${x + f()} or ",
-"<@someDirective someParam=f() />", ".");
-}
-env.invoke(macro, namedArgs, positionalArgs, bodyParameterNames, 
getChildBuffer());
-} else {
-boolean isDirectiveModel = tm instanceof TemplateDirectiveModel; 
-if (isDirectiveModel || tm instanceof TemplateTransformModel) {
-Map args;
-if (namedArgs != null && !namedArgs.isEmpty()) {
-args = new HashMap();
-for (Iterator it = namedArgs.entrySet().iterator(); 
it.hasNext(); ) {
-Map.Entry entry = (Map.Entry) it.next();
-String key = (String) entry.getKey();
-ASTExpression valueExp = (ASTExpression) 
entry.getValue();
-TemplateModel value = valueExp.eval(env);
-args.put(key, value);
-}
-} else {
-args = Collections.emptyMap();
-}
-if (isDirectiveModel) {
-env.visit(getChildBuffer(), (TemplateDirectiveModel) tm, 
args, 

[07/21] incubator-freemarker git commit: FREEMARKER-63: Bit of API/javadoc cleanup

2017-08-07 Thread ddekany
FREEMARKER-63:  Bit of API/javadoc cleanup


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

Branch: refs/heads/3
Commit: a6399a793f54f531a11a7a9d13b9eb47d648563a
Parents: 1e27397
Author: ddekany 
Authored: Thu Jul 27 21:24:14 2017 +0200
Committer: ddekany 
Committed: Thu Jul 27 21:24:14 2017 +0200

--
 .../core/userpkg/AllFeaturesDirective.java  |  4 +--
 .../core/userpkg/TwoNamedParamsDirective.java   |  4 +--
 .../userpkg/TwoPositionalParamsDirective.java   |  4 +--
 .../core/userpkg/UpperCaseDirective.java|  4 +--
 .../freemarker/core/ASTDirDynamicCall.java  |  4 +--
 .../freemarker/core/BuiltInsForStringsMisc.java | 34 ++--
 .../core/model/TemplateCallableModel.java   | 22 ++---
 .../core/model/TemplateDirectiveModel2.java | 20 +---
 8 files changed, 47 insertions(+), 49 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/a6399a79/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
index 59f084d..437bb72 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/AllFeaturesDirective.java
@@ -122,7 +122,7 @@ public class AllFeaturesDirective extends 
TestTemplateDirectiveModel {
 }
 
 @Override
-public int getNamedArgumentIndex(String name) {
+public int getPredefinedNamedArgumentIndex(String name) {
 return PARAM_NAME_TO_IDX.get(name);
 }
 
@@ -137,7 +137,7 @@ public class AllFeaturesDirective extends 
TestTemplateDirectiveModel {
 }
 
 @Override
-public int getTotalArgumentCount() {
+public int getArgumentArraySize() {
 return N_OTHERS_IDX + 1;
 }
 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/a6399a79/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoNamedParamsDirective.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoNamedParamsDirective.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoNamedParamsDirective.java
index 2978bf1..ed1b501 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoNamedParamsDirective.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoNamedParamsDirective.java
@@ -60,7 +60,7 @@ public class TwoNamedParamsDirective extends 
TestTemplateDirectiveModel {
 }
 
 @Override
-public int getNamedArgumentIndex(String name) {
+public int getPredefinedNamedArgumentIndex(String name) {
 return PARAM_NAME_TO_IDX.get(name);
 }
 
@@ -70,7 +70,7 @@ public class TwoNamedParamsDirective extends 
TestTemplateDirectiveModel {
 }
 
 @Override
-public int getTotalArgumentCount() {
+public int getArgumentArraySize() {
 return PARAM_NAME_TO_IDX.size();
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/a6399a79/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoPositionalParamsDirective.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoPositionalParamsDirective.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoPositionalParamsDirective.java
index 3603069..ef51640 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoPositionalParamsDirective.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/TwoPositionalParamsDirective.java
@@ -50,7 +50,7 @@ public class TwoPositionalParamsDirective extends 
TestTemplateDirectiveModel {
 }
 
 @Override
-public int getNamedArgumentIndex(String name) {
+public int getPredefinedNamedArgumentIndex(String name) {
 return -1;
 }
 
@@ -60,7 +60,7 @@ public class TwoPositionalParamsDirective extends 
TestTemplateDirectiveModel {
 }
 
 @Override
-public int getTotalArgumentCount() {
+public int getArgumentArraySize() {
 return 

[14/21] incubator-freemarker git commit: FREEMARKER-63: Change 1: Replaced the "loop variable" term with the more generic "nested content parameter" term. (In FM2, loop variables were introduced earli

2017-08-07 Thread ddekany
FREEMARKER-63: Change 1: Replaced the "loop variable" term with the more 
generic "nested content parameter" term. (In FM2, loop variables were 
introduced earlier than nested content parameter, so the two term coulnd't be 
unified. So it's just one less term in FM3.)

Change 2: CallPlace.executeNestedContent now requires the nested content 
paramter value array to have exactly the same length as the number of 
parameters declared by the caller.


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

Branch: refs/heads/3
Commit: 589d9b80e218a39d2ac128b1108952992868cc40
Parents: 126c506
Author: ddekany 
Authored: Sun Jul 30 20:38:01 2017 +0200
Committer: ddekany 
Committed: Sun Jul 30 20:38:01 2017 +0200

--
 .../core/FM2ASTToFM3SourceConverter.java|  26 +--
 .../apache/freemarker/core/ListErrorsTest.java  |  20 +--
 .../core/TemplateCallableModelTest.java |   8 +-
 .../core/userpkg/AllFeaturesDirective.java  |  17 +-
 .../TwoNestedContentParamsDirective.java|  53 ++
 .../org/apache/freemarker/core/ast-1.ast|  12 +-
 .../apache/freemarker/core/ast-locations.ast|  12 +-
 .../freemarker/core/ast-whitespacestripping.ast |   2 +-
 .../org/apache/freemarker/core/ASTDirItems.java |  42 ++---
 .../org/apache/freemarker/core/ASTDirList.java  | 162 ++-
 .../freemarker/core/ASTDynamicTopLevelCall.java |  59 +++
 .../apache/freemarker/core/ASTExpBuiltIn.java   |  20 +--
 .../freemarker/core/BuiltInForLoopVariable.java |  48 --
 .../core/BuiltInForNestedContentParameter.java  |  49 ++
 .../core/BuiltInsForLoopVariables.java  | 156 --
 .../BuiltInsForNestedContentParameters.java | 156 ++
 .../org/apache/freemarker/core/Environment.java |  29 ++--
 .../apache/freemarker/core/ParameterRole.java   |   2 +-
 .../apache/freemarker/core/model/CallPlace.java |  32 ++--
 freemarker-core/src/main/javacc/FTL.jj  | 142 
 20 files changed, 561 insertions(+), 486 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/589d9b80/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java
--
diff --git 
a/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java
 
b/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java
index ed86057..57a912f 100644
--- 
a/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java
+++ 
b/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java
@@ -671,14 +671,16 @@ public class FM2ASTToFM3SourceConverter {
 
 int paramCnt = node.getParameterCount();
 assertNodeContent(paramCnt <= 2, node, "Expected at most 2 
parameters");
-String loopVar1 = getParam(node, 0, 
ParameterRole.TARGET_LOOP_VARIABLE, String.class);
-String loopVar2 = paramCnt >= 2 ? getParam(node, 1, 
ParameterRole.TARGET_LOOP_VARIABLE, String.class) : null;
+String nestedContParamName1 = getParam(node, 0, 
ParameterRole.TARGET_LOOP_VARIABLE, String.class);
+String nestedContParamName2 =
+paramCnt >= 2 ? getParam(node, 1, 
ParameterRole.TARGET_LOOP_VARIABLE, String.class)
+: null;
 
-print(FTLUtil.escapeIdentifier(loopVar1));
+print(FTLUtil.escapeIdentifier(nestedContParamName1));
 pos = getPositionAfterIdentifier(pos);
-if (loopVar2 != null) {
+if (nestedContParamName2 != null) {
 pos = printSeparatorAndWSAndExpComments(pos, ",");
-print(FTLUtil.escapeIdentifier(loopVar2));
+print(FTLUtil.escapeIdentifier(nestedContParamName2));
 pos = getPositionAfterIdentifier(pos);
 }
 
@@ -1318,20 +1320,20 @@ public class FM2ASTToFM3SourceConverter {
 paramIdx += 2;
 }
 
-// Print loop variables:
+// Print nested content parameters (aka. loop variables):
 int pos = lastParamEnd;
-boolean beforeFirstLoopVar = true;
+boolean beforeFirstNestedContParam = true;
 while (paramIdx < paramCount) {
-pos = printSeparatorAndWSAndExpComments(pos, beforeFirstLoopVar ? 
";" : ",");
+pos = printSeparatorAndWSAndExpComments(pos, 
beforeFirstNestedContParam ? ";" : ",");
 
-String loopVarName = getParam(node, paramIdx, 
ParameterRole.TARGET_LOOP_VARIABLE, String.class);
-

[19/21] incubator-freemarker git commit: FREEMARKER-63: Lot of refinement in the API-s and implementation. #macro now creates a `TemplateDirectiveModel`, and #function now creates `TemplateFunctionMod

2017-08-07 Thread ddekany
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3cacd9ed/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/comparisons.ftl
--
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/comparisons.ftl
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/comparisons.ftl
index a711d4d..3314765 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/comparisons.ftl
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/comparisons.ftl
@@ -85,134 +85,134 @@
 
 <#-- Signum-based optimization test, all 9 permutations: -->
 <#-- 1 -->
-<@assert test= !(0 != 0) />
-<@assert test= (0 == 0) />
-<@assert test= !(0 > 0) />
-<@assert test= (0 >= 0) />
-<@assert test= !(0 < 0) />
-<@assert test= (0 <= 0) />
+<@assert !(0 != 0) />
+<@assert (0 == 0) />
+<@assert !(0 > 0) />
+<@assert (0 >= 0) />
+<@assert !(0 < 0) />
+<@assert (0 <= 0) />
 <#-- 2 -->
-<@assert test= !(3 != 3) />
-<@assert test= (3 == 3) />
-<@assert test= !(3 > 3) />
-<@assert test= (3 >= 3) />
-<@assert test= !(3 < 3) />
-<@assert test= (3 <= 3) />
+<@assert !(3 != 3) />
+<@assert (3 == 3) />
+<@assert !(3 > 3) />
+<@assert (3 >= 3) />
+<@assert !(3 < 3) />
+<@assert (3 <= 3) />
 <#-- 3 -->
-<@assert test= !(-3 != -3) />
-<@assert test= (-3 == -3) />
-<@assert test= !(-3 > -3) />
-<@assert test= (-3 >= -3) />
-<@assert test= !(-3 < -3) />
-<@assert test= (-3 <= -3) />
+<@assert !(-3 != -3) />
+<@assert (-3 == -3) />
+<@assert !(-3 > -3) />
+<@assert (-3 >= -3) />
+<@assert !(-3 < -3) />
+<@assert (-3 <= -3) />
 <#-- 4 -->
-<@assert test= (3 != 0) />
-<@assert test= !(3 == 0) />
-<@assert test= (3 > 0) />
-<@assert test= (3 >= 0) />
-<@assert test= !(3 < 0) />
-<@assert test= !(3 <= 0) />
+<@assert (3 != 0) />
+<@assert !(3 == 0) />
+<@assert (3 > 0) />
+<@assert (3 >= 0) />
+<@assert !(3 < 0) />
+<@assert !(3 <= 0) />
 <#-- 5 -->
-<@assert test= (0 != 3) />
-<@assert test= !(0 == 3) />
-<@assert test= !(0 > 3) />
-<@assert test= !(0 >= 3) />
-<@assert test= (0 < 3) />
-<@assert test= (0 <= 3) />
+<@assert (0 != 3) />
+<@assert !(0 == 3) />
+<@assert !(0 > 3) />
+<@assert !(0 >= 3) />
+<@assert (0 < 3) />
+<@assert (0 <= 3) />
 <#-- 6 -->
-<@assert test= (-3 != 0) />
-<@assert test= !(-3 == 0) />
-<@assert test= !(-3 > 0) />
-<@assert test= !(-3 >= 0) />
-<@assert test= (-3 < 0) />
-<@assert test= (-3 <= 0) />
+<@assert (-3 != 0) />
+<@assert !(-3 == 0) />
+<@assert !(-3 > 0) />
+<@assert !(-3 >= 0) />
+<@assert (-3 < 0) />
+<@assert (-3 <= 0) />
 <#-- 7 -->
-<@assert test= (0 != -3) />
-<@assert test= !(0 == -3) />
-<@assert test= (0 > -3) />
-<@assert test= (0 >= -3) />
-<@assert test= !(0 < -3) />
-<@assert test= !(0 <= -3) />
+<@assert (0 != -3) />
+<@assert !(0 == -3) />
+<@assert (0 > -3) />
+<@assert (0 >= -3) />
+<@assert !(0 < -3) />
+<@assert !(0 <= -3) />
 <#-- 8 -->
-<@assert test= (-3 != 3) />
-<@assert test= !(-3 == 3) />
-<@assert test= !(-3 > 3) />
-<@assert test= !(-3 >= 3) />
-<@assert test= (-3 < 3) />
-<@assert test= (-3 <= 3) />
+<@assert (-3 != 3) />
+<@assert !(-3 == 3) />
+<@assert !(-3 > 3) />
+<@assert !(-3 >= 3) />
+<@assert (-3 < 3) />
+<@assert (-3 <= 3) />
 <#-- 9 -->
-<@assert test= (3 != -3) />
-<@assert test= !(3 == -3) />
-<@assert test= (3 > -3) />
-<@assert test= (3 >= -3) />
-<@assert test= !(3 < -3) />
-<@assert test= !(3 <= -3) />
+<@assert (3 != -3) />
+<@assert !(3 == -3) />
+<@assert (3 > -3) />
+<@assert (3 >= -3) />
+<@assert !(3 < -3) />
+<@assert !(3 <= -3) />
 <#-- Again, now on runtime: -->
 <#assign m3 = -3>
 <#assign p3 = 3>
 <#assign z = 0>
 <#-- 1 -->
-<@assert test= !(z != z) />
-<@assert test= (z == z) />
-<@assert test= !(z > z) />
-<@assert test= (z >= z) />
-<@assert test= !(z < z) />
-<@assert test= (z <= z) />
+<@assert !(z != z) />
+<@assert (z == z) />
+<@assert !(z > z) />
+<@assert (z >= z) />
+<@assert !(z < z) />
+<@assert (z <= z) />
 <#-- 2 -->
-<@assert test= !(p3 != p3) />
-<@assert test= (p3 == p3) />
-<@assert test= !(p3 > p3) />
-<@assert test= (p3 >= p3) />
-<@assert test= !(p3 < p3) />
-<@assert test= (p3 <= p3) />
+<@assert !(p3 != p3) />
+<@assert (p3 == p3) />
+<@assert !(p3 > p3) />
+<@assert (p3 >= p3) />
+<@assert !(p3 < p3) />
+<@assert (p3 <= p3) />
 <#-- 3 -->
-<@assert test= !(m3 != m3) />
-<@assert test= (m3 == m3) />
-<@assert test= !(m3 > m3) />
-<@assert test= (m3 >= m3) />
-<@assert test= !(m3 < m3) />
-<@assert test= (m3 <= m3) />
+<@assert !(m3 != m3) />
+<@assert (m3 == m3) />
+<@assert !(m3 > m3) />
+<@assert (m3 >= m3) />
+<@assert !(m3 < m3) />
+<@assert (m3 <= m3) />
 <#-- 4 -->
-<@assert test= (p3 != z) />
-<@assert test= !(p3 == z) />
-<@assert test= (p3 > z) />
-<@assert test= (p3 >= z) />
-<@assert test= !(p3 < z) />
-<@assert test= !(p3 <= z) />

[15/21] incubator-freemarker git commit: FREEMARKER-63: Added isNestedContentSupported() to templateDirectiveModel

2017-08-07 Thread ddekany
FREEMARKER-63: Added isNestedContentSupported() to templateDirectiveModel


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

Branch: refs/heads/3
Commit: 5bd19adeb8dd24cde34987c4724c7a5d5d227f52
Parents: 589d9b8
Author: ddekany 
Authored: Sun Jul 30 23:07:29 2017 +0200
Committer: ddekany 
Committed: Sun Jul 30 23:07:29 2017 +0200

--
 FM3-CHANGE-LOG.txt|  2 ++
 .../freemarker/core/DirectiveCallPlaceTest.java   | 16 
 .../core/EnvironmentGetTemplateVariantsTest.java  |  6 ++
 .../core/TemplateCallableModelTest.java   |  4 
 .../core/TheadInterruptingSupportTest.java| 16 +++-
 .../core/userpkg/AllFeaturesDirective.java|  6 ++
 .../core/userpkg/NamedVarargsOnlyDirective.java   |  7 +++
 .../userpkg/PositionalVarargsOnlyDirective.java   |  7 +++
 .../core/userpkg/TwoNamedParamsDirective.java |  8 ++--
 .../userpkg/TwoNestedContentParamsDirective.java  |  6 ++
 .../userpkg/TwoPositionalParamsDirective.java |  8 ++--
 .../core/userpkg/UpperCaseDirective.java  |  6 ++
 .../core/valueformat/NumberFormatTest.java|  5 +
 .../core/templatesuite/expected/interpret.txt |  4 +---
 .../core/templatesuite/templates/interpret.ftl|  7 ---
 .../freemarker/core/ASTDynamicTopLevelCall.java   | 18 +-
 .../freemarker/core/BuiltInsForStringsMisc.java   |  6 +-
 .../core/model/TemplateDirectiveModel.java| 13 +
 .../apache/freemarker/servlet/IncludePage.java|  5 +
 .../jsp/CustomTagAndELFunctionCombiner.java   | 10 ++
 .../servlet/jsp/SimpleTagDirectiveModel.java  |  5 +
 .../freemarker/servlet/jsp/TagDirectiveModel.java |  5 +
 .../test/templateutil/AssertDirective.java|  5 +
 .../test/templateutil/AssertEqualsDirective.java  | 14 ++
 .../test/templateutil/AssertFailsDirective.java   | 14 ++
 .../test/templateutil/NoOutputDirective.java  |  6 ++
 26 files changed, 184 insertions(+), 25 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5bd19ade/FM3-CHANGE-LOG.txt
--
diff --git a/FM3-CHANGE-LOG.txt b/FM3-CHANGE-LOG.txt
index 6b347e5..938f9bf 100644
--- a/FM3-CHANGE-LOG.txt
+++ b/FM3-CHANGE-LOG.txt
@@ -108,6 +108,8 @@ Node: Changes already mentioned above aren't repeated here!
 of the `execute` method.
   - ?isTransform was removed (as there are no transforms anymore).
 Converter note: The template converter tool replaces it with ?isDirective
+- The directive returned by `?interpret` doesn't allow nested content anymore. 
(It wasn't useful earlier either;
+  the nested content was simply executed after the interpreted string.)
 
 Java API changes
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/5bd19ade/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
index 94cd199..f959b1d 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/DirectiveCallPlaceTest.java
@@ -142,6 +142,11 @@ public class DirectiveCallPlaceTest extends TemplateTest {
 return ArgumentArrayLayout.PARAMETERLESS;
 }
 
+@Override
+public boolean isNestedContentSupported() {
+return true;
+}
+
 protected abstract Class getTextConversionIdentity();
 
 private String convertBodyText(CallPlace callPlace, Environment env) 
throws TemplateException,
@@ -207,6 +212,11 @@ public class DirectiveCallPlaceTest extends TemplateTest {
 return ArgumentArrayLayout.PARAMETERLESS;
 }
 
+@Override
+public boolean isNestedContentSupported() {
+return true;
+}
+
 private String getTemplateSourceName(CallPlace callPlace) {
 return callPlace.getTemplate().getSourceName();
 }
@@ -239,6 +249,12 @@ public class DirectiveCallPlaceTest extends TemplateTest {
 public ArgumentArrayLayout getArgumentArrayLayout() {
 return ARGS_LAYOUT;
 }
+
+

[16/21] incubator-freemarker git commit: FREEMARKER-63: Removed NestedContentNotSupportedException, as TemplateDirectiveModel.isNestedContentSupported() now takes care of that problem.

2017-08-07 Thread ddekany
FREEMARKER-63: Removed NestedContentNotSupportedException, as 
TemplateDirectiveModel.isNestedContentSupported() now takes care of that 
problem.


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

Branch: refs/heads/3
Commit: da4c33292d5d73cdfb53613ca64bd0834fcfb5fd
Parents: 5bd19ad
Author: ddekany 
Authored: Sun Jul 30 23:20:34 2017 +0200
Committer: ddekany 
Committed: Sun Jul 30 23:22:02 2017 +0200

--
 FM3-CHANGE-LOG.txt  |  2 +
 .../core/userpkg/NamedVarargsOnlyDirective.java |  2 -
 .../userpkg/PositionalVarargsOnlyDirective.java |  2 -
 .../NestedContentNotSupportedException.java | 57 
 ...nterruptionSupportTemplatePostProcessor.java |  8 ++-
 .../test/templateutil/AssertDirective.java  |  3 --
 .../templateutil/AssertEqualsDirective.java |  3 --
 7 files changed, 5 insertions(+), 72 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/da4c3329/FM3-CHANGE-LOG.txt
--
diff --git a/FM3-CHANGE-LOG.txt b/FM3-CHANGE-LOG.txt
index 938f9bf..21ce533 100644
--- a/FM3-CHANGE-LOG.txt
+++ b/FM3-CHANGE-LOG.txt
@@ -424,6 +424,8 @@ Core / Miscellaneous
   get(), to be more similar to the Java 8 API.
 - Removed the legacy predefined shared variables: "html_escape", 
"normalize_newlines", "xml_escape", "capture_output",
   "compress"
+- Removed `NestedContentNotSupportedException`, as 
`TemplateDirectiveModel.isNestedContentSupported()` now takes care
+  of that problem.
 
 
 Build / development process changes

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/da4c3329/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/NamedVarargsOnlyDirective.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/NamedVarargsOnlyDirective.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/NamedVarargsOnlyDirective.java
index f978dbe..fed4bc7 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/NamedVarargsOnlyDirective.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/NamedVarargsOnlyDirective.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.io.Writer;
 
 import org.apache.freemarker.core.Environment;
-import org.apache.freemarker.core.NestedContentNotSupportedException;
 import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.ArgumentArrayLayout;
 import org.apache.freemarker.core.model.CallPlace;
@@ -46,7 +45,6 @@ public class NamedVarargsOnlyDirective extends 
TestTemplateDirectiveModel {
 @Override
 public void execute(TemplateModel[] args, CallPlace callPlace, Writer out, 
Environment env)
 throws TemplateException, IOException {
-NestedContentNotSupportedException.check(callPlace);
 out.write("#nvo(");
 printParam("nVarargs", args[NAMED_VARARGS_ARG_IDX], out, true);
 out.write(")");

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/da4c3329/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/PositionalVarargsOnlyDirective.java
--
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/PositionalVarargsOnlyDirective.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/PositionalVarargsOnlyDirective.java
index b9d2b92..540a641 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/PositionalVarargsOnlyDirective.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/userpkg/PositionalVarargsOnlyDirective.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.io.Writer;
 
 import org.apache.freemarker.core.Environment;
-import org.apache.freemarker.core.NestedContentNotSupportedException;
 import org.apache.freemarker.core.TemplateException;
 import org.apache.freemarker.core.model.ArgumentArrayLayout;
 import org.apache.freemarker.core.model.CallPlace;
@@ -44,7 +43,6 @@ public class PositionalVarargsOnlyDirective extends 
TestTemplateDirectiveModel {
 @Override
 public void execute(TemplateModel[] args, CallPlace callPlace, Writer out, 
Environment env)
 throws TemplateException, IOException {
-NestedContentNotSupportedException.check(callPlace);
 

[11/21] incubator-freemarker git commit: FREEMARKER-63: Removed TemplateTransformModel and the old TemplateDirectiveModel, renamed TemplateDirectiveModel2 to TemplateDirectiveModel. Removed the tempor

2017-08-07 Thread ddekany
FREEMARKER-63: Removed TemplateTransformModel and the old 
TemplateDirectiveModel, renamed TemplateDirectiveModel2 to 
TemplateDirectiveModel. Removed the temporary `<~...>` syntax; now `<@...>` is 
used to call the new TemplateDirectiveModel. Lot of API refinement, like 
introduced ArgumentArrayLayout class. Several test cases won't yet pass... work 
in progress.


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

Branch: refs/heads/3
Commit: 52a5f9eb8881a2c976a2b84ff683d8c11238efca
Parents: a6399a7
Author: ddekany 
Authored: Sun Jul 30 02:04:56 2017 +0200
Committer: ddekany 
Committed: Sun Jul 30 02:04:56 2017 +0200

--
 FM3-CHANGE-LOG.txt  |  10 +-
 .../core/FM2ASTToFM3SourceConverter.java|   2 +
 .../converter/FM2ToFM3ConverterTest.java|   3 +
 .../freemarker/core/DirectiveCallPlaceTest.java |  82 ++--
 .../EnvironmentGetTemplateVariantsTest.java |  17 +-
 .../core/TagSyntaxVariationsTest.java   |  19 +-
 .../core/TemplateCallableModelTest.java | 175 ---
 .../core/TheadInterruptingSupportTest.java  |  33 +-
 .../core/userpkg/AllFeaturesDirective.java  |  66 +--
 .../core/userpkg/NamedVarargsOnlyDirective.java |  59 +++
 .../userpkg/PositionalVarargsOnlyDirective.java |  57 +++
 .../userpkg/TestTemplateDirectiveModel.java |   4 +-
 .../core/userpkg/TwoNamedParamsDirective.java   |  50 +-
 .../userpkg/TwoPositionalParamsDirective.java   |  43 +-
 .../core/userpkg/UpperCaseDirective.java|  40 +-
 .../core/valueformat/NumberFormatTest.java  |  12 +-
 .../org/apache/freemarker/core/ast-1.ast|   4 +-
 .../org/apache/freemarker/core/ast-range.ast|   2 +-
 .../freemarker/core/ast-strlitinterpolation.ast |   2 +-
 .../freemarker/core/ast-whitespacestripping.ast |   6 +-
 .../freemarker/core/ASTDirDynamicCall.java  | 468 --
 .../freemarker/core/ASTDirUserDefined.java  | 344 -
 .../freemarker/core/ASTDynamicTopLevelCall.java | 484 +++
 .../apache/freemarker/core/ASTExpBuiltIn.java   |   3 +-
 .../core/BuiltInsForMultipleTypes.java  |  13 +-
 .../freemarker/core/BuiltInsForStringsMisc.java |  23 +-
 ...lPlaceCustomDataInitializationException.java |   3 +-
 .../freemarker/core/DirectiveCallPlace.java | 135 --
 .../org/apache/freemarker/core/Environment.java | 197 +---
 .../NestedContentNotSupportedException.java |  28 +-
 .../NonUserDefinedDirectiveLikeException.java   |   5 +-
 .../apache/freemarker/core/ParseException.java  |   2 +-
 .../core/TemplateCallableModelUtils.java|   2 -
 ...nterruptionSupportTemplatePostProcessor.java |   6 +-
 .../freemarker/core/debug/DebugModel.java   |   2 +-
 .../core/debug/RmiDebugModelImpl.java   |   4 +-
 .../core/model/ArgumentArrayLayout.java | 199 
 .../apache/freemarker/core/model/CallPlace.java |  69 +--
 .../core/model/TemplateCallableModel.java   |  70 +--
 .../core/model/TemplateDirectiveBody.java   |  43 --
 .../core/model/TemplateDirectiveModel.java  |  91 ++--
 .../core/model/TemplateDirectiveModel2.java |  51 --
 .../core/model/TemplateFunctionModel.java   |   2 +-
 .../core/model/TemplateTransformModel.java  |  54 ---
 .../freemarker/core/model/TransformControl.java | 101 
 .../apache/freemarker/core/util/FTLUtil.java|   3 -
 .../freemarker/core/util/StringToIndexMap.java  |  27 ++
 freemarker-core/src/main/javacc/FTL.jj  | 121 +
 .../apache/freemarker/servlet/IncludePage.java  |  48 +-
 .../freemarker/servlet/jsp/BodyContentImpl.java | 222 +
 .../jsp/CustomTagAndELFunctionCombiner.java |  87 +---
 .../servlet/jsp/FreeMarkerPageContext.java  |   2 +-
 .../freemarker/servlet/jsp/JspTagModelBase.java |  19 +-
 .../servlet/jsp/SimpleTagDirectiveModel.java|  31 +-
 .../servlet/jsp/TagDirectiveModel.java  | 256 ++
 .../servlet/jsp/TagTransformModel.java  | 419 
 .../freemarker/servlet/jsp/TaglibFactory.java   |   6 +-
 .../test/templateutil/AssertDirective.java  |  42 +-
 .../templateutil/AssertEqualsDirective.java |  63 +--
 .../test/templateutil/AssertFailsDirective.java | 125 +++--
 .../test/templateutil/NoOutputDirective.java|  17 +-
 61 files changed, 1940 insertions(+), 2633 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/52a5f9eb/FM3-CHANGE-LOG.txt
--
diff --git a/FM3-CHANGE-LOG.txt 

[2/4] incubator-freemarker git commit: Merged: Fix grammar in InvalidReferenceException tip

2017-08-07 Thread ddekany
Merged: Fix grammar in InvalidReferenceException tip

Merge commit 'refs/pull/29/head' of 
https://github.com/apache/incubator-freemarker into 2.3-gae


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

Branch: refs/heads/2.3-gae
Commit: b44df00e02ce489bc2e5295b74042612cbc4c123
Parents: 67691b4 732fe76
Author: ddekany 
Authored: Tue Aug 8 00:18:33 2017 +0200
Committer: ddekany 
Committed: Tue Aug 8 00:22:09 2017 +0200

--
 src/main/java/freemarker/core/InvalidReferenceException.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--




[GitHub] incubator-freemarker pull request #31: FREEMARKER-55: spring.ftl marco lib s...

2017-08-07 Thread woonsan
Github user woonsan closed the pull request at:

https://github.com/apache/incubator-freemarker/pull/31


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---