incubator-freemarker git commit: Trying to fix test failing in Travis environment
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: ddekanyAuthored: 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
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: ddekanyAuthored: 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)
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: ddekanyAuthored: 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)
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: ddekanyAuthored: 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
[ 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
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: ddekanyAuthored: 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
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
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...
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
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`,
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
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...
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
[ 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
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: ddekanyAuthored: 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
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 <@...>
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: ddekanyAuthored: 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.
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: ddekanyAuthored: 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.)
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: ddekanyAuthored: 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
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
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: ddekanyAuthored: 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
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: ddekanyAuthored: 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
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
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: ddekanyAuthored: 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.
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: ddekanyAuthored: 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
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: ddekanyAuthored: 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
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: ddekanyAuthored: 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...
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. ---