Changed owner in copyright headers to the Apache Software Foundation. 
Modified/created NOTICE, LICENSE and DISCLAIMER files, so that the owner there 
is the Apache Software Foundation too, and so that their file names and 
contents comply with the guidelines provided by the Apache Software Foundation.

Git notes:

Merge remote-tracking branch 'origin/2.3-gae'

Conflicts:
        src/main/java/freemarker/core/CommandLine.java
        src/main/java/freemarker/core/LegacyConstructorParserConfiguration.java
        src/main/java/freemarker/ext/dom/Transform.java


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

Branch: refs/heads/master
Commit: 991e284f3167f271b6f186da4e7925a2afa926e0
Parents: 2648d9e c0a231d
Author: ddekany <[email protected]>
Authored: Wed Sep 2 23:04:32 2015 +0200
Committer: ddekany <[email protected]>
Committed: Wed Sep 2 23:05:48 2015 +0200

----------------------------------------------------------------------
 DISCLAIMER                                      |   8 +
 LICENSE                                         | 236 +++++++++++++++++
 LICENSE.txt                                     |  45 ----
 NOTICE                                          |   5 +
 NOTICE.txt                                      |   4 -
 src/dist/LICENSE                                | 257 +++++++++++++++++++
 src/dist/LICENSE.txt                            |  67 -----
 src/dist/NOTICE                                 |  30 +++
 src/dist/NOTICE.txt                             |  15 --
 .../WEB-INF/classes/example/AddAction.java      |  25 +-
 .../WEB-INF/classes/example/FormAction.java     |  25 +-
 .../classes/example/GuestbookAction.java        |  25 +-
 .../classes/example/GuestbookActionServlet.java |  25 +-
 .../WEB-INF/classes/example/GuestbookEntry.java |  25 +-
 .../classes/example/GuestbookEntryForm.java     |  25 +-
 .../WEB-INF/classes/example/IndexAction.java    |  25 +-
 .../WEB-INF/classes/example/HelloServlet.java   |  25 +-
 .../classes/example/ControllerServlet.java      |  25 +-
 .../WEB-INF/classes/example/GuestbookEntry.java |  25 +-
 .../classes/example/GuestbookServlet.java       |  25 +-
 .../webapp2/WEB-INF/classes/example/Page.java   |  25 +-
 src/main/java/freemarker/cache/AndMatcher.java  |  25 +-
 .../cache/ByteArrayTemplateLoader.java          |  25 +-
 .../java/freemarker/cache/CacheStorage.java     |  25 +-
 .../cache/CacheStorageWithGetSize.java          |  25 +-
 .../freemarker/cache/ClassTemplateLoader.java   |  25 +-
 .../cache/ConcurrentCacheStorage.java           |  25 +-
 .../ConditionalTemplateConfigurerFactory.java   |  25 +-
 .../freemarker/cache/FileExtensionMatcher.java  |  25 +-
 .../freemarker/cache/FileNameGlobMatcher.java   |  25 +-
 .../freemarker/cache/FileTemplateLoader.java    |  25 +-
 .../FirstMatchTemplateConfigurerFactory.java    |  25 +-
 .../cache/GetLastModifiedException.java         |  25 +-
 .../cache/MergingTemplateConfigurerFactory.java |  25 +-
 .../java/freemarker/cache/MruCacheStorage.java  |  25 +-
 .../freemarker/cache/MultiTemplateLoader.java   |  25 +-
 src/main/java/freemarker/cache/NotMatcher.java  |  25 +-
 .../java/freemarker/cache/NullCacheStorage.java |  25 +-
 src/main/java/freemarker/cache/OrMatcher.java   |  25 +-
 .../java/freemarker/cache/PathGlobMatcher.java  |  25 +-
 .../java/freemarker/cache/PathRegexMatcher.java |  25 +-
 .../java/freemarker/cache/SoftCacheStorage.java |  25 +-
 .../cache/StatefulTemplateLoader.java           |  25 +-
 .../freemarker/cache/StringTemplateLoader.java  |  25 +-
 .../freemarker/cache/StrongCacheStorage.java    |  25 +-
 .../java/freemarker/cache/TemplateCache.java    |  25 +-
 .../cache/TemplateConfigurerFactory.java        |  25 +-
 .../TemplateConfigurerFactoryException.java     |  25 +-
 .../java/freemarker/cache/TemplateLoader.java   |  25 +-
 .../freemarker/cache/TemplateLoaderUtils.java   |  25 +-
 .../freemarker/cache/TemplateLookupContext.java |  25 +-
 .../freemarker/cache/TemplateLookupResult.java  |  25 +-
 .../cache/TemplateLookupStrategy.java           |  25 +-
 .../freemarker/cache/TemplateNameFormat.java    |  25 +-
 .../freemarker/cache/TemplateSourceMatcher.java |  25 +-
 .../freemarker/cache/URLTemplateLoader.java     |  25 +-
 .../freemarker/cache/URLTemplateSource.java     |  25 +-
 .../freemarker/cache/WebappTemplateLoader.java  |  25 +-
 src/main/java/freemarker/cache/_CacheAPI.java   |  25 +-
 .../core/APINotSupportedTemplateException.java  |  25 +-
 .../freemarker/core/AddConcatExpression.java    |  25 +-
 .../java/freemarker/core/AndExpression.java     |  25 +-
 .../java/freemarker/core/ArithmeticEngine.java  |  25 +-
 .../freemarker/core/ArithmeticExpression.java   |  25 +-
 src/main/java/freemarker/core/Assignment.java   |  25 +-
 .../freemarker/core/AssignmentInstruction.java  |  25 +-
 src/main/java/freemarker/core/AttemptBlock.java |  25 +-
 src/main/java/freemarker/core/AutoEscBlock.java |  25 +-
 .../BackwardCompatibleTemplateNumberFormat.java |  25 +-
 .../java/freemarker/core/BlockAssignment.java   |  25 +-
 .../java/freemarker/core/BodyInstruction.java   |  25 +-
 .../java/freemarker/core/BooleanExpression.java |  25 +-
 .../java/freemarker/core/BooleanLiteral.java    |  25 +-
 .../java/freemarker/core/BoundCallable.java     |  25 +-
 .../java/freemarker/core/BoundedRangeModel.java |  25 +-
 .../java/freemarker/core/BreakInstruction.java  |  25 +-
 src/main/java/freemarker/core/BugException.java |  25 +-
 src/main/java/freemarker/core/BuiltIn.java      |  25 +-
 .../core/BuiltInBannedWhenAutoEscaping.java     |  25 +-
 .../java/freemarker/core/BuiltInForDate.java    |  25 +-
 .../java/freemarker/core/BuiltInForHashEx.java  |  25 +-
 .../core/BuiltInForLegacyEscaping.java          |  25 +-
 .../freemarker/core/BuiltInForLoopVariable.java |  25 +-
 .../freemarker/core/BuiltInForMarkupOutput.java |  25 +-
 .../BuiltInForMarkupOutputFormatRelated.java    |  25 +-
 .../java/freemarker/core/BuiltInForNode.java    |  25 +-
 .../java/freemarker/core/BuiltInForNumber.java  |  25 +-
 .../core/BuiltInForOutputFormatRelated.java     |  25 +-
 .../freemarker/core/BuiltInForSequence.java     |  25 +-
 .../java/freemarker/core/BuiltInForString.java  |  25 +-
 .../core/BuiltInWithParseTimeParameters.java    |  25 +-
 .../java/freemarker/core/BuiltInsForDates.java  |  25 +-
 .../java/freemarker/core/BuiltInsForHashes.java |  25 +-
 .../core/BuiltInsForLoopVariables.java          |  25 +-
 .../core/BuiltInsForMarkupOutputs.java          |  25 +-
 .../core/BuiltInsForMultipleTypes.java          |  25 +-
 .../java/freemarker/core/BuiltInsForNodes.java  |  25 +-
 .../freemarker/core/BuiltInsForNumbers.java     |  25 +-
 .../core/BuiltInsForOutputFormatRelated.java    |  25 +-
 .../freemarker/core/BuiltInsForSequences.java   |  25 +-
 .../core/BuiltInsForStringsBasic.java           |  25 +-
 .../core/BuiltInsForStringsEncoding.java        |  25 +-
 .../freemarker/core/BuiltInsForStringsMisc.java |  25 +-
 .../core/BuiltInsForStringsRegexp.java          |  25 +-
 .../core/BuiltInsWithParseTimeParameters.java   |  25 +-
 .../java/freemarker/core/BuiltinVariable.java   |  25 +-
 ...lPlaceCustomDataInitializationException.java |  25 +-
 .../core/CallableInvocationContext.java         |  25 +-
 src/main/java/freemarker/core/Case.java         |  25 +-
 .../freemarker/core/CollectionAndSequence.java  |  25 +-
 .../core/CombinedMarkupOutputFormat.java        |  25 +-
 src/main/java/freemarker/core/Comment.java      |  25 +-
 .../core/CommonMarkupOutputFormat.java          |  25 +-
 .../core/CommonTemplateMarkupOutputModel.java   |  25 +-
 .../freemarker/core/ComparisonExpression.java   |  25 +-
 .../java/freemarker/core/CompressedBlock.java   |  25 +-
 .../java/freemarker/core/ConditionalBlock.java  |  25 +-
 src/main/java/freemarker/core/Configurable.java |  25 +-
 .../java/freemarker/core/CustomAttribute.java   |  25 +-
 src/main/java/freemarker/core/DebugBreak.java   |  25 +-
 .../freemarker/core/DefaultToExpression.java    |  25 +-
 .../freemarker/core/DirectiveCallPlace.java     |  25 +-
 .../java/freemarker/core/DollarVariable.java    |  25 +-
 src/main/java/freemarker/core/Dot.java          |  25 +-
 .../java/freemarker/core/DynamicKeyName.java    |  25 +-
 src/main/java/freemarker/core/ElseOfList.java   |  25 +-
 src/main/java/freemarker/core/Environment.java  |  25 +-
 src/main/java/freemarker/core/EscapeBlock.java  |  25 +-
 src/main/java/freemarker/core/EvalUtil.java     |  25 +-
 .../java/freemarker/core/ExistenceBuiltins.java |  25 +-
 .../java/freemarker/core/ExistsExpression.java  |  25 +-
 src/main/java/freemarker/core/Expression.java   |  25 +-
 .../freemarker/core/FallbackInstruction.java    |  25 +-
 .../java/freemarker/core/FlushInstruction.java  |  25 +-
 .../java/freemarker/core/FreeMarkerTree.java    |  25 +-
 .../java/freemarker/core/HTMLOutputFormat.java  |  25 +-
 src/main/java/freemarker/core/HashLiteral.java  |  25 +-
 .../java/freemarker/core/ICIChainMember.java    |  25 +-
 .../core/ISOLikeTemplateDateFormat.java         |  25 +-
 .../core/ISOLikeTemplateDateFormatFactory.java  |  25 +-
 .../freemarker/core/ISOTemplateDateFormat.java  |  25 +-
 .../core/ISOTemplateDateFormatFactory.java      |  25 +-
 src/main/java/freemarker/core/Identifier.java   |  25 +-
 src/main/java/freemarker/core/IfBlock.java      |  25 +-
 src/main/java/freemarker/core/Include.java      |  25 +-
 src/main/java/freemarker/core/Include.java.orig | 256 ------------------
 .../java/freemarker/core/Interpolation.java     |  25 +-
 src/main/java/freemarker/core/Interpret.java    |  25 +-
 .../core/InvalidFormatParametersException.java  |  25 +-
 .../core/InvalidFormatStringException.java      |  25 +-
 .../core/InvalidReferenceException.java         |  25 +-
 src/main/java/freemarker/core/Items.java        |  25 +-
 .../java/freemarker/core/IteratorBlock.java     |  25 +-
 .../freemarker/core/JavaTemplateDateFormat.java |  25 +-
 .../core/JavaTemplateDateFormatFactory.java     |  25 +-
 .../core/JavaTemplateNumberFormat.java          |  25 +-
 .../core/JavaTemplateNumberFormatFactory.java   |  25 +-
 src/main/java/freemarker/core/LibraryLoad.java  |  25 +-
 .../java/freemarker/core/ListElseContainer.java |  25 +-
 src/main/java/freemarker/core/ListLiteral.java  |  25 +-
 .../core/ListableRightUnboundedRangeModel.java  |  25 +-
 src/main/java/freemarker/core/LocalContext.java |  25 +-
 src/main/java/freemarker/core/Macro.java        |  25 +-
 .../freemarker/core/MarkupOutputFormat.java     |  25 +-
 src/main/java/freemarker/core/MessageUtil.java  |  25 +-
 src/main/java/freemarker/core/MethodCall.java   |  25 +-
 src/main/java/freemarker/core/MiscUtil.java     |  25 +-
 src/main/java/freemarker/core/MixedContent.java |  25 +-
 .../NestedContentNotSupportedException.java     |  25 +-
 src/main/java/freemarker/core/NewBI.java        |  25 +-
 .../java/freemarker/core/NoAutoEscBlock.java    |  25 +-
 .../java/freemarker/core/NoEscapeBlock.java     |  25 +-
 .../freemarker/core/NonBooleanException.java    |  25 +-
 .../java/freemarker/core/NonDateException.java  |  25 +-
 .../core/NonExtendedHashException.java          |  25 +-
 .../java/freemarker/core/NonHashException.java  |  25 +-
 .../NonListableRightUnboundedRangeModel.java    |  25 +-
 .../core/NonMarkupOutputException.java          |  25 +-
 .../freemarker/core/NonMethodException.java     |  25 +-
 .../freemarker/core/NonNamespaceException.java  |  25 +-
 .../java/freemarker/core/NonNodeException.java  |  25 +-
 .../freemarker/core/NonNumericalException.java  |  25 +-
 .../freemarker/core/NonSequenceException.java   |  25 +-
 .../core/NonSequenceOrCollectionException.java  |  25 +-
 .../freemarker/core/NonStringException.java     |  25 +-
 .../NonStringOrTemplateOutputException.java     |  25 +-
 .../NonUserDefinedDirectiveLikeException.java   |  25 +-
 .../java/freemarker/core/NotExpression.java     |  25 +-
 .../java/freemarker/core/NumberLiteral.java     |  25 +-
 .../java/freemarker/core/NumericalOutput.java   |  25 +-
 .../core/OptInTemplateClassResolver.java        |  25 +-
 src/main/java/freemarker/core/OrExpression.java |  25 +-
 src/main/java/freemarker/core/OutputFormat.java |  25 +-
 .../java/freemarker/core/OutputFormatBlock.java |  25 +-
 .../java/freemarker/core/ParameterRole.java     |  25 +-
 .../core/ParentheticalExpression.java           |  25 +-
 .../java/freemarker/core/ParseException.java    |  25 +-
 .../freemarker/core/ParserConfiguration.java    |  25 +-
 .../freemarker/core/PlainTextOutputFormat.java  |  25 +-
 .../java/freemarker/core/PropertySetting.java   |  25 +-
 .../java/freemarker/core/RTFOutputFormat.java   |  25 +-
 src/main/java/freemarker/core/Range.java        |  25 +-
 src/main/java/freemarker/core/RangeModel.java   |  25 +-
 .../java/freemarker/core/RecoveryBlock.java     |  25 +-
 src/main/java/freemarker/core/RecurseNode.java  |  25 +-
 src/main/java/freemarker/core/RegexpHelper.java |  25 +-
 .../java/freemarker/core/ReturnInstruction.java |  25 +-
 .../core/RightUnboundedRangeModel.java          |  25 +-
 src/main/java/freemarker/core/Sep.java          |  25 +-
 .../java/freemarker/core/SpecialBuiltIn.java    |  25 +-
 .../java/freemarker/core/StopException.java     |  25 +-
 .../java/freemarker/core/StopInstruction.java   |  25 +-
 .../freemarker/core/StringArraySequence.java    |  25 +-
 .../java/freemarker/core/StringLiteral.java     |  25 +-
 src/main/java/freemarker/core/SwitchBlock.java  |  25 +-
 .../freemarker/core/TemplateClassResolver.java  |  25 +-
 .../core/TemplateCombinedMarkupOutputModel.java |  25 +-
 .../freemarker/core/TemplateConfigurer.java     |  25 +-
 .../freemarker/core/TemplateDateFormat.java     |  25 +-
 .../core/TemplateDateFormatFactory.java         |  25 +-
 .../java/freemarker/core/TemplateElement.java   |  25 +-
 .../freemarker/core/TemplateFormatUtil.java     |  25 +-
 .../core/TemplateHTMLOutputModel.java           |  25 +-
 .../core/TemplateMarkupOutputModel.java         |  25 +-
 .../freemarker/core/TemplateNumberFormat.java   |  25 +-
 .../core/TemplateNumberFormatFactory.java       |  25 +-
 .../java/freemarker/core/TemplateObject.java    |  25 +-
 .../freemarker/core/TemplatePostProcessor.java  |  25 +-
 .../core/TemplatePostProcessorException.java    |  25 +-
 .../freemarker/core/TemplateRTFOutputModel.java |  25 +-
 .../freemarker/core/TemplateXMLOutputModel.java |  25 +-
 src/main/java/freemarker/core/TextBlock.java    |  25 +-
 ...nterruptionSupportTemplatePostProcessor.java |  25 +-
 .../java/freemarker/core/TokenMgrError.java     |  25 +-
 .../java/freemarker/core/TransformBlock.java    |  25 +-
 .../java/freemarker/core/TrimInstruction.java   |  25 +-
 .../core/UnaryPlusMinusExpression.java          |  25 +-
 .../java/freemarker/core/UnboundCallable.java   |  25 +-
 .../java/freemarker/core/UnboundTemplate.java   |  25 +-
 .../core/UndefinedCustomFormatException.java    |  25 +-
 .../freemarker/core/UndefinedOutputFormat.java  |  25 +-
 .../core/UnexpectedTypeException.java           |  25 +-
 .../core/UnformattableDateException.java        |  25 +-
 .../core/UnformattableNumberException.java      |  25 +-
 src/main/java/freemarker/core/UnifiedCall.java  |  25 +-
 ...nDateTypeFormattingUnsupportedException.java |  25 +-
 .../core/UnregisteredOutputFormatException.java |  25 +-
 src/main/java/freemarker/core/VisitNode.java    |  25 +-
 .../java/freemarker/core/XMLOutputFormat.java   |  25 +-
 .../freemarker/core/XSTemplateDateFormat.java   |  25 +-
 .../core/XSTemplateDateFormatFactory.java       |  25 +-
 .../freemarker/core/_2_4_OrLaterMarker.java     |  25 +-
 .../java/freemarker/core/_ArrayEnumeration.java |  25 +-
 .../java/freemarker/core/_ArrayIterator.java    |  25 +-
 src/main/java/freemarker/core/_CoreAPI.java     |  25 +-
 .../java/freemarker/core/_CoreStringUtils.java  |  25 +-
 .../java/freemarker/core/_DelayedAOrAn.java     |  25 +-
 .../core/_DelayedConversionToString.java        |  25 +-
 .../core/_DelayedFTLTypeDescription.java        |  25 +-
 .../core/_DelayedGetCanonicalForm.java          |  25 +-
 .../freemarker/core/_DelayedGetMessage.java     |  25 +-
 .../core/_DelayedGetMessageWithoutStackTop.java |  25 +-
 .../java/freemarker/core/_DelayedJQuote.java    |  25 +-
 .../freemarker/core/_DelayedJoinWithComma.java  |  25 +-
 .../java/freemarker/core/_DelayedOrdinal.java   |  25 +-
 .../freemarker/core/_DelayedShortClassName.java |  25 +-
 .../java/freemarker/core/_DelayedToString.java  |  25 +-
 .../core/_ErrorDescriptionBuilder.java          |  25 +-
 .../freemarker/core/_MiscTemplateException.java |  25 +-
 ...ObjectBuilderSettingEvaluationException.java |  25 +-
 .../core/_ObjectBuilderSettingEvaluator.java    |  25 +-
 ..._ParserConfigurationWithInheritedFormat.java |  25 +-
 .../core/_SettingEvaluationEnvironment.java     |  25 +-
 .../java/freemarker/core/_SortedArraySet.java   |  25 +-
 .../core/_TemplateModelException.java           |  25 +-
 .../java/freemarker/core/_TimeZoneBuilder.java  |  25 +-
 ...expectedTypeErrorExplainerTemplateModel.java |  25 +-
 .../core/_UnmodifiableCompositeSet.java         |  25 +-
 .../java/freemarker/core/_UnmodifiableSet.java  |  25 +-
 src/main/java/freemarker/debug/Breakpoint.java  |  25 +-
 src/main/java/freemarker/debug/DebugModel.java  |  25 +-
 .../freemarker/debug/DebuggedEnvironment.java   |  25 +-
 src/main/java/freemarker/debug/Debugger.java    |  25 +-
 .../java/freemarker/debug/DebuggerClient.java   |  25 +-
 .../java/freemarker/debug/DebuggerListener.java |  25 +-
 .../debug/EnvironmentSuspendedEvent.java        |  25 +-
 .../freemarker/debug/impl/DebuggerServer.java   |  25 +-
 .../freemarker/debug/impl/DebuggerService.java  |  25 +-
 .../debug/impl/RmiDebugModelImpl.java           |  25 +-
 .../debug/impl/RmiDebuggedEnvironmentImpl.java  |  25 +-
 .../freemarker/debug/impl/RmiDebuggerImpl.java  |  25 +-
 .../debug/impl/RmiDebuggerListenerImpl.java     |  25 +-
 .../debug/impl/RmiDebuggerService.java          |  25 +-
 .../freemarker/ext/ant/FreemarkerXmlTask.java   |  25 +-
 .../java/freemarker/ext/ant/JythonAntTask.java  |  25 +-
 .../ext/ant/UnlinkedJythonOperations.java       |  25 +-
 .../ext/ant/UnlinkedJythonOperationsImpl.java   |  25 +-
 .../java/freemarker/ext/beans/APIModel.java     |  25 +-
 .../freemarker/ext/beans/ArgumentTypes.java     |  25 +-
 .../java/freemarker/ext/beans/ArrayModel.java   |  25 +-
 .../java/freemarker/ext/beans/BeanModel.java    |  25 +-
 .../freemarker/ext/beans/BeansModelCache.java   |  25 +-
 .../java/freemarker/ext/beans/BeansWrapper.java |  25 +-
 .../ext/beans/BeansWrapperBuilder.java          |  25 +-
 .../ext/beans/BeansWrapperConfiguration.java    |  25 +-
 .../ext/beans/BeansWrapperSingletonHolder.java  |  25 +-
 .../java/freemarker/ext/beans/BooleanModel.java |  25 +-
 .../ext/beans/CallableMemberDescriptor.java     |  25 +-
 .../freemarker/ext/beans/CharacterOrString.java |  25 +-
 .../ext/beans/ClassBasedModelFactory.java       |  25 +-
 .../ext/beans/ClassChangeNotifier.java          |  25 +-
 .../freemarker/ext/beans/ClassIntrospector.java |  25 +-
 .../ext/beans/ClassIntrospectorBuilder.java     |  25 +-
 .../freemarker/ext/beans/CollectionAdapter.java |  25 +-
 .../freemarker/ext/beans/CollectionModel.java   |  25 +-
 .../java/freemarker/ext/beans/DateModel.java    |  25 +-
 .../beans/EmptyCallableMemberDescriptor.java    |  25 +-
 .../ext/beans/EmptyMemberAndArguments.java      |  25 +-
 .../freemarker/ext/beans/EnumerationModel.java  |  25 +-
 .../java/freemarker/ext/beans/HashAdapter.java  |  25 +-
 .../ext/beans/InvalidPropertyException.java     |  25 +-
 .../freemarker/ext/beans/IteratorModel.java     |  25 +-
 .../ext/beans/JRebelClassChangeNotifier.java    |  25 +-
 .../java/freemarker/ext/beans/MapModel.java     |  25 +-
 .../MaybeEmptyCallableMemberDescriptor.java     |  25 +-
 .../ext/beans/MaybeEmptyMemberAndArguments.java |  25 +-
 .../ext/beans/MemberAndArguments.java           |  25 +-
 .../ext/beans/MethodAppearanceFineTuner.java    |  25 +-
 .../java/freemarker/ext/beans/MethodSorter.java |  25 +-
 .../NonPrimitiveArrayBackedReadOnlyList.java    |  25 +-
 .../java/freemarker/ext/beans/NumberModel.java  |  25 +-
 .../ext/beans/OverloadedFixArgsMethods.java     |  25 +-
 .../freemarker/ext/beans/OverloadedMethods.java |  25 +-
 .../ext/beans/OverloadedMethodsModel.java       |  25 +-
 .../ext/beans/OverloadedMethodsSubset.java      |  25 +-
 .../ext/beans/OverloadedNumberUtil.java         |  25 +-
 .../ext/beans/OverloadedVarArgsMethods.java     |  25 +-
 .../beans/PrimtiveArrayBackedReadOnlyList.java  |  25 +-
 .../ReflectionCallableMemberDescriptor.java     |  25 +-
 .../ext/beans/ResourceBundleModel.java          |  25 +-
 .../freemarker/ext/beans/SequenceAdapter.java   |  25 +-
 .../java/freemarker/ext/beans/SetAdapter.java   |  25 +-
 .../freemarker/ext/beans/SimpleMapModel.java    |  25 +-
 .../java/freemarker/ext/beans/SimpleMethod.java |  25 +-
 .../freemarker/ext/beans/SimpleMethodModel.java |  25 +-
 .../ext/beans/SingletonCustomizer.java          |  25 +-
 .../java/freemarker/ext/beans/StaticModel.java  |  25 +-
 .../java/freemarker/ext/beans/StaticModels.java |  25 +-
 .../java/freemarker/ext/beans/StringModel.java  |  25 +-
 .../java/freemarker/ext/beans/TypeFlags.java    |  25 +-
 .../freemarker/ext/beans/UnsafeMethods.java     |  25 +-
 .../java/freemarker/ext/beans/_BeansAPI.java    |  25 +-
 .../java/freemarker/ext/beans/_EnumModels.java  |  25 +-
 .../java/freemarker/ext/beans/_MethodUtil.java  |  25 +-
 .../freemarker/ext/dom/AttributeNodeModel.java  |  25 +-
 .../ext/dom/CharacterDataNodeModel.java         |  25 +-
 .../java/freemarker/ext/dom/DocumentModel.java  |  25 +-
 .../freemarker/ext/dom/DocumentTypeModel.java   |  25 +-
 .../java/freemarker/ext/dom/ElementModel.java   |  25 +-
 .../freemarker/ext/dom/JaxenXPathSupport.java   |  25 +-
 .../java/freemarker/ext/dom/NodeListModel.java  |  25 +-
 src/main/java/freemarker/ext/dom/NodeModel.java |  25 +-
 .../java/freemarker/ext/dom/NodeOutputter.java  |  25 +-
 .../java/freemarker/ext/dom/PINodeModel.java    |  25 +-
 .../ext/dom/SunInternalXalanXPathSupport.java   |  25 +-
 .../java/freemarker/ext/dom/XPathSupport.java   |  25 +-
 .../freemarker/ext/dom/XalanXPathSupport.java   |  25 +-
 .../java/freemarker/ext/jdom/NodeListModel.java |  25 +-
 .../freemarker/ext/jsp/EventForwarding.java     |  25 +-
 .../jsp/FreeMarkerJspApplicationContext.java    |  25 +-
 .../ext/jsp/FreeMarkerJspFactory.java           |  25 +-
 .../ext/jsp/FreeMarkerJspFactory2.java          |  25 +-
 .../ext/jsp/FreeMarkerJspFactory21.java         |  25 +-
 .../ext/jsp/FreeMarkerPageContext.java          |  25 +-
 .../java/freemarker/ext/jsp/FreemarkerTag.java  |  25 +-
 .../freemarker/ext/jsp/JspContextModel.java     |  25 +-
 .../freemarker/ext/jsp/JspTagModelBase.java     |  25 +-
 .../freemarker/ext/jsp/JspWriterAdapter.java    |  25 +-
 .../freemarker/ext/jsp/PageContextFactory.java  |  25 +-
 .../ext/jsp/SimpleTagDirectiveModel.java        |  25 +-
 .../freemarker/ext/jsp/TagTransformModel.java   |  25 +-
 .../java/freemarker/ext/jsp/TaglibFactory.java  |  25 +-
 .../freemarker/ext/jsp/TaglibMethodUtil.java    |  25 +-
 .../ext/jsp/_FreeMarkerPageContext1.java        |  25 +-
 .../ext/jsp/_FreeMarkerPageContext2.java        |  25 +-
 .../ext/jsp/_FreeMarkerPageContext21.java       |  25 +-
 .../freemarker/ext/jython/JythonHashModel.java  |  25 +-
 .../java/freemarker/ext/jython/JythonModel.java |  25 +-
 .../freemarker/ext/jython/JythonModelCache.java |  25 +-
 .../ext/jython/JythonNumberModel.java           |  25 +-
 .../ext/jython/JythonSequenceModel.java         |  25 +-
 .../ext/jython/JythonVersionAdapter.java        |  25 +-
 .../ext/jython/JythonVersionAdapterHolder.java  |  25 +-
 .../freemarker/ext/jython/JythonWrapper.java    |  25 +-
 .../jython/_Jython20And21VersionAdapter.java    |  25 +-
 .../ext/jython/_Jython22VersionAdapter.java     |  25 +-
 .../ext/jython/_Jython25VersionAdapter.java     |  25 +-
 .../ext/rhino/RhinoFunctionModel.java           |  25 +-
 .../ext/rhino/RhinoScriptableModel.java         |  25 +-
 .../java/freemarker/ext/rhino/RhinoWrapper.java |  25 +-
 .../ext/servlet/AllHttpScopesHashModel.java     |  25 +-
 .../ext/servlet/FreemarkerServlet.java          |  25 +-
 .../ext/servlet/HttpRequestHashModel.java       |  25 +-
 .../servlet/HttpRequestParametersHashModel.java |  25 +-
 .../ext/servlet/HttpSessionHashModel.java       |  25 +-
 .../freemarker/ext/servlet/IncludePage.java     |  25 +-
 .../freemarker/ext/servlet/InitParamParser.java |  25 +-
 .../ext/servlet/ServletContextHashModel.java    |  25 +-
 .../freemarker/ext/util/IdentityHashMap.java    |  25 +-
 .../java/freemarker/ext/util/ModelCache.java    |  25 +-
 .../java/freemarker/ext/util/ModelFactory.java  |  25 +-
 .../ext/util/WrapperTemplateModel.java          |  25 +-
 .../java/freemarker/ext/xml/Namespaces.java     |  25 +-
 src/main/java/freemarker/ext/xml/Navigator.java |  25 +-
 .../java/freemarker/ext/xml/NodeListModel.java  |  25 +-
 .../java/freemarker/ext/xml/NodeOperator.java   |  25 +-
 .../freemarker/ext/xml/_Dom4jNavigator.java     |  25 +-
 .../java/freemarker/ext/xml/_DomNavigator.java  |  25 +-
 .../freemarker/ext/xml/_JaxenNamespaces.java    |  25 +-
 .../java/freemarker/ext/xml/_JdomNavigator.java |  25 +-
 .../log/CommonsLoggingLoggerFactory.java        |  25 +-
 src/main/java/freemarker/log/Logger.java        |  25 +-
 src/main/java/freemarker/log/LoggerFactory.java |  25 +-
 .../java/freemarker/log/SLF4JLoggerFactory.java |  25 +-
 .../freemarker/log/_AvalonLoggerFactory.java    |  25 +-
 .../log/_CommonsLoggingLoggerFactory.java       |  25 +-
 .../java/freemarker/log/_JULLoggerFactory.java  |  25 +-
 .../freemarker/log/_Log4jLoggerFactory.java     |  25 +-
 .../freemarker/log/_Log4jOverSLF4JTester.java   |  25 +-
 .../java/freemarker/log/_NullLoggerFactory.java |  25 +-
 .../freemarker/log/_SLF4JLoggerFactory.java     |  25 +-
 .../template/AdapterTemplateModel.java          |  25 +-
 .../java/freemarker/template/Configuration.java |  25 +-
 .../template/DefaultArrayAdapter.java           |  25 +-
 .../template/DefaultIteratorAdapter.java        |  25 +-
 .../freemarker/template/DefaultListAdapter.java |  25 +-
 .../freemarker/template/DefaultMapAdapter.java  |  25 +-
 .../DefaultNonListCollectionAdapter.java        |  25 +-
 .../template/DefaultObjectWrapper.java          |  25 +-
 .../template/DefaultObjectWrapperBuilder.java   |  25 +-
 .../DefaultObjectWrapperConfiguration.java      |  25 +-
 src/main/java/freemarker/template/EmptyMap.java |  25 +-
 .../template/FalseTemplateBooleanModel.java     |  25 +-
 .../template/GeneralPurposeNothing.java         |  25 +-
 .../freemarker/template/LocalizedString.java    |  25 +-
 .../MalformedTemplateNameException.java         |  25 +-
 .../java/freemarker/template/ObjectWrapper.java |  25 +-
 .../template/ObjectWrapperAndUnwrapper.java     |  25 +-
 .../template/ResourceBundleLocalizedString.java |  25 +-
 .../SerializableTemplateBooleanModel.java       |  25 +-
 .../freemarker/template/SimpleCollection.java   |  25 +-
 .../java/freemarker/template/SimpleDate.java    |  25 +-
 .../java/freemarker/template/SimpleHash.java    |  25 +-
 .../java/freemarker/template/SimpleList.java    |  25 +-
 .../java/freemarker/template/SimpleNumber.java  |  25 +-
 .../template/SimpleObjectWrapper.java           |  25 +-
 .../java/freemarker/template/SimpleScalar.java  |  25 +-
 .../freemarker/template/SimpleSequence.java     |  25 +-
 src/main/java/freemarker/template/Template.java |  25 +-
 .../template/TemplateBooleanModel.java          |  25 +-
 .../template/TemplateCollectionModel.java       |  25 +-
 .../template/TemplateCollectionModelEx.java     |  25 +-
 .../freemarker/template/TemplateDateModel.java  |  25 +-
 .../template/TemplateDirectiveBody.java         |  25 +-
 .../template/TemplateDirectiveModel.java        |  25 +-
 .../freemarker/template/TemplateException.java  |  25 +-
 .../template/TemplateExceptionHandler.java      |  25 +-
 .../freemarker/template/TemplateHashModel.java  |  25 +-
 .../template/TemplateHashModelEx.java           |  25 +-
 .../template/TemplateMethodModel.java           |  25 +-
 .../template/TemplateMethodModelEx.java         |  25 +-
 .../java/freemarker/template/TemplateModel.java |  25 +-
 .../template/TemplateModelAdapter.java          |  25 +-
 .../template/TemplateModelException.java        |  25 +-
 .../template/TemplateModelIterator.java         |  25 +-
 .../template/TemplateModelListSequence.java     |  25 +-
 .../template/TemplateModelWithAPISupport.java   |  25 +-
 .../freemarker/template/TemplateNodeModel.java  |  25 +-
 .../template/TemplateNotFoundException.java     |  25 +-
 .../template/TemplateNumberModel.java           |  25 +-
 .../template/TemplateScalarModel.java           |  25 +-
 .../template/TemplateSequenceModel.java         |  25 +-
 .../template/TemplateTransformModel.java        |  25 +-
 .../freemarker/template/TransformControl.java   |  25 +-
 .../template/TrueTemplateBooleanModel.java      |  25 +-
 src/main/java/freemarker/template/Version.java  |  25 +-
 .../template/WrappingTemplateModel.java         |  25 +-
 .../java/freemarker/template/_TemplateAPI.java  |  25 +-
 .../template/utility/CaptureOutput.java         |  25 +-
 .../freemarker/template/utility/ClassUtil.java  |  25 +-
 .../template/utility/CollectionUtils.java       |  25 +-
 .../template/utility/Collections12.java         |  25 +-
 .../freemarker/template/utility/Constants.java  |  25 +-
 .../template/utility/DOMNodeModel.java          |  25 +-
 .../freemarker/template/utility/DateUtil.java   |  25 +-
 .../freemarker/template/utility/DeepUnwrap.java |  25 +-
 .../freemarker/template/utility/Execute.java    |  25 +-
 .../freemarker/template/utility/HtmlEscape.java |  25 +-
 .../template/utility/JythonRuntime.java         |  25 +-
 .../template/utility/NormalizeNewlines.java     |  25 +-
 .../template/utility/NullArgumentException.java |  25 +-
 .../freemarker/template/utility/NullWriter.java |  25 +-
 .../freemarker/template/utility/NumberUtil.java |  25 +-
 .../template/utility/ObjectConstructor.java     |  25 +-
 .../template/utility/ObjectFactory.java         |  25 +-
 .../utility/ObjectWrapperWithAPISupport.java    |  25 +-
 .../template/utility/OptimizerUtil.java         |  25 +-
 .../template/utility/RichObjectWrapper.java     |  25 +-
 .../template/utility/SecurityUtilities.java     |  25 +-
 .../template/utility/StandardCompress.java      |  25 +-
 .../freemarker/template/utility/StringUtil.java |  25 +-
 .../template/utility/ToCanonical.java           |  25 +-
 .../utility/UndeclaredThrowableException.java   |  25 +-
 .../utility/UnrecognizedTimeZoneException.java  |  25 +-
 .../UnsupportedNumberClassException.java        |  25 +-
 .../template/utility/WriteProtectable.java      |  25 +-
 .../freemarker/template/utility/XmlEscape.java  |  25 +-
 src/main/javacc/FTL.jj                          |  25 +-
 .../adhoc/IdentifierCharGenerator.java          |  25 +-
 src/manual/book.xml                             | 227 ++++++++++++++--
 .../cache/FileTemplateLoaderTest.java           |  25 +-
 .../freemarker/cache/TemplateCacheTest.java     |  25 +-
 .../cache/TemplateConfigurerFactoryTest.java    |  25 +-
 .../cache/TemplateNameFormatTest.java           |  25 +-
 .../cache/TemplateSourceMatcherTest.java        |  25 +-
 .../core/ASTBasedErrorMessagesTest.java         |  25 +-
 src/test/java/freemarker/core/ASTPrinter.java   |  25 +-
 src/test/java/freemarker/core/ASTTest.java      |  25 +-
 .../core/BaseNTemplateNumberFormatFactory.java  |  25 +-
 .../freemarker/core/BreakPlacementTest.java     |  25 +-
 .../java/freemarker/core/CamelCaseTest.java     |  25 +-
 .../java/freemarker/core/CanonicalFormTest.java |  25 +-
 .../core/CombinedMarkupOutputFormatTest.java    |  25 +-
 .../java/freemarker/core/ConfigurableTest.java  |  25 +-
 .../CustomAttributeInUnboundTemplatesTest.java  |  18 ++
 .../freemarker/core/CustomHTMLOutputFormat.java |  25 +-
 .../core/CustomTemplateHTMLModel.java           |  25 +-
 .../java/freemarker/core/DateFormatTest.java    |  25 +-
 .../freemarker/core/DirectiveCallPlaceTest.java |  25 +-
 .../java/freemarker/core/DummyOutputFormat.java |  25 +-
 .../freemarker/core/EncodingOverrideTest.java   |  25 +-
 .../core/EnvironmentCustomStateTest.java        |  25 +-
 .../EnvironmentGetTemplateVariantsTest.java     |  25 +-
 ...EpochMillisDivTemplateDateFormatFactory.java |  25 +-
 .../EpochMillisTemplateDateFormatFactory.java   |  25 +-
 .../freemarker/core/HTMLOutputFormatTest.java   |  25 +-
 .../java/freemarker/core/HeaderParsingTest.java |  25 +-
 .../core/HexTemplateNumberFormatFactory.java    |  25 +-
 .../core/InterpretAndEvalTemplateNameTest.java  |  25 +-
 .../core/InterpretSettingInheritanceTest.java   |  25 +-
 .../freemarker/core/ListValidationsTest.java    |  25 +-
 ...AndTZSensitiveTemplateDateFormatFactory.java |  25 +-
 ...aleSensitiveTemplateNumberFormatFactory.java |  25 +-
 .../freemarker/core/MiscErrorMessagesTest.java  |  25 +-
 .../java/freemarker/core/NumberFormatTest.java  |  25 +-
 .../core/ObjectBuilderSettingsTest.java         |  25 +-
 .../core/OptInTemplateClassResolverTest.java    |  25 +-
 .../java/freemarker/core/OutputFormatTest.java  |  25 +-
 .../ParseTimeParameterBIErrorMessagesTest.java  |  25 +-
 .../core/ParsingErrorMessagesTest.java          |  25 +-
 .../freemarker/core/RTFOutputFormatTest.java    |  25 +-
 .../java/freemarker/core/SQLTimeZoneTest.java   |  25 +-
 .../core/SeldomEscapedOutputFormat.java         |  25 +-
 .../freemarker/core/SettingDirectiveTest.java   |  25 +-
 .../freemarker/core/SpecialVariableTest.java    |  25 +-
 .../core/StringLiteralInterpolationTest.java    |  25 +-
 .../core/TagSyntaxVariationsTest.java           |  25 +-
 .../freemarker/core/TemplatGetEncodingTest.java |  25 +-
 .../freemarker/core/TemplateConfigurerTest.java |  25 +-
 ...TemplateConfigurerWithTemplateCacheTest.java |  25 +-
 .../core/TemplateDummyOutputModel.java          |  25 +-
 .../freemarker/core/TemplateLevelSettings.java  |  25 +-
 .../core/TemplateNameSpecialVariablesTest.java  |  25 +-
 .../core/TemplateSeldomEscapedOutputModel.java  |  25 +-
 .../core/TheadInterruptingSupportTest.java      |  25 +-
 .../freemarker/core/TypeErrorMessagesTest.java  |  25 +-
 .../freemarker/core/UnclosedCommentTest.java    |  25 +-
 .../core/WhitespaceStrippingTest.java           |  25 +-
 .../freemarker/core/XMLOutputFormatTest.java    |  25 +-
 .../core/subpkg/PackageVisibleAll.java          |  25 +-
 .../subpkg/PackageVisibleAllWithBuilder.java    |  25 +-
 .../PackageVisibleAllWithBuilderBuilder.java    |  25 +-
 .../PackageVisibleWithPublicConstructor.java    |  25 +-
 .../java/freemarker/core/subpkg/PublicAll.java  |  25 +-
 .../subpkg/PublicWithMixedConstructors.java     |  25 +-
 .../PublicWithPackageVisibleConstructor.java    |  25 +-
 .../AbstractParallelIntrospectionTest.java      |  25 +-
 .../ext/beans/AlphabeticalMethodSorter.java     |  25 +-
 .../ext/beans/BeansAPINewInstanceTest.java      |  25 +-
 .../ext/beans/BeansWrapperBasics.java           |  25 +-
 .../ext/beans/BeansWrapperCachesTest.java       |  25 +-
 .../ext/beans/BeansWrapperDesc2003020.java      |  25 +-
 .../ext/beans/BeansWrapperDesc2003021.java      |  25 +-
 .../ext/beans/BeansWrapperInc2003020.java       |  25 +-
 .../ext/beans/BeansWrapperInc2003021.java       |  25 +-
 .../ext/beans/BeansWrapperMiscTest.java         |  25 +-
 .../ext/beans/BeansWrapperReadOnlyTest.java     |  25 +-
 .../ext/beans/BeansWrapperSingletonsTest.java   |  25 +-
 .../beans/BeansWrapperWithShortedMethods.java   |  25 +-
 .../CommonSupertypeForUnwrappingHintTest.java   |  25 +-
 .../beans/DefaultObjectWrapperDesc2003020.java  |  25 +-
 .../beans/DefaultObjectWrapperDesc2003021.java  |  25 +-
 .../beans/DefaultObjectWrapperDesc2003022.java  |  25 +-
 .../beans/DefaultObjectWrapperInc2003020.java   |  25 +-
 .../beans/DefaultObjectWrapperInc2003021.java   |  25 +-
 .../beans/DefaultObjectWrapperInc2003022.java   |  25 +-
 .../DefaultObjectWrapperWithSortedMethods.java  |  25 +-
 .../freemarker/ext/beans/EnumModelsTest.java    |  25 +-
 .../freemarker/ext/beans/ErrorMessagesTest.java |  25 +-
 .../ext/beans/FineTuneMethodAppearanceTest.java |  25 +-
 .../GetlessMethodsAsPropertyGettersRule.java    |  25 +-
 .../freemarker/ext/beans/IsApplicableTest.java  |  25 +-
 .../beans/IsMoreSpecificParameterTypeTest.java  |  25 +-
 .../ext/beans/Java7MembersOnlyBeansWrapper.java |  25 +-
 .../beans/ManyObjectsOfDifferentClasses.java    |  25 +-
 .../beans/ManyStaticsOfDifferentClasses.java    |  25 +-
 .../ext/beans/MiscNumericalOperationsTest.java  |  25 +-
 .../freemarker/ext/beans/ModelCacheTest.java    |  25 +-
 .../ext/beans/OverloadedNumberUtilTest.java     |  25 +-
 .../beans/ParameterListPreferabilityTest.java   |  25 +-
 .../beans/PrallelObjectIntrospectionTest.java   |  25 +-
 .../beans/PrallelStaticIntrospectionTest.java   |  25 +-
 .../freemarker/ext/beans/RationalNumber.java    |  25 +-
 .../freemarker/ext/beans/StaticModelsTest.java  |  25 +-
 .../freemarker/ext/beans/TypeFlagsTest.java     |  25 +-
 .../ext/jsp/JspTestFreemarkerServlet.java       |  25 +-
 ...estFreemarkerServletWithDefaultOverride.java |  25 +-
 .../ext/jsp/RealServletContainertTest.java      |  25 +-
 .../java/freemarker/ext/jsp/TLDParsingTest.java |  25 +-
 .../ext/jsp/TaglibMethodUtilTest.java           |  25 +-
 .../jsp/taglibmembers/AttributeAccessorTag.java |  25 +-
 .../ext/jsp/taglibmembers/AttributeInfoTag.java |  25 +-
 .../ext/jsp/taglibmembers/EnclosingClass.java   |  25 +-
 .../ext/jsp/taglibmembers/GetAndSetTag.java     |  25 +-
 .../ext/jsp/taglibmembers/TestFunctions.java    |  25 +-
 .../ext/jsp/taglibmembers/TestSimpleTag.java    |  25 +-
 .../ext/jsp/taglibmembers/TestSimpleTag2.java   |  25 +-
 .../ext/jsp/taglibmembers/TestSimpleTag3.java   |  25 +-
 .../ext/jsp/taglibmembers/TestTag.java          |  25 +-
 .../ext/jsp/taglibmembers/TestTag2.java         |  25 +-
 .../ext/jsp/taglibmembers/TestTag3.java         |  25 +-
 .../ext/servlet/InitParamParserTest.java        |  25 +-
 .../freemarker/manual/AutoEscapingExample.java  |  25 +-
 .../manual/ConfigureOutputFormatExamples.java   |  25 +-
 .../java/freemarker/manual/ExamplesTest.java    |  25 +-
 .../manual/TemplateConfigurerExamples.java      |  25 +-
 .../template/ActualNamingConvetionTest.java     |  25 +-
 .../template/ActualTagSyntaxTest.java           |  25 +-
 .../freemarker/template/ConfigurationTest.java  |  25 +-
 .../template/CustomAttributeTest.java           |  25 +-
 .../template/DefaultObjectWrapperTest.java      |  25 +-
 .../java/freemarker/template/ExceptionTest.java |  25 +-
 .../template/IncudeFromNamelessTest.java        |  25 +-
 .../template/JavaCCExceptionAsEOFFixTest.java   |  25 +-
 .../MistakenlyPublicImportAPIsTest.java         |  25 +-
 .../template/MistakenlyPublicMacroAPIsTest.java |  25 +-
 .../freemarker/template/MockServletContext.java |  25 +-
 .../template/NullConfigurationTest.java         |  25 +-
 .../template/SimpleObjetWrapperTest.java        |  25 +-
 .../template/StaticObjectWrappersTest.java      |  25 +-
 .../template/TemplateConstructorsTest.java      |  25 +-
 .../template/TemplateLanguageVersionTest.java   |  25 +-
 .../template/TemplateLookupStrategyTest.java    |  25 +-
 .../template/TemplateNotFoundMessageTest.java   |  25 +-
 .../java/freemarker/template/VersionTest.java   |  25 +-
 .../template/utility/DateUtilTest.java          |  25 +-
 .../template/utility/NumberUtilTest.java        |  25 +-
 .../template/utility/StringUtilTest.java        |  25 +-
 .../test/MonitoredTemplateLoader.java           |  25 +-
 src/test/java/freemarker/test/TemplateTest.java |  25 +-
 src/test/java/freemarker/test/TreeView.java     |  25 +-
 .../java/freemarker/test/hamcerst/Matchers.java |  25 +-
 .../hamcerst/StringContainsIgnoringCase.java    |  25 +-
 .../test/servlet/DefaultModel2TesterAction.java |  25 +-
 .../freemarker/test/servlet/Model2Action.java   |  25 +-
 .../test/servlet/Model2TesterServlet.java       |  25 +-
 .../freemarker/test/servlet/WebAppTestCase.java |  25 +-
 .../test/templatesuite/TemplateTestCase.java    |  25 +-
 .../test/templatesuite/TemplateTestSuite.java   |  25 +-
 .../templatesuite/models/AllTemplateModels.java |  25 +-
 .../templatesuite/models/BeanTestClass.java     |  25 +-
 .../templatesuite/models/BeanTestInterface.java |  25 +-
 .../models/BeanTestSuperclass.java              |  25 +-
 .../models/BooleanAndScalarModel.java           |  25 +-
 .../models/BooleanAndStringTemplateModel.java   |  25 +-
 .../test/templatesuite/models/BooleanHash1.java |  25 +-
 .../test/templatesuite/models/BooleanHash2.java |  25 +-
 .../test/templatesuite/models/BooleanList1.java |  25 +-
 .../test/templatesuite/models/BooleanList2.java |  25 +-
 .../models/BooleanVsStringMethods.java          |  25 +-
 .../templatesuite/models/EnumTestClass.java     |  25 +-
 .../templatesuite/models/ExceptionModel.java    |  25 +-
 .../models/HashAndScalarModel.java              |  25 +-
 .../templatesuite/models/JavaObjectInfo.java    |  25 +-
 .../test/templatesuite/models/LegacyList.java   |  25 +-
 .../test/templatesuite/models/Listables.java    |  25 +-
 .../test/templatesuite/models/MultiModel1.java  |  25 +-
 .../test/templatesuite/models/MultiModel2.java  |  25 +-
 .../test/templatesuite/models/MultiModel3.java  |  25 +-
 .../test/templatesuite/models/MultiModel4.java  |  25 +-
 .../test/templatesuite/models/MultiModel5.java  |  25 +-
 .../test/templatesuite/models/NewTestModel.java |  25 +-
 .../templatesuite/models/NewTestModel2.java     |  25 +-
 .../models/NumberAndStringModel.java            |  25 +-
 .../models/OverloadedConstructor.java           |  25 +-
 .../templatesuite/models/OverloadedMethods.java |  25 +-
 .../models/OverloadedMethods2.java              |  25 +-
 .../templatesuite/models/SimpleTestMethod.java  |  25 +-
 .../models/TransformHashWrapper.java            |  25 +-
 .../models/TransformMethodWrapper1.java         |  25 +-
 .../models/TransformMethodWrapper2.java         |  25 +-
 .../templatesuite/models/TransformModel1.java   |  25 +-
 .../templatesuite/models/VarArgTestModel.java   |  25 +-
 .../test/utility/AssertDirective.java           |  25 +-
 .../test/utility/AssertEqualsDirective.java     |  25 +-
 .../test/utility/AssertFailsDirective.java      |  25 +-
 .../AssertationFailedInTemplateException.java   |  25 +-
 .../test/utility/BadParameterTypeException.java |  25 +-
 .../freemarker/test/utility/FileTestCase.java   |  25 +-
 .../java/freemarker/test/utility/Helpers.java   |  25 +-
 .../MissingRequiredParameterException.java      |  25 +-
 .../test/utility/NoOutputDirective.java         |  25 +-
 .../test/utility/ParameterException.java        |  25 +-
 .../utility/UnsupportedParameterException.java  |  25 +-
 .../freemarker/ext/jsp/TLDParsingTest.tld       |  29 ++-
 .../template/SimpleObjectWrapperTest.java       |  25 +-
 726 files changed, 10761 insertions(+), 8261 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/cache/GetLastModifiedException.java
----------------------------------------------------------------------
diff --cc src/main/java/freemarker/cache/GetLastModifiedException.java
index 490ade7,0000000..1f369f5
mode 100644,000000..100644
--- a/src/main/java/freemarker/cache/GetLastModifiedException.java
+++ b/src/main/java/freemarker/cache/GetLastModifiedException.java
@@@ -1,38 -1,0 +1,41 @@@
 +/*
-  * Copyright 2014 Attila Szegedi, Daniel Dekany, Jonathan Revusky
++ * 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
 + * 
-  * Licensed 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
 + * 
-  * 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.
++ * 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 freemarker.cache;
 +
 +import java.io.IOException;
 +
 +
 +/**
 + * Used be {@link TemplateLoader#getLastModified(Object)} to indicate an 
error getting the last modification date. That
 + * should be just an {@link IOException}, but due to backward compatibility 
constraints that wasn't possible;
 + * {@link TemplateLoader#getLastModified(Object)} doesn't allow throwing 
checked exception.
 + * 
 + * @since 2.4.0
 + */
 +public class GetLastModifiedException extends RuntimeException {
 +
 +    public GetLastModifiedException(String message, Throwable cause) {
 +        super(message, cause);
 +    }
 +
 +    public GetLastModifiedException(String message) {
 +        super(message);
 +    }
 +
 +}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/cache/TemplateCache.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/cache/TemplateLoader.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/BodyInstruction.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/BoundCallable.java
----------------------------------------------------------------------
diff --cc src/main/java/freemarker/core/BoundCallable.java
index 1ee987c,0000000..65105c5
mode 100644,000000..100644
--- a/src/main/java/freemarker/core/BoundCallable.java
+++ b/src/main/java/freemarker/core/BoundCallable.java
@@@ -1,152 -1,0 +1,155 @@@
 +/*
-  * Copyright 2014 Attila Szegedi, Daniel Dekany, Jonathan Revusky
++ * 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
 + * 
-  * Licensed 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
 + * 
-  * 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.
++ * 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 freemarker.core;
 +
 +import java.io.IOException;
 +
 +import freemarker.core.Environment.Namespace;
 +import freemarker.template.Template;
 +import freemarker.template.TemplateException;
 +
 +/**
 + * A macro or function (or other future callable entity) associated to a 
namespace and a template.
 + * 
 + * <p>
 + * With an analogy, a {@link UnboundCallable} is like a non-static {@link 
java.lang.reflect.Method} in Java; it
 + * describes everything about the method, but it isn't bound to any object on 
which the method could be called.
 + * Continuing this analogy, a {@link BoundCallable} is like a {@link 
java.lang.reflect.Method} paired with the object
 + * whose method it is (the {@code this} object), and is thus callable in 
itself. In the case of FTL macros and FTL
 + * functions, instead of a single {@code this} object, we have two such 
objects: a namespace and a template. (One may
 + * wonder why the namespace is not enough, given that a namespace already 
specifies a template (
 + * {@link Namespace#getTemplate()} ). It's because a namespace can contain 
macros from included templates, and so the
 + * template that the callable belongs to isn't always the same as {@link 
Namespace#getTemplate()}, which just gives the
 + * "root" template of the namespace. Furthermore, several namespaces my 
include exactly the same template, so we can't
 + * get away with a template instead of a namespace either. Also note that 
knowing which template we are in is needed for
 + * example to resolve relative references to other templates.)
 + * 
 + * <p>
 + * Historical note: Prior to 2.4, the two concepts ({@link UnboundCallable} 
and {@link BoundCallable}) were these same,
 + * represented by {@link Macro}, which still exists due to backward 
compatibility constraints. This class extends
 + * {@link Macro} only for the sake of legacy applications which expect macro 
and function FTL variables to be
 + * {@link Macro}-s. Especially, this class should not extend {@link 
TemplateElement} (which it does, because
 + * {@link Macro} is a subclass of that), but it had to, for backward 
compatibility. It just delegates the {@link Macro}
 + * methods to the embedded {@link UnboundCallable}.
 + * 
 + * @see UnboundCallable
 + * 
 + * @since 2.4.0
 + */
 +final class BoundCallable extends Macro {
 +    
 +    private final UnboundCallable unboundCallable;
 +    private final Template template;
 +    private final Namespace namespace;
 +    
 +    BoundCallable(UnboundCallable callableDefinition, Template template, 
Namespace namespace) {
 +        this.unboundCallable = callableDefinition;
 +        this.template = template;
 +        this.namespace = namespace;
 +    }
 +
 +    UnboundCallable getUnboundCallable() {
 +        return unboundCallable;
 +    }
 +    
 +    Template getTemplate() {
 +        return template;
 +    }
 +    
 +    Namespace getNamespace() {
 +        return namespace;
 +    }
 +
 +    @Override
 +    public String toString() {
 +        return "BoundCallable("
 +                + "name=" + getName()
 +                + ", isFunction=" + isFunction()
 +                + ", template" + (template != null ? ".name=" + 
template.getName() : "=null")
 +                + ", namespace=" + (namespace != null ? 
namespace.getTemplate().getName() : "null")
 +                + ")";
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    public String getCatchAll() {
 +        return unboundCallable.getCatchAll();
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    public String[] getArgumentNames() {
 +        return unboundCallable.getArgumentNames();
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    public String getName() {
 +        return unboundCallable.getName();
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    public boolean isFunction() {
 +        return unboundCallable.isFunction();
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    void accept(Environment env) throws TemplateException, IOException {
 +        unboundCallable.accept(env);
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    protected String dump(boolean canonical) {
 +        return unboundCallable.dump(canonical);
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    String getNodeTypeSymbol() {
 +        return unboundCallable.getNodeTypeSymbol();
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    int getParameterCount() {
 +        return unboundCallable.getParameterCount();
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    Object getParameterValue(int idx) {
 +        return unboundCallable.getParameterValue(idx);
 +    }
 +
 +    /** For backward compatibility only; delegates to the {@link 
UnboundCallable}'s identical method. */
 +    @Override
 +    ParameterRole getParameterRole(int idx) {
 +        return unboundCallable.getParameterRole(idx);
 +    }
 +
 +    @Override
 +    boolean isNestedBlockRepeater() {
 +        return unboundCallable.isNestedBlockRepeater();
 +    }
 +    
 +}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/BuiltIn.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/BuiltInWithParseTimeParameters.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/BuiltInsForMultipleTypes.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/BuiltInsForStringsMisc.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/BuiltinVariable.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/CallableInvocationContext.java
----------------------------------------------------------------------
diff --cc src/main/java/freemarker/core/CallableInvocationContext.java
index 7de4946,0000000..1d0f731
mode 100644,000000..100644
--- a/src/main/java/freemarker/core/CallableInvocationContext.java
+++ b/src/main/java/freemarker/core/CallableInvocationContext.java
@@@ -1,161 -1,0 +1,164 @@@
 +/*
-  * Copyright 2014 Attila Szegedi, Daniel Dekany, Jonathan Revusky
++ * 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
 + * 
-  * Licensed 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
 + * 
-  * 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.
++ * 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 freemarker.core;
 +
 +import java.io.IOException;
 +import java.util.ArrayList;
 +import java.util.Collection;
 +import java.util.HashSet;
 +import java.util.List;
 +
 +import freemarker.template.Template;
 +import freemarker.template.TemplateException;
 +import freemarker.template.TemplateModel;
 +import freemarker.template.TemplateModelException;
 +import freemarker.template.TemplateModelIterator;
 +
 +/**
 + * The local variables and such of an FTL macro or FTL function (or other 
future FTL callable) call.
 + */
 +class CallableInvocationContext implements LocalContext {
 +    final UnboundCallable callableDefinition;
 +    final Environment.Namespace localVars; 
 +    final TemplateElement nestedContent;
 +    final Environment.Namespace nestedContentNamespace;
 +    final Template nestedContentTemplate;
 +    final List nestedContentParameterNames;
 +    final ArrayList prevLocalContextStack;
 +    final CallableInvocationContext prevMacroContext;
 +    
 +    CallableInvocationContext(UnboundCallable callableDefinition,
 +            Environment env, 
 +            TemplateElement nestedContent,
 +            List nestedContentParameterNames) {
 +        this.callableDefinition = callableDefinition;
 +        this.localVars = env.new Namespace();
 +        this.nestedContent = nestedContent;
 +        this.nestedContentNamespace = env.getCurrentNamespace();
 +        this.nestedContentTemplate = env.getCurrentTemplate();
 +        this.nestedContentParameterNames = nestedContentParameterNames;
 +        this.prevLocalContextStack = env.getLocalContextStack();
 +        this.prevMacroContext = env.getCurrentMacroContext();
 +    }
 +    
 +    Macro getCallableDefinition() {
 +        return callableDefinition;
 +    }
 +
 +    void invoce(Environment env) throws TemplateException, IOException {
 +        sanityCheck(env);
 +        // Set default values for unspecified parameters
 +        if (callableDefinition.getNestedBlock() != null) {
 +            env.visit(callableDefinition.getNestedBlock());
 +        }
 +    }
 +
 +    // Set default parameters, check if all the required parameters are 
defined.
 +    void sanityCheck(Environment env) throws TemplateException {
 +        boolean resolvedAnArg, hasUnresolvedArg;
 +        Expression firstUnresolvedExpression;
 +        InvalidReferenceException firstReferenceException;
 +        do {
 +            firstUnresolvedExpression = null;
 +            firstReferenceException = null;
 +            resolvedAnArg = hasUnresolvedArg = false;
 +            for (int i = 0; i < callableDefinition.getParamNames().length; 
++i) {
 +                String argName = callableDefinition.getParamNames()[i];
 +                if (localVars.get(argName) == null) {
 +                    Expression valueExp = (Expression) 
callableDefinition.getParamDefaults().get(argName);
 +                    if (valueExp != null) {
 +                        try {
 +                            TemplateModel tm = valueExp.eval(env);
 +                            if (tm == null) {
 +                                if (!hasUnresolvedArg) {
 +                                    firstUnresolvedExpression = valueExp;
 +                                    hasUnresolvedArg = true;
 +                                }
 +                            } else {
 +                                localVars.put(argName, tm);
 +                                resolvedAnArg = true;
 +                            }
 +                        } catch (InvalidReferenceException e) {
 +                            if (!hasUnresolvedArg) {
 +                                hasUnresolvedArg = true;
 +                                firstReferenceException = e;
 +                            }
 +                        }
 +                    } else if (!env.isClassicCompatible()) {
 +                        boolean argWasSpecified = 
localVars.containsKey(argName);
 +                        throw new _MiscTemplateException(env,
 +                                new _ErrorDescriptionBuilder(new Object[] {
 +                                        "When calling macro ", new 
_DelayedJQuote(callableDefinition.getName()), 
 +                                        ", required parameter ", new 
_DelayedJQuote(argName),
 +                                        " (parameter #", Integer.valueOf(i + 
1), ") was ", 
 +                                        (argWasSpecified
 +                                                ? "specified, but had 
null/missing value."
 +                                                : "not specified.") 
 +                                }).tip(argWasSpecified
 +                                        ? new Object[] {
 +                                                "If the parameter value 
expression on the caller side is known to "
 +                                                + "be legally null/missing, 
you may want to specify a default "
 +                                                + "value for it with the 
\"!\" operator, like "
 +                                                + "paramValue!defaultValue." }
 +                                        : new Object[] { 
 +                                                "If the omission was 
deliberate, you may consider making the "
 +                                                + "parameter optional in the 
macro by specifying a default value "
 +                                                + "for it, like ", "<#macro 
macroName paramName=defaultExpr>", ")" }
 +                                        ));
 +                    }
 +                }
 +            }
 +        } while (resolvedAnArg && hasUnresolvedArg);
 +        if (hasUnresolvedArg) {
 +            if (firstReferenceException != null) {
 +                throw firstReferenceException;
 +            } else if (!env.isClassicCompatible()) {
 +                throw 
InvalidReferenceException.getInstance(firstUnresolvedExpression, env);
 +            }
 +        }
 +    }
 +
 +    /**
 +     * @return the local variable of the given name
 +     * or null if it doesn't exist.
 +     */ 
 +    public TemplateModel getLocalVariable(String name) throws 
TemplateModelException {
 +         return localVars.get(name);
 +    }
 +
 +    Environment.Namespace getLocals() {
 +        return localVars;
 +    }
 +    
 +    /**
 +     * Set a local variable in this macro 
 +     */
 +    void setLocalVar(String name, TemplateModel var) {
 +        localVars.put(name, var);
 +    }
 +
 +    public Collection getLocalVariableNames() throws TemplateModelException {
 +        HashSet result = new HashSet();
 +        for (TemplateModelIterator it = localVars.keys().iterator(); 
it.hasNext(); ) {
 +            result.add(it.next().toString());
 +        }
 +        return result;
 +    }
 +}

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/Configurable.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/DebugBreak.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/DirectiveCallPlace.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/Environment.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/EvalUtil.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/Expression.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/IfBlock.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/Include.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/LibraryLoad.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/Macro.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/MessageUtil.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/MethodCall.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/NewBI.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/NonUserDefinedDirectiveLikeException.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/ParseException.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/PropertySetting.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/StringLiteral.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/TemplateObject.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/ThreadInterruptionSupportTemplatePostProcessor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/TokenMgrError.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/991e284f/src/main/java/freemarker/core/UnboundCallable.java
----------------------------------------------------------------------
diff --cc src/main/java/freemarker/core/UnboundCallable.java
index 9e385d8,0000000..61e3da9
mode 100644,000000..100644
--- a/src/main/java/freemarker/core/UnboundCallable.java
+++ b/src/main/java/freemarker/core/UnboundCallable.java
@@@ -1,238 -1,0 +1,241 @@@
 +/*
-  * Copyright 2014 Attila Szegedi, Daniel Dekany, Jonathan Revusky
++ * 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
 + * 
-  * Licensed 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
 + * 
-  * 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.
++ * 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 freemarker.core;
 +
 +import java.util.Collections;
 +import java.util.List;
 +import java.util.Map;
 +
 +import freemarker.template.TemplateModel;
 +
 +/**
 + * Represents the definition of a macro or function (or other future callable 
entity) in the AST. For understanding
 + * related concepts more, see {@link BoundCallable}.
 + * 
 + * <p>
 + * Historical note: Prior to 2.4, the two concepts ({@link UnboundCallable} 
and {@link BoundCallable}) were these same,
 + * represented by {@link Macro}, which still exists due to backward 
compatibility constraints, but now is abstract and
 + * is implemented by this class. This class should not implement {@link 
TemplateModel} (which it does, because
 + * {@link Macro} implements it), but it had to, for backward compatibility.
 + * 
 + * @see BoundCallable
 + * 
 + * @since 2.4.0
 + */
 +class UnboundCallable extends Macro {
 +
 +    static final UnboundCallable NO_OP_MACRO = new UnboundCallable(".pass", 
 +            Collections.EMPTY_LIST, 
 +            Collections.EMPTY_MAP,
 +            null, false,
 +            TextBlock.EMPTY_BLOCK);
 +    
 +    final static int TYPE_MACRO = 0;
 +    final static int TYPE_FUNCTION = 1;
 +    
 +    private final String name;
 +    private final String[] paramNames;
 +    private final Map paramDefaults;
 +    private final String catchAllParamName;
 +    private final boolean function;
 +
 +    UnboundCallable(String name, List argumentNames, Map args, 
 +            String catchAllParamName, boolean function,
 +            TemplateElement nestedBlock) {
 +        this.name = name;
 +        this.paramNames = (String[]) argumentNames.toArray(
 +                new String[argumentNames.size()]);
 +        this.paramDefaults = args;
 +        
 +        this.function = function;
 +        this.catchAllParamName = catchAllParamName; 
 +        
 +        this.setNestedBlock(nestedBlock);
 +    }
 +    
 +    String[] getParamNames() {
 +        return paramNames;
 +    }
 +    
 +    Map getParamDefaults() {
 +        return paramDefaults;
 +    }
 +
 +    @Override
 +    public String getCatchAll() {
 +        return catchAllParamName;
 +    }
 +    
 +    @Override
 +    public String[] getArgumentNames() {
 +        return paramNames.clone();
 +    }
 +
 +    String[] getArgumentNamesInternal() {
 +        return paramNames;
 +    }
 +
 +    boolean hasArgNamed(String name) {
 +        return paramDefaults.containsKey(name);
 +    }
 +    
 +    @Override
 +    public String getName() {
 +        return name;
 +    }
 +
 +    @Override
 +    void accept(Environment env) {
 +        env.visitCallableDefinition(this);
 +    }
 +
 +    @Override
 +    protected String dump(boolean canonical) {
 +        StringBuilder sb = new StringBuilder();
 +        if (canonical) sb.append('<');
 +        sb.append(getNodeTypeSymbol());
 +        sb.append(' ');
 +        sb.append(_CoreStringUtils.toFTLTopLevelTragetIdentifier(name));
 +        if (function) sb.append('(');
 +        int argCnt = paramNames.length;
 +        for (int i = 0; i < argCnt; i++) {
 +            if (function) {
 +                if (i != 0) {
 +                    sb.append(", ");
 +                }
 +            } else {
 +                sb.append(' ');
 +            }
 +            String argName = paramNames[i];
 +            
sb.append(_CoreStringUtils.toFTLTopLevelIdentifierReference(argName));
 +            if (paramDefaults != null && paramDefaults.get(argName) != null) {
 +                sb.append('=');
 +                Expression defaultExpr = (Expression) 
paramDefaults.get(argName);
 +                if (function) {
 +                    sb.append(defaultExpr.getCanonicalForm());
 +                } else {
 +                    MessageUtil.appendExpressionAsUntearable(sb, defaultExpr);
 +                }
 +            }
 +        }
 +        if (catchAllParamName != null) {
 +            if (function) {
 +                if (argCnt != 0) {
 +                    sb.append(", ");
 +                }
 +            } else {
 +                sb.append(' ');
 +            }
 +            sb.append(catchAllParamName);
 +            sb.append("...");
 +        }
 +        if (function) sb.append(')');
 +        if (canonical) {
 +            sb.append('>');
 +            if (getNestedBlock() != null) {
 +                sb.append(getNestedBlock().getCanonicalForm());
 +            }
 +            sb.append("</").append(getNodeTypeSymbol()).append('>');
 +        }
 +        return sb.toString();
 +    }
 +    
 +    @Override
 +    String getNodeTypeSymbol() {
 +        return function ? "#function" : "#macro";
 +    }
 +    
 +    @Override
 +    boolean isShownInStackTrace() {
 +        return false;
 +    }
 +    
 +    @Override
 +    boolean isNestedBlockRepeater() {
 +        // Because of recursive calls
 +        return true;
 +    }
 +    @Override
 +    public boolean isFunction() {
 +        return function;
 +    }
 +
 +    @Override
 +    int getParameterCount() {
 +        return 1/*name*/ + paramNames.length * 2/*name=default*/ + 
1/*catchAll*/ + 1/*type*/;
 +    }
 +
 +    @Override
 +    Object getParameterValue(int idx) {
 +        if (idx == 0) {
 +            return name;
 +        } else {
 +            final int argDescsEnd = paramNames.length * 2 + 1;
 +            if (idx < argDescsEnd) {
 +                String paramName = paramNames[(idx - 1) / 2];
 +                if (idx % 2 != 0) {
 +                    return paramName;
 +                } else {
 +                    return paramDefaults.get(paramName);
 +                }
 +            } else if (idx == argDescsEnd) {
 +                return catchAllParamName;
 +            } else if (idx == argDescsEnd + 1) {
 +                return Integer.valueOf(function ? TYPE_FUNCTION : TYPE_MACRO);
 +            } else {
 +                throw new IndexOutOfBoundsException();
 +            }
 +        }
 +    }
 +
 +    @Override
 +    ParameterRole getParameterRole(int idx) {
 +        if (idx == 0) {
 +            return ParameterRole.ASSIGNMENT_TARGET;
 +        } else {
 +            final int argDescsEnd = paramNames.length * 2 + 1;
 +            if (idx < argDescsEnd) {
 +                if (idx % 2 != 0) {
 +                    return ParameterRole.PARAMETER_NAME;
 +                } else {
 +                    return ParameterRole.PARAMETER_DEFAULT;
 +                }
 +            } else if (idx == argDescsEnd) {
 +                return ParameterRole.CATCH_ALL_PARAMETER_NAME;
 +            } else if (idx == argDescsEnd + 1) {
 +                return ParameterRole.AST_NODE_SUBTYPE;
 +            } else {
 +                throw new IndexOutOfBoundsException();
 +            }
 +        }
 +    }
 +    
 +    @Override
 +    public String toString() {
 +        final UnboundTemplate unboundTemplate = getUnboundTemplate();
 +        return "UnboundCallable("
 +                + "name=" + getName()
 +                + ", isFunction=" + isFunction()
 +                + ", unboundTemplate"
 +                + (unboundTemplate != null ? ".sourceName=" + 
unboundTemplate.getSourceName() : "=null")
 +                + ")";
 +    }
 +
 +}

Reply via email to