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 2017/02/17 01:53:42 UTC
[6/6] incubator-freemarker git commit: Continued subpackage content
rearrangement...
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 <dd...@apache.org>
Authored: Thu Feb 16 23:56:05 2017 +0100
Committer: ddekany <dd...@apache.org>
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