Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 50b4a93e7 -> ce72f4ba2


Removed long deprecated `#{}` interpolations.


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

Branch: refs/heads/3
Commit: ce72f4ba24c076b76727c96014d0f12ad13c62bc
Parents: 50b4a93
Author: ddekany <ddek...@apache.org>
Authored: Tue Jun 27 00:00:27 2017 +0200
Committer: ddekany <ddek...@apache.org>
Committed: Tue Jun 27 00:00:35 2017 +0200

----------------------------------------------------------------------
 FM3-CHANGE-LOG.txt                              |   5 +-
 .../core/InterpolationSyntaxTest.java           |  35 ++++
 .../core/ObjectBuilderSettingsTest.java         |  15 +-
 .../freemarker/core/OutputFormatTest.java       |  16 --
 .../core/StringLiteralInterpolationTest.java    |   9 +-
 .../freemarker/core/util/FTLUtilTest.java       |   3 +-
 .../freemarker/core/ast-strlitinterpolation.ast |   4 +-
 .../freemarker/core/ast-strlitinterpolation.ftl |   2 +-
 .../core/cano-strlitinterpolation.ftl           |   2 +-
 .../core/cano-strlitinterpolation.ftl.out       |   2 +-
 .../core/templatesuite/expected/arithmetic.txt  |  46 -----
 .../core/templatesuite/templates/arithmetic.ftl |  50 ------
 .../templatesuite/templates/lastcharacter.ftl   |   2 +-
 .../templatesuite/templates/listliteral.ftl     |   2 +-
 .../templatesuite/templates/number-literal.ftl  |   6 +-
 .../freemarker/core/templatesuite/testcases.xml |   1 -
 .../freemarker/core/ASTDirAssignment.java       |   2 +-
 .../freemarker/core/ASTExpStringLiteral.java    |   3 +-
 .../freemarker/core/ASTHashInterpolation.java   | 172 -------------------
 .../apache/freemarker/core/Configuration.java   |   2 +-
 .../core/MutableProcessingConfiguration.java    |   4 +-
 .../core/_ObjectBuilderSettingEvaluator.java    |   5 +-
 .../apache/freemarker/core/util/FTLUtil.java    |   3 +-
 freemarker-core/src/main/javacc/FTL.jj          | 123 ++-----------
 24 files changed, 80 insertions(+), 434 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/FM3-CHANGE-LOG.txt
----------------------------------------------------------------------
diff --git a/FM3-CHANGE-LOG.txt b/FM3-CHANGE-LOG.txt
index 0759d58..a930bc6 100644
--- a/FM3-CHANGE-LOG.txt
+++ b/FM3-CHANGE-LOG.txt
@@ -282,4 +282,7 @@ the FreeMarer 3 changelog here:
   behaves as if it was false. When a FreeMarker method throws an exception, the
   caller is responsible for either logging it or letting it bubble up.
 - util.ObjectFactory was renamed to CommonSupplier, and its createObject() 
method was renamed to
-  get(), to be more similar to the Java 8 API.
\ No newline at end of file
+  get(), to be more similar to the Java 8 API.
+- Removed long deprecated `#{}` interpolations. They are treated as plain 
static text now. (The
+  template converter tool translates these to `${}` interpolations. For 
example `#{x}` is simply 
+  translated to `${b}`, while `#{x; m1M3}` is translated to 
`${x?string('0.0##')}`).
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpolationSyntaxTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpolationSyntaxTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpolationSyntaxTest.java
new file mode 100644
index 0000000..b352298
--- /dev/null
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/InterpolationSyntaxTest.java
@@ -0,0 +1,35 @@
+/*
+ * 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.test.TemplateTest;
+import org.junit.Test;
+
+public class InterpolationSyntaxTest extends TemplateTest {
+
+    @Test
+    public void fm2HashInterpolationNotRecognized() throws IOException, 
TemplateException {
+        // Find related: [interpolation prefixes]
+        assertOutput("#{1} ${1} ${'#{2} ${2}'}", "#{1} 1 #{2} 2");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/java/org/apache/freemarker/core/ObjectBuilderSettingsTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/ObjectBuilderSettingsTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/ObjectBuilderSettingsTest.java
index cc02d3f..b02a736 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/ObjectBuilderSettingsTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/ObjectBuilderSettingsTest.java
@@ -523,24 +523,17 @@ public class ObjectBuilderSettingsTest {
         } catch (_ObjectBuilderSettingEvaluationException e) {
             assertThat(e.getMessage(), containsString("\")\""));
         }
-        
+
         try {
             _ObjectBuilderSettingEvaluator.eval(
-                    "foo.Bar('s${x}s'))",
+                    "'s${x}s'",
                     Object.class, false, 
_SettingEvaluationEnvironment.getCurrent());
             fail();
         } catch (_ObjectBuilderSettingEvaluationException e) {
             assertThat(e.getMessage(), containsString("${...}"));
         }
-        
-        try {
-            _ObjectBuilderSettingEvaluator.eval(
-                    "foo.Bar('s#{x}s'))",
-                    Object.class, false, 
_SettingEvaluationEnvironment.getCurrent());
-            fail();
-        } catch (_ObjectBuilderSettingEvaluationException e) {
-            assertThat(e.getMessage(), containsString("#{...}"));
-        }
+        // Find related: [interpolation prefixes]
+        assertEqualsEvaled("s#{x}s", "'s#{x}s'"); // FM2 #{} is not recognized
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
index a21cff7..538a01f 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/OutputFormatTest.java
@@ -315,22 +315,6 @@ public class OutputFormatTest extends TemplateTest {
     }
     
     @Test
-    public void testNumericalInterpolation() throws IOException, 
TemplateException {
-        setConfiguration(new TestConfigurationBuilder()
-                
.registeredCustomOutputFormats(Collections.<OutputFormat>singleton(DummyOutputFormat.INSTANCE))
-                .build());
-        assertOutput(
-                "<#ftl outputFormat='dummy'>#{1.5}; #{1.5; m3}; ${'a.b'}",
-                "1\\.5; 1\\.500; a\\.b");
-        assertOutput(
-                "<#ftl outputFormat='dummy' autoEsc=false>#{1.5}; #{1.5; m3}; 
${'a.b'}; ${'a.b'?esc}",
-                "1.5; 1.500; a.b; a\\.b");
-        assertOutput("<#ftl outputFormat='plainText'>#{1.5}", "1.5");
-        assertOutput("<#ftl outputFormat='HTML'>#{1.5}", "1.5");
-        assertOutput("#{1.5}", "1.5");
-    }
-    
-    @Test
     public void testUndefinedOutputFormat() throws IOException, 
TemplateException {
         assertOutput("${'a < b'}; ${htmlPlain}; ${htmlMarkup}", "a < b; a &lt; 
{h&#39;}; <p>c");
         assertErrorContains("${'x'?esc}", "undefined", "escaping", "?esc");

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/java/org/apache/freemarker/core/StringLiteralInterpolationTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/StringLiteralInterpolationTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/StringLiteralInterpolationTest.java
index ae72dac..7a71289 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/StringLiteralInterpolationTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/StringLiteralInterpolationTest.java
@@ -34,11 +34,8 @@ public class StringLiteralInterpolationTest extends 
TemplateTest {
     @Test
     public void basics() throws IOException, TemplateException {
         addToDataModel("x", 1);
-        assertOutput("${'${x}'}", "1");
-        assertOutput("${'#{x}'}", "1");
+        assertOutput("${'${x}'}", "1"); // Find related: [interpolation 
prefixes]
         assertOutput("${'a${x}b${x*2}c'}", "a1b2c");
-        assertOutput("${'a#{x}b#{x*2}c'}", "a1b2c");
-        assertOutput("${'a#{x; m2}'}", "a1.00");
         assertOutput("${'${x} ${x}'}", "1 1");
         assertOutput("${'$\\{x}'}", "${x}");
         assertOutput("${'$\\{x} $\\{x}'}", "${x} ${x}");
@@ -116,12 +113,10 @@ public class StringLiteralInterpolationTest extends 
TemplateTest {
         assertOutput("${\"${1000}_&\"}", "1.00*10<sup>3</sup>_&amp;");
         assertOutput("${\"${1000}, ${2000}\"}", "1.00*10<sup>3</sup>, 
2.00*10<sup>3</sup>");
         assertOutput("${\"& ${'x'}, ${2000}\"}", "&amp; x, 
2.00*10<sup>3</sup>");
-        assertOutput("${\"& ${'x'}, #{2000}\"}", "& x, 2000");
-        
+
         assertOutput("${\"${2000}\"?isMarkupOutput?c}", "true");
         assertOutput("${\"x ${2000}\"?isMarkupOutput?c}", "true");
         assertOutput("${\"${2000} x\"?isMarkupOutput?c}", "true");
-        assertOutput("${\"#{2000}\"?isMarkupOutput?c}", "false");
         assertOutput("${\"${'x'}\"?isMarkupOutput?c}", "false");
         assertOutput("${\"x ${'x'}\"?isMarkupOutput?c}", "false");
         assertOutput("${\"${'x'} x\"?isMarkupOutput?c}", "false");

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/FTLUtilTest.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/FTLUtilTest.java
 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/FTLUtilTest.java
index f1e44f3..14e5a07 100644
--- 
a/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/FTLUtilTest.java
+++ 
b/freemarker-core-test/src/test/java/org/apache/freemarker/core/util/FTLUtilTest.java
@@ -35,7 +35,8 @@ public class FTLUtilTest {
         assertEquals("a{b}c", FTLUtil.escapeStringLiteralPart("a{b}c"));
         assertEquals("a#b", FTLUtil.escapeStringLiteralPart("a#b"));
         assertEquals("a$b", FTLUtil.escapeStringLiteralPart("a$b"));
-        assertEquals("a#\\{b}c", FTLUtil.escapeStringLiteralPart("a#{b}c"));
+        // Find related: [interpolation prefixes]
+        assertEquals("a#{b}c", FTLUtil.escapeStringLiteralPart("a#{b}c"));
         assertEquals("a$\\{b}c", FTLUtil.escapeStringLiteralPart("a${b}c"));
         assertEquals("a'c\\\"d", FTLUtil.escapeStringLiteralPart("a'c\"d", 
'"'));
         assertEquals("a\\'c\"d", FTLUtil.escapeStringLiteralPart("a'c\"d", 
'\''));

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ast
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ast
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ast
index 321721e..90317bd 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ast
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ast
@@ -58,10 +58,8 @@
         - content: dynamic "..."  // o.a.f.c.ASTExpStringLiteral
             - value part: ${...}  // o.a.f.c.ASTDollarInterpolation
                 - content: x  // o.a.f.c.ASTExpVariable
-            - value part: #{...}  // o.a.f.c.ASTHashInterpolation
+            - value part: ${...}  // o.a.f.c.ASTDollarInterpolation
                 - content: y  // o.a.f.c.ASTExpVariable
-                - minimum decimals: "0"  // Integer
-                - maximum decimals: "0"  // Integer
     #text  // o.a.f.c.ASTStaticText
         - content: "\n6. "  // String
     ${...}  // o.a.f.c.ASTDollarInterpolation

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ftl
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ftl
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ftl
index cd86f2f..ce73ab2 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ftl
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/ast-strlitinterpolation.ftl
@@ -20,6 +20,6 @@
 2. ${'a${x}b${x}c'}
 3. ${'${x}b'}
 4. ${'a${x}'}
-5. ${'${x}#{y}'}
+5. ${'${x}${y}'}
 6. ${'a b ${x} c d'}
 7. ${'${x} a b ${y} c$d'}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl
index 85189a4..9f6fef6 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl
@@ -16,4 +16,4 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<@m x='${e1 + "a\'b${x}"}#{x; M2}' y='$\{e2}' />
\ No newline at end of file
+<@m x='${e1 + "a\'b${x}"}' y='$\{e2}' />
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl.out
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl.out
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl.out
index 754c225..7ad90a7 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl.out
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/cano-strlitinterpolation.ftl.out
@@ -16,4 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-<@m x="${e1 + \"a'b$\{x}\"}#{x ; m0M2}" y="$\{e2}"/>
\ No newline at end of file
+<@m x="${e1 + \"a'b$\{x}\"}" y="$\{e2}"/>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/arithmetic.txt
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/arithmetic.txt
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/arithmetic.txt
deleted file mode 100644
index 33a7186..0000000
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/expected/arithmetic.txt
+++ /dev/null
@@ -1,46 +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.
- */
-<html>
-<head>
-<title>FreeMarker: Arithmetic Test</title>
-</head>
-<body>
-
-<p>A simple test follows:</p>
-
-<p>Perform a number assignment:</p>
-
-
-3.234
-2.00
-0.6172500000000000000000000000000000000000
-1.620089104901
-1.6201
-
-<P>Display a number with at least 3 digits after the decimal point</P>
-
-1234.000
-
-<p>Now use numbers in assignment</p>
-
-
-1257.77
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/arithmetic.ftl
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/arithmetic.ftl
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/arithmetic.ftl
deleted file mode 100644
index afd4c28..0000000
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/arithmetic.ftl
+++ /dev/null
@@ -1,50 +0,0 @@
-[#ftl]
-[#--
-  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.
---]
-<html>
-<head>
-<title>FreeMarker: Arithmetic Test</title>
-</head>
-<body>
-[#assign foo = 1234, bar = 23.77] 
-
-<p>A simple test follows:</p>
-
-<p>Perform a number assignment:</p>
-
-[#setting locale="en_US"][#assign x = 1.2345, y=2]
-
-#{ x+y ; m2M3}
-#{ y ; m2M3}
-#{ x/y ; m40M40}
-#{y/x}
-#{ y/x ; M4}
-
-<P>Display a number with at least 3 digits after the decimal point</P>
-
-#{foo ; m3}
-
-<p>Now use numbers in assignment</p>
-
-[#assign mynumber = foo + bar   [#-- a comment --] ]
-
-#{mynumber}
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/lastcharacter.ftl
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/lastcharacter.ftl
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/lastcharacter.ftl
index e762356..a2ad295 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/lastcharacter.ftl
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/lastcharacter.ftl
@@ -24,7 +24,7 @@
 
 <p>A simple test follows:</p>
   
-    #{message?capitalize?length}
+    ${message?capitalize?length}
     
     ${message [1..] ? upper_case}
     

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/listliteral.ftl
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/listliteral.ftl
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/listliteral.ftl
index d48578c..8fba519 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/listliteral.ftl
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/listliteral.ftl
@@ -32,7 +32,7 @@
 <#assign mymessage = "hello">
 <#assign test = [ "test1", "test23", "test45", message, mymessage]>
 
-The list contains #{test?size} items.
+The list contains ${test?size} items.
 
 <#list test as item>
 <p>${item}</p>

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/number-literal.ftl
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/number-literal.ftl
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/number-literal.ftl
index c881d0f..2ca9e8b 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/number-literal.ftl
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/templates/number-literal.ftl
@@ -53,14 +53,14 @@
 
 <p>Now perform a number assignment:</p>
 
-#{1.300000?double}
+${1.300000?double}
 
 <#assign mynumber = 1.8, USA="en_US" />
 <#assign myfloat = mynumber?float />
 
 My number is: ${mynumber}
 <#setting locale="en_US">
-My float is: #{myfloat ; m6}
+My float is: ${myfloat?string('0.000000')}
 The int part is: ${myfloat?int}
 
 <#assign mymessage = mynumber?string>
@@ -73,7 +73,7 @@ ${mymessage + 3}
 ${mymessage}
 
 <#assign mymessage = mymessage + 2>
-#{mymessage}
+${mymessage}
 
 <p>Try numbers in tests</p>
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/testcases.xml
----------------------------------------------------------------------
diff --git 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/testcases.xml
 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/testcases.xml
index 958ff0e..55ed29d 100644
--- 
a/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/testcases.xml
+++ 
b/freemarker-core-test/src/test/resources/org/apache/freemarker/core/templatesuite/testcases.xml
@@ -57,7 +57,6 @@ Note that for the incompatible_improvements setting you can 
specify a list of ve
    <testCase name="api-builtins" noOutput="true">
       <setting api_builtin_enabled="true" />
    </testCase>
-   <testCase name="arithmetic" />
    <testCase name="assignments" noOutput="true" />
    <testCase name="boolean" />
    <testCase name="charset-in-header" />

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
index db008f5..f25e9fe 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTDirAssignment.java
@@ -224,7 +224,7 @@ final class ASTDirAssignment extends ASTDirective {
         } else if (scope == ASTDirAssignment.NAMESPACE) {
             return "#assign";
         } else {
-            return "#{unknown_assignment_type}";
+            throw new BugException();
         }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
index e8e0d96..82901b2 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTExpStringLiteral.java
@@ -51,8 +51,7 @@ final class ASTExpStringLiteral extends ASTExpression 
implements TemplateScalarM
     void parseValue(FMParserTokenManager parentTkMan, OutputFormat 
outputFormat) throws ParseException {
         // The way this works is incorrect (the literal should be parsed 
without un-escaping),
         // but we can't fix this backward compatibly.
-        if (value.length() > 3 && (value.indexOf("${") >= 0 || 
value.indexOf("#{") >= 0)) {
-            
+        if (value.length() > 3 && value.indexOf("${") >= 0) { // Find related: 
[interpolation prefixes]
             Template parentTemplate = getTemplate();
             ParsingConfiguration pCfg = 
parentTemplate.getParsingConfiguration();
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core/src/main/java/org/apache/freemarker/core/ASTHashInterpolation.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTHashInterpolation.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/ASTHashInterpolation.java
deleted file mode 100644
index 1b49248..0000000
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/ASTHashInterpolation.java
+++ /dev/null
@@ -1,172 +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.io.Writer;
-import java.text.NumberFormat;
-import java.util.Locale;
-
-import org.apache.freemarker.core.outputformat.MarkupOutputFormat;
-import org.apache.freemarker.core.util.FTLUtil;
-
-/**
- * AST interpolation node: <tt>#{exp}</tt>
- */
-final class ASTHashInterpolation extends ASTInterpolation {
-
-    private final ASTExpression expression;
-    private final boolean hasFormat;
-    private final int minFracDigits;
-    private final int maxFracDigits;
-    /** For OutputFormat-based auto-escaping */
-    private final MarkupOutputFormat autoEscapeOutputFormat;
-    private volatile FormatHolder formatCache; // creating new NumberFormat is 
slow operation
-
-    ASTHashInterpolation(ASTExpression expression, MarkupOutputFormat 
autoEscapeOutputFormat) {
-        this.expression = expression;
-        hasFormat = false;
-        minFracDigits = 0;
-        maxFracDigits = 0;
-        this.autoEscapeOutputFormat = autoEscapeOutputFormat;
-    }
-
-    ASTHashInterpolation(ASTExpression expression,
-            int minFracDigits, int maxFracDigits,
-            MarkupOutputFormat autoEscapeOutputFormat) {
-        this.expression = expression;
-        hasFormat = true;
-        this.minFracDigits = minFracDigits;
-        this.maxFracDigits = maxFracDigits;
-        this.autoEscapeOutputFormat = autoEscapeOutputFormat;
-    }
-
-    @Override
-    ASTElement[] accept(Environment env) throws TemplateException, IOException 
{
-        String s = calculateInterpolatedStringOrMarkup(env);
-        Writer out = env.getOut();
-        if (autoEscapeOutputFormat != null) {
-            autoEscapeOutputFormat.output(s, out);
-        } else {
-            out.write(s);
-        }
-        return null;
-    }
-
-    @Override
-    protected String calculateInterpolatedStringOrMarkup(Environment env) 
throws TemplateException {
-        Number num = expression.evalToNumber(env);
-        
-        FormatHolder fmth = formatCache;  // atomic sampling
-        if (fmth == null || !fmth.locale.equals(env.getLocale())) {
-            synchronized (this) {
-                fmth = formatCache;
-                if (fmth == null || !fmth.locale.equals(env.getLocale())) {
-                    NumberFormat fmt = 
NumberFormat.getNumberInstance(env.getLocale());
-                    if (hasFormat) {
-                        fmt.setMinimumFractionDigits(minFracDigits);
-                        fmt.setMaximumFractionDigits(maxFracDigits);
-                    } else {
-                        fmt.setMinimumFractionDigits(0);
-                        fmt.setMaximumFractionDigits(50);
-                    }
-                    fmt.setGroupingUsed(false);
-                    formatCache = new FormatHolder(fmt, env.getLocale());
-                    fmth = formatCache;
-                }
-            }
-        }
-        // We must use Format even if hasFormat == false.
-        // Some locales may use non-Arabic digits, thus replacing the
-        // decimal separator in the result of toString() is not enough.
-        return fmth.format.format(num);
-    }
-
-    @Override
-    protected String dump(boolean canonical, boolean inStringLiteral) {
-        StringBuilder buf = new StringBuilder("#{");
-        final String exprCF = expression.getCanonicalForm();
-        buf.append(inStringLiteral ? FTLUtil.escapeStringLiteralPart(exprCF, 
'"') : exprCF);
-        if (hasFormat) {
-            buf.append(" ; ");
-            buf.append("m");
-            buf.append(minFracDigits);
-            buf.append("M");
-            buf.append(maxFracDigits);
-        }
-        buf.append("}");
-        return buf.toString();
-    }
-    
-    @Override
-    String getASTNodeDescriptor() {
-        return "#{...}";
-    }
-
-    @Override
-    boolean heedsOpeningWhitespace() {
-        return true;
-    }
-
-    @Override
-    boolean heedsTrailingWhitespace() {
-        return true;
-    }
-    
-    private static class FormatHolder {
-        final NumberFormat format;
-        final Locale locale;
-        
-        FormatHolder(NumberFormat format, Locale locale) {
-            this.format = format;
-            this.locale = locale;
-        }
-    }
-
-    @Override
-    int getParameterCount() {
-        return 3;
-    }
-
-    @Override
-    Object getParameterValue(int idx) {
-        switch (idx) {
-        case 0: return expression;
-        case 1: return Integer.valueOf(minFracDigits);
-        case 2: return Integer.valueOf(maxFracDigits);
-        default: throw new IndexOutOfBoundsException();
-        }
-    }
-
-    @Override
-    ParameterRole getParameterRole(int idx) {
-        switch (idx) {
-        case 0: return ParameterRole.CONTENT;
-        case 1: return ParameterRole.MINIMUM_DECIMALS;
-        case 2: return ParameterRole.MAXIMUM_DECIMALS;
-        default: throw new IndexOutOfBoundsException();
-        }
-    }
-
-    @Override
-    boolean isNestedBlockRepeater() {
-        return false;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core/src/main/java/org/apache/freemarker/core/Configuration.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/Configuration.java 
b/freemarker-core/src/main/java/org/apache/freemarker/core/Configuration.java
index 4eefda1..8122e92 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/Configuration.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/Configuration.java
@@ -657,7 +657,7 @@ public final class Configuration implements 
TopLevelConfiguration, CustomStateSc
      * <p><b>About auto-escaping</b></p>
      *
      * <p>
-     * Auto-escaping has significance when a value is printed with 
<code>${...}</code> (or <code>#{...}</code>). If
+     * Auto-escaping has significance when a value is printed with 
<code>${...}</code>. If
      * auto-escaping is on, FreeMarker will assume that the value is plain 
text (as opposed to markup or some kind of
      * rich text), so it will escape it according the current output format 
(see {@link #getOutputFormat()}
      * and {@link 
TemplateConfiguration.Builder#setOutputFormat(OutputFormat)}). If auto-escaping 
is off, FreeMarker

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core/src/main/java/org/apache/freemarker/core/MutableProcessingConfiguration.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/MutableProcessingConfiguration.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/MutableProcessingConfiguration.java
index 843e607..efdb953 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/MutableProcessingConfiguration.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/MutableProcessingConfiguration.java
@@ -1706,8 +1706,8 @@ public abstract class 
MutableProcessingConfiguration<SelfT extends MutableProces
      *        {@code BigDecimal} and "bi" for {@code BigInteger}.</li>
      *        <li>A boolean literal: {@code true} or {@code false}
      *        <li>The null literal: {@code null}
-     *        <li>A string literal with FTL syntax, except that  it can't 
contain <tt>${...}</tt>-s and
-     *            <tt>#{...}</tt>-s. Examples: {@code "Line 1\nLine 2"} or 
{@code r"C:\temp"}.
+     *        <li>A string literal with FTL syntax, except that  it can't 
contain <tt>${...}</tt>-s.
+     *            Examples: {@code "Line 1\nLine 2"} or {@code r"C:\temp"}.
      *        <li>A list literal (since 2.3.24) with FTL-like syntax, for 
example {@code [ 'foo', 2, true ]}.
      *            If the parameter is expected to be array, the list will be 
automatically converted to array.
      *            The list items can be any kind of expression, like even 
object builder expressions.

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core/src/main/java/org/apache/freemarker/core/_ObjectBuilderSettingEvaluator.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/_ObjectBuilderSettingEvaluator.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/_ObjectBuilderSettingEvaluator.java
index 89cdfaf..3ebada9 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/_ObjectBuilderSettingEvaluator.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/_ObjectBuilderSettingEvaluator.java
@@ -510,9 +510,10 @@ public class _ObjectBuilderSettingEvaluator {
                         break seekTokenEnd;
                     } else if (c == '{') {
                         char prevC = src.charAt(pos - 1);
-                        if (prevC == '$' || prevC == '#') {
+                        // Find related: [interpolation prefixes]
+                        if (prevC == '$') {
                             throw new _ObjectBuilderSettingEvaluationException(
-                                    "${...} and #{...} aren't allowed here.");
+                                    "${...} isn't allowed here.");
                         }
                     }
                 } else {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core/src/main/java/org/apache/freemarker/core/util/FTLUtil.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/FTLUtil.java 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/FTLUtil.java
index 4b3adc6..8baa927 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/util/FTLUtil.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/util/FTLUtil.java
@@ -159,7 +159,8 @@ public final class FTLUtil {
     }
 
     private static boolean isInterpolationStart(char c) {
-        return c == '$' || c == '#';
+        // Find related: [interpolation prefixes]
+        return c == '$';
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/ce72f4ba/freemarker-core/src/main/javacc/FTL.jj
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/javacc/FTL.jj 
b/freemarker-core/src/main/javacc/FTL.jj
index 7a39545..3214075 100644
--- a/freemarker-core/src/main/javacc/FTL.jj
+++ b/freemarker-core/src/main/javacc/FTL.jj
@@ -958,13 +958,14 @@ TOKEN:
 {
     <STATIC_TEXT_WS : ("\n" | "\r" | "\t" | " ")+>
     |
-    <STATIC_TEXT_NON_WS : (~["$", "<", "#", "[", "{", "\n", "\r", "\t", " "])+>
+    // Find related: [interpolation prefixes]
+    <STATIC_TEXT_NON_WS : (~["$", "<", "[", "{", "\n", "\r", "\t", " "])+>
     |
-    <STATIC_TEXT_FALSE_ALARM : "$" | "#" | "<" | "[" | "{"> // to handle a 
lone dollar sign or "<" or "# or <@ with whitespace after"
+    // Find related: [interpolation prefixes]
+    <STATIC_TEXT_FALSE_ALARM : "$" | "<" | "[" | "{"> // to handle a lone 
dollar sign or "<" or "# or <@ with whitespace after
     |
+    // Find related: [interpolation prefixes]
     <DOLLAR_INTERPOLATION_OPENING : "${"> { startInterpolation(matchedToken); }
-    |
-    <HASH_INTERPOLATION_OPENING : "#{"> { startInterpolation(matchedToken); }
 }
 
 <FM_EXPRESSION, IN_PAREN, NAMED_PARAMETER_EXPRESSION> SKIP :
@@ -1152,7 +1153,7 @@ TOKEN:
         }
     }
     |
-    <OPEN_MISPLACED_INTERPOLATION : "${" | "#{">
+    <OPEN_MISPLACED_INTERPOLATION : "${"> // Find related: [interpolation 
prefixes]
     {
         if ("".length() == 0) {  // prevents unreachabe "break" compilation 
error in generated Java
             char c = matchedToken.image.charAt(0);
@@ -2117,7 +2118,7 @@ ASTExpStringLiteral ASTExpStringLiteral(boolean 
interpolate) :
         result.setLocation(template, t, t);
         if (interpolate && !raw) {
             // TODO: This logic is broken. It can't handle literals that 
contains both ${...} and $\{...}. 
-            if (t.image.indexOf("${") >= 0 || t.image.indexOf("#{") >= 0) 
result.parseValue(token_source, outputFormat);
+            if (t.image.indexOf("${") >= 0) result.parseValue(token_source, 
outputFormat);
         }
         return result;
     }
@@ -2180,10 +2181,9 @@ ASTExpHashLiteral ASTExpHashLiteral() :
 }
 
 /**
- * A production representing the ${...}
- * that outputs a variable.
+ * ${exp}
  */
-ASTDollarInterpolation StringOutput() :
+ASTDollarInterpolation ASTDollarInterpolation() :
 {
     ASTExpression exp;
     Token begin, end;
@@ -2206,86 +2206,6 @@ ASTDollarInterpolation StringOutput() :
     }
 }
 
-ASTHashInterpolation ASTHashInterpolation() :
-{
-    ASTExpression exp;
-    Token fmt = null, begin, end;
-}
-{
-    begin = <HASH_INTERPOLATION_OPENING>
-    exp = ASTExpression() { numberLiteralOnly(exp); }
-    [
-        <SEMICOLON>
-        fmt = <ID>
-    ]
-    end = <CLOSING_CURLY_BRACKET>
-    {
-        MarkupOutputFormat<?> autoEscOF = autoEscaping && outputFormat 
instanceof MarkupOutputFormat
-                ? (MarkupOutputFormat<?>) outputFormat : null;
-    
-        ASTHashInterpolation result;
-        if (fmt != null) {
-            int minFrac = -1;  // -1 indicates that the value has not been set
-            int maxFrac = -1;
-
-            StringTokenizer st = new StringTokenizer(fmt.image, "mM", true);
-            char type = '-';
-            while (st.hasMoreTokens()) {
-                String token = st.nextToken();
-                try {
-                       if (type != '-') {
-                           switch (type) {
-                           case 'm':
-                               if (minFrac != -1) throw new 
ParseException("Invalid formatting string", template, fmt);
-                               minFrac = Integer.parseInt(token);
-                               break;
-                           case 'M':
-                               if (maxFrac != -1) throw new 
ParseException("Invalid formatting string", template, fmt);
-                               maxFrac = Integer.parseInt(token);
-                               break;
-                           default:
-                               throw new ParseException("Invalid formatting 
string", template, fmt);
-                           }
-                           type = '-';
-                       } else if (token.equals("m")) {
-                           type = 'm';
-                       } else if (token.equals("M")) {
-                           type = 'M';
-                       } else {
-                           throw new ParseException();
-                       }
-                } catch (ParseException e) {
-                       throw new ParseException("Invalid format specifier " + 
fmt.image, template, fmt);
-                } catch (NumberFormatException e) {
-                       throw new ParseException("Invalid number in the format 
specifier " + fmt.image, template, fmt);
-                }
-            }
-
-            if (maxFrac == -1) {
-                   if (minFrac == -1) {
-                       throw new ParseException(
-                                       "Invalid format specification, at least 
one of m and M must be specified!", template, fmt);
-                   }
-               maxFrac = minFrac;
-            } else if (minFrac == -1) {
-               minFrac = 0;
-            }
-            if (minFrac > maxFrac) {
-               throw new ParseException(
-                               "Invalid format specification, min cannot be 
greater than max!", template, fmt);
-            }
-            if (minFrac > 50 || maxFrac > 50) {// sanity check
-                throw new ParseException("Cannot specify more than 50 fraction 
digits", template, fmt);
-            }
-            result = new ASTHashInterpolation(exp, minFrac, maxFrac, 
autoEscOF);
-        } else {  // if format != null
-            result = new ASTHashInterpolation(exp, autoEscOF);
-        }
-        result.setLocation(template, begin, end);
-        return result;
-    }
-}
-
 ASTElement If() :
 {
     Token start, end, t;
@@ -3724,9 +3644,7 @@ TemplateElements MixedContentElements() :
         (
             elem = PCData()
             |
-            elem = StringOutput()
-            |
-            elem = ASTHashInterpolation()
+            elem = ASTDollarInterpolation()
             |
             elem = FreemarkerDirective()
         )
@@ -3770,9 +3688,7 @@ ASTImplicitParent ASTImplicitParent() :
         (
             elem = PCData()
             |
-            elem = StringOutput()
-            |
-            elem = ASTHashInterpolation()
+            elem = ASTDollarInterpolation()
             |
             elem = FreemarkerDirective()
         )
@@ -3814,8 +3730,7 @@ ASTElement OptionalBlock() :
 }
 
 /**
- * A production freemarker text that may contain
- * ${...} and #{...} but no directives.
+ * A production freemarker text that may contain ${...}, but no directives.
  */
 ASTElement FreeMarkerText() :
 {
@@ -3827,9 +3742,7 @@ ASTElement FreeMarkerText() :
         (
             elem = PCData()
             |
-            elem = StringOutput()
-            |
-            elem = ASTHashInterpolation()
+            elem = ASTDollarInterpolation()  // Find related: [interpolation 
prefixes]
         )
         {
             if (begin == null) {
@@ -4063,15 +3976,7 @@ List<Object> StaticTextAndInterpolations() :
            }
            |
            (
-               LOOKAHEAD(<DOLLAR_INTERPOLATION_OPENING>)
-                   (
-                       interpolation = StringOutput()
-               )
-                   |
-            LOOKAHEAD(<HASH_INTERPOLATION_OPENING>)
-                   (
-                interpolation = ASTHashInterpolation()
-                   )
+            interpolation = ASTDollarInterpolation()
            )
            {
             if (staticTextCollector != null) {


Reply via email to