Author: cbrisson
Date: Wed Jul 13 09:32:28 2016
New Revision: 1752378
URL: http://svn.apache.org/viewvc?rev=1752378&view=rev
Log:
Take advantage of the major version jump to enforce String keys in internal
context API (fixes VELOCITY-266)
Modified:
velocity/engine/trunk/src/changes/changes.xml
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/VelocityContext.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/AbstractContext.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/ChainedInternalContextAdapter.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/Context.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextAdapterImpl.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextBase.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalHousekeepingContext.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalWrapperContext.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/misc/TestContext.java
Modified: velocity/engine/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/src/changes/changes.xml?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
--- velocity/engine/trunk/src/changes/changes.xml (original)
+++ velocity/engine/trunk/src/changes/changes.xml Wed Jul 13 09:32:28 2016
@@ -27,6 +27,11 @@
<body>
<release version="2.0" date="In Subversion">
+ <action type="fix" dev="cbrisson" issue="VELOCITY-266">
+ Take advantage of the major version jump to enforce String keys
+ in internal Context API
+ </action>
+
<action type="fix" dev="sdimitriu" issue="VELOCITY-863" due-to="Mike
Kienenberger">
Fix regression: #set<tab>left-paren no longer valid grammar
Patch from Mike Kienenberger applied + added test
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/VelocityContext.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/VelocityContext.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/VelocityContext.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/VelocityContext.java
Wed Jul 13 09:32:28 2016
@@ -58,7 +58,7 @@ public class VelocityContext extends Abs
/**
* Storage for key/value pairs.
*/
- private Map context = null;
+ private Map<String, Object> context = null;
/**
* Creates a new instance (with no inner context).
@@ -73,7 +73,7 @@ public class VelocityContext extends Abs
* context).
* @param context
*/
- public VelocityContext(Map context)
+ public VelocityContext(Map<String, Object> context)
{
this(context, null);
}
@@ -101,10 +101,10 @@ public class VelocityContext extends Abs
* create default storage.
* @param innerContext Inner context.
*/
- public VelocityContext(Map context, Context innerContext)
+ public VelocityContext(Map<String, Object> context, Context innerContext)
{
super(innerContext);
- this.context = (context == null ? new HashMap() : context);
+ this.context = (context == null ? new HashMap<String, Object>() :
context);
}
/**
@@ -139,7 +139,7 @@ public class VelocityContext extends Abs
* @param key name of value to check
* @return true if non-null value in store
*/
- public boolean internalContainsKey(Object key)
+ public boolean internalContainsKey(String key)
{
return context.containsKey( key );
}
@@ -149,9 +149,9 @@ public class VelocityContext extends Abs
*
* @return keys as []
*/
- public Object[] internalGetKeys()
+ public String[] internalGetKeys()
{
- return context.keySet().toArray();
+ return context.keySet().toArray(new String[context.size()]);
}
/**
@@ -161,7 +161,7 @@ public class VelocityContext extends Abs
* @param key name of value to remove
* @return value removed
*/
- public Object internalRemove(Object key)
+ public Object internalRemove(String key)
{
return context.remove( key );
}
@@ -177,7 +177,7 @@ public class VelocityContext extends Abs
try
{
clone = (VelocityContext) super.clone();
- clone.context = new HashMap(context);
+ clone.context = new HashMap<String, Object>(context);
}
catch (CloneNotSupportedException ignored)
{
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/AbstractContext.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/AbstractContext.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/AbstractContext.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/AbstractContext.java
Wed Jul 13 09:32:28 2016
@@ -90,7 +90,7 @@ public abstract class AbstractContext ex
* @param key key to test for existence
* @return true if found, false if not
*/
- public abstract boolean internalContainsKey(Object key);
+ public abstract boolean internalContainsKey(String key);
/**
* Implement to return an object array of key
@@ -101,7 +101,7 @@ public abstract class AbstractContext ex
*
* @return array of keys
*/
- public abstract Object[] internalGetKeys();
+ public abstract String[] internalGetKeys();
/**
* Implement to remove an item from your storage.
@@ -112,7 +112,7 @@ public abstract class AbstractContext ex
* @param key key to remove
* @return object removed if exists, else null
*/
- public abstract Object internalRemove(Object key);
+ public abstract Object internalRemove(String key);
/**
* default CTOR
@@ -207,7 +207,7 @@ public abstract class AbstractContext ex
* @param key The key to look for.
* @return true if the key is in the context, false if not.
*/
- public boolean containsKey(Object key)
+ public boolean containsKey(String key)
{
if (key == null)
{
@@ -228,7 +228,7 @@ public abstract class AbstractContext ex
* @return Object[] of keys in the Context. Does not return
* keys in chained context.
*/
- public Object[] getKeys()
+ public String[] getKeys()
{
return internalGetKeys();
}
@@ -240,7 +240,7 @@ public abstract class AbstractContext ex
* @return The value that the key was mapped to, or <code>null</code>
* if unmapped.
*/
- public Object remove(Object key)
+ public Object remove(String key)
{
if (key == null)
{
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/ChainedInternalContextAdapter.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/ChainedInternalContextAdapter.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/ChainedInternalContextAdapter.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/ChainedInternalContextAdapter.java
Wed Jul 13 09:32:28 2016
@@ -99,7 +99,7 @@ public abstract class ChainedInternalCon
/**
* @see org.apache.velocity.context.Context#containsKey(java.lang.Object)
*/
- public boolean containsKey(Object key)
+ public boolean containsKey(String key)
{
return wrappedContext.containsKey(key);
}
@@ -107,7 +107,7 @@ public abstract class ChainedInternalCon
/**
* @see org.apache.velocity.context.Context#getKeys()
*/
- public Object[] getKeys()
+ public String[] getKeys()
{
return wrappedContext.getKeys();
}
@@ -115,7 +115,7 @@ public abstract class ChainedInternalCon
/**
* @see org.apache.velocity.context.Context#remove(java.lang.Object)
*/
- public Object remove(Object key)
+ public Object remove(String key)
{
return wrappedContext.remove(key);
}
@@ -147,7 +147,7 @@ public abstract class ChainedInternalCon
/**
* @see
org.apache.velocity.context.InternalHousekeepingContext#getTemplateNameStack()
*/
- public Object[] getTemplateNameStack()
+ public String[] getTemplateNameStack()
{
return wrappedContext.getTemplateNameStack();
}
@@ -187,7 +187,7 @@ public abstract class ChainedInternalCon
/**
* @see
org.apache.velocity.context.InternalHousekeepingContext#getMacroNameStack()
*/
- public Object[] getMacroNameStack()
+ public String[] getMacroNameStack()
{
return wrappedContext.getMacroNameStack();
}
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/Context.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/Context.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/Context.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/Context.java
Wed Jul 13 09:32:28 2016
@@ -60,13 +60,13 @@ public interface Context
* @param key The key to look for.
* @return Whether the key is in the context.
*/
- boolean containsKey(Object key);
+ boolean containsKey(String key);
/**
* Get all the keys for the values in the context.
* @return All the keys for the values in the context.
*/
- Object[] getKeys();
+ String[] getKeys();
/**
* Removes the value associated with the specified key from the context.
@@ -75,5 +75,5 @@ public interface Context
* @return The value that the key was mapped to, or <code>null</code>
* if unmapped.
*/
- Object remove(Object key);
+ Object remove(String key);
}
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextAdapterImpl.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextAdapterImpl.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextAdapterImpl.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextAdapterImpl.java
Wed Jul 13 09:32:28 2016
@@ -140,7 +140,7 @@ public final class InternalContextAdapte
/**
* @see
org.apache.velocity.context.InternalHousekeepingContext#getTemplateNameStack()
*/
- public Object[] getTemplateNameStack()
+ public String[] getTemplateNameStack()
{
return icb.getTemplateNameStack();
}
@@ -185,7 +185,7 @@ public final class InternalContextAdapte
* @see
org.apache.velocity.context.InternalHousekeepingContext#getMacroNameStack()
* @since 1.6
*/
- public Object[] getMacroNameStack()
+ public String[] getMacroNameStack()
{
return icb.getMacroNameStack();
}
@@ -261,7 +261,7 @@ public final class InternalContextAdapte
/**
* @see org.apache.velocity.context.Context#containsKey(java.lang.Object)
*/
- public boolean containsKey(Object key)
+ public boolean containsKey(String key)
{
return context.containsKey( key );
}
@@ -269,7 +269,7 @@ public final class InternalContextAdapte
/**
* @see org.apache.velocity.context.Context#getKeys()
*/
- public Object[] getKeys()
+ public String[] getKeys()
{
return context.getKeys();
}
@@ -277,7 +277,7 @@ public final class InternalContextAdapte
/**
* @see org.apache.velocity.context.Context#remove(java.lang.Object)
*/
- public Object remove(Object key)
+ public Object remove(String key)
{
return context.remove( key );
}
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextBase.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextBase.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextBase.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalContextBase.java
Wed Jul 13 09:32:28 2016
@@ -57,12 +57,12 @@ class InternalContextBase implements Int
/**
* Template name stack. The stack top contains the current template name.
*/
- private Stack templateNameStack = new Stack();
+ private Stack<String> templateNameStack = new Stack<String>();
/**
* Velocimacro name stack. The stack top contains the current macro name.
*/
- private Stack macroNameStack = new Stack();
+ private Stack<String> macroNameStack = new Stack<String>();
/**
* EventCartridge we are to carry. Set by application
@@ -109,17 +109,17 @@ class InternalContextBase implements Int
if ( templateNameStack.empty() )
return "<undef>";
else
- return (String) templateNameStack.peek();
+ return templateNameStack.peek();
}
/**
* get the current template name stack
*
- * @return Object[] with the template name stack contents.
+ * @return String[] with the template name stack contents.
*/
- public Object[] getTemplateNameStack()
+ public String[] getTemplateNameStack()
{
- return templateNameStack.toArray();
+ return templateNameStack.toArray(new String[templateNameStack.size()]);
}
/**
@@ -153,7 +153,7 @@ class InternalContextBase implements Int
}
else
{
- return (String) macroNameStack.peek();
+ return macroNameStack.peek();
}
}
@@ -170,11 +170,11 @@ class InternalContextBase implements Int
/**
* get the current macro name stack
*
- * @return Object[] with the macro name stack contents.
+ * @return String[] with the macro name stack contents.
*/
- public Object[] getMacroNameStack()
+ public String[] getMacroNameStack()
{
- return macroNameStack.toArray();
+ return macroNameStack.toArray(new String[macroNameStack.size()]);
}
/**
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalHousekeepingContext.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalHousekeepingContext.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalHousekeepingContext.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalHousekeepingContext.java
Wed Jul 13 09:32:28 2016
@@ -62,9 +62,9 @@ interface InternalHousekeepingContext
/**
* Returns the template name stack in form of an array.
*
- * @return Object[] with the template name stack contents.
+ * @return String[] with the template name stack contents.
*/
- Object[] getTemplateNameStack();
+ String[] getTemplateNameStack();
/**
* set the current macro name on top of stack
@@ -95,9 +95,9 @@ interface InternalHousekeepingContext
/**
* Returns the macro name stack in form of an array.
*
- * @return Object[] with the macro name stack contents.
+ * @return String[] with the macro name stack contents.
*/
- Object[] getMacroNameStack();
+ String[] getMacroNameStack();
/**
* returns an IntrospectionCache Data (@see IntrospectionCacheData)
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalWrapperContext.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalWrapperContext.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalWrapperContext.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/context/InternalWrapperContext.java
Wed Jul 13 09:32:28 2016
@@ -54,6 +54,6 @@ public interface InternalWrapperContext
/**
* Tests if the key exists in the specified scope
*/
- boolean containsKey(Object key);
+ boolean containsKey(String key);
}
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/Parse.java
Wed Jul 13 09:32:28 2016
@@ -190,7 +190,7 @@ public class Parse extends InputBase
/*
* see if we have exceeded the configured depth.
*/
- Object[] templateStack = context.getTemplateNameStack();
+ String[] templateStack = context.getTemplateNameStack();
if (templateStack.length >= maxDepth)
{
StringBuffer path = new StringBuffer();
Modified:
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/main/java/org/apache/velocity/runtime/directive/VelocimacroProxy.java
Wed Jul 13 09:32:28 2016
@@ -275,7 +275,7 @@ public class VelocimacroProxy extends Di
if (maxCallDepth > 0 && maxCallDepth ==
context.getCurrentMacroCallDepth())
{
String templateName = context.getCurrentTemplateName();
- Object[] stack = context.getMacroNameStack();
+ String[] stack = context.getMacroNameStack();
StringBuffer out = new StringBuffer(100)
.append("Max calling depth of ").append(maxCallDepth)
Modified:
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/misc/TestContext.java
URL:
http://svn.apache.org/viewvc/velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/misc/TestContext.java?rev=1752378&r1=1752377&r2=1752378&view=diff
==============================================================================
---
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/misc/TestContext.java
(original)
+++
velocity/engine/trunk/velocity-engine-core/src/test/java/org/apache/velocity/test/misc/TestContext.java
Wed Jul 13 09:32:28 2016
@@ -35,9 +35,9 @@ import org.apache.velocity.context.Conte
public class TestContext implements Context
{
Context innerContext = new VelocityContext();
- Map originalKeys = new HashMap();
+ Map<String, String> originalKeys = new HashMap<String, String>();
- public boolean containsKey(Object key)
+ public boolean containsKey(String key)
{
return innerContext.containsKey(normalizeKey(key));
}
@@ -47,9 +47,9 @@ public class TestContext implements Cont
return innerContext.get(normalizeKey(key));
}
- public Object[] getKeys()
+ public String[] getKeys()
{
- return originalKeys.values().toArray();
+ return originalKeys.values().toArray(new String[originalKeys.size()]);
}
public Object put(String key, Object value)
@@ -59,25 +59,21 @@ public class TestContext implements Cont
return innerContext.put(normalizedKey, value);
}
- public Object remove(Object key)
+ public Object remove(String key)
{
originalKeys.remove(key);
return innerContext.remove(normalizeKey(key));
}
- private String normalizeKey(Object key)
+ private String normalizeKey(String key)
{
if (key == null)
{
return null;
}
- else if (key.toString() == null)
- {
- return null;
- }
else
{
- return key.toString().toUpperCase();
+ return key.toUpperCase();
}
}
}