Property references don't work with Google Collections ImmutableMap
-------------------------------------------------------------------

                 Key: VELOCITY-730
                 URL: https://issues.apache.org/jira/browse/VELOCITY-730
             Project: Velocity
          Issue Type: Bug
          Components: Engine
    Affects Versions: 1.6.1
            Reporter: Tim Moore


If you pass a map created using Google Collections ImmutableMap into a Velocity 
context, and try to access its values using "map.key" style property syntax, it 
fails to resolve.

I believe the problem is in MapGetExecutor:

http://svn.apache.org/viewvc/velocity/engine/tags/1.6.1/src/java/org/apache/velocity/runtime/parser/node/MapGetExecutor.java?view=co

Specifically, this code:

        Class [] interfaces = clazz.getInterfaces();
        for (int i = 0 ; i < interfaces.length; i++)
        {
            if (interfaces[i].equals(Map.class))
            {
...

The sneaky thing about ImmutableMap is that ImmutableMap.of(...) doesn't return 
an instance of ImmutableMap, but one of serveral subclasses optimized for 
however many items are in the map. These subclasses extend ImmutableMap but do 
not directly implement Map, so that code above fails to recognize them.

A simpler and more accurate way to tell whether the class implements Map, 
either directory or indirectly, is "if (Map.class.isAssignableFrom(clazz))..."

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to