[stringtemplate-interest] Error on super reference in if
Thomas Brandon
tbrandonau at gmail.com
Fri Aug 17 04:05:05 PDT 2007
In String Template 3.1b1 using a super reference in an if block results in:
exception java.lang.NullPointerException
at org.antlr.stringtemplate.StringTemplateGroup.getEmbeddedInstanceOf(StringTemplateGroup.java:413)
The problem is that nativeGroup is not set in the sub-templates
created for if\else blocks.
Adding subtemplate.setNativeGroup(self.getNativeGroup()); (and a
similar line for elseSubTemplate) to the initialisation of the
template in the action rule of template.g seems to fix the issue. Unit
tests seemed to run with no new errors after the change and it seems
to use the right group for template lookups (as in rule2 in the test
case).
A test case to go in TestStringTemplate is:
public void testSuperReferenceInIf() throws Exception {
String superGroupString =
"group superG;" + newline +
"rule1(attr) ::= \"<attr>\"" + newline +
"rule2(attr) ::= \"<rule3()><attr>\"" + newline +
"rule3() ::= \"super\""
;
StringTemplateGroup superGroup = new StringTemplateGroup(
new StringReader(superGroupString), AngleBracketTemplateLexer.class);
String subGroupString =
"group subG;\n" +
"rule1(attr) ::= \"<if(attr)><super.rule1(attr)><endif>\"" + newline +
"rule1b(attr) ::= \"<if(!attr)><else><super.rule1(attr)><endif>\""
+ newline +
"rule2(attr) ::= \"<if(attr)><super.rule2(attr)><endif>\"" + newline +
"rule3() ::= \"sub\""
;
StringTemplateGroup subGroup = new StringTemplateGroup(
new StringReader(subGroupString), AngleBracketTemplateLexer.class);
subGroup.setSuperGroup(superGroup);
StringTemplate rule1 = subGroup.getInstanceOf("rule1");
rule1.setAttribute("attr", "val");
assertEquals("val", rule1.toString());
StringTemplate rule1b = subGroup.getInstanceOf("rule1b");
rule1b.setAttribute("attr", "val");
assertEquals("val", rule1b.toString());
StringTemplate rule2 = subGroup.getInstanceOf("rule2");
rule2.setAttribute("attr", "val");
assertEquals("subval", rule2.toString());
}
Tom.
More information about the stringtemplate-interest
mailing list