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&lt;tab&gt;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();
         }
     }
 }


Reply via email to