Configuration is now immutable. Instead, you should use Configuration.Builder 
to set up the setting values, then create the Configuration with the builder's 
build() method. FreemarkerServlet (including some of its public and protected 
API-s) and the test suite was reworked accordingly. There are still many rough 
edges, such as the setSetting(Strin,String) API should appear in 
MutableParsingAndProcessingConfiguration too, it's not settled how we will 
handle Map/List setting values (when are they copied to avoid aliasing effects, 
when they are remain mutable), etc.

Some cleanup of random small things I have ran into during the above 
refactoring.


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

Branch: refs/heads/3
Commit: 7d61a45d9ff129138c0eccc5a30112d7b419f22a
Parents: 7c85a56
Author: ddekany <[email protected]>
Authored: Fri May 5 22:51:25 2017 +0200
Committer: ddekany <[email protected]>
Committed: Fri May 5 23:00:07 2017 +0200

----------------------------------------------------------------------
 README.md                                       |    1 -
 .../apache/freemarker/core/ASTDirSetting.java   |   14 +-
 .../apache/freemarker/core/ASTExpBuiltIn.java   |   10 +-
 .../freemarker/core/ASTExpBuiltInVariable.java  |   10 +-
 .../freemarker/core/ASTExpHashLiteral.java      |    5 +-
 .../apache/freemarker/core/Configuration.java   | 3924 +++++++++---------
 .../freemarker/core/ConfigurationException.java |    2 +-
 .../ConfigurationSettingValueException.java     |   61 +-
 .../org/apache/freemarker/core/Environment.java |   69 +-
 ...utableParsingAndProcessingConfiguration.java |  225 +-
 .../core/MutableProcessingConfiguration.java    |  677 +--
 .../NonStringOrTemplateOutputException.java     |    2 +-
 .../freemarker/core/ParsingConfiguration.java   |  175 +-
 .../core/ProcessingConfiguration.java           |    9 +-
 .../org/apache/freemarker/core/Template.java    |   34 +-
 .../freemarker/core/TemplateConfiguration.java  |   77 +-
 .../freemarker/core/TopLevelConfiguration.java  |  194 +
 .../UnknownConfigurationSettingException.java   |    3 +-
 .../core/_ErrorDescriptionBuilder.java          |    2 +-
 .../core/arithmetic/ArithmeticEngine.java       |    2 +-
 .../core/debug/RmiDebuggedEnvironmentImpl.java  |    4 +-
 .../freemarker/core/model/ObjectWrapper.java    |   10 +-
 .../freemarker/core/model/TemplateModel.java    |    2 +-
 .../core/model/impl/DefaultObjectWrapper.java   |   31 +-
 .../core/outputformat/MarkupOutputFormat.java   |    6 +-
 .../core/outputformat/OutputFormat.java         |    4 +-
 .../impl/UndefinedOutputFormat.java             |    5 +-
 .../core/templateresolver/CacheStorage.java     |    4 +-
 .../core/templateresolver/TemplateLoader.java   |    3 +-
 .../templateresolver/TemplateLoadingResult.java |    3 +-
 .../TemplateLookupStrategy.java                 |    2 +-
 .../templateresolver/TemplateNameFormat.java    |    6 +-
 .../core/templateresolver/TemplateResolver.java |   12 +-
 .../impl/DefaultTemplateNameFormat.java         |    7 +-
 .../impl/DefaultTemplateNameFormatFM2.java      |    5 +-
 .../impl/DefaultTemplateResolver.java           |   75 +-
 .../templateresolver/impl/MruCacheStorage.java  |    4 +-
 .../templateresolver/impl/NullCacheStorage.java |    3 +-
 .../templateresolver/impl/SoftCacheStorage.java |    3 +-
 .../impl/StrongCacheStorage.java                |    3 +-
 .../impl/URLTemplateLoader.java                 |    2 +-
 .../freemarker/core/util/CommonBuilder.java     |    8 +-
 .../freemarker/core/util/_StringUtil.java       |   12 +-
 .../core/valueformat/TemplateValueFormat.java   |   11 +-
 .../apache/freemarker/dom/NodeListModel.java    |    5 +-
 .../org/apache/freemarker/dom/NodeModel.java    |   10 +-
 .../freemarker/servlet/FreemarkerServlet.java   |  291 +-
 .../FreemarkerServletConfigurationBuilder.java  |   79 +
 .../freemarker/servlet/InitParamParser.java     |    5 +-
 .../servlet/WebAppTemplateLoader.java           |    2 +-
 src/manual/en_US/FM3-CHANGE-LOG.txt             |   13 +-
 .../org/apache/freemarker/core/ASTPrinter.java  |    6 +-
 .../core/ActualNamingConvetionTest.java         |   21 +-
 .../freemarker/core/ActualTagSyntaxTest.java    |   36 +-
 .../freemarker/core/BreakPlacementTest.java     |    8 +-
 .../apache/freemarker/core/CamelCaseTest.java   |  110 +-
 .../freemarker/core/CanonicalFormTest.java      |   11 +-
 .../freemarker/core/CoercionToTextualTest.java  |   34 +-
 .../freemarker/core/ConfigurableTest.java       |    4 +-
 .../freemarker/core/ConfigurationTest.java      | 1008 +++--
 .../freemarker/core/CustomAttributeTest.java    |    6 +-
 .../apache/freemarker/core/DateFormatTest.java  |  204 +-
 .../freemarker/core/DirectiveCallPlaceTest.java |    7 +-
 .../freemarker/core/EncodingOverrideTest.java   |    9 +-
 .../EnvironmentGetTemplateVariantsTest.java     |    9 +-
 .../apache/freemarker/core/ExceptionTest.java   |   24 +-
 .../apache/freemarker/core/GetSourceTest.java   |   14 +-
 .../freemarker/core/HeaderParsingTest.java      |   10 +-
 .../IncludeAndImportConfigurableLayersTest.java |  187 +-
 .../freemarker/core/IncludeAndImportTest.java   |   86 +-
 .../freemarker/core/IncudeFromNamelessTest.java |   15 +-
 .../core/InterpretAndEvalTemplateNameTest.java  |    5 +-
 .../core/InterpretSettingInheritanceTest.java   |   43 +-
 .../core/JavaCCExceptionAsEOFFixTest.java       |    9 +-
 .../freemarker/core/MiscErrorMessagesTest.java  |    5 +-
 .../core/MistakenlyPublicImportAPIsTest.java    |    5 +-
 .../core/MistakenlyPublicMacroAPIsTest.java     |    3 +-
 .../core/NewBiObjectWrapperRestrictionTest.java |    9 +-
 .../core/ObjectBuilderSettingsTest.java         |   62 +-
 .../core/OptInTemplateClassResolverTest.java    |  182 +-
 .../freemarker/core/OutputFormatTest.java       |  280 +-
 .../core/ParsingErrorMessagesTest.java          |   12 +-
 .../apache/freemarker/core/SQLTimeZoneTest.java |  111 +-
 .../freemarker/core/SpecialVariableTest.java    |   38 +-
 .../core/StringLiteralInterpolationTest.java    |   10 +-
 .../org/apache/freemarker/core/TabSizeTest.java |   15 +-
 .../core/TagSyntaxVariationsTest.java           |  127 +-
 .../core/TemplateConfigurationTest.java         |   87 +-
 ...gurationWithDefaultTemplateResolverTest.java |  153 +-
 .../core/TemplateConstructorsTest.java          |    4 +-
 .../core/TemplateGetEncodingTest.java           |   12 +-
 .../core/TemplateLookupStrategyTest.java        |  145 +-
 .../core/TemplateNameSpecialVariablesTest.java  |  115 +-
 .../core/TemplateNotFoundMessageTest.java       |   84 +-
 .../core/TheadInterruptingSupportTest.java      |    3 +-
 .../freemarker/core/UnclosedCommentTest.java    |    1 -
 .../core/WhitespaceStrippingTest.java           |   12 +-
 .../model/impl/DefaultObjectWrapperTest.java    |   13 +-
 .../DefaultTemplateResolverTest.java            |  112 +-
 .../FileTemplateLoaderTest.java                 |    7 +-
 .../TemplateConfigurationFactoryTest.java       |    5 +-
 .../TemplateNameFormatTest.java                 |   13 +-
 .../core/valueformat/NumberFormatTest.java      |  154 +-
 .../impl/ExtendedDecimalFormatTest.java         |   15 +-
 .../manualtest/AutoEscapingExample.java         |   11 +-
 .../ConfigureOutputFormatExamples.java          |  129 +-
 .../manualtest/CustomFormatsExample.java        |   57 +-
 .../freemarker/manualtest/ExamplesTest.java     |   59 -
 .../manualtest/GettingStartedExample.java       |   16 +-
 .../TemplateConfigurationExamples.java          |  225 +-
 .../servlet/FreemarkerServletTest.java          |   60 +-
 .../freemarker/servlet/InitParamParserTest.java |    9 +-
 .../servlet/jsp/RealServletContainertTest.java  |   63 +-
 .../apache/freemarker/test/TemplateTest.java    |   82 +-
 .../test/TestConfigurationBuilder.java          |   92 +
 .../freemarker/test/servlet/WebAppTestCase.java |    1 +
 .../test/templatesuite/TemplateTestCase.java    |   27 +-
 .../test/templatesuite/TemplateTestSuite.java   |    2 +-
 .../test/util/EntirelyCustomObjectWrapper.java  |   91 +
 .../test/util/FullyCustomObjectWrapper.java     |   91 -
 120 files changed, 5787 insertions(+), 5014 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d61a45d/README.md
----------------------------------------------------------------------
diff --git a/README.md b/README.md
index a571483..6393f28 100644
--- a/README.md
+++ b/README.md
@@ -187,7 +187,6 @@ apply it to your development environment:
         dom4j-*.jar, which casues compilation errors if it wins over
         jaxen-*.jar).
    - Press "Finish"
-- Eclipse will indicate many errors at this point; it's expected, read on.
 - Project -> Properties -> Java Compiler -> Errors/Warnings:
   Check in "Enable project specific settings", then set "Forbidden reference
   (access rules)" from "Error" to "Warning".

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d61a45d/src/main/java/org/apache/freemarker/core/ASTDirSetting.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTDirSetting.java 
b/src/main/java/org/apache/freemarker/core/ASTDirSetting.java
index 396d269..68a0672 100644
--- a/src/main/java/org/apache/freemarker/core/ASTDirSetting.java
+++ b/src/main/java/org/apache/freemarker/core/ASTDirSetting.java
@@ -63,8 +63,8 @@ final class ASTDirSetting extends ASTDirective {
         String key = keyTk.image;
         if (Arrays.binarySearch(SETTING_NAMES, key) < 0) {
             StringBuilder sb = new StringBuilder();
-            if (cfg.getSettingNames(true).contains(key)
-                    || cfg.getSettingNames(false).contains(key)) {
+            if 
(Configuration.ExtendableBuilder.getSettingNames(true).contains(key)
+                    || 
Configuration.ExtendableBuilder.getSettingNames(false).contains(key)) {
                 sb.append("The setting name is recognized, but changing this 
setting from inside a template isn't "
                         + "supported.");                
             } else {
@@ -75,16 +75,16 @@ final class ASTDirSetting extends ASTDirective {
                 int shownNamingConvention;
                 {
                     int namingConvention = tokenManager.namingConvention;
-                    shownNamingConvention = namingConvention != 
Configuration.AUTO_DETECT_NAMING_CONVENTION
-                            ? namingConvention : 
Configuration.LEGACY_NAMING_CONVENTION /* [2.4] CAMEL_CASE */; 
+                    shownNamingConvention = namingConvention != 
ParsingConfiguration.AUTO_DETECT_NAMING_CONVENTION
+                            ? namingConvention : 
ParsingConfiguration.LEGACY_NAMING_CONVENTION /* [2.4] CAMEL_CASE */;
                 }
                 
                 boolean first = true;
                 for (String correctName : SETTING_NAMES) {
                     int correctNameNamingConvention = 
_StringUtil.getIdentifierNamingConvention(correctName);
-                    if (shownNamingConvention == 
Configuration.CAMEL_CASE_NAMING_CONVENTION
-                            ? correctNameNamingConvention != 
Configuration.LEGACY_NAMING_CONVENTION
-                            : correctNameNamingConvention != 
Configuration.CAMEL_CASE_NAMING_CONVENTION) {
+                    if (shownNamingConvention == 
ParsingConfiguration.CAMEL_CASE_NAMING_CONVENTION
+                            ? correctNameNamingConvention != 
ParsingConfiguration.LEGACY_NAMING_CONVENTION
+                            : correctNameNamingConvention != 
ParsingConfiguration.CAMEL_CASE_NAMING_CONVENTION) {
                         if (first) {
                             first = false;
                         } else {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d61a45d/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java 
b/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java
index 5774812..be559f6 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpBuiltIn.java
@@ -331,16 +331,16 @@ abstract class ASTExpBuiltIn extends ASTExpression 
implements Cloneable {
             int shownNamingConvention;
             {
                 int namingConvention = tokenManager.namingConvention;
-                shownNamingConvention = namingConvention != 
Configuration.AUTO_DETECT_NAMING_CONVENTION
-                        ? namingConvention : 
Configuration.LEGACY_NAMING_CONVENTION /* [2.4] CAMEL_CASE */; 
+                shownNamingConvention = namingConvention != 
ParsingConfiguration.AUTO_DETECT_NAMING_CONVENTION
+                        ? namingConvention : 
ParsingConfiguration.LEGACY_NAMING_CONVENTION /* [2.4] CAMEL_CASE */;
             }
             
             boolean first = true;
             for (String correctName : names) {
                 int correctNameNamingConvetion = 
_StringUtil.getIdentifierNamingConvention(correctName);
-                if (shownNamingConvention == 
Configuration.CAMEL_CASE_NAMING_CONVENTION
-                        ? correctNameNamingConvetion != 
Configuration.LEGACY_NAMING_CONVENTION
-                        : correctNameNamingConvetion != 
Configuration.CAMEL_CASE_NAMING_CONVENTION) {
+                if (shownNamingConvention == 
ParsingConfiguration.CAMEL_CASE_NAMING_CONVENTION
+                        ? correctNameNamingConvetion != 
ParsingConfiguration.LEGACY_NAMING_CONVENTION
+                        : correctNameNamingConvetion != 
ParsingConfiguration.CAMEL_CASE_NAMING_CONVENTION) {
                     if (first) {
                         first = false;
                     } else {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d61a45d/src/main/java/org/apache/freemarker/core/ASTExpBuiltInVariable.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/ASTExpBuiltInVariable.java 
b/src/main/java/org/apache/freemarker/core/ASTExpBuiltInVariable.java
index ca34a7d..ece2099 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpBuiltInVariable.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpBuiltInVariable.java
@@ -123,8 +123,8 @@ final class ASTExpBuiltInVariable extends ASTExpression {
             int shownNamingConvention;
             {
                 int namingConvention = tokenManager.namingConvention;
-                shownNamingConvention = namingConvention != 
Configuration.AUTO_DETECT_NAMING_CONVENTION
-                        ? namingConvention : 
Configuration.LEGACY_NAMING_CONVENTION /* [2.4] CAMEL_CASE */; 
+                shownNamingConvention = namingConvention != 
ParsingConfiguration.AUTO_DETECT_NAMING_CONVENTION
+                        ? namingConvention : 
ParsingConfiguration.LEGACY_NAMING_CONVENTION /* [2.4] CAMEL_CASE */;
             }
             
             {
@@ -146,9 +146,9 @@ final class ASTExpBuiltInVariable extends ASTExpression {
             boolean first = true;
             for (final String correctName : SPEC_VAR_NAMES) {
                 int correctNameNamingConvention = 
_StringUtil.getIdentifierNamingConvention(correctName);
-                if (shownNamingConvention == 
Configuration.CAMEL_CASE_NAMING_CONVENTION
-                        ? correctNameNamingConvention != 
Configuration.LEGACY_NAMING_CONVENTION
-                        : correctNameNamingConvention != 
Configuration.CAMEL_CASE_NAMING_CONVENTION) {
+                if (shownNamingConvention == 
ParsingConfiguration.CAMEL_CASE_NAMING_CONVENTION
+                        ? correctNameNamingConvention != 
ParsingConfiguration.LEGACY_NAMING_CONVENTION
+                        : correctNameNamingConvention != 
ParsingConfiguration.CAMEL_CASE_NAMING_CONVENTION) {
                     if (first) {
                         first = false;
                     } else {

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7d61a45d/src/main/java/org/apache/freemarker/core/ASTExpHashLiteral.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ASTExpHashLiteral.java 
b/src/main/java/org/apache/freemarker/core/ASTExpHashLiteral.java
index 57a5a6e..792787a 100644
--- a/src/main/java/org/apache/freemarker/core/ASTExpHashLiteral.java
+++ b/src/main/java/org/apache/freemarker/core/ASTExpHashLiteral.java
@@ -19,7 +19,6 @@
 
 package org.apache.freemarker.core;
 
-import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
@@ -107,7 +106,7 @@ final class ASTExpHashLiteral extends ASTExpression {
        return new ASTExpHashLiteral(clonedKeys, clonedValues);
     }
 
-    private class SequenceHash implements TemplateHashModelEx2, Serializable {
+    private class SequenceHash implements TemplateHashModelEx2 {
 
         private HashMap<String, TemplateModel> map;
         private TemplateCollectionModel keyCollection, valueCollection; // 
ordered lists of keys and values
@@ -147,7 +146,7 @@ final class ASTExpHashLiteral extends ASTExpression {
 
         @Override
         public TemplateModel get(String key) {
-            return (TemplateModel) map.get(key);
+            return map.get(key);
         }
 
         @Override

Reply via email to