xref: /aosp_15_r20/external/apache-velocity-engine/src/changes/changes.xml (revision 6626518d3d1a3a4cd21045b7974855fd6a3e2103)
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3
4    Licensed to the Apache Software Foundation (ASF) under one
5    or more contributor license agreements.  See the NOTICE file
6    distributed with this work for additional information
7    regarding copyright ownership.  The ASF licenses this file
8    to you under the Apache License, Version 2.0 (the
9    "License"); you may not use this file except in compliance
10    with the License.  You may obtain a copy of the License at
11
12      http://www.apache.org/licenses/LICENSE-2.0
13
14    Unless required by applicable law or agreed to in writing,
15    software distributed under the License is distributed on an
16    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17    KIND, either express or implied.  See the License for the
18    specific language governing permissions and limitations
19    under the License.
20
21-->
22<document>
23  <properties>
24    <title>Changelog</title>
25  </properties>
26
27  <body>
28    <release version="2.3" date="2021-02-27">
29        <action type="fix" dev="cbrisson" issue="VELOCITY-927">
30            Fix parser bug (newline and space inside an empty inline map definition).
31        </action>
32        <action type="new" dev="cbrisson" issue="VELOCITY-933">
33            Backported Spring framework Velocity Engine integration classes from Spring 4.x, in the new module <code>spring-velocity-support</code>.
34        </action>
35        <action type="fix" dev="wglass" issue="VELOCITY-931">
36            Let SecureUberspector block methods on ClassLoader and subclasses.
37        </action>
38        <action type="new" dev="cbrisson" due-to="mgrigorov">
39            Added Travis CI.
40        </action>
41        <action type="fix" dev="cbrisson" due-to="donnerpeter">
42            Don't leak classes via Stop.STOP_ALL stack trace.
43        </action>
44    </release>
45    <release version="2.2" date="2020-02-02">
46        <action type="new" dev="cbrisson">
47            Deprecated 2.1 flag <code>velocimacro.arguments.preserve_literals</code> in favor of
48            the new <code>valocimacro_enable_bc_mode</code> flag, which will also, like 1.7 does,
49            use global context values as defaults for missing macro arguments which do not have
50            an explicit default value.
51        </action>
52        <action type="fix" dev="cbrisson" issue="VELOCITY-926">
53            Fixed regression: Macro arguments names cannot collide with external references names
54        </action>
55        <action type="fix" dev="cbrisson" issue="VELOCITY-925">
56            Fixed macro calls without parenthesis eating the following newline in BC mode
57        </action>
58        <action type="fix" dev="cbrisson" issue="VELOCITY-924">
59            Fixed bad cache handling for java.lang.Class methods
60        </action>
61        <action type="fix" dev="cbrisson" issue="VELOCITY-923">
62            Fixed parser regression when || follow a Velocity expression
63        </action>
64        <action type="add" dev="cbrisson">
65            Added BigInteger and BigDecimal implicit conversions
66        </action>
67        <action type="fix" dev="cbrisson" issue="VELOCITY-919">
68            Fixed abnormal suppression of zero-width whitespaces
69        </action>
70        <action type="add" dev="cbrisson" issue="VELOCITY-917">
71            Added an example of how to build a customized parser where the '#', '$', '*' and '@'
72            can be replaced by any character
73        </action>
74        <action type="add" dev="cbrisson" issue="VELOCITY-916">
75            Added the <code>runtime.log.track_locations</code> debugging flag (disabled by default), which:
76            <ul>
77                <li>display a VTL stack trace on any error</li>
78                <li>Implement template location tracking with slf4j MDC tags: Once activated, an MDC-aware logger will be
79            able to display the <code>file</code>, <code>line</code> and <code>column</code> MDC tags</li>
80            </ul>
81        </action>
82        <action type="add" dev="cbrisson" issue="VELOCITY-915">
83            Added the following 1.7.x backward compatibility flags:
84            <ul>
85                <li><code>event_handler.invalid_references.quiet</code> - warn on invalid quiet references</li>
86                <li><code>event_handler.invalid_references.null</code> - warn on null references</li>
87                <li><code>event_handler.invalid_references.tested</code> - warn on invalid references tested with <code>#if()</code></li>
88            </ul>
89            Those three flags are false by default, but can be set to true to mimic 1.7.x behavior
90        </action>
91        <action type="fix" dev="cbrisson">
92            Introspection: favor non-vararg methods on ambiguities as does the Java compiler
93        </action>
94        <action type="fix" dev="cbrisson" issue="VELOCITY-912">
95            Also allow hyphen in subproperties when the corresponding backward compatibility flag is on
96        </action>
97    </release>
98    <release version="2.1" date="2019-03-15">
99        <action type="fix" dev="cbrisson" issue="VELOCITY-909">
100            Reorganization of configuration properties key names, for clarity and consistency,
101            see the <a href="configuration-property-changes-in-2.1.html">table of correspondance</a>
102        </action>
103        <action type="fix" dev="cbrisson">
104            Rendering of arrays should display their content, as for lists
105        </action>
106        <action type="fix" dev="cbrisson">
107            Enhance space gobbling ("lines" mode): do not eat ending newline when directive doesn't start after a newline
108        </action>
109        <action type="fix" dev="cbrisson">
110            Fix unary negate
111        </action>
112        <action type="add" dev="cbrisson" issue="VELOCITY-892">
113            Deprecate the Class to Class CoversionHandler in favor of a Class to Type TypeConversionHandler, which allows
114            to specity converters towards generic types specializations. The minimum JDK is now 1.8
115        </action>
116        <action type="fix" dev="michaelo" issue="VELOCITY-908">
117            Rely on Locale.ROOT for lowercase/uppercase operations
118        </action>
119        <action type="add" dev="cbrisson" issue="VELOCITY-904">
120            Added the <code>velocimacro.preserve.arguments.literals</code> flag (false by default), for backward compatibility.
121            When true, for any macro argument that evaluates to null, the macro will display the provided argument literal representation
122            instead of the literal argument reference
123        </action>
124        <action type="add" dev="cbrisson" issue="VELOCITY-903">
125            Default block for empty loops: <code>#foreach($i in []) loop block #else empty #end</code>
126        </action>
127        <action type="fix" dev="cbrisson" issue="VELOCITY-888">
128            Include proper OSGi bundle informations in manifest files
129        </action>
130        <action type="add" dev="cbrisson" issue="VELOCITY-898">
131            Alternate reference values: <code>${foo|'foo'}</code> evaluates to false whenever boolean evaluation of $foo is false
132        </action>
133        <action type="fix" dev="cbrisson" issue="VELOCITY-889">
134            Fix parser regression in #macro whitespaces handling
135        </action>
136        <action type="add" dev="cbrisson" issue="VELOCITY-542">
137            Added a new 'parser.allow_hypen_in_identifiers' boolean property (false per default) to (dis)allow '-' in reference identifiers
138        </action>
139        <action type="fix" dev="cbrisson" issue="VELOCITY-896">
140            Fix parsing of a terminal hash or dollar sign in sing litteral and template
141        </action>
142        <action type="fix" dev="cbrisson" issue="VELOCITY-895">
143            Implicit conversion to numbers in integer ranges
144        </action>
145    </release>
146    <release version="2.0" date="2017-08-06">
147
148      <action type="fix" dev="cbrisson">
149          Fix DataSourceResourceLoader for UTF-8 correct handling in VARCHAR/CLOB columns, and for connection / statement / result set life cycle
150      </action>
151
152      <action type="add" dev="cbrisson">
153          Allow expressions inside []: <code>$foo[$bar + 1]</code>
154      </action>
155
156      <action type="add" dev="cbrisson">
157          New strategy for reference boolean evaluation:
158          <ol>
159              <li>return false for a null object</li>
160              <li>return its value for a Boolean object, or the result of the <code>getAsBoolean()</code> method if it exists.</li>
161              <li>if <code>directive.if.emptycheck</code> is false (true by default), stop here and return true.</li>
162              <li>check for emptiness:
163                <ul>
164                    <li>return whether an array is empty.</li>
165                    <li>return whether <code>isEmpty()</code> is false (covers String and all Collection classes).</li>
166                    <li>return whether <code>length()</code> is zero (covers CharSequence classes other than String).</li>
167                    <li>returns whether <code>size()</code> is zero.</li>
168                    <li>return whether a Number <b>strictly</b> equals zero.</li>
169                </ul>
170              </li>
171              <li>check for emptiness after explicit conversion methods:
172                <ul>
173                    <li>return whether the result of <code>getAsString()</code> is empty (and false for a null result) if it exists.</li>
174                    <li>return whether the result of <code>getAsNumber()</code> <b>strictly</b> equals zero (and false for a null result) if it exists.</li>
175                </ul>
176              </li>
177          </ol>
178      </action>
179
180      <action type="add" dev="cbrisson">
181        Reviewed event handling API:
182        <ul>
183          <li>added a Context argument for all events</li>
184          <li>got rid of the Executor pattern ; event handlers are directly called by the cartridge</li>
185        </ul>
186      </action>
187
188      <action type="add" dev="cbrisson">
189        Removed references to ExtProperties from the engine configuration API.
190      </action>
191
192      <action type="add" dev="cbrisson">
193         Default encoding is now UTF-8.
194      </action>
195
196      <action type="add" dev="cbrisson">
197          Make Velocity use the base logger namespace 'org.apache.velocity' unless specified with runtime.log.name in the configuration, and have the runtime instance log with this base namespace, and other modules log with children namespaces:
198          <ul>
199              <li>directive, and velocity.directive.[directivename]</li>
200              <li>parser</li>
201              <li>loader and loader.[loadername]</li>
202              <li>macro</li>
203              <li>rendering</li>
204              <li>event</li>
205          </ul>
206          Get rid of UberspectLoggable interface.
207      </action>
208
209      <action type="add" dev="cbrisson">
210	      Added unary negate math operator
211      </action>
212
213      <action type="add" dev="cbrisson">
214        Add a configurable space gobbling feature, to control indentation in the generated code.
215        <br/>
216        Possible values for the 'space.gobbling' configuration key:
217        <ul>
218          <li><code>none</code> : no space gobbling at all</li>
219          <li><code>bc</code> : Velocity 1.x backward compatible space gobbling</li>
220          <li><code>lines</code> (the default) : gobbles whitespaces and endline from lines containing a single VTL directive</li>
221          <li><code>structured</code> : like 'lines', but also fixes indentation in children text blocks</li>
222        </ul>
223      </action>
224
225      <action type="add" dev="cbrisson">
226        added a new pluggable ConversionHandler class which, by default, converts method arguments as needed between main basic Java data types (boolean, numbers and strings)
227      </action>
228
229      <action type="add" dev="cbrisson">
230        added a runtime.string.interning option to trigger Java String interning on or off
231      </action>
232
233      <action type="add" dev="cbrisson" issue="VELOCITY-841" due-to="Jarkko Viinamäki">
234        Applied Jarkko memory-saving patch which frees tokens while parsing. Macros now use a call by sharing convention.
235      </action>
236
237      <action type="fix" dev="cbrisson" issue="VELOCITY-843">
238        support $array.empty, as for $list.empty
239      </action>
240
241      <action type="fix" dev="cbrisson" issue="VELOCITY-833" due-to="Jarkko Viinamäki">
242        avoid useless string calculation in ASTStringLiteral
243      </action>
244
245      <action type="add" dev="cbrisson">
246        nicified AST tree debug output
247      </action>
248
249      <action type="fix" dev="cbrisson" issue="VELOCITY-830">
250        fix parsing of $obj._method()
251      </action>
252
253      <action type="fix" dev="cbrisson" issue="VELOCITY-827" due-to="Dawid Weiss">
254        loading default properties should not prepend '/' and should use classloader to get resource stream
255      </action>
256
257      <action type="add" dev="cbrisson" issue="VELOCITY-825">
258         Allow conversion of method args from String to Enum constant
259      </action>
260
261      <action type="fix" dev="cbrisson" issue="VELOCITY-815" due-to="Oswaldo Hernandez">
262        Applied performance patch for MapGetExecutor: it's faster to directly use object
263        instance rather than to inspect all public interfaces
264      </action>
265
266      <action type="add" dev="cbrisson" issue="VELOCITY-799">
267        The new configuration property context.autoreference.key, if present, allows to specify the name
268        of the reference under which the context is accessible in itself
269      </action>
270
271      <action type="add" dev="cbrisson" issue="VELOCITY-746">
272        MethodExceptionEventHandler now provide template location infos
273      </action>
274
275      <action type="fix" dev="cbrisson" issue="VELOCITY-797" due-to="Jarkko Viinamäki">
276        Attach macros to their defining template. Also fixes VELOCITY-776. Thanks to Simon Kitching for the multithreading testcase.
277      </action>
278
279      <action type="fix" dev="cbrisson" issue="VELOCITY-820" due-to="Robert Fuller">
280        have #foreach honnor the Closeable interface on the iterator
281      </action>
282
283      <action type="fix" dev="cbrisson" issue="VELOCITY-804" due-to="Felipe Maschio">
284        Don't leave 'initializing' to true if a problem occurs during initialization.
285      </action>
286
287      <action type="add" dev="cbrisson" issue="VELOCITY-790">
288        Remove dependency upon commons-collections-3 (except at compile-time for deprecated methods and classes
289        which are needed for backward compatibility), use our own ExtProperties object.
290      </action>
291
292      <action type="add" dev="cbrisson" issue="VELOCITY-735" due-to="Dishara Wijewardana">
293        Add a first implementation for the JSR 223 standard scripting interface.
294      </action>
295
296      <action type="fix" dev="cbrisson" issue="VELOCITY-809">
297        Fix Template default encoding initialization problem.
298      </action>
299
300      <action type="add" dev="cbrisson" issue="VELOCITY-793">
301        The ResourceLoader API now provides a Reader rather than an InputStream.
302        Also fixes VELOCITY-599.
303      </action>
304
305      <action type="fix" dev="cbrisson" issue="VELOCITY-553">
306        InvalidReferenceHandler events should not be triggered by quiet references, null values,
307        or by references testing inside #if / #elseif. Thanks to Renato Steiner
308        for his testcase.
309      </action>
310
311      <action type="fix" dev="cbrisson" issue="VELOCITY-266">
312        Take advantage of the major version jump to enforce String keys
313        in internal Context API
314      </action>
315
316      <action type="fix" dev="sdumitriu" issue="VELOCITY-863" due-to="Mike Kienenberger">
317        Fix regression: #set&lt;tab&gt;left-paren no longer valid grammar
318        Patch from Mike Kienenberger applied + added test
319      </action>
320
321      <action type="add" dev="cbrisson">
322        switch to slf4j logging facade
323      </action>
324
325      <action type="fix" dev="cbrisson">
326        fix parser for '$map{key}' text rendering (StackOverflow 32805217)
327      </action>
328
329      <action type="fix" dev="sdumitriu" issue="VELOCITY-869">
330        Vulnerability in dependency: commons-collections: 3.2.1
331      </action>
332
333      <action type="fix" dev="sdumitriu" issue="VELOCITY-870">
334        Exception displayed when trying to loop over an Iterable private class
335      </action>
336
337      <action type="fix" dev="sdumitriu" issue="VELOCITY-871">
338        #foreach should work over any Iterable class
339      </action>
340
341      <action type="fix" dev="sdumitriu">
342        Catch exceptions raised during chainable uberspector initialization
343      </action>
344
345      <action type="fix" dev="cbrisson" issue="VELOCITY-542">
346        Hypen is no more allowed in variable names
347      </action>
348
349      <action type="add" dev="cbrisson" issue="VELOCITY-706">
350        Method arguments can now be expressions
351      </action>
352
353      <action type="add" dev="cbrisson" issue="VELOCITY-819" due-to="Jarkko Viinamäki">
354        Parser generation from the .jjt file is now handled by Maven
355      </action>
356
357      <action type="add" dev="cbrisson" issue="VELOCITY-12" due-to="Candid Dauth">
358        Add a public fields Uberspector
359      </action>
360
361      <action type="add" dev="nbubna" issue="VELOCITY-814" due-to="Darren Cruse">
362        Support query modification in DataSourceResourceLoader
363      </action>
364
365      <action type="add" dev="nbubna" issue="VELOCITY-813" due-to="Oswaldo Hernandez">
366         Add clear() to ResourceCache
367      </action>
368
369      <action type="fix" dev="nbubna" issue="VELOCITY-692">
370        Make #if() return false for empty strings and empty collections
371      </action>
372
373      <action type="add" dev="apetrelli">
374        Add SLF4J logging option
375      </action>
376
377      <action type="add" dev="apetrelli">
378        Use Maven 2 as build system
379      </action>
380
381      <action type="fix" dev="cbrisson" issue="VELOCITY-785" due-to="Jarkko Viinamäki">
382        Fixed quotes escaping so that doubling single quotes only works when enclosing quotes are single quotes
383        (and same behaviour for double quotes)
384      </action>
385
386      <action type="fix" dev="nbubna" issue="VELOCITY-751">
387    Removed all remaining "throws Exception" clauses and the now useless ExceptionUtils class.
388      </action>
389
390      <action type="add" dev="nbubna" issue="VELOCITY-731">
391    Remove directive.if.tostring.nullcheck crutch with intent
392    to replace testing of toString() null status with support for
393    toBoolean() (or similar) method on objects being "#if'd".
394      </action>
395
396      <action type="add" dev="nbubna">
397    Remove directive.set.null.allowed and instead always allow null to be
398    #set to references.  This also means removing all NullSetEventHandler
399    code, since it was only in play when nulls were not allowed to be #set.
400      </action>
401
402      <action type="add" dev="nbubna" issue="VELOCITY-704">
403    Remove features deprecated in 1.7 ($velocityCount, $velocityHasNext,
404    velocimacro.context.localscope, directive.evaluate.context.class and
405    all internal supporting code (ProxyVMContext, EvaluateContext, etc).
406      </action>
407
408        <action type="add" dev="byron" issue="VELOCITY-697">
409	  Add ability to specify default values for macro parameters, e.g.;
410	  #macro(foo bar=1)
411	</action>
412
413        <action type="add" dev="byron" issue="VELOCITY-695">
414	  Add ability to place line comments next to macro parameter definitions.
415	</action>
416
417        <action type="add" dev="byron" issue="VELOCITY-690">
418	  Block directives no longer require parenthesis so #@foo #end is now allowed.
419	  Also, brackets now work with Block Macros so #{@foo}bar#end works.
420	</action>
421
422        <action type="fix" dev="nbubna">
423          Removed all deprecations (Anakia, Texen, VelocityServlet, etc.)
424        </action>
425
426        <action type="add" dev="byron" issue="VELOCITY-687">
427          Changed macro arguments to be pass by value.
428        </action>
429
430    </release>
431
432    <release version="1.7" date="2010-11-29">
433      <action type="fix" dev="cbrisson" issue="VELOCITY-785" due-to="Jarkko Viinamäki">
434        Fixed quotes escaping so that doubling single quotes only works when enclosing quotes are single quotes
435        (and same behaviour for double quotes)
436      </action>
437
438      <action type="add" dev="nbubna">
439    Add access to template and directive debugging info via $/scope/.info.
440      </action>
441
442      <action type="fix" dev="nbubna" issue="VELOCITY-766">
443    LogManager now catches UnsupportedOperationExceptions during LogChute init.
444      </action>
445
446      <action type="fix" dev="nbubna" issue="VELOCITY-760" due-to="Jarkko Viinamäki">
447    Ensure that DataSourceResourceLoader closes PreparedStatements.
448      </action>
449
450      <action type="fix" dev="nbubna" issue="VELOCITY-753" due-to="Matt Ryall">
451    Mark optional dependencies as such in OSGi bundle manifest.
452      </action>
453    </release>
454
455    <release version="1.7-beta1" date="2010-04-10">
456      <action type="add" dev="nbubna" issue="VELOCITY-694">
457    Add support for OSGi-ready manifests in build/release tasks.
458      </action>
459
460      <action type="fix" dev="nbubna" issue="VELOCITY-753">
461    When comparing parameter types during method mapping, make Object always less specific than other types.
462      </action>
463
464      <action type="fix" dev="nbubna" issue="VELOCITY-759" due-to="Rachid">
465    Avoid NPEs in case of bad #foreach config.
466      </action>
467
468      <action type="add" dev="nbubna" issue="VELOCITY-755">
469    Use LinkedHashMap to maintain order of VTL-created maps.
470      </action>
471
472      <action type="fix" dev="nbubna" issue="VELOCITY-555" due-to="Jarkko Viinamäki">
473    Treat \ as non-special in string literals, except when specifying unicode sequences.
474      </action>
475
476      <action type="add" dev="nbubna" issue="VELOCITY-555" due-to="Jarkko Viinamäki">
477    Allow escaping of quotes (single or double) within string literals by doubling them ("" or '').
478      </action>
479
480      <action type="fix" dev="nbubna" issue="VELOCITY-758" due-to="Jarkko Viinamäki">
481    Give #parse better log/exception messages and give IncludeEventHandler a chance to handle null #parse args.
482      </action>
483
484      <action type="fix" dev="nbubna" issue="VELOCITY-754,VELOCITY-729" due-to="Jarkko Viinamäki">
485    Fix $.x parsing failures (particularly helpful for jQuery users).
486      </action>
487
488      <action type="add" dev="nbubna" issue="VELOCITY-744">
489    Log Velocimacro additions at debug level, as in pre-1.6 versions.
490      </action>
491
492      <action type="add" dev="nbubna" issue="VELOCITY-742" due-to="Jarkko Viinamäki">
493    Add removeDirective(name) and loadDirective(classname) methods to allow runtime changes to the directive set.
494      </action>
495
496      <action type="fix" dev="nbubna" issue="VELOCITY-727" due-to="Jarkko Viinamäki">
497    Throw an informative VelocityException when #define is given no parameter (instead of an ArrayIndexOutOfBoundsException).
498      </action>
499
500      <action type="fix" dev="nbubna" issue="VELOCITY-728" due-to="Jarkko Viinamäki">
501    Throw an informative VelocityException when #parse is given no args (instead of an NPE).
502      </action>
503
504      <action type="add" dev="nbubna" issue="VELOCITY-704">
505    Changed #stop to a directive implementation (get it out of the parser)
506    and allow it to accept a message as an argument to be written to the logs
507    for debugging purposes.
508      </action>
509
510      <action type="add" dev="nbubna" issue="VELOCITY-704">
511    Change the scoping behavior of Velocity, keeping it optional (everything global
512    scoped by default) but now providing an explicit namespace in content-containing
513    directives (like macros, #foreach, #parse, etc.) in which references that should
514    stay local may be kept. This is accompanied by numerous related changes, including:
515    &lt;ul&gt;
516    &lt;li&gt;A Scope reference can now be automatically made
517              available within each content directive:
518        &lt;ul&gt;
519        &lt;li&gt;$template in Template.merge and #parse content&lt;li&gt;
520        &lt;li&gt;$macro in #macro&lt;/li&gt;
521        &lt;li&gt;$foreach in #foreach&lt;/li&gt;
522        &lt;li&gt;$evaluate in #evaluate or Velocity.evaluate(...) content&lt;/li&gt;
523        &lt;li&gt;$define in #define&lt;/li&gt;
524        &lt;li&gt;$&amp;lt;amacro&amp;gt; in #@&amp;lt;amacro&amp;gt;
525              (where &amp;lt;amacro&amp;gt; is the name of a macro being called with a body)&lt;/li&gt;
526        &lt;/ul&gt;
527    &lt;/li&gt;
528    &lt;li&gt;For performance and compatibility these are all off by
529    default, *except* for $foreach. The others may be enabled by setting a velocity property like:
530        &lt;br/&gt;&lt;code&gt;macro.provide.scope.control = true&lt;/code&gt;&lt;/li&gt;
531    &lt;li&gt;When scopes of the same type are nested make the parent Scope available
532        through the child (e.g. $foreach.parent or $foreach.topmost).&lt;/li&gt;
533    &lt;li&gt;When a Scope reference overrides an existing reference that is not a Scope,
534        make it available through the Scope (e.g. $foreach.replaced).&lt;/li&gt;
535    &lt;li&gt;Made #break work in any of the above scopes to exit the most immediate one,
536        unless a different scope is provided as an argument
537        (e.g. #break($macro) or #break($foreach.topmost)).&lt;/li&gt;
538    &lt;li&gt;Deprecated $velocityCount;
539        please use $foreach.count or $foreach.index.&lt;/li&gt;
540    &lt;li&gt;Deprecated $velocityHasNext;
541        please use $foreach.hasNext, $foreach.first or $foreach.last&lt;/li&gt;
542    &lt;li&gt;Deprecated velocimacro.context.localscope setting;
543        please get/set local #macro references as members of the provided $macro
544        scope control instead. (e.g. #set( $macro.foo = 'bar' ) and $macro.foo ).&lt;/li&gt;
545    &lt;li&gt;Deprecated directive.evaluate.context.class setting;
546        please get/set local #evaluate references as members of the provided $evaluate
547        scope control instead. (e.g. #set( $evaluate.foo = 'bar' ) and $evaluate.foo ).&lt;/li&gt;
548    &lt;/ul&gt;
549    All of the deprecated features will be removed in Velocity 2.0.
550      </action>
551
552      <action type="add" dev="nbubna" issue="VELOCITY-681">
553    Calling #set on a macro argument (for which a #set-able reference
554    was passed) will no longer propagate the new value to the original
555    reference, but merely set the value of the macro argument reference.
556    This was an obscure, infrequently used feature and was decided to be
557    more problematic and unpredictable than useful.
558      </action>
559
560      <action type="add" dev="byron"  issue="VELOCITY-688">
561	In strict mode attempts to render references that evaluate to
562	null will throw an exception.  In the user wishes to suppress
563	the exception and render nothing then the reference can be
564	preceeded with '$!' as in $!foo.
565      </action>
566
567      <action type="add" dev="byron"  issue="VELOCITY-673">
568	The non default VelocityEngine construtors now do not initialize the runtime
569	system so that properties may be set after construction.  Also fixes an
570	Initialization race condition.
571      </action>
572
573      <action type="fix" dev="nbubna" issue="VELOCITY-685" due-to="Jarkko Viinamäki">
574        Make velocimacro.arguments.strict=true work with block macros.
575      </action>
576
577      <action type="add" dev="byron" issue="VELOCITY-623">
578	Added a property for changing escape behavior such that putting a forward
579	slash before a reference or macro always escapes the reference or macro and
580	absorbs the forward slash regardless if the reference or macro is defined.
581      </action>
582
583      <action type="fix" dev="nbubna" issue="VELOCITY-676" due-to="Jarkko Viinamäki">
584        Fix StringIndexOutOfBoundsException caused by #[[##x]]# (line comment on
585        same line as end of textblock).
586      </action>
587
588      <action type="fix" dev="nbubna" issue="VELOCITY-675" due-to="Jarkko Viinamäki">
589        Fix NPE caused by #@foo (w/o #end) in template.
590      </action>
591
592      <action type="add" dev="byron" issue="VELOCITY-668" due-to="Jarkko Viinamäki">
593	Minor performance tweaks based on Findbugs findings
594      </action>
595
596      <action type="fix" dev="byron" issue="VELOCITY-667">
597	Pre 1.6 behavior of specifying #macro without parenthesis
598	would throw a VelocityException has been restored.
599      </action>
600
601      <action type="add" dev="nbubna" issue="VELOCITY-666" due-to="Jarkko Viinamaki"><![CDATA[
602        Add support for calling velocimacros with body content by prefixing the macro
603        name with @.
604        (e.g. #macro( bold )<strong>$bodyContent</strong>#end #@bold()any valid VTL here#end)
605        The $bodyContent reference may be renamed via a velocimacro.body.reference
606        setting in your velocity.properties.
607      ]]></action>
608
609      <action type="fix" dev="nbubna" issue="VELOCITY-661" due-to="Jarkko Viinamaki">
610        Added #[[this is included in output but not parsed]]# syntax to replace
611        and deprecate the much more limited #literal directive
612        (which required parse-able content).
613      </action>
614
615      <action type="add" dev="byron" issue="VELOCITY-663">
616	Re-implement #stop so that it stops template execution and rendering.  This
617	Also addresses a performance bottleneck detected in the old implementation.
618	#stop is a general use directive now, and not just for debugging.
619      </action>
620
621      <action type="add" dev="byron" issue="VELOCITY-662">
622	Reduce performance bottleneck with the referenceInsert event handler call
623      </action>
624
625      <action type="add" dev="byron" issue="VELOCITY-656">
626	Better error reporting when toString() throw an exception when testing
627	an #if conditional. For example #if($foo)
628      </action>
629
630      <action type="add" dev="byron" issue="VELOCITY-406">
631 	  Added bracketed index syntax, $foo[0], or #set($foo[0] = 1)
632      </action>
633
634      <action type="add" dev="byron" issue="VELOCITY-659">
635          Removed java.lang.Exception from throws clause of Velocity
636          and VelocityEngine API. Also removed IOException so that all
637          method calls use unchecked exceptions.
638      </action>
639
640      <action type="add" dev="nbubna">
641          Removed obsolete WebMacro conversion tool and experimental Veltag
642          (which has been replaced by VelocityViewTag from VelocityTools).
643      </action>
644
645    </release>
646
647    <release version="1.6.4" date="2010-05-10">
648        <action type="fix" dev="nbubna" issue="VELOCITY-750">
649            Fix double-checked locking in RuntimeInstance's optional lazy-init.
650        </action>
651        <action type="fix" dev="nbubna" issue="VELOCITY-718">
652            Fix 100% CPU loop hang under simultaneous HashMap calls in ClassMap
653            due to classic bug in Sun's implementation.  Now uses
654            ConcurrentHashMap when available and Hashtable otherwise.
655        </action>
656    </release>
657
658    <release version="1.6.3" date="2009-12-16">
659        <action type="fix" dev="nbubna" issue="VELOCITY-731" due-to="Jorgen Rydenius">
660            Add directive.if.tostring.nullcheck config switch to match
661            past performance for those who do not need to check whether
662            $foo.toString() returns null when doing #if( $foo ).
663        </action>
664    </release>
665
666    <release version="1.6.2" date="2009-03-19">
667
668      <action type="fix" dev="nbubna" issue="VELOCITY-702">
669        Fix obscure caching problem in multiple resource loader situations
670        where resources may exist in more than one loader and appear and
671        disappear from loaders.
672      </action>
673
674      <action type="fix" dev="nbubna" issue="VELOCITY-701">
675        Fix old regression from 1.4 in supporting methods declared as abstract
676        in a public class but implemented in a non-public class.
677      </action>
678
679      <action type="fix" dev="nbubna" issue="VELOCITY-693">
680        Fix problem with FileResourceLoader's resourceExists() when
681        configured w/multiple paths.
682      </action>
683
684      <action type="fix" dev="nbubna" issue="VELOCITY-689">
685        Fix ClassMap introspection bug introduced in 1.5,
686        where public super-interface methods implemented in
687        protected or private classes were unreachable.
688      </action>
689
690      <action type="fix" dev="nbubna" issue="VELOCITY-681">
691        Fix regression in proxying of macro argument #set calls.
692        Note that in 1.7, calling #set on a macro argument (for
693        which a #set-able reference was passed) will not propagate
694        the new value to the original reference, but merely set the
695        value of the macro argument reference.
696      </action>
697
698      <action type="fix" dev="nbubna" issue="VELOCITY-682">
699        Fix loss of inline macros when #evaluate is used.
700      </action>
701
702      <action type="fix" dev="nbubna" issue="VELOCITY-554" due-to="Adrian Tarau">
703        Fix name of sources jar for maven deployment.
704      </action>
705
706      <action type="fix" dev="byron" issue="VELOCITY-667">
707         Pre 1.6 behavior of specifying #macro without parenthesis
708         would throw a VelocityException has been restored.
709      </action>
710
711      <action type="add" dev="byron" issue="VELOCITY-656">
712     Better error reporting when toString() throw an exception
713     when testing an #if conditional. For example #if($foo)
714      </action>
715
716      <action type="fix" dev="byron" issue="VELOCITY-658" due-to="Jarkko Viinamäki">
717          Fix $velocityHasNext so that it works in nested foreach blocks.
718      </action>
719
720      <action type="fix" dev="byron" issue="VELOCITY-645">
721          Throw an exception in strict mode when >=, &lt;=, &lt; or >
722          comparisons can't be made.
723      </action>
724
725      <action type="fix" dev="cbrisson" issue="VELOCITY-657">
726          Fix $velocityHasNext so it is not always true.
727      </action>
728
729    </release>
730
731    <release version="1.6.1" date="2008-12-15">
732
733      <action type="fix" dev="nbubna" issue="VELOCITY-654" due-to="Byron Foster">
734          Correct/enhance template name reporting for #include and #parse.
735      </action>
736
737      <action type="fix" dev="nbubna" issue="VELOCITY-653" due-to="Byron Foster">
738          Removed redundant error message in ASTReference.
739      </action>
740
741      <action type="fix" dev="nbubna" issue="VELOCITY-615" due-to="Steve O'Hara">
742          Fix limitation in new macro implementation that resisted #set calls
743          to change references defined as arguments for the macro.
744      </action>
745
746      <action type="fix" dev="nbubna" issue="VELOCITY-651" due-to="Stephan Schmid">
747          Fix vararg bugs when calling overloaded methods like get(String,String,Object[])
748          and get(String,List). (e.g. in VelocityStruts' MessageTool)
749      </action>
750
751    </release>
752
753    <release version="1.6" date="2008-12-01">
754
755      <action type="fix" dev="nbubna" issue="VELOCITY-649" due-to="Byron Foster">
756          Fix NPE when null value is passed to array/vararg method.
757      </action>
758
759      <action type="fix" dev="nbubna" issue="VELOCITY-644" due-to="Byron Foster">
760          Track template name in Node, to get proper template name in the exception
761          message when a reference in a macro causes that exception.
762      </action>
763
764      <action type="fix" dev="nbubna" issue="VELOCITY-352" due-to="Gonzalo Diethelm, Joni Salonen">
765          Update Finnish and Spanish User Guide sections on division operation.
766      </action>
767
768      <action type="fix" dev="nbubna" issue="VELOCITY-641" due-to="Will Glass-Husain">
769          Fix classpath for XMLApp example.
770      </action>
771
772      <action type="fix" dev="nbubna" issue="VELOCITY-617" due-to="Adrian Tarau">
773          Fix references to Oro dependency to make it clear that it is
774          only necessary for certain reference event handlers.
775      </action>
776
777      <action type="fix" dev="nbubna" issue="VELOCITY-640" due-to="Will Glass-Husain">
778          Remove old Anakia/Texen docs and examples.
779      </action>
780
781      <action type="fix" dev="nbubna" issue="VELOCITY-642" due-to="Ilkka Priha">
782          Fix bug in vararg support where an array passed to a vararg method
783          was being wrapped in another array.
784      </action>
785
786      <action type="fix" dev="nbubna" issue="VELOCITY-638" due-to="Benjamin Bentmann">
787          Locked down versions for reporting plugins in Maven POM.
788      </action>
789
790      <action type="add" dev="nbubna" issue="VELOCITY-466" due-to="Adrian Tarau">
791          Add Maven-Ant tasks for installing and deploying Maven artifacts, including
792          previously missing source and javadoc jars (VELOCITY-554).
793      </action>
794
795    </release>
796
797    <release version="1.6-beta2" date="2008-10-26">
798
799      <action type="fix" dev="nbubna" issue="VELOCITY-632" due-to="Sebb">
800          Fix User Guide's Table of Contents anchor links.
801      </action>
802
803      <action type="fix" dev="nbubna" issue="VELOCITY-631" due-to="Byron Foster">
804          Fix parser bug that prevented references from immediately preceding #set directives.
805      </action>
806
807      <action type="fix" dev="nbubna" issue="VELOCITY-630" due-to="Byron Foster">
808          Revert change made for VELOCITY-285, as it broke pass-by-name nature
809          of macro arguments.
810      </action>
811
812      <action type="fix" dev="nbubna" issue="VELOCITY-629" due-to="Byron Foster">
813          Fix line numbers in string literals.
814      </action>
815
816      <action type="fix" dev="nbubna" issue="VELOCITY-627" due-to="Byron Foster">
817          Fix line number for exceptions with body of #foreach directive.
818      </action>
819
820      <action type="add" dev="nbubna" issue="VELOCITY-626" due-to="Byron Foster">
821          Log full macro stack when a RuntimeException occurs in a template.
822      </action>
823
824      <action type="add" dev="nbubna" issue="VELOCITY-622" due-to="Byron Foster">
825          Format template and line/column numbers consistently in error and log messages.
826      </action>
827
828      <action type="fix" dev="nbubna" issue="VELOCITY-624" due-to="Byron Foster">
829          Don't override pre-configured log levels for JdkLogChute or Log4JLogChute.
830      </action>
831
832      <action type="add" dev="nbubna" issue="VELOCITY-618" due-to="Byron Foster">
833          Add optional 'runtime.references.strict' property that has Velocity throw
834          exceptions when it encounters undefined references or velocimacros in a template.
835      </action>
836
837      <action type="add" dev="nbubna" issue="VELOCITY-554" due-to="Adrian Tarau">
838          Inlude Maven Ant tasks jar in downloads and add support for downloading from Maven2 repos.
839      </action>
840
841      <action type="fix" dev="nbubna" issue="VELOCITY-585" due-to="Jon Seymour">
842          Fix problem with single backslash in interpolated (double-quoted) strings.
843      </action>
844
845      <action type="fix" dev="nbubna" issue="VELOCITY-616" due-to="Alik">
846          Fix escaping of bracketed directives (e.g. \#{if}($foo)$bar\#{end}).
847      </action>
848
849    </release>
850
851    <release version="1.6-beta1" date="2008-09-22">
852
853      <action type="add" dev="cbrisson" issue="VELOCITY-588" due-to="Vincent Massol, Sergiu Dumitriu">
854          Uberspectors chaining
855      </action>
856
857      <action type="add" dev="nbubna" issue="VELOCITY-585" due-to="Tim White">
858          Add ability to set a connection timeout for URLResourceLoader.
859      </action>
860
861      <action type="add" dev="nbubna" issue="VELOCITY-227" due-to="Charles Morehead">
862          Make it easier to override ResourceFactory.getResource(...) in ResourceManagerImpl.
863      </action>
864
865      <action type="add" dev="nbubna" issue="VELOCITY-544" due-to="Adam Bishop, Jarkko Viinamaki">
866          Fix BooleanPropertyExecutor to recognize "public Boolean isFoo" properties.
867      </action>
868
869      <action type="add" dev="nbubna" issue="VELOCITY-439" due-to="Tassos Bassoukos, Henning Schmiedehausen">
870          Add a separate resourceExists(String name) method to ResourceLoader(s) to improve performance.
871      </action>
872
873      <action type="add" dev="nbubna" issue="VELOCITY-355" due-to="Geoffrey Lowney, Dan Ertman">
874          Fix missing # and $ characters within #literal() directive output.
875      </action>
876
877      <action type="add" dev="nbubna" issue="VELOCITY-102" due-to="Juozas Baliuka, Adrian Tarau, Jim Seach">
878          Add support for static utility classes: context.put("math", Math.class) -> $math.sin(0)
879      </action>
880
881      <action type="add" dev="nbubna" issue="VELOCITY-174" due-to="Andrew Tetlaw">
882          Add #define directive set an unrendered block of VTL as a reference.
883          (e.g. #define( $foo )Hello, $bar!#end #set( $bar = 'world') $foo -> Hello, world!)
884      </action>
885
886      <action type="add" dev="nbubna" issue="VELOCITY-612" due-to="Jarkko Viinamaki">
887          Add #break directive to exit #foreach loops early.
888      </action>
889
890      <action type="add" dev="nbubna" issue="VELOCITY-607" due-to="Jarkko Viinamaki">
891          Fixed major performance issues with Velocimacros.
892      </action>
893
894      <action type="add" dev="nbubna" issue="VELOCITY-606" due-to="Jarkko Viinamaki">
895          Removed many, various performance bottlenecks and concurrency issues. (Also see VELOCITY-595)
896      </action>
897
898      <action type="add" dev="nbubna" issue="VELOCITY-600" due-to="Adrian Tarau">
899          New VTL syntax $velocityHasNext within #foreach loops
900      </action>
901
902      <action type="fix" dev="wglass" issue="VELOCITY-580" due-to="Marnix van Bochove">
903          Multi-line comments in macros were rendering extra *# when evaluated.
904      </action>
905
906      <action type="fix" dev="cbrisson" issue="VELOCITY-570" due-to="Ronald Klop">
907          Have VelocityCharStream use an exponential buffer expansion rate.
908      </action>
909
910      <action type="fix" dev="wglass" issue="VELOCITY-566" due-to="Etienne Massip">
911          Prevent exception due to simultaneous rendering of macros.
912      </action>
913
914      <action type="add" dev="nbubna" issue="VELOCITY-533" due-to="Christopher Schultz">
915          New VTL syntax allows arrays to be treated like fixed length lists.
916      </action>
917
918      <action type="add" dev="nbubna" issue="VELOCITY-534">
919          Added support for varargs in method calls.
920      </action>
921
922      <action type="fix" dev="wglass" issue="VELOCITY-536" due-to="Lei Gu, Dima Tkach">
923          Prevent NPE when template is parsed simultaneously by multiple users.  (may apply only to macros).
924      </action>
925
926      <action type="fix" dev="wglass" issue="VELOCITY-362" due-to="Supun Kamburugamuva">
927          Users can now include libraries of macros with #parse in a template.
928      </action>
929
930      <action type="add" dev="wglass" issue="VELOCITY-529" due-to="Supun Kamburugamuva">
931          Macro libraries can now be selected programatically when merging templates.
932      </action>
933
934      <action type="fix" dev="wglass" issue="VELOCITY-452" due-to="Alexey Panchenko">
935          Catch IllegalArgumentException when invoking method.
936      </action>
937
938      <action type="fix" dev="wglass" issue="VELOCITY-538">
939          Fixed parse error for map definitions ending with a reference.
940      </action>
941
942      <action type="add" dev="wglass" issue="VELOCITY-297" due-to="Supun Kamburugamuva">
943          Add new property velocimacro.max.depth which limits max macro calling depth.
944      </action>
945
946      <action type="add" dev="wglass" issue="VELOCITY-547" due-to="Adam Heath">
947          Add ability to add directives programmatically
948      </action>
949
950      <action type="fix" dev="wglass" issue="VELOCITY-548" due-to="Adam Heath">
951          Allow user directives to have no content.
952      </action>
953
954      <action type="fix" dev="wglass" issue="VELOCITY-551" due-to="Michiel Toneman">
955          IncludeNotFound event handler was displaying "not found" template.
956      </action>
957
958      <action type="fix" dev="nbubna" issue="VELOCITY-541">
959        Fix StringResourceLoader to make it possible to use more than one loader per VM.
960      </action>
961
962      <action type="fix" dev="nbubna" issue="VELOCITY-520" due-to="Stepan Koltsov">
963        Make unicode encoding work in velocity templates.
964      </action>
965
966      <action type="add" dev="nbubna">
967        Add a ServletLogChute that allows logging through the servlet API. Ported from the
968        Velocity Tools project.
969      </action>
970
971      <action type="add" dev="nbubna">
972        Add a CommonsLogLogChute that allows logging through commons-logging.
973      </action>
974
975      <action type="update" dev="wglass">
976        Deprecate integrated texen and anakia, factor it out into separate jars.
977      </action>
978
979      <action type="add" dev="wglass" issue="VELOCITY-509">
980        Added new directive #evaluate() to dynamically evaluate VTL.
981      </action>
982    </release>
983
984    <release version="1.5" date="2007-01-28">
985      <action type="fix" dev="wglass" issue="VELOCITY-516" due-to="Vincent Massol">
986        Fix to SecureUberspector to work properly with #foreach and iterators.
987      </action>
988
989      <action type="add" dev="henning" issue="VELOCITY-191" due-to="Aki Nieminen">
990        Make FileResourceLoader unicode aware to allow skipping over BOM markers
991        like those created by Windows Notepad. This is a workaround for a Java
992        bug, where Java itself does not recognize the UTF-8 BOM as defined by
993        the unicode standard.
994      </action>
995
996    </release>
997
998    <release version="1.5-beta2" date="2006-11-24">
999
1000      <action type="add" dev="henning" issue="VELOCITY-183" due-to="Eelco Hillenius">
1001        New StringResourceLoader can retrieve templates from repository of in-memory Strings.
1002      </action>
1003
1004      <action type="fix" dev="wglass" issue="VELOCITY-493" due-to="Claude Brisson">
1005    RuntimeInstance.getProperty now returns value set with RuntimeInstance.setProperty,
1006    even before initialization.
1007      </action>
1008
1009      <action type="add" dev="wglass" issue="VELOCITY-435">
1010    When macros have incorrect number of arguments, if property
1011    "velocimacro.arguments.strict" is set to true a ParseErrorException
1012    will be thrown.
1013      </action>
1014
1015      <action type="add" dev="henning" issue="VELOCITY-414" due-to="Matthijs Lambooy">
1016    MethodInvocationException now contains line, column, template name
1017    allowing application to produce more useful error messages.
1018      </action>
1019
1020      <action type="fix" dev="henning" issue="VELOCITY-24">
1021    Fixed race condition in template retrieval that caused macros to
1022    fail under simultaneous load.
1023      </action>
1024
1025      <action type="add" dev="wglass" issue="VELOCITY-423">
1026    New event handler InvalidReferenceHandler allows application
1027    to catch invalid references.  Sample implementation collects
1028    them in list and optionally throws exception.
1029      </action>
1030
1031      <action type="add" dev="wglass" issue="VELOCITY-179">
1032          New, optional SecureIntrospector prohibits methods that involve manipulation of classes, classloaders
1033      or reflection objects.  Use this introspector to secure Velocity against a risk of
1034      template writers using reflection to perform malicious acts.
1035      </action>
1036
1037      <action type="fix" dev="henning" issue="VELOCITY-458">
1038    Removed Serializable from InternalContextBase, because one of the members is not serializable anyway so this never worked (Found by Findbugs).
1039      </action>
1040
1041      <action type="fix" dev="henning" issue="VELOCITY-449" due-to="Alexey Panchenko">
1042    Add an additional pair of Executors that are smart about Map.
1043      </action>
1044
1045      <action type="fix" dev="wglass" issue="VELOCITY-453" due-to="Alexey Panchenko">
1046      Method caching now uses consistent keys.
1047      </action>
1048
1049      <action type="fix" dev="wglass" issue="VELOCITY-459" due-to="Stephen Haberman">
1050    Change the meaning of localscope for macros to allow access to references from
1051    calling context.
1052      </action>
1053
1054      <action type="add" dev="henning">
1055               Add a test for the DataSourceResource Loader.
1056      </action>
1057
1058      <action type="add" dev="henning">
1059               Fix a problem in the DataSourceResource Loader, removing a potential security issue with SQL injection.
1060      </action>
1061
1062      <action type="add" dev="henning">
1063               Build now creates the MD5 and SHA1 checksums for archives and jars.
1064      </action>
1065
1066      <action type="fix" dev="henning">
1067    Fix a number of issues reported by running FindBugs on the Velocity source.
1068      </action>
1069    </release>
1070
1071    <release version="1.5-beta1" date="2006-09-13">
1072      <action type="fix" dev="wglass" issue="VELOCITY-438" due-to="Stephen Haberman">
1073    Stop references from calling object.toString() twice.
1074      </action>
1075
1076      <action type="update" dev="wglass" issue="VELOCITY-429" due-to="">
1077    Pass through all runtime exceptions.  Among other benefits, this
1078    allows plugins to throw a runtime exception to signify an application
1079    level problem in the calling application.
1080      </action>
1081
1082      <action type="fix" dev="wglass" issue="VELOCITY-98" due-to="Michal Chmielewski">
1083    When #include was followed by #parse with the same file name, a ClassCastException was thrown.
1084    </action>
1085
1086      <action type="add" dev="wglass" issue="VELOCITY-425" due-to="Llewellyn Falco">
1087        Wrapped exceptions now have Cause property set on JDK 1.4.  (note that Velocity
1088        continues to run under JDK 1.3).
1089      </action>
1090
1091      <action type="fix" dev="wglass" issue="VELOCITY-418" due-to="Jason Weinstein">
1092        When Velocity is initialized, default.properties stream was not being closed.  This
1093    made it difficult to undeploy webapps on Windows with Velocity unpacked.
1094      </action>
1095
1096      <action type="fix" dev="wglass" issue="VELOCITY-151" due-to="Kirk Wolf">
1097        Upgraded to latest commons collection, fixing problem with non-recognition
1098        of configuration file encoding in rare circumstances.
1099      </action>
1100
1101      <action type="fix" dev="wglass" issue="VELOCITY-370" due-to="Reggie Riser">
1102        The Introspector could throw a NPE when a parameter to an overloaded method was null.
1103      </action>
1104
1105      <action type="fix" dev="wglass" issue="VELOCITY-381" due-to="Llwellyn Falco and Dan Powell">
1106        If toString() returned null in a silent reference then "null" was displayed.
1107      </action>
1108
1109      <action type="fix" dev="wglass" issue="VELOCITY-359" due-to=""><![CDATA[
1110        Fixed bug in which empty body for #if (e.g. <code>#if(some expression)#end</code>
1111        caused ParseException.
1112      ]]></action>
1113
1114      <action type="add" dev="wglass" issue="VELOCITY-222" due-to="">
1115        Added javacc task to build.xml simplifying modification process
1116        for editing syntax files.
1117      </action>
1118
1119      <action type="fix" dev="wglass" issue="VELOCITY-374" due-to="">
1120        Velocity Engine was throwing NPE when used without a call to
1121        init().  Now gives a more meaningful exception message.
1122      </action>
1123
1124      <action type="update" dev="wglass" issue="VELOCITY-404" due-to="Llewellyn Falco">
1125        Fixed problem with Uberspect Info class being created incorrectly.
1126        Added template name to Info allowing better error reporting.
1127      </action>
1128
1129      <action type="update" dev="wglass" issue="" due-to="">
1130        Numerous improvements to the documentation.  Reorganized table of
1131        contents, moved community content to the Wiki, added article on using
1132        Velocity in web applications.
1133      </action>
1134
1135      <action type="update" dev="wglass" issue="VELOCITY-350" due-to="">
1136        When testing objects in VTL for equality, if both objects are a number, use
1137        number equality.  If both objects are the same class, use the equals method.
1138        New behavior: If objects are different classes, compare the String
1139        representation of both objects rather than logging an error.
1140      </action>
1141
1142      <action type="fix" dev="wglass" issue="VELOCITY-272" due-to="">
1143        Velocity would give error when last line of file was a ## comment.
1144      </action>
1145
1146      <action type="update" dev="wglass" issue="VELOCITY-412" due-to="Malcolm Edgar">
1147        Added method to retrieve application attributes.
1148      </action>
1149
1150      <action type="update" dev="wglass" issue="VELOCITY-196" due-to="">
1151        Velocity now searches in the current thread's context classloader
1152        before the system classloader for all templates loaded with the
1153        ClasspathResourceLoader and for all user-defined ResourceLoaders,
1154        introspectors, event handlers, etc.
1155        A typical use for this is to have Velocity in the application
1156        container classpath while keeping templates and plugins in the
1157        webapp classpath.
1158      </action>
1159
1160      <action type="update" dev="wglass" issue="" due-to="Thomas Veith"><![CDATA[
1161        #set now sets references to null when required.  For backwards
1162        compatibility this must be enabled by setting the configuration key
1163        <code>directive.set.null.allowed</code> to true.
1164      ]]></action>
1165
1166      <action type="add" dev="wglass" issue="" due-to="">
1167        New optional event handler that escapes all references.
1168        Regular expressions can be used to configure which references
1169        have HTML, JavaScript, SQL, or XML escaping.
1170      </action>
1171
1172      <action type="add" dev="wglass" issue="VELOCITY-154" due-to="">
1173        New optional event handler implementation that forces #parse / #include to stay
1174        in same directory as parent template.
1175      </action>
1176
1177      <action type="add" dev="wglass" issue="VELOCITY-260" due-to="">
1178        New event handler to modify behavior of #parse / #include.
1179      </action>
1180
1181      <action type="update" dev="wglass" issue="VELOCITY-144" due-to="">
1182        FileResourceLoader now accepts absolute path when configured to accept it.
1183      </action>
1184
1185      <action type="fix" dev="wglass" issue="VELOCITY-126" due-to="">
1186        String containing "##" was treated as unterminated String.
1187      </action>
1188
1189      <action type="add" dev="nbubna" issue="VELTOOLS-55" due-to="Charles Harvey">
1190        Spruced up Geir's old URLResourceLoader and promoted it from the whiteboard to
1191        the main distribution.
1192      </action>
1193
1194      <action type="update" dev="henning" issue="VELOCITY-424" due-to="Malcom Edgar">
1195        Throw Runtime exceptions from nodes up the chain.
1196      </action>
1197      <action type="update" dev="henning" issue="VELOCITY-426" due-to="Malcom Edgar">
1198        Revert the split between org.apache.velocity.runtime.parser.node.Node and
1199        org.apache.velocity.runtime.parser.Node. The parser now only uses ...parser.node.Node
1200        because this change broke custom directives.
1201      </action>
1202
1203      <action type="update" dev="nbubna" issue="VELOCITY-403" due-to="">
1204            Made a lot of internal logging upgrades including: Deprecated LogSystem interface
1205            and replaced it (and all its implementations) with a new LogChute interface and implementations,
1206            added getLog() to RuntimeServices (and all its friends) to improve on and replace its now deprecated
1207            logging methods, added a JdkLogChute as a 3rd default option for those using JDK 1.4+, and added a
1208            StandardOutLogChute as final resort if other LogChute inits fail. See JIRA issues VELOCITY-403, VELOCITY-166,
1209            VELOCITY-403,VELOCITY-166,VELOCITY-78, VELOCITY-157, VELOCITY-159, VELOCITY-193.
1210        </action>
1211
1212        <action type="remove" dev="henning" issue="VELOCITY-401" due-to="">
1213            Removed all J2EE build tasks.  Now automatically detects availability
1214            of javax.sql.Datasource (in JDK 1.4+) and builds DatasourceResourceLoader
1215            when allowed.
1216        </action>
1217
1218        <action type="add" dev="henning" issue="" due-to="">
1219            ant build now downloads the required dependency jars from ibiblio.org
1220        </action>
1221
1222        <action type="update" dev="henning" issue="VELOCITY-373" due-to="Malcolm Edgar">
1223            Unified template name, line and column number reporting for ParserErrorException
1224        </action>
1225
1226        <action type="remove" dev="henning" issue="" due-to="">
1227            Dropped the non-functional Velocity compiler.
1228        </action>
1229
1230        <action type="update" dev="henning" issue="" due-to="">
1231            Started separating out the JavaCC generated parts of the Velocity Parser. Not yet complete to avoid user visible changes. Scheduled to be completed for 2.0
1232        </action>
1233
1234        <action type="add" dev="henning" issue="" due-to="">
1235            Contributed a maven build for Velocity
1236        </action>
1237
1238        <action type="fix" dev="henning" issue="" due-to="">
1239            Reworked the ant build to product only two jars: velocity.jar and velocity-dep.jar.
1240        </action>
1241
1242        <action type="remove" dev="henning" issue="" due-to="">
1243            Removed the Configuration class and all methods that references it. This class was deprecated since Velocity 1.1 and was scheduled to be gone for Velocity 1.3 or 1.4. Now
1244        it was finally removed in 1.5.
1245        </action>
1246
1247        <action type="add" dev="wglass" issue="VELOCITY-242" due-to="Peter Romianowski">
1248            Added support for decimal numbers.
1249        </action>
1250
1251        <action type="fix" dev="wglass" issue="VELOCITY-284" due-to="Mike Rettig">
1252            MethodInvocationException now consistently thrown
1253        (previously was hidden when in parameter to Velocimacro).
1254        </action>
1255
1256        <action type="fix" dev="wglass" issue="VELOCITY-109" due-to="">
1257            Fixed problem in which foreach loop would fail to call overloaded method.
1258        </action>
1259
1260        <action type="fix" dev="wglass" issue="VELOCITY-86" due-to="">
1261            Removed ERROR level log message "Can't find 'VM_global_library.vm'".
1262        </action>
1263
1264        <action type="fix" dev="wglass" issue="VELOCITY-348" due-to="">
1265            Anakia now generates consistent line endings based on platform.  Requires upgrade to JDom 1.0.
1266        </action>
1267
1268        <action type="add" dev="wglass" issue="VELOCITY-190" due-to="Peter Ryan">
1269            Anakia can now be pre-loaded with custom context values from an optional XML file.
1270        </action>
1271
1272        <action type="add" dev="wglass" issue="VELOCITY-43" due-to="">
1273            Directives can now be delimited with curly braces, for example #if($condition)something#{else}otherthing#{end}.
1274        </action>
1275
1276        <action type="fix" dev="wglass" issue="VELOCITY-254" due-to="Christopher Reck">
1277            Nulls now handled appropriate within #foreach.
1278        </action>
1279
1280        <action type="fix" dev="wglass" issue="VELOCITY-324" due-to="Shinobu Kuwai">
1281            Upgraded JavaCC to version 3.2, providing JDK 1.5 compatibility.
1282        (Older version used keyword 'enum' which is reserved in JDK 1.5).
1283        </action>
1284
1285        <action type="update" dev="wglass" issue="VELOCITY-267" due-to="Matt Raible ">
1286            DatasourceResourceLoader now allows injection of Datasource, allowing it to be used in Inversion of Control (IOC) frameworks.
1287        </action>
1288
1289        <action type="fix" dev="wglass" issue="VELOCITY-218" due-to="">
1290            #stop now works properly.
1291        </action>
1292
1293        <action type="update" dev="wglass" issue="VELOCITY-196" due-to="Charles Oliver Nutter">
1294            ClasspathResourceLoader now searches ContextClassLoader for template.
1295        </action>
1296
1297        <action type="remove" dev="dlr" issue="VELOCITY-164" due-to=""><![CDATA[
1298            Removed use of <a href="http://jakarta.apache.org/log4j/">Log4J's</a>
1299            deprecated Category and Priority classes in favor of the corresponding
1300            and supported Logger and Level.  To update, replace necessary
1301            references, and Category.getInstance() with Logger.getLogger().
1302        ]]></action>
1303
1304        <action type="add" dev="wglass" issue="VELOCITY-152" due-to="James Taylor">
1305            New Map literal syntax.
1306        </action>
1307
1308        <action type="remove" dev="dlr" issue="" due-to="">
1309            Removed the long-deprecated Log4JLogSystem.  Never fear,
1310            SimpleLog4JLogSystem remains.
1311        </action>
1312
1313        <action type="update" dev="dlr" issue="" due-to=""><![CDATA[
1314            Enhanced the implementation of ResourceCacheImpl using Jakarta Commons
1315            Collections LRUMap class.  The previous greedy implementation did not
1316            set an upper bound for the cache size, meaning that cached resources
1317            were never relinquished (a possible memory leak).  You can continue to
1318            use that behavior by setting the
1319            <code>resource.manager.cache.size</code> for your cache to less than
1320            1.
1321        ]]></action>
1322
1323        <action type="update" dev="geirm" issue="" due-to="Daniel Rall">
1324            Took dan's modified SimpleLog4jLogSystem, and renamed Log4JLogSystem, and
1325            put back old version of SimpleLog4JLogSystem, as deprecated.  That way
1326            we can move forward with an up-to-date version that uses Logger, and
1327            for one release, be backwards compatile for the Category-using log4j
1328            crowd.
1329        </action>
1330
1331        <action type="remove" dev="wglass" issue="" due-to="">
1332            Deprecated org.apache.velocity.tools.VelocityFormatter class in favor
1333            of the various format classes in the Velocity Tools library.
1334        </action>
1335
1336        <action type="remove" dev="dlr" issue="" due-to="">
1337            Deprecated the org.apache.velocity.servlet.VelocityServlet class in
1338            favor of org.apache.velocity.tools.view.servlet.VelocityViewServlet
1339            from the Velocity Tools library.  Servlet interaction is more a core
1340            competency of the Velocity Tools package than of Velocity's
1341            core.
1342        </action>
1343
1344        <action type="fix" dev="geirm" issue="VELOCITY-185" due-to="wglass">
1345            Fix to BaseTestCase as suggested by Will Glass-Husain to handle line endings
1346        </action>
1347
1348        <action type="update" dev="" issue="" due-to="henning">
1349         Parameterized cache and mod time control in TexenTask based on patch from
1350         Henning.
1351        </action>
1352
1353        <action type="fix" dev="geirm" issue="VELOCITY-150" due-to="wglass">
1354            Fix to DatasourceResourceLoader - stop using the old Runtime singleton as
1355            would leak a little memory for each instance of VelocityEngine created.
1356            Hunted down by Will Glass-Husain.
1357        </action>
1358
1359        <action type="fix" dev="geirm" issue="VELOCITY-161" due-to="wglass">
1360            SimplePool now removes elements from pool on a get(). NOTE : Previously, it left the
1361            reference to the object in the pool.
1362        </action>
1363
1364        <action type="fix" dev="geirm" issue="VELOCITY-61" due-to="wglass">
1365            Fixes problem with single line comment
1366            embedded in a multi-line comment.
1367        </action>
1368
1369        <action type="fix" dev="geirm" issue="VELOCITY-221" due-to="">
1370            Change for VELOCITY-221 and partial for VELOCITY-148, allowing newlines in
1371            directives.
1372        </action>
1373
1374        <action type="update" dev="geirm" issue="VELOCITY-148" due-to="">
1375            Change to finish request VELOCITY-148, allowing '+' as a string concat. We'll have
1376            to see how the community likes it.
1377        </action>
1378
1379        <action type="fix" dev="geirm" issue="VELOCITY-239" due-to="">
1380            Didn't allow formal reference notation as first arg
1381            to foreach.
1382        </action>
1383
1384        <action type="update" dev="geirm" issue="" due-to="">
1385            To make using w/ XML easier allow alternative logical operators 'and', 'or',
1386            'lt', 'gt', 'le', 'ge', 'eq', 'ne', 'not'.
1387        </action>
1388
1389        <action type="update" dev="geirm" issue="" due-to="">
1390            Allow newlines in strings.
1391        </action>
1392
1393        <action type="fix" dev="geirm" issue="VELOCITY-148" due-to="">
1394            Tiny fix to VelocityWriter to prevent a NPE if someone passes it a null
1395        </action>
1396
1397        <action type="fix" dev="geirm" issue="" due-to="">
1398            Anakia changes to accomodate finalization of JDOM API.  In AnakiaJDOMFactory,
1399            AnakiaTask, and OutputWrapper
1400        </action>
1401
1402        <action type="update" dev="geirm" issue="" due-to="">
1403            Added template, line and column info to MIEs thrown by ASTMethod
1404        </action>
1405
1406    </release>
1407  </body>
1408</document>
1409