Continued subpackage content rearrangement...

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

Branch: refs/heads/3
Commit: b0e08ccb8c4776041cbed79a0d2764274f3a941e
Parents: 94d3931
Author: ddekany <[email protected]>
Authored: Thu Feb 16 23:56:05 2017 +0100
Committer: ddekany <[email protected]>
Committed: Fri Feb 17 02:51:51 2017 +0100

----------------------------------------------------------------------
 .../apache/freemarker/core/Configuration.java   |   36 +-
 .../org/apache/freemarker/core/Template.java    |    2 +-
 .../core/ast/BuiltInsForSequences.java          |    2 +-
 .../freemarker/core/ast/Configurable.java       |    8 +-
 .../apache/freemarker/core/ast/Environment.java |   25 +-
 .../freemarker/core/ast/RegexpHelper.java       |    2 +-
 .../core/ast/TemplateConfiguration.java         |    2 +-
 .../apache/freemarker/core/ast/TextBlock.java   |    4 +-
 .../org/apache/freemarker/core/ast/package.html |    6 +-
 .../debug/impl/RmiDebuggedEnvironmentImpl.java  |    2 +-
 .../core/model/MapKeyValuePairIterator.java     |   69 --
 .../core/model/TemplateModelListSequence.java   |   52 -
 .../core/model/impl/DefaultMapAdapter.java      |    1 -
 .../model/impl/MapKeyValuePairIterator.java     |   73 ++
 .../freemarker/core/model/impl/SimpleHash.java  |    1 -
 .../model/impl/TemplateModelListSequence.java   |   56 +
 .../core/model/impl/beans/SimpleMapModel.java   |    2 +-
 .../core/model/impl/beans/package.html          |    5 +-
 .../apache/freemarker/core/model/package.html   |   25 +
 .../ByteArrayTemplateLoader.java                |  194 ----
 .../core/templateresolver/CacheStorage.java     |    2 +
 .../templateresolver/ClassTemplateLoader.java   |  182 ---
 .../DefaultTemplateResolver.java                | 1028 -----------------
 .../templateresolver/FileTemplateLoader.java    |  380 -------
 .../MalformedTemplateNameException.java         |    7 +-
 .../core/templateresolver/MruCacheStorage.java  |  322 ------
 .../templateresolver/MultiTemplateLoader.java   |  167 ---
 .../core/templateresolver/NullCacheStorage.java |   66 --
 .../core/templateresolver/SoftCacheStorage.java |  141 ---
 .../templateresolver/StringTemplateLoader.java  |  194 ----
 .../templateresolver/StrongCacheStorage.java    |   67 --
 .../core/templateresolver/TemplateLoader.java   |    3 +-
 .../templateresolver/TemplateLoaderSession.java |    2 +
 .../templateresolver/TemplateLoadingResult.java |    1 +
 .../templateresolver/TemplateLoadingSource.java |    3 +
 .../templateresolver/TemplateLookupContext.java |   28 +-
 .../templateresolver/TemplateLookupResult.java  |   95 +-
 .../TemplateLookupStrategy.java                 |   39 +-
 .../templateresolver/TemplateNameFormat.java    |  378 +------
 .../core/templateresolver/TemplateResolver.java |    9 +-
 .../templateresolver/URLTemplateLoader.java     |  224 ----
 .../URLTemplateLoadingSource.java               |   57 -
 .../templateresolver/_TemplateLoaderUtils.java  |   42 -
 .../impl/ByteArrayTemplateLoader.java           |  199 ++++
 .../impl/ClassTemplateLoader.java               |  184 ++++
 .../impl/DefaultTemplateLookupStrategy.java     |   61 +
 .../impl/DefaultTemplateNameFormat.java         |  310 ++++++
 .../impl/DefaultTemplateNameFormatFM2.java      |  106 ++
 .../impl/DefaultTemplateResolver.java           | 1042 ++++++++++++++++++
 .../impl/FileTemplateLoader.java                |  384 +++++++
 .../templateresolver/impl/MruCacheStorage.java  |  325 ++++++
 .../impl/MultiTemplateLoader.java               |  172 +++
 .../templateresolver/impl/NullCacheStorage.java |   70 ++
 .../templateresolver/impl/SoftCacheStorage.java |  144 +++
 .../impl/StringTemplateLoader.java              |  199 ++++
 .../impl/StrongCacheStorage.java                |   71 ++
 ...emplateLoaderBasedTemplateLookupContext.java |   66 ++
 ...TemplateLoaderBasedTemplateLookupResult.java |  124 +++
 .../impl/URLTemplateLoader.java                 |  229 ++++
 .../impl/URLTemplateLoadingSource.java          |   58 +
 .../impl/_TemplateLoaderUtils.java              |   43 +
 .../core/templateresolver/package.html          |    9 +-
 .../freemarker/servlet/FreemarkerServlet.java   |    6 +-
 .../freemarker/servlet/InitParamParser.java     |    6 +-
 .../servlet/WebAppTemplateLoader.java           |    4 +-
 src/manual/en_US/book.xml                       |    4 +-
 src/manual/zh_CN/book.xml                       |    4 +-
 .../freemarker/core/ConfigurationTest.java      |   52 +-
 .../apache/freemarker/core/ExceptionTest.java   |    2 +-
 .../freemarker/core/IncudeFromNamelessTest.java |    2 +-
 .../core/MistakenlyPublicImportAPIsTest.java    |    2 +-
 .../core/TemplateLanguageVersionTest.java       |    2 +-
 .../core/TemplateLookupStrategyTest.java        |    9 +-
 .../core/TemplateNotFoundMessageTest.java       |    8 +-
 .../freemarker/core/ast/CanonicalFormTest.java  |    2 +-
 .../ast/EnvironmentGetTemplateVariantsTest.java |    2 +-
 .../ast/InterpretAndEvalTemplateNameTest.java   |    2 +-
 .../core/ast/MiscErrorMessagesTest.java         |    4 +-
 .../core/ast/ObjectBuilderSettingsTest.java     |    2 +-
 .../core/ast/TemplatGetEncodingTest.java        |    4 +-
 .../core/ast/TemplateConfigurationTest.java     |    2 +-
 ...teConfigurationWithTemplateResolverTest.java |    4 +-
 .../core/ast/TemplateLevelSettings.java         |    4 +-
 .../ast/TemplateNameSpecialVariablesTest.java   |    2 +-
 .../DefaultTemplateResolverTest.java            |    6 +-
 .../FileTemplateLoaderTest.java                 |    2 +-
 .../MultiTemplateLoaderTest.java                |    6 +-
 .../TemplateNameFormatTest.java                 |   33 +-
 .../freemarker/manualtest/ExamplesTest.java     |    6 +-
 .../servlet/FreemarkerServletTest.java          |    2 +-
 .../freemarker/servlet/InitParamParserTest.java |    4 +-
 .../servlet/jsp/RealServletContainertTest.java  |    2 +-
 .../apache/freemarker/test/TemplateTest.java    |    4 +-
 .../test/templatesuite/TemplateTestCase.java    |    2 +-
 .../test/templatesuite/models/Listables.java    |    2 +-
 95 files changed, 4137 insertions(+), 3861 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/Configuration.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/Configuration.java 
b/src/main/java/org/apache/freemarker/core/Configuration.java
index 7612820..ece7b3f 100644
--- a/src/main/java/org/apache/freemarker/core/Configuration.java
+++ b/src/main/java/org/apache/freemarker/core/Configuration.java
@@ -87,20 +87,23 @@ import 
org.apache.freemarker.core.model.impl._StaticObjectWrappers;
 import org.apache.freemarker.core.model.impl.beans.BeansWrapper;
 import org.apache.freemarker.core.model.impl.beans.BeansWrapperBuilder;
 import org.apache.freemarker.core.templateresolver.CacheStorage;
-import org.apache.freemarker.core.templateresolver.ClassTemplateLoader;
-import org.apache.freemarker.core.templateresolver.DefaultTemplateResolver;
-import org.apache.freemarker.core.templateresolver.FileTemplateLoader;
 import org.apache.freemarker.core.templateresolver.GetTemplateResult;
 import 
org.apache.freemarker.core.templateresolver.MalformedTemplateNameException;
-import org.apache.freemarker.core.templateresolver.MruCacheStorage;
-import org.apache.freemarker.core.templateresolver.MultiTemplateLoader;
-import org.apache.freemarker.core.templateresolver.SoftCacheStorage;
 import 
org.apache.freemarker.core.templateresolver.TemplateConfigurationFactory;
 import org.apache.freemarker.core.templateresolver.TemplateLoader;
 import org.apache.freemarker.core.templateresolver.TemplateLookupContext;
 import org.apache.freemarker.core.templateresolver.TemplateLookupStrategy;
 import org.apache.freemarker.core.templateresolver.TemplateNameFormat;
-import org.apache.freemarker.core.templateresolver.URLTemplateLoader;
+import org.apache.freemarker.core.templateresolver.impl.ClassTemplateLoader;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateLookupStrategy;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateNameFormat;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateNameFormatFM2;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateResolver;
+import org.apache.freemarker.core.templateresolver.impl.FileTemplateLoader;
+import org.apache.freemarker.core.templateresolver.impl.MruCacheStorage;
+import org.apache.freemarker.core.templateresolver.impl.MultiTemplateLoader;
+import org.apache.freemarker.core.templateresolver.impl.SoftCacheStorage;
+import org.apache.freemarker.core.templateresolver.impl.URLTemplateLoader;
 import org.apache.freemarker.core.util.CaptureOutput;
 import org.apache.freemarker.core.util.ClassUtil;
 import org.apache.freemarker.core.util.Constants;
@@ -889,7 +892,7 @@ public class Configuration extends Configurable implements 
Cloneable, ParserConf
     }
     
     static TemplateLookupStrategy getDefaultTemplateLookupStrategy(Version 
incompatibleImprovements) {
-        return TemplateLookupStrategy.DEFAULT_2_3_0;
+        return DefaultTemplateLookupStrategy.INSTANCE;
     }
     
     private TemplateNameFormat getDefaultTemplateNameFormat() {
@@ -897,7 +900,7 @@ public class Configuration extends Configurable implements 
Cloneable, ParserConf
     }
     
     static TemplateNameFormat getDefaultTemplateNameFormat(Version 
incompatibleImprovements) {
-        return TemplateNameFormat.DEFAULT_2_3_0;
+        return DefaultTemplateNameFormatFM2.INSTANCE;
     }
     
     private CacheStorage getDefaultCacheStorage() {
@@ -1181,7 +1184,8 @@ public class Configuration extends Configurable 
implements Cloneable, ParserConf
     
     /**
      * Sets a {@link TemplateLookupStrategy} that is used to look up templates 
based on the requested name; as a side
-     * effect the template templateResolver will be emptied. The default value 
is {@link TemplateLookupStrategy#DEFAULT_2_3_0}.
+     * effect the template templateResolver will be emptied. The default value 
is
+     * {@link DefaultTemplateLookupStrategy#INSTANCE}.
      * 
      * @since 2.3.22
      */
@@ -1229,8 +1233,8 @@ public class Configuration extends Configurable 
implements Cloneable, ParserConf
     }
     
     /**
-     * Sets the template name format used. The default is {@link 
TemplateNameFormat#DEFAULT_2_3_0}, while the
-     * recommended value for new projects is {@link 
TemplateNameFormat#DEFAULT_2_4_0}.
+     * Sets the template name format used. The default is {@link 
DefaultTemplateNameFormatFM2#INSTANCE}, while the
+     * recommended value for new projects is {@link 
DefaultTemplateNameFormat#INSTANCE}.
      * 
      * @since 2.3.22
      */
@@ -1318,7 +1322,7 @@ public class Configuration extends Configurable 
implements Cloneable, ParserConf
      * The default is a {@link SoftCacheStorage}. If the total size of the 
{@link Template}
      * objects is significant but most templates are used rarely, using a
      * {@link MruCacheStorage} instead might be advisable. If you don't want 
caching at
-     * all, use {@link 
org.apache.freemarker.core.templateresolver.NullCacheStorage} (you can't use 
{@code null}).
+     * all, use {@link 
org.apache.freemarker.core.templateresolver.impl.NullCacheStorage} (you can't 
use {@code null}).
      * 
      * <p>Note that setting the templateResolver storage will re-create the 
template templateResolver, so
      * all its content will be lost.
@@ -2447,7 +2451,7 @@ public class Configuration extends Configurable 
implements Cloneable, ParserConf
     }
     
     private boolean isKnownNonConfusingLookupStrategy(TemplateLookupStrategy 
templateLookupStrategy) {
-        return templateLookupStrategy == TemplateLookupStrategy.DEFAULT_2_3_0;
+        return templateLookupStrategy == 
DefaultTemplateLookupStrategy.INSTANCE;
     }
 
     private String removeInitialSlash(String name) {
@@ -2935,9 +2939,9 @@ public class Configuration extends Configurable 
implements Cloneable, ParserConf
                 if (value.equalsIgnoreCase(DEFAULT)) {
                     unsetTemplateNameFormat();
                 } else if (value.equalsIgnoreCase("default_2_3_0")) {
-                    setTemplateNameFormat(TemplateNameFormat.DEFAULT_2_3_0);
+                    
setTemplateNameFormat(DefaultTemplateNameFormatFM2.INSTANCE);
                 } else if (value.equalsIgnoreCase("default_2_4_0")) {
-                    setTemplateNameFormat(TemplateNameFormat.DEFAULT_2_4_0);
+                    setTemplateNameFormat(DefaultTemplateNameFormat.INSTANCE);
                 } else {
                     throw invalidSettingValueException(name, value);
                 }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/Template.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/Template.java 
b/src/main/java/org/apache/freemarker/core/Template.java
index c78e66c..3ec414c 100644
--- a/src/main/java/org/apache/freemarker/core/Template.java
+++ b/src/main/java/org/apache/freemarker/core/Template.java
@@ -57,9 +57,9 @@ import org.apache.freemarker.core.model.TemplateHashModel;
 import org.apache.freemarker.core.model.TemplateModel;
 import org.apache.freemarker.core.model.TemplateNodeModel;
 import org.apache.freemarker.core.model.impl.SimpleHash;
-import org.apache.freemarker.core.templateresolver.DefaultTemplateResolver;
 import org.apache.freemarker.core.templateresolver.TemplateLoader;
 import org.apache.freemarker.core.templateresolver.TemplateLookupStrategy;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateResolver;
 import org.apache.freemarker.core.util.NullArgumentException;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/ast/BuiltInsForSequences.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/ast/BuiltInsForSequences.java 
b/src/main/java/org/apache/freemarker/core/ast/BuiltInsForSequences.java
index 52fb1dc..2d9a34e 100644
--- a/src/main/java/org/apache/freemarker/core/ast/BuiltInsForSequences.java
+++ b/src/main/java/org/apache/freemarker/core/ast/BuiltInsForSequences.java
@@ -36,12 +36,12 @@ 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.TemplateModelIterator;
-import org.apache.freemarker.core.model.TemplateModelListSequence;
 import org.apache.freemarker.core.model.TemplateNumberModel;
 import org.apache.freemarker.core.model.TemplateScalarModel;
 import org.apache.freemarker.core.model.TemplateSequenceModel;
 import org.apache.freemarker.core.model.impl.SimpleNumber;
 import org.apache.freemarker.core.model.impl.SimpleScalar;
+import org.apache.freemarker.core.model.impl.TemplateModelListSequence;
 import org.apache.freemarker.core.model.impl.beans.CollectionModel;
 import org.apache.freemarker.core.util.Constants;
 import org.apache.freemarker.core.util.StringUtil;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/ast/Configurable.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ast/Configurable.java 
b/src/main/java/org/apache/freemarker/core/ast/Configurable.java
index fda0601..1f74f5b 100644
--- a/src/main/java/org/apache/freemarker/core/ast/Configurable.java
+++ b/src/main/java/org/apache/freemarker/core/ast/Configurable.java
@@ -63,6 +63,8 @@ import org.apache.freemarker.core.templateresolver.OrMatcher;
 import org.apache.freemarker.core.templateresolver.PathGlobMatcher;
 import org.apache.freemarker.core.templateresolver.PathRegexMatcher;
 import org.apache.freemarker.core.templateresolver.TemplateLoader;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateNameFormat;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateNameFormatFM2;
 import org.apache.freemarker.core.util.NullArgumentException;
 import org.apache.freemarker.core.util.StringUtil;
 
@@ -2089,7 +2091,7 @@ public class Configurable {
      *       <br>String value: If the value contains dot, then it's 
interpreted as an <a href="#fm_obe">object builder
      *       expression</a>.
      *       If the value does not contain dot,
-     *       then a {@link 
org.apache.freemarker.core.templateresolver.MruCacheStorage} will be used with 
the
+     *       then a {@link 
org.apache.freemarker.core.templateresolver.impl.MruCacheStorage} will be used 
with the
      *       maximum strong and soft sizes specified with the setting value. 
Examples
      *       of valid setting values:
      *       
@@ -2155,8 +2157,8 @@ public class Configurable {
      *   <li><p>{@code "template_name_format"}:
      *       See: {@link 
Configuration#setTemplateNameFormat(org.apache.freemarker.core.templateresolver.TemplateNameFormat)}.
      *       <br>String value: {@code "default"} (case insensitive) for the 
default, {@code "default_2_3_0"}
-     *       for {@link 
org.apache.freemarker.core.templateresolver.TemplateNameFormat#DEFAULT_2_3_0}, 
{@code "default_2_4_0"} for
-     *       {@link 
org.apache.freemarker.core.templateresolver.TemplateNameFormat#DEFAULT_2_4_0}.
+     *       for {@link DefaultTemplateNameFormatFM2#INSTANCE}, {@code 
"default_2_4_0"} for
+     *       {@link DefaultTemplateNameFormat#INSTANCE}.
      * </ul>
      * 
      * <p><a name="fm_obe"></a>Regarding <em>object builder expressions</em> 
(used by the setting values where it was

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/ast/Environment.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ast/Environment.java 
b/src/main/java/org/apache/freemarker/core/ast/Environment.java
index cb7dcfc..8c1dbef 100644
--- a/src/main/java/org/apache/freemarker/core/ast/Environment.java
+++ b/src/main/java/org/apache/freemarker/core/ast/Environment.java
@@ -69,6 +69,8 @@ import 
org.apache.freemarker.core.templateresolver.MalformedTemplateNameExceptio
 import org.apache.freemarker.core.templateresolver.TemplateNameFormat;
 import org.apache.freemarker.core.templateresolver.TemplateResolver;
 import org.apache.freemarker.core.templateresolver._CacheAPI;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateNameFormat;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateNameFormatFM2;
 import org.apache.freemarker.core.util.DateUtil;
 import org.apache.freemarker.core.util.DateUtil.DateToISO8601CalendarFactory;
 import org.apache.freemarker.core.util.NullWriter;
@@ -2676,26 +2678,25 @@ public final class Environment extends Configurable {
     /**
      * Resolves a reference to a template (like the one used in {@code 
#include} or {@code #import}), assuming a base
      * name. This gives a full (that is, absolute), even if non-normalized 
template name, that could be used for
-     * {@link Configuration#getTemplate(String)}. This is mostly used when a 
-     * template refers to another template.
+     * {@link Configuration#getTemplate(String)}. This is mostly used when a 
template refers to another template.
      * 
      * @param baseName
      *            The name to which relative {@code targetName}-s are relative 
to. Maybe {@code null} (happens when
      *            resolving names in nameless templates), which means that the 
base is the root "directory", and so the
-     *            {@code targetName} is returned without change. Assuming 
{@link TemplateNameFormat#DEFAULT_2_3_0} or
-     *            {@link TemplateNameFormat#DEFAULT_2_4_0}, the rules are as 
follows. If you want to specify a base
+     *            {@code targetName} is returned without change. Assuming 
{@link DefaultTemplateNameFormatFM2#INSTANCE}
+     *            or {@link DefaultTemplateNameFormat#INSTANCE}, the rules are 
as follows. If you want to specify a base
      *            directory here, it must end with {@code "/"}. If it doesn't 
end with {@code "/"}, it's parent
      *            directory will be used as the base path. Might starts with a 
scheme part (like {@code "foo://"}, or
-     *            with {@link TemplateNameFormat#DEFAULT_2_4_0} even just with 
{@code "foo:"}).
+     *            with {@link DefaultTemplateNameFormat#INSTANCE} even just 
with {@code "foo:"}).
      * @param targetName
      *            The name of the template, which is either a relative or 
absolute name. Assuming
-     *            {@link TemplateNameFormat#DEFAULT_2_3_0} or {@link 
TemplateNameFormat#DEFAULT_2_4_0}, the rules are as
-     *            follows. If it starts with {@code "/"} or contains a scheme 
part separator ({@code "://"}, also, with
-     *            {@link TemplateNameFormat#DEFAULT_2_4_0} a {@code ":"} with 
no {@code "/"} anywhere before it) then
-     *            it's an absolute name, otherwise it's a relative path. 
Relative paths are interpreted relatively to
-     *            the {@code baseName}. Absolute names are simply returned as 
is, ignoring the {@code baseName}, except,
-     *            when the {@code baseName} has scheme part while the {@code 
targetName} doesn't have, then the schema
-     *            of the {@code baseName} is prepended to the {@code 
targetName}.
+     *            {@link DefaultTemplateNameFormatFM2#INSTANCE} or {@link 
DefaultTemplateNameFormat#INSTANCE}, the rules
+     *            are as follows. If it starts with {@code "/"} or contains a 
scheme part separator ({@code "://"},
+     *            also, with {@link DefaultTemplateNameFormat#INSTANCE} a 
{@code ":"} with no {@code "/"} anywhere
+     *            before it) then it's an absolute name, otherwise it's a 
relative path. Relative paths are interpreted
+     *            relatively to the {@code baseName}. Absolute names are 
simply returned as is, ignoring the
+     *            {@code baseName}, except, when the {@code baseName} has 
scheme part while the {@code targetName}
+     *            doesn't have, then the schema of the {@code baseName} is 
prepended to the {@code targetName}.
      * 
      * @since 2.3.22
      */

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/ast/RegexpHelper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ast/RegexpHelper.java 
b/src/main/java/org/apache/freemarker/core/ast/RegexpHelper.java
index 4cd6fb6..ba63583 100644
--- a/src/main/java/org/apache/freemarker/core/ast/RegexpHelper.java
+++ b/src/main/java/org/apache/freemarker/core/ast/RegexpHelper.java
@@ -24,7 +24,7 @@ import java.util.regex.PatternSyntaxException;
 
 import org.apache.freemarker.core._CoreLogs;
 import org.apache.freemarker.core.model.TemplateModelException;
-import org.apache.freemarker.core.templateresolver.MruCacheStorage;
+import org.apache.freemarker.core.templateresolver.impl.MruCacheStorage;
 import org.apache.freemarker.core.util.StringUtil;
 import org.slf4j.Logger;
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/ast/TemplateConfiguration.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/ast/TemplateConfiguration.java 
b/src/main/java/org/apache/freemarker/core/ast/TemplateConfiguration.java
index f4bb357..99a18f8 100644
--- a/src/main/java/org/apache/freemarker/core/ast/TemplateConfiguration.java
+++ b/src/main/java/org/apache/freemarker/core/ast/TemplateConfiguration.java
@@ -28,7 +28,7 @@ import org.apache.freemarker.core.Configuration;
 import org.apache.freemarker.core.Template;
 import org.apache.freemarker.core.Version;
 import org.apache.freemarker.core._TemplateAPI;
-import org.apache.freemarker.core.templateresolver.DefaultTemplateResolver;
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateResolver;
 import org.apache.freemarker.core.util.NullArgumentException;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/ast/TextBlock.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ast/TextBlock.java 
b/src/main/java/org/apache/freemarker/core/ast/TextBlock.java
index 6cfd688..e3bb8a7 100644
--- a/src/main/java/org/apache/freemarker/core/ast/TextBlock.java
+++ b/src/main/java/org/apache/freemarker/core/ast/TextBlock.java
@@ -27,7 +27,7 @@ import org.apache.freemarker.core.util.StringUtil;
 /**
  * A TemplateElement representing a block of plain text.
  * 
- * @deprected This is an internal API; don't use it.
+ * @deprecated This is an internal API; don't use it.
  */
 public final class TextBlock extends TemplateElement {
     
@@ -59,7 +59,7 @@ public final class TextBlock extends TemplateElement {
     /**
      * Simply outputs the text.
      * 
-     * @deprected This is an internal API; don't call or override it.
+     * @deprecated This is an internal API; don't call or override it.
      */
     @Override
     public TemplateElement[] accept(Environment env)

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/ast/package.html
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/ast/package.html 
b/src/main/java/org/apache/freemarker/core/ast/package.html
index 15c389f..6e29779 100644
--- a/src/main/java/org/apache/freemarker/core/ast/package.html
+++ b/src/main/java/org/apache/freemarker/core/ast/package.html
@@ -19,8 +19,8 @@
 <html>
 <head>
 </head>
-<body bgcolor="white">
-<p>The seldom used or advanced parts of the fundamental FreeMarker API, 
compared to {@link freemarker.template}.
-This package also encloses FreeMarker's core parsing/rendering 
functionality.</p> 
+<body>
+<p>[TODO] This was the {@code freemarker.core} on FM2; move most it over to 
o.a.f.core, leave the parser and AST
+here.</p> 
 </body>
 </html>

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/debug/impl/RmiDebuggedEnvironmentImpl.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/debug/impl/RmiDebuggedEnvironmentImpl.java
 
b/src/main/java/org/apache/freemarker/core/debug/impl/RmiDebuggedEnvironmentImpl.java
index 953789d..87a8a7c 100644
--- 
a/src/main/java/org/apache/freemarker/core/debug/impl/RmiDebuggedEnvironmentImpl.java
+++ 
b/src/main/java/org/apache/freemarker/core/debug/impl/RmiDebuggedEnvironmentImpl.java
@@ -45,7 +45,7 @@ import 
org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.impl.SimpleCollection;
 import org.apache.freemarker.core.model.impl.SimpleScalar;
 import org.apache.freemarker.core.templateresolver.CacheStorage;
-import org.apache.freemarker.core.templateresolver.SoftCacheStorage;
+import org.apache.freemarker.core.templateresolver.impl.SoftCacheStorage;
 import org.apache.freemarker.core.util.UndeclaredThrowableException;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/MapKeyValuePairIterator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/model/MapKeyValuePairIterator.java 
b/src/main/java/org/apache/freemarker/core/model/MapKeyValuePairIterator.java
deleted file mode 100644
index 531eae4..0000000
--- 
a/src/main/java/org/apache/freemarker/core/model/MapKeyValuePairIterator.java
+++ /dev/null
@@ -1,69 +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.model;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.freemarker.core.model.TemplateHashModelEx2.KeyValuePair;
-import 
org.apache.freemarker.core.model.TemplateHashModelEx2.KeyValuePairIterator;
-
-/**
- *  Implementation of {@link KeyValuePairIterator} for a {@link 
TemplateHashModelEx2} that wraps or otherwise uses a
- *  {@link Map} internally.
- *
- *  @since 2.3.25
- */
-public class MapKeyValuePairIterator implements KeyValuePairIterator {
-
-    private final Iterator<Entry<?, ?>> entrySetIterator;
-    
-    private final ObjectWrapper objectWrapper;
-    
-    @SuppressWarnings({ "rawtypes", "unchecked" })
-    public <K, V> MapKeyValuePairIterator(Map<?, ?> map, ObjectWrapper 
objectWrapper) {
-        entrySetIterator = ((Map) map).entrySet().iterator();
-        this.objectWrapper = objectWrapper;
-    }
-
-    public boolean hasNext() {
-        return entrySetIterator.hasNext();
-    }
-
-    public KeyValuePair next() {
-        final Entry<?, ?> entry = entrySetIterator.next();
-        return new KeyValuePair() {
-
-            public TemplateModel getKey() throws TemplateModelException {
-                return wrap(entry.getKey());
-            }
-
-            public TemplateModel getValue() throws TemplateModelException {
-                return wrap(entry.getValue());
-            }
-            
-        };
-    }
-    
-    private TemplateModel wrap(Object obj) throws TemplateModelException {
-        return (obj instanceof TemplateModel) ? (TemplateModel) obj : 
objectWrapper.wrap(obj);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/TemplateModelListSequence.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/model/TemplateModelListSequence.java 
b/src/main/java/org/apache/freemarker/core/model/TemplateModelListSequence.java
deleted file mode 100644
index 7ca482f..0000000
--- 
a/src/main/java/org/apache/freemarker/core/model/TemplateModelListSequence.java
+++ /dev/null
@@ -1,52 +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.model;
-
-import java.util.List;
-
-/**
- * A sequence that wraps a {@link List} of {@link TemplateModel}-s. It does 
not copy the original
- * list. It's mostly useful when implementing {@link TemplateMethodModelEx}-es 
that collect items from other
- * {@link TemplateModel}-s.
- */
-public class TemplateModelListSequence implements TemplateSequenceModel {
-    
-    private List/*<TemplateModel>*/ list;
-
-    public TemplateModelListSequence(List list) {
-        this.list = list;
-    }
-
-    public TemplateModel get(int index) {
-        return (TemplateModel) list.get(index);
-    }
-
-    public int size() {
-        return list.size();
-    }
-
-    /**
-     * Returns the original {@link List} of {@link TemplateModel}-s, so it's 
not a fully unwrapped value.
-     */
-    public Object getWrappedObject() {
-        return list;
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/impl/DefaultMapAdapter.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/model/impl/DefaultMapAdapter.java 
b/src/main/java/org/apache/freemarker/core/model/impl/DefaultMapAdapter.java
index 1fe5abe..61076e9 100644
--- a/src/main/java/org/apache/freemarker/core/model/impl/DefaultMapAdapter.java
+++ b/src/main/java/org/apache/freemarker/core/model/impl/DefaultMapAdapter.java
@@ -26,7 +26,6 @@ import java.util.SortedMap;
 import org.apache.freemarker.core.ast._DelayedJQuote;
 import org.apache.freemarker.core.ast._TemplateModelException;
 import org.apache.freemarker.core.model.AdapterTemplateModel;
-import org.apache.freemarker.core.model.MapKeyValuePairIterator;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.TemplateCollectionModel;
 import org.apache.freemarker.core.model.TemplateHashModelEx;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/impl/MapKeyValuePairIterator.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/model/impl/MapKeyValuePairIterator.java
 
b/src/main/java/org/apache/freemarker/core/model/impl/MapKeyValuePairIterator.java
new file mode 100644
index 0000000..77495be
--- /dev/null
+++ 
b/src/main/java/org/apache/freemarker/core/model/impl/MapKeyValuePairIterator.java
@@ -0,0 +1,73 @@
+/*
+ * 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.impl;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.apache.freemarker.core.model.ObjectWrapper;
+import org.apache.freemarker.core.model.TemplateHashModelEx2;
+import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.TemplateModelException;
+import org.apache.freemarker.core.model.TemplateHashModelEx2.KeyValuePair;
+import 
org.apache.freemarker.core.model.TemplateHashModelEx2.KeyValuePairIterator;
+
+/**
+ *  Implementation of {@link KeyValuePairIterator} for a {@link 
TemplateHashModelEx2} that wraps or otherwise uses a
+ *  {@link Map} internally.
+ *
+ *  @since 2.3.25
+ */
+public class MapKeyValuePairIterator implements KeyValuePairIterator {
+
+    private final Iterator<Entry<?, ?>> entrySetIterator;
+    
+    private final ObjectWrapper objectWrapper;
+    
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    public <K, V> MapKeyValuePairIterator(Map<?, ?> map, ObjectWrapper 
objectWrapper) {
+        entrySetIterator = ((Map) map).entrySet().iterator();
+        this.objectWrapper = objectWrapper;
+    }
+
+    public boolean hasNext() {
+        return entrySetIterator.hasNext();
+    }
+
+    public KeyValuePair next() {
+        final Entry<?, ?> entry = entrySetIterator.next();
+        return new KeyValuePair() {
+
+            public TemplateModel getKey() throws TemplateModelException {
+                return wrap(entry.getKey());
+            }
+
+            public TemplateModel getValue() throws TemplateModelException {
+                return wrap(entry.getValue());
+            }
+            
+        };
+    }
+    
+    private TemplateModel wrap(Object obj) throws TemplateModelException {
+        return (obj instanceof TemplateModel) ? (TemplateModel) obj : 
objectWrapper.wrap(obj);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/impl/SimpleHash.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/model/impl/SimpleHash.java 
b/src/main/java/org/apache/freemarker/core/model/impl/SimpleHash.java
index 75f3f54..52f3bb7 100644
--- a/src/main/java/org/apache/freemarker/core/model/impl/SimpleHash.java
+++ b/src/main/java/org/apache/freemarker/core/model/impl/SimpleHash.java
@@ -29,7 +29,6 @@ import java.util.TreeMap;
 
 import org.apache.freemarker.core.ast._DelayedJQuote;
 import org.apache.freemarker.core.ast._TemplateModelException;
-import org.apache.freemarker.core.model.MapKeyValuePairIterator;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.TemplateBooleanModel;
 import org.apache.freemarker.core.model.TemplateCollectionModel;

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/impl/TemplateModelListSequence.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/model/impl/TemplateModelListSequence.java
 
b/src/main/java/org/apache/freemarker/core/model/impl/TemplateModelListSequence.java
new file mode 100644
index 0000000..bdb64ac
--- /dev/null
+++ 
b/src/main/java/org/apache/freemarker/core/model/impl/TemplateModelListSequence.java
@@ -0,0 +1,56 @@
+/*
+ * 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.impl;
+
+import java.util.List;
+
+import org.apache.freemarker.core.model.TemplateMethodModelEx;
+import org.apache.freemarker.core.model.TemplateModel;
+import org.apache.freemarker.core.model.TemplateSequenceModel;
+
+/**
+ * A sequence that wraps a {@link List} of {@link TemplateModel}-s. It does 
not copy the original
+ * list. It's mostly useful when implementing {@link TemplateMethodModelEx}-es 
that collect items from other
+ * {@link TemplateModel}-s.
+ */
+public class TemplateModelListSequence implements TemplateSequenceModel {
+    
+    private List/*<TemplateModel>*/ list;
+
+    public TemplateModelListSequence(List list) {
+        this.list = list;
+    }
+
+    public TemplateModel get(int index) {
+        return (TemplateModel) list.get(index);
+    }
+
+    public int size() {
+        return list.size();
+    }
+
+    /**
+     * Returns the original {@link List} of {@link TemplateModel}-s, so it's 
not a fully unwrapped value.
+     */
+    public Object getWrappedObject() {
+        return list;
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/impl/beans/SimpleMapModel.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/model/impl/beans/SimpleMapModel.java 
b/src/main/java/org/apache/freemarker/core/model/impl/beans/SimpleMapModel.java
index 4d35ee9..d5c65f5 100644
--- 
a/src/main/java/org/apache/freemarker/core/model/impl/beans/SimpleMapModel.java
+++ 
b/src/main/java/org/apache/freemarker/core/model/impl/beans/SimpleMapModel.java
@@ -24,7 +24,6 @@ import java.util.Map;
 
 import org.apache.freemarker.core.ast.CollectionAndSequence;
 import org.apache.freemarker.core.model.AdapterTemplateModel;
-import org.apache.freemarker.core.model.MapKeyValuePairIterator;
 import org.apache.freemarker.core.model.ObjectWrapper;
 import org.apache.freemarker.core.model.TemplateCollectionModel;
 import org.apache.freemarker.core.model.TemplateHashModelEx2;
@@ -34,6 +33,7 @@ import 
org.apache.freemarker.core.model.TemplateModelException;
 import org.apache.freemarker.core.model.TemplateModelWithAPISupport;
 import org.apache.freemarker.core.model.WrapperTemplateModel;
 import org.apache.freemarker.core.model.WrappingTemplateModel;
+import org.apache.freemarker.core.model.impl.MapKeyValuePairIterator;
 import org.apache.freemarker.core.model.impl.SimpleSequence;
 import org.apache.freemarker.core.util.RichObjectWrapper;
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/impl/beans/package.html
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/model/impl/beans/package.html 
b/src/main/java/org/apache/freemarker/core/model/impl/beans/package.html
index 2032969..bd6b36c 100644
--- a/src/main/java/org/apache/freemarker/core/model/impl/beans/package.html
+++ b/src/main/java/org/apache/freemarker/core/model/impl/beans/package.html
@@ -22,9 +22,8 @@
 </head>
 <body>
 
-<p>The {@link freemarker.template.DefaultObjectWrapper default object wrapper} 
of FreeMarker uses
-this to expose Java Beans and POJO-s to templates, but it can also be used in 
itself as a
-better alternative {@link freemarker.template.ObjectWrapper}.</p>
+<p>The {@linkplain org.apache.freemarker.core.model.impl.DefaultObjectWrapper 
default object wrapper} of FreeMarker uses
+this to expose Java Beans and POJO-s to templates.</p>
 
 <p>Most of the issues dealing with beans are handled by the 
 {@link freemarker.ext.beans.BeansWrapper#wrap(Object)}and {@link 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/model/package.html
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/freemarker/core/model/package.html 
b/src/main/java/org/apache/freemarker/core/model/package.html
new file mode 100644
index 0000000..58c3127
--- /dev/null
+++ b/src/main/java/org/apache/freemarker/core/model/package.html
@@ -0,0 +1,25 @@
+<!--
+  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>
+</head>
+<body>
+<p>Things related to <tt>TemplateModel</tt>-s (basically the type system of 
FTL).</p> 
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/templateresolver/ByteArrayTemplateLoader.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/templateresolver/ByteArrayTemplateLoader.java
 
b/src/main/java/org/apache/freemarker/core/templateresolver/ByteArrayTemplateLoader.java
deleted file mode 100644
index dbb246d..0000000
--- 
a/src/main/java/org/apache/freemarker/core/templateresolver/ByteArrayTemplateLoader.java
+++ /dev/null
@@ -1,194 +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.templateresolver;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.freemarker.core.util.StringUtil;
-
-/**
- * A {@link TemplateLoader} that uses a {@link Map} with {@code byte[]} as its 
source of templates. This is similar to
- * {@link StringTemplateLoader}, but uses {@code byte[]} instead of {@link 
String}; see more details there.
- * 
- * <p>Note that {@link ByteArrayTemplateLoader} can't be used with a 
distributed (cluster-wide) {@link CacheStorage},
- * as it produces {@link TemplateLoadingSource}-s that deliberately throw 
exception on serialization (because the
- * content is only accessible within a single JVM, and is also volatile).
- */
-// TODO JUnit tests
-public class ByteArrayTemplateLoader implements TemplateLoader {
-    
-    private static final AtomicLong INSTANCE_COUNTER = new AtomicLong();
-    
-    private final long instanceId = INSTANCE_COUNTER.get();
-    private final AtomicLong templatesRevision = new AtomicLong();
-    private final ConcurrentMap<String, ContentHolder> templates = new 
ConcurrentHashMap<>();
-    
-    /**
-     * Puts a template into the template loader. The name can contain slashes 
to denote logical directory structure, but
-     * must not start with a slash. Each template will get an unique revision 
number, thus replacing a template will
-     * cause the template cache to reload it (when the update delay expires).
-     * 
-     * <p>This method is thread-safe.
-     * 
-     * @param name
-     *            the name of the template.
-     * @param content
-     *            the source code of the template.
-     */
-    public void putTemplate(String name, byte[] content) {
-        templates.put(
-                name,
-                new ContentHolder(content, new Source(instanceId, name), 
templatesRevision.incrementAndGet()));
-    }
-    
-    /**
-     * Removes the template with the specified name if it was added earlier.
-     * 
-     * <p>
-     * This method is thread-safe.
-     * 
-     * @param name
-     *            Exactly the key with which the template was added.
-     * 
-     * @return Whether a template was found with the given key (and hence was 
removed now)
-     */ 
-    public boolean removeTemplate(String name) {
-        return templates.remove(name) != null;
-    }
-    
-    @Override
-    public TemplateLoaderSession createSession() {
-        return null;
-    }
-
-    @Override
-    public TemplateLoadingResult load(String name, TemplateLoadingSource 
ifSourceDiffersFrom,
-            Serializable ifVersionDiffersFrom, TemplateLoaderSession session) 
throws IOException {
-        ContentHolder contentHolder = templates.get(name);
-        if (contentHolder == null) {
-            return TemplateLoadingResult.NOT_FOUND;
-        } else if (ifSourceDiffersFrom != null && 
ifSourceDiffersFrom.equals(contentHolder.source)
-                && Objects.equals(ifVersionDiffersFrom, 
contentHolder.version)) {
-            return TemplateLoadingResult.NOT_MODIFIED;
-        } else {
-            return new TemplateLoadingResult(
-                    contentHolder.source, contentHolder.version,
-                    new ByteArrayInputStream(contentHolder.content),
-                    null);
-        }
-    }
-
-    @Override
-    public void resetState() {
-        // Do nothing
-    }
-
-    /**
-     * Show class name and some details that are useful in template-not-found 
errors.
-     */
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(_TemplateLoaderUtils.getClassNameForToString(this));
-        sb.append("(Map { ");
-        int cnt = 0;
-        for (String name : templates.keySet()) {
-            cnt++;
-            if (cnt != 1) {
-                sb.append(", ");
-            }
-            if (cnt > 10) {
-                sb.append("...");
-                break;
-            }
-            sb.append(StringUtil.jQuote(name));
-            sb.append("=...");
-        }
-        if (cnt != 0) {
-            sb.append(' ');
-        }
-        sb.append("})");
-        return sb.toString();
-    }
-
-    private static class ContentHolder {
-        private final byte[] content;
-        private final Source source;
-        private final long version;
-        
-        public ContentHolder(byte[] content, Source source, long version) {
-            this.content = content;
-            this.source = source;
-            this.version = version;
-        }
-        
-    }
-    
-    @SuppressWarnings("serial")
-    private static class Source implements TemplateLoadingSource {
-        
-        private final long instanceId;
-        private final String name;
-        
-        public Source(long instanceId, String name) {
-            this.instanceId = instanceId;
-            this.name = name;
-        }
-    
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + (int) (instanceId ^ (instanceId >>> 32));
-            result = prime * result + ((name == null) ? 0 : name.hashCode());
-            return result;
-        }
-    
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj) return true;
-            if (obj == null) return false;
-            if (getClass() != obj.getClass()) return false;
-            Source other = (Source) obj;
-            if (instanceId != other.instanceId) return false;
-            if (name == null) {
-                if (other.name != null) return false;
-            } else if (!name.equals(other.name)) {
-                return false;
-            }
-            return true;
-        }
-        
-        private void writeObject(ObjectOutputStream out) throws IOException {
-            throw new IOException(ByteArrayTemplateLoader.class.getName()
-                    + " sources can't be serialized, as they don't support 
clustering.");
-        }
-        
-    }
-    
-}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/templateresolver/CacheStorage.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/templateresolver/CacheStorage.java 
b/src/main/java/org/apache/freemarker/core/templateresolver/CacheStorage.java
index 1dfe01a..3f86c1b 100644
--- 
a/src/main/java/org/apache/freemarker/core/templateresolver/CacheStorage.java
+++ 
b/src/main/java/org/apache/freemarker/core/templateresolver/CacheStorage.java
@@ -19,6 +19,8 @@
 
 package org.apache.freemarker.core.templateresolver;
 
+import 
org.apache.freemarker.core.templateresolver.impl.DefaultTemplateResolver;
+
 /**
  * Cache storage abstracts away the storage aspects of a cache - associating
  * an object with a key, retrieval and removal via the key. It is actually a

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/b0e08ccb/src/main/java/org/apache/freemarker/core/templateresolver/ClassTemplateLoader.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/freemarker/core/templateresolver/ClassTemplateLoader.java
 
b/src/main/java/org/apache/freemarker/core/templateresolver/ClassTemplateLoader.java
deleted file mode 100644
index d80d3cf..0000000
--- 
a/src/main/java/org/apache/freemarker/core/templateresolver/ClassTemplateLoader.java
+++ /dev/null
@@ -1,182 +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.templateresolver;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.apache.freemarker.core.util.NullArgumentException;
-import org.apache.freemarker.core.util.StringUtil;
-
-/**
- * A {@link TemplateLoader} that can load templates from the "classpath". 
Naturally, it can load from jar files, or from
- * anywhere where Java can load classes from. Internally, it uses {@link 
Class#getResource(String)} or
- * {@link ClassLoader#getResource(String)} to load templates.
- */
-// TODO
-public class ClassTemplateLoader extends URLTemplateLoader {
-    
-    private final Class<?> resourceLoaderClass;
-    private final ClassLoader classLoader;
-    private final String basePackagePath;
-
-    /**
-     * Creates a template loader that will use the {@link 
Class#getResource(String)} method of the specified class to
-     * load the resources, and the specified base package path (absolute or 
relative).
-     *
-     * <p>
-     * Examples:
-     * <ul>
-     * <li>Relative base path (will load from the {@code 
com.example.myapplication.templates} package):<br>
-     * {@code new 
ClassTemplateLoader(com.example.myapplication.SomeClass.class, "templates")}
-     * <li>Absolute base path:<br>
-     * {@code new ClassTemplateLoader(somepackage.SomeClass.class, 
"/com/example/myapplication/templates")}
-     * </ul>
-     *
-     * @param resourceLoaderClass
-     *            The class whose {@link Class#getResource(String)} method 
will be used to load the templates. Be sure
-     *            that you chose a class whose defining class-loader sees the 
templates. This parameter can't be
-     *            {@code null}.
-     * @param basePackagePath
-     *            The package that contains the templates, in path ({@code 
/}-separated) format. If it doesn't start
-     *            with a {@code /} then it's relative to the path (package) of 
the {@code resourceLoaderClass} class. If
-     *            it starts with {@code /} then it's relative to the root of 
the package hierarchy. Note that path
-     *            components should be separated by forward slashes 
independently of the separator character used by the
-     *            underlying operating system. This parameter can't be {@code 
null}.
-     * 
-     * @see #ClassTemplateLoader(ClassLoader, String)
-     */
-    public ClassTemplateLoader(Class<?> resourceLoaderClass, String 
basePackagePath) {
-        this(resourceLoaderClass, false, null, basePackagePath);
-    }
-
-    /**
-     * Similar to {@link #ClassTemplateLoader(Class, String)}, but instead of 
{@link Class#getResource(String)} it uses
-     * {@link ClassLoader#getResource(String)}. Because a {@link ClassLoader} 
isn't bound to any Java package, it
-     * doesn't mater if the {@code basePackagePath} starts with {@code /} or 
not, it will be always relative to the root
-     * of the package hierarchy
-     */
-    public ClassTemplateLoader(ClassLoader classLoader, String 
basePackagePath) {
-        this(null, true, classLoader, basePackagePath);
-    }
-
-    private ClassTemplateLoader(Class<?> resourceLoaderClass, boolean 
allowNullResourceLoaderClass,
-            ClassLoader classLoader, String basePackagePath) {
-        if (!allowNullResourceLoaderClass) {
-            NullArgumentException.check("resourceLoaderClass", 
resourceLoaderClass);
-        }
-        NullArgumentException.check("basePackagePath", basePackagePath);
-
-        // Either set a non-null resourceLoaderClass or a non-null 
classLoader, not both:
-        this.resourceLoaderClass = classLoader == null ? (resourceLoaderClass 
== null ? this.getClass()
-                : resourceLoaderClass) : null;
-        if (this.resourceLoaderClass == null && classLoader == null) {
-            throw new NullArgumentException("classLoader");
-        }
-        this.classLoader = classLoader;
-
-        String canonBasePackagePath = canonicalizePrefix(basePackagePath);
-        if (this.classLoader != null && canonBasePackagePath.startsWith("/")) {
-            canonBasePackagePath = canonBasePackagePath.substring(1);
-        }
-        this.basePackagePath = canonBasePackagePath;
-    }
-
-    private static boolean isSchemeless(String fullPath) {
-        int i = 0;
-        int ln = fullPath.length();
-
-        // Skip a single initial /, as things like "/file:/..." might work:
-        if (i < ln && fullPath.charAt(i) == '/') i++;
-
-        // Check if there's no ":" earlier than a '/', as the URLClassLoader
-        // could interpret that as an URL scheme:
-        while (i < ln) {
-            char c = fullPath.charAt(i);
-            if (c == '/') return true;
-            if (c == ':') return false;
-            i++;
-        }
-        return true;
-    }
-
-    /**
-     * Show class name and some details that are useful in template-not-found 
errors.
-     */
-    @Override
-    public String toString() {
-        return _TemplateLoaderUtils.getClassNameForToString(this) + "("
-                + (resourceLoaderClass != null
-                        ? "resourceLoaderClass=" + 
resourceLoaderClass.getName()
-                        : "classLoader=" + StringUtil.jQuote(classLoader))
-                + ", basePackagePath"
-                + "="
-                + StringUtil.jQuote(basePackagePath)
-                + (resourceLoaderClass != null
-                        ? (basePackagePath.startsWith("/") ? "" : " /* 
relatively to resourceLoaderClass pkg */")
-                        : ""
-                )
-                + ")";
-    }
-
-    /**
-     * See the similar parameter of {@link #ClassTemplateLoader(Class, 
String)}; {@code null} when other mechanism is
-     * used to load the resources.
-     */
-    public Class<?> getResourceLoaderClass() {
-        return resourceLoaderClass;
-    }
-
-    /**
-     * See the similar parameter of {@link #ClassTemplateLoader(ClassLoader, 
String)}; {@code null} when other mechanism
-     * is used to load the resources.
-     */
-    public ClassLoader getClassLoader() {
-        return classLoader;
-    }
-
-    /**
-     * See the similar parameter of {@link #ClassTemplateLoader(ClassLoader, 
String)}; note that this is a normalized
-     * version of what was actually passed to the constructor.
-     */
-    public String getBasePackagePath() {
-        return basePackagePath;
-    }
-
-    @Override
-    protected URL getURL(String name) {
-        String fullPath = basePackagePath + name;
-    
-        // Block java.net.URLClassLoader exploits:
-        if (basePackagePath.equals("/") && !isSchemeless(fullPath)) {
-            return null;
-        }
-    
-        return resourceLoaderClass != null ? 
resourceLoaderClass.getResource(fullPath) : classLoader
-                .getResource(fullPath);
-    }
-
-    @Override
-    protected TemplateLoadingResult extractNegativeResult(URLConnection conn) 
throws IOException {
-        return null;
-    }
-
-}
\ No newline at end of file

Reply via email to