[ https://issues.apache.org/jira/browse/VELOCITY-5?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henning Schmiedehausen closed VELOCITY-5. ----------------------------------------- > Null AST error when calling a macro from within another macro > ------------------------------------------------------------- > > Key: VELOCITY-5 > URL: https://issues.apache.org/jira/browse/VELOCITY-5 > Project: Velocity > Issue Type: Bug > Components: Engine > Affects Versions: 1.0-Release > Environment: Operating System: All > Platform: PC > Reporter: Andriy Rozeluk > Assigned To: Velocity-Dev List > > Contact me for a better example if necessary, but it should be simple to > reproduce. If not, I can create one for you. > Simply put, everything works fine in the default setup. I can call > velocimacros > recursively and it's all great. > Suppose, however, that in a particular framework, it was necessary to define > allow.inline.local.scope = true, because in this case we don't want > everything > to be global. > The call to a macro defined inline works correctly. However, if that macro, > in > turn, wants to call another inline macro, I get this error: > [error] VM error : nameOfMacro. Null AST > Looks like it's an issue with defining what is local scope. There should be > the > capability to have everything declared inline in a template to be able to > call > everything in that template. > So my code looks something like this: > --myexample.vm-- > #macro( drawItem $item ) > <!-- drawing item --> > #end > #macro( drawBundle $bundledraw ) > <!-- drawing a bundle --> > #set( $bundleitems = $bundledraw.getItems() ) > #foreach( $bundleitem in $bundleitems ) > #drawItem( $bundleitem ) > #end > #end > #macro( drawContainer $contdraw ) > #set( $contitems = $contdraw.getItems() ) > #foreach( $contitem in $contitems ) > #if( ${utility.isItem( ${contitem} )} ) > #drawItem( $contitem ) > #elseif( ${utility.isBundle( ${contitem} )} ) > #drawBundle( $contitem ) > #else > <!-- invalid item --> > #end > #end > #end > #drawContainer( $container ) > --end test.vm-- > In the default velocity configuration, everything works as expected. The call > makes it from drawContainer to end up eventually calling drawItem. When > allow.inline.local.scope = true, however, the calls would break within > drawContainer, with drawItem and drawBundle generating the Null AST errors. > I'm assuming that "local scope" means what I think it means - that everything > in a template should behave the same way as it would have if localscope were > false. The difference, of course, should only be that drawContainer, drawItem > and drawBundle are only available within this template, and not seen anywhere > else. > I hope this helps somewhat. Again, contact me if you need a better example. > Thanks (btw: Velocity rocks! I love it!) -- 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]