[
https://issues.apache.org/jira/browse/VELOCITY-730?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12737794#action_12737794
]
Tim Moore commented on VELOCITY-730:
------------------------------------
Thanks for the fix, Nathan. I think I see why the fallback "get" handling
didn't work: there's a related issue with ClassMap (it doesn't see
superinterfaces). I'll file a separate issue.
> Property references don't work with maps that implement Map indirectly (such
> as 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
> Fix For: 1.7
>
>
> 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]