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 2020/02/18 00:43:54 UTC

[freemarker] branch 3 updated: Forward ported from 2.3-gae, kind of: Disallowed using the object returned by Configuration.getVersion() as the incompatibleImprovements setting value. In 2.3.x it was just logged as error though, so this is quite different. Also forward ported ConfigurationTest.testVersion() fixes.

This is an automated email from the ASF dual-hosted git repository.

ddekany pushed a commit to branch 3
in repository https://gitbox.apache.org/repos/asf/freemarker.git


The following commit(s) were added to refs/heads/3 by this push:
     new 789f2b2  Forward ported from 2.3-gae, kind of: Disallowed using the object returned by Configuration.getVersion() as the incompatibleImprovements setting value. In 2.3.x it was just logged as error though, so this is quite different. Also forward ported ConfigurationTest.testVersion() fixes.
789f2b2 is described below

commit 789f2b2fcc327bcce00cad018411a01a2fe1588f
Author: ddekany <dd...@apache.org>
AuthorDate: Sun Feb 16 20:48:42 2020 +0100

    Forward ported from 2.3-gae, kind of: Disallowed using the object returned by Configuration.getVersion() as the incompatibleImprovements setting value. In 2.3.x it was just logged as error though, so this is quite different. Also forward ported ConfigurationTest.testVersion() fixes.
---
 .../java/freemarker/core/FM2ASTToFM3SourceConverter.java   |  4 +++-
 .../org/apache/freemarker/converter/FM2ToFM3Converter.java |  4 +++-
 .../org/freemarker/converter/FM2ToFM3ConverterTest.java    |  2 +-
 .../java/org/apache/freemarker/core/ConfigurationTest.java | 14 ++++++++++++--
 .../apache/freemarker/core/ObjectBuilderSettingsTest.java  |  2 +-
 .../src/main/java/org/apache/freemarker/core/_CoreAPI.java |  7 +++++++
 6 files changed, 27 insertions(+), 6 deletions(-)

diff --git a/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java b/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java
index 1cb67b9..5d81280 100644
--- a/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java
+++ b/freemarker-converter/src/main/java/freemarker/core/FM2ASTToFM3SourceConverter.java
@@ -36,6 +36,7 @@ import org.apache.freemarker.converter.ConversionMarkers;
 import org.apache.freemarker.converter.ConverterException;
 import org.apache.freemarker.converter.UnconvertableLegacyFeatureException;
 import org.apache.freemarker.converter._ConverterUtils;
+import org.apache.freemarker.core.Version;
 import org.apache.freemarker.core.util.TemplateLanguageUtils;
 import org.apache.freemarker.core.util._ClassUtils;
 import org.apache.freemarker.core.util._NullArgumentException;
@@ -95,7 +96,8 @@ public class FM2ASTToFM3SourceConverter {
     private final char tagBeginChar;
     private final char tagEndChar;
     private final Set<String> fm3BuiltInNames = new org.apache.freemarker.core.Configuration
-            .Builder(org.apache.freemarker.core.Configuration.getVersion() /* highest possible by design */)
+            // Uses highest possible by design:
+            .Builder(new Version(org.apache.freemarker.core.Configuration.getVersion().toString()))
             .build().getSupportedBuiltInNames();
 
     private boolean printNextCustomDirAsFtlDir;
diff --git a/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java b/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java
index 55289f6..cec62ba 100644
--- a/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java
+++ b/freemarker-converter/src/main/java/org/apache/freemarker/converter/FM2ToFM3Converter.java
@@ -25,6 +25,7 @@ import java.util.Properties;
 import java.util.regex.Pattern;
 
 import org.apache.freemarker.converter.ConversionMarkers.Type;
+import org.apache.freemarker.core.Version;
 import org.apache.freemarker.core.util._NullArgumentException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -193,7 +194,8 @@ public class FM2ToFM3Converter extends Converter {
         if (validateOutput) {
             try {
                 org.apache.freemarker.core.Configuration fm3Config = new org.apache.freemarker.core.Configuration
-                        .Builder(org.apache.freemarker.core.Configuration.getVersion() /* highest possible by design */)
+                        // Uses highest possible version by design:
+                        .Builder(new Version(org.apache.freemarker.core.Configuration.getVersion().toString()))
                         .outputFormat(converOutputFormat(result.getFM2Template().getOutputFormat()))
                         .build();
                 new org.apache.freemarker.core.Template(null, result.getFM3Content(), fm3Config);
diff --git a/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java b/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java
index 751252a..2cee712 100644
--- a/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java
+++ b/freemarker-converter/src/test/java/org/freemarker/converter/FM2ToFM3ConverterTest.java
@@ -582,7 +582,7 @@ public class FM2ToFM3ConverterTest extends ConverterTest {
     public void testBuiltInNameConversion()
             throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, IOException,
             ConverterException {
-        Configuration cfg = new Configuration(Configuration.getVersion());
+        Configuration cfg = new Configuration(new freemarker.template.Version(Configuration.getVersion().toString()));
 
         StringBuilder sb = new StringBuilder();
         sb.append("<#outputformat 'HTML'><#list xs as x>");
diff --git a/freemarker-core-test/src/test/java/org/apache/freemarker/core/ConfigurationTest.java b/freemarker-core-test/src/test/java/org/apache/freemarker/core/ConfigurationTest.java
index feca828..8c1791d 100644
--- a/freemarker-core-test/src/test/java/org/apache/freemarker/core/ConfigurationTest.java
+++ b/freemarker-core-test/src/test/java/org/apache/freemarker/core/ConfigurationTest.java
@@ -226,16 +226,26 @@ public class ConfigurationTest {
         assertTrue(v.intValue() >= _CoreAPI.VERSION_INT_3_0_0);
         
         try {
-            new Builder(new Version(999, 1, 2));
+            new Builder(new Version(999, 1, 2)).build();
+            fail();
         } catch (IllegalArgumentException e) {
             assertThat(e.getMessage(), containsString("upgrade"));
         }
         
         try {
-            new Builder(new Version(2, 3, 0));
+            new Builder(new Version(2, 3, 0)).build();
+            fail();
         } catch (IllegalArgumentException e) {
             assertThat(e.getMessage(), containsString("3.0.0"));
         }
+
+        try {
+            new Builder(Configuration.getVersion()).build();
+            fail();
+        } catch (IllegalArgumentException e) {
+            assertThat(e.getMessage(), containsString("getVersion()"));
+        }
+        new Builder(new Version(Configuration.getVersion().toString()));
     }
 
     @Test
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 a168563..8aa56b8 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
@@ -356,7 +356,7 @@ public class ObjectBuilderSettingsTest {
 
     @Test
     public void configurationPropertiesTest() throws Exception {
-        final Configuration.Builder cfgB = new Configuration.Builder(Configuration.getVersion());
+        final Configuration.Builder cfgB = new Configuration.Builder(new Version(Configuration.getVersion().toString()));
         
         {
             Properties props = new Properties();
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/_CoreAPI.java b/freemarker-core/src/main/java/org/apache/freemarker/core/_CoreAPI.java
index 9110a5d..14de157 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/_CoreAPI.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/_CoreAPI.java
@@ -70,6 +70,13 @@ public final class _CoreAPI {
             throw new IllegalArgumentException("\"incompatibleImprovements\" must be at least 3.0.0, but was "
                     + incompatibleImprovements);
         }
+        if (incompatibleImprovements == Configuration.getVersion()) {
+            throw new IllegalArgumentException("The incompatibleImprovements setting can't be set to the object " +
+                    "returned by Configuration.getVersion(). That would defeat the purpose of " +
+                    "incompatibleImprovements, and make upgrading FreeMarker a potentially breaking change. Instead, " +
+                    "set incompatibleImprovements to the highest concrete version that's known to be compatible with " +
+                    "your application.");
+        }
     }
 
 }