You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@freemarker.apache.org by dd...@apache.org on 2015/12/29 19:30:07 UTC
[2/2] incubator-freemarker git commit: Bug fixed: With
incompatible_improvements set to 2.3.24,
m?is_sequence doesn't return true for Java methods wrapped by BeansWrapper and
its subclasses (most notably DefaultObjectWrapper) anymore,
as they only implem
Bug fixed: With incompatible_improvements set to 2.3.24, m?is_sequence doesn't return true for Java methods wrapped by BeansWrapper and its subclasses (most notably DefaultObjectWrapper) anymore, as they only implement the [index] operator, but not ?size, which causes <#list ...> to fail among others. (They shouldn't implement either, but this is historical heritage.)
Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/3a62ff8e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/3a62ff8e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/3a62ff8e
Branch: refs/heads/2.3-gae
Commit: 3a62ff8ecfc63bec8c43d4996ffa5839b9871a9e
Parents: 957264e
Author: ddekany <dd...@apache.org>
Authored: Tue Dec 29 19:29:52 2015 +0100
Committer: ddekany <dd...@apache.org>
Committed: Tue Dec 29 19:29:52 2015 +0100
----------------------------------------------------------------------
.../core/BuiltInsForMultipleTypes.java | 7 ++-
src/main/java/freemarker/core/Environment.java | 4 +-
.../java/freemarker/template/Configuration.java | 5 ++
src/manual/en_US/book.xml | 49 ++++++++++++++++++--
.../expected/type-builtins-ici-2.3.24.txt | 15 ++++++
.../freemarker/test/templatesuite/testcases.xml | 5 +-
6 files changed, 78 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3a62ff8e/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java b/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java
index 861b370..81bcf59 100644
--- a/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java
+++ b/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java
@@ -436,7 +436,12 @@ class BuiltInsForMultipleTypes {
TemplateModel _eval(Environment env) throws TemplateException {
TemplateModel tm = target.eval(env);
target.assertNonNull(tm, env);
- return (tm instanceof TemplateSequenceModel) ? TemplateBooleanModel.TRUE : TemplateBooleanModel.FALSE;
+ return (tm instanceof TemplateSequenceModel
+ && (
+ !(tm instanceof OverloadedMethodsModel || tm instanceof SimpleMethodModel)
+ || !env.isIcI2324OrLater())
+ )
+ ? TemplateBooleanModel.TRUE : TemplateBooleanModel.FALSE;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3a62ff8e/src/main/java/freemarker/core/Environment.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/core/Environment.java b/src/main/java/freemarker/core/Environment.java
index 5ae1bf7..3d61aaa 100644
--- a/src/main/java/freemarker/core/Environment.java
+++ b/src/main/java/freemarker/core/Environment.java
@@ -92,7 +92,7 @@ import freemarker.template.utility.UndeclaredThrowableException;
* {@link Template#createProcessingEnvironment(Object rootMap, Writer out, ObjectWrapper wrapper)}
*/
public final class Environment extends Configurable {
-
+
private static final ThreadLocal threadEnv = new ThreadLocal();
private static final Logger LOG = Logger.getLogger("freemarker.runtime");
@@ -2779,7 +2779,7 @@ public final class Environment extends Configurable {
return configuration.getIncompatibleImprovements().intValue() < _TemplateAPI.VERSION_INT_2_3_22;
}
- private boolean isIcI2324OrLater() {
+ boolean isIcI2324OrLater() {
return configuration.getIncompatibleImprovements().intValue() >= _TemplateAPI.VERSION_INT_2_3_24;
}
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3a62ff8e/src/main/java/freemarker/template/Configuration.java
----------------------------------------------------------------------
diff --git a/src/main/java/freemarker/template/Configuration.java b/src/main/java/freemarker/template/Configuration.java
index 8be37db..82c46b3 100644
--- a/src/main/java/freemarker/template/Configuration.java
+++ b/src/main/java/freemarker/template/Configuration.java
@@ -780,6 +780,11 @@ public class Configuration extends Configurable implements Cloneable, ParserConf
* it's executed in the main namespace, but that haven't happened when the imported template was already
* imported earlier in another namespace.
* </li>
+ * <li><p>
+ * {@code ?is_sequence} doesn't return {@code true} for Java methods wrapped by {@link BeansWrapper} and
+ * its subclasses (most notably {@link DefaultObjectWrapper}) anymore, as they only implement the
+ * {@code [index]} operator, but not {@code ?size}, which causes {@code <#list ...>} to fail among others.
+ * (They shouldn't implement either, but this is historical heritage.)
* </ul>
* </li>
* </ul>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3a62ff8e/src/manual/en_US/book.xml
----------------------------------------------------------------------
diff --git a/src/manual/en_US/book.xml b/src/manual/en_US/book.xml
index 145eb3c..8f43a97 100644
--- a/src/manual/en_US/book.xml
+++ b/src/manual/en_US/book.xml
@@ -17886,7 +17886,13 @@ Sorted by name.last:
<tr>
<td><literal>is_sequence</literal></td>
- <td>sequence</td>
+ <td>sequence (Historical quirk: Before <link
+ linkend="pgui_config_incompatible_improvements_how_to_set"><literal>incompatible_improvements</literal></link>
+ 2.3.24 it returns <literal>true</literal> for Java methods as
+ they implement the
+ <literal>[<replaceable>index</replaceable>]</literal>
+ operator, however, they fail on
+ <literal>?size</literal>.)</td>
</tr>
<tr>
@@ -17911,7 +17917,10 @@ Sorted by name.last:
<tr>
<td><literal>is_indexable</literal></td>
- <td>sequence</td>
+ <td>sequence (Historical quirk: it returns
+ <literal>true</literal> for Java methods as they implement the
+ <literal>[<replaceable>index</replaceable>]</literal>
+ operator.)</td>
</tr>
<tr>
@@ -26553,11 +26562,28 @@ TemplateModel x = env.getVariable("x"); // get variable x</programlisting>
<listitem>
<para><literal><@</literal> and <literal></@</literal> is
- now allowed in String literals that contain
+ now allowed in string literals that contain
<literal>${<replaceable>exp</replaceable>}</literal>, and will
be part of the literal as is. Earlier it was a syntactical
error.</para>
</listitem>
+
+ <listitem>
+ <para>Bug fixed: With
+ <literal>incompatible_improvements</literal> set to 2.3.24
+ (<link linkend="topic.defaultObjectWrapperIcI">see how
+ here...</link>),
+ <literal><replaceable>m</replaceable>?is_sequence</literal>
+ doesn't return <literal>true</literal> for Java methods wrapped
+ by <literal>BeansWrapper</literal> and its subclasses (most
+ notably <literal>DefaultObjectWrapper</literal>) anymore, as
+ they only implement the
+ <literal>[<replaceable>index</replaceable>]</literal> operator,
+ but not <literal>?size</literal>, which causes
+ <literal><#list <replaceable>...</replaceable>></literal>
+ to fail among others. (They shouldn't implement either, but this
+ is historical heritage.)</para>
+ </listitem>
</itemizedlist>
</section>
@@ -27448,6 +27474,23 @@ TemplateModel x = env.getVariable("x"); // get variable x</programlisting>
</listitem>
<listitem>
+ <para>Bug fixed: With
+ <literal>incompatible_improvements</literal> set to 2.3.24
+ (<link linkend="topic.defaultObjectWrapperIcI">see how
+ here...</link>),
+ <literal><replaceable>m</replaceable>?is_sequence</literal>
+ doesn't return <literal>true</literal> for Java methods wrapped
+ by <literal>BeansWrapper</literal> and its subclasses (most
+ notably <literal>DefaultObjectWrapper</literal>) anymore, as
+ they only implement the
+ <literal>[<replaceable>index</replaceable>]</literal> operator,
+ but not <literal>?size</literal>, which causes
+ <literal><#list <replaceable>...</replaceable>></literal>
+ to fail among others. (They shouldn't implement either, but this
+ is historical heritage.)</para>
+ </listitem>
+
+ <listitem>
<para>Added an overload to
<literal>Configuration.getSupportedBuiltInNames</literal> and
<literal>Configuration.getSupportedBuiltInDirectiveNames</literal>
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3a62ff8e/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
----------------------------------------------------------------------
diff --git a/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt b/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
new file mode 100644
index 0000000..b96f6f9
--- /dev/null
+++ b/src/test/resources/freemarker/test/templatesuite/expected/type-builtins-ici-2.3.24.txt
@@ -0,0 +1,15 @@
+StNuBoMeTaMaHaHxSeCoCxEnInDiNo
+1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 1 0 0 0 0 0 0 0 0 1 0
+0 0 0 0 0 1 0 0 0 0 0 0 0 1 0
+0 0 0 0 0 0 1 1 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 1 0 0 1 1 0 0
+0 0 0 0 0 0 0 0 0 1 0 1 0 0 0
+0 0 0 0 0 0 0 0 0 1 1 1 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
+1 0 0 0 0 0 1 1 0 0 0 0 0 0 0
+0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
+0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/3a62ff8e/src/test/resources/freemarker/test/templatesuite/testcases.xml
----------------------------------------------------------------------
diff --git a/src/test/resources/freemarker/test/templatesuite/testcases.xml b/src/test/resources/freemarker/test/templatesuite/testcases.xml
index 31d6606..4a6e539 100644
--- a/src/test/resources/freemarker/test/templatesuite/testcases.xml
+++ b/src/test/resources/freemarker/test/templatesuite/testcases.xml
@@ -186,7 +186,10 @@
<setting incompatible_improvements="min, 2.3.20"/>
</testCase>
<testCase name="type-builtins[#endTN]-ici-2.3.21">
- <setting incompatible_improvements="2.3.21, max"/>
+ <setting incompatible_improvements="2.3.21, 2.3.23"/>
+ </testCase>
+ <testCase name="type-builtins[#endTN]-ici-2.3.24">
+ <setting incompatible_improvements="2.3.24, max"/>
</testCase>
<testCase name="date-type-builtins" noOutput="true" />
<testCase name="url" noOutput="true" />