Assert.assertEquals(kombucha.getInstanceOf("isItTimeForKombucha").render(), "select hour(current_timestamp(0)) < 24 as is_time;"); assertPattern(kombucha.getInstanceOf("getById").render(), "select\r?\n" + " t.record_id\r?\n" + ", t.id\r?\n" + "and t.tenant_record_id = :tenantRecordId\r?\n" + ";"); assertPattern(kombucha.getInstanceOf("getByRecordId").render(), "select\r?\n" + " t.record_id\r?\n" + ", t.id\r?\n" + "and t.tenant_record_id = :tenantRecordId\r?\n" + ";"); assertPattern(kombucha.getInstanceOf("getRecordId").render(), "select\r?\n" + " t.record_id\r?\n" + "from kombucha t\r?\n" + "and t.tenant_record_id = :tenantRecordId\r?\n" + ";"); assertPattern(kombucha.getInstanceOf("getHistoryRecordId").render(), "select\r?\n" + " max\\(t.record_id\\)\r?\n" + "from kombucha_history t\r?\n" + "and t.tenant_record_id = :tenantRecordId\r?\n" + ";"); assertPattern(kombucha.getInstanceOf("getAll").render(), "select\r?\n" + " t.record_id\r?\n" + ", t.id\r?\n" +
@Override public void configureForType(ConfigRegistry registry, Annotation annotation, Class<?> sqlObjectType) { SqlLocator locator = (type, method, config) -> { String templateName = SqlAnnotations.getAnnotationValue(method).orElseGet(method::getName); STGroup group = findStringTemplateGroup(type); if (!group.isDefined(templateName)) { throw new IllegalStateException("No StringTemplate group " + templateName + " for class " + sqlObjectType); } return templateName; }; TemplateEngine templateEngine = (templateName, ctx) -> { STGroup group = findStringTemplateGroup(sqlObjectType); ST template = group.getInstanceOf(templateName); ctx.getAttributes().forEach(template::add); return template.render(); }; registry.get(SqlObjects.class).setSqlLocator(locator); registry.get(SqlStatements.class).setTemplateEngine(templateEngine); }
private static ST findTemplateInGroup(String path, String name, STGroup group) { if (!group.isDefined(name)) { throw new IllegalStateException("No StringTemplate group " + name + " for path " + path); } return group.getInstanceOf(name); }
public final CodeGenTreeWalker.rewrite_atom_return rewrite_atom(boolean isRoot) throws RecognitionException { CodeGenTreeWalker.rewrite_atom_return retval = new CodeGenTreeWalker.rewrite_atom_return(); retval.start = input.LT(1); switch ( input.LA(1) ) { case RULE_REF: retval.code = templates.getInstanceOf(stName); retval.code.add("rule", ruleRefName); if ( grammar.getRule(ruleRefName)==null ) r.getToken(), ruleRefName); retval.code = new ST(""); // blank; no code gen switch ( input.LA(1) ) { case TOKEN_REF: retval.code = templates.getInstanceOf(stName); labelName); ST labelST = templates.getInstanceOf("prevRuleRootRef"); retval.code = templates.getInstanceOf("rewriteRuleLabelRef"+(isRoot?"Root":"")); retval.code = templates.getInstanceOf(stName); retval.code = templates.getInstanceOf("rewriteNodeAction"+(isRoot?"Root":""));
public final CodeGenTreeWalker.element_action_return element_action() throws RecognitionException { CodeGenTreeWalker.element_action_return retval = new CodeGenTreeWalker.element_action_return(); retval.start = input.LT(1); int LA47_0 = input.LA(1); if ( (LA47_0==ACTION) ) { alt47=1; if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = new NoViableAltException("", 47, 0, input); throw nvae; retval.code = templates.getInstanceOf("execAction"); retval.code.add("action", generator.translateAction(currentRuleName,act)); retval.code = templates.getInstanceOf("execForcedAction"); retval.code.add("action", generator.translateAction(currentRuleName,act2));
public final CodeGenTreeWalker.rewrite_return rewrite() throws RecognitionException { CodeGenTreeWalker.rewrite_return retval = new CodeGenTreeWalker.rewrite_return(); retval.start = input.LT(1); retval.code = templates.getInstanceOf("rewriteTemplate"); retval.code = templates.getInstanceOf("rewriteCode"); retval.code.add("treeLevel", OUTER_REWRITE_NESTING_LEVEL); retval.code.add("rewriteBlockLevel", OUTER_REWRITE_NESTING_LEVEL); retval.code.add("referencedElementsDeep", getTokenTypesAsTargetLabels(((GrammarAST)retval.start).rewriteRefsDeep)); Set<String> tokenLabels = ST retvalST = templates.getInstanceOf("prevRuleRootRef"); ruleLabels.add(retvalST.render()); retval.code.add("referencedTokenLabels", tokenLabels); retval.code = templates.getInstanceOf("noRewrite"); retval.code.add("treeLevel", OUTER_REWRITE_NESTING_LEVEL); retval.code.add("rewriteBlockLevel", OUTER_REWRITE_NESTING_LEVEL); int LA60_0 = input.LA(1); if ( (LA60_0==REWRITES) ) { alt60=1; if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); if (state.failed) return retval;
if ( f.isAbsolute() ) { // load directly if absolute if ( isTemplateFile ) { g = new STGroup(); g.setListener(this.getListener()); g.loadAbsoluteTemplateFile(fileName); g = new STGroupFile(fileName, delimiterStartChar, delimiterStopChar); g.setListener(this.getListener()); g.setListener(this.getListener()); importTemplates(g); return; URL thisRoot = getRootDirURL(); URL fileUnderRoot = null; g = new STGroup(); g.setListener(this.getListener()); URL fileURL; if ( Misc.urlExists(fileUnderRoot) ) fileURL = fileUnderRoot; else fileURL = getURL(fileName); // try CLASSPATH if ( fileURL!=null ) { try { ANTLRInputStream templateStream = new ANTLRInputStream(s); templateStream.name = fileName; CompiledST code = g.loadTemplateFile("", fileName, templateStream); if ( code==null ) g = null;
switch ( input.LA(1) ) { case ALT: match(input, Token.UP, null); if (state.failed) return code; if ( state.backtracking==0 ) {code =templates.getInstanceOf("rewriteEmptyTemplate");} if ( id!=null && (id!=null?id.getText():null).equals("template") ) code = templates.getInstanceOf("rewriteInlineTemplate"); code = templates.getInstanceOf("rewriteExternalTemplate"); code.add("name", (id!=null?id.getText():null)); code = templates.getInstanceOf("rewriteIndirectTemplate"); List<? extends Object> chunks=generator.translateAction(currentRuleName,ind); code.add("expr", chunks); if ( input.LA(1)==Token.DOWN ) { match(input, Token.DOWN, null); if (state.failed) return code; code.addAggr("args.{name,value}", (arg!=null?arg.getText():null), chunks); code =templates.getInstanceOf("rewriteAction"); code.add("action", generator.translateAction(currentRuleName,act));
public final CodeGenTreeWalker.rewrite_tree_return rewrite_tree() throws RecognitionException { CodeGenTreeWalker.rewrite_tree_return retval = new CodeGenTreeWalker.rewrite_tree_return(); retval.start = input.LT(1); if ( state.backtracking == 0 ) retval.code = templates.getInstanceOf("rewriteTree"); retval.code.add("treeLevel", rewriteTreeNestingLevel); retval.code.add("enclosingTreeLevel", rewriteTreeNestingLevel-1); if (state.failed) return retval; if ( state.backtracking==0 ) { retval.code.addAggr("root.{el,line,pos}", (r!=null?((CodeGenTreeWalker.rewrite_atom_return)r).code:null), (r!=null?((GrammarAST)r.start):null).getLine(), while (true) { int alt66=2; int LA66_0 = input.LA(1); if ( (LA66_0==ACTION||LA66_0==CHAR_LITERAL||LA66_0==CLOSURE||LA66_0==LABEL||LA66_0==OPTIONAL||LA66_0==POSITIVE_CLOSURE||LA66_0==RULE_REF||LA66_0==STRING_LITERAL||LA66_0==TOKEN_REF||LA66_0==TREE_BEGIN) ) { alt66=1;
switch ( input.LA(1) ) { case ALT: int LA63_1 = input.LA(2); if ( (LA63_1==DOWN) ) { int LA63_4 = input.LA(3); if ( (LA63_4==EPSILON) ) { int LA63_5 = input.LA(4); new NoViableAltException("", 63, 8, input); throw nvae; } finally { new NoViableAltException("", 63, 7, input); throw nvae; } finally { new NoViableAltException("", 63, 5, input); throw nvae; } finally { if ( state.backtracking==0 ) {code =templates.getInstanceOf("rewriteElementList");} match(input, Token.DOWN, null); if (state.failed) return code; if ( state.backtracking==0 ) {code.addAggr("elements.{el,line,pos}", templates.getInstanceOf("rewriteEmptyAlt"), a.getLine(), a.getCharPositionInLine() + 1
STGroup myGroup = new STGroup(); myGroup.registerRenderer(Thing.class, new ThingRenderer()); ST myST = new ST(myGroup, "Hello, <thing>!"); myST.add("thing", new Thing()); return myST.render();
public static void test3() throws IOException { String templates = "main() ::= <<\n" + "Foo: <{bar};format=\"lower\">\n" + ">>\n"; String tmpdir = System.getProperty("java.io.tmpdir"); writeFile(tmpdir, "t.stg", templates); STGroup group = new STGroupFile(tmpdir+"/"+"t.stg"); ST st = group.getInstanceOf("main"); st.inspect(); }
protected ST getEmbeddedInstanceOf(Interpreter interp, ST enclosingInstance, int ip, String name) { if ( verbose ) System.out.println("getEmbeddedInstanceOf("+name+")"); ST st = getInstanceOf(name); if ( st==null ) { errMgr.runTimeError(interp, enclosingInstance, ip, ErrorType.NO_SUCH_TEMPLATE, name); return createStringTemplateInternally(new CompiledST()); } // this is only called internally. wack any debug ST create events if ( trackCreationEvents ) { st.debugState.newSTEvent = null; // toss it out } return st; }
@Override @JsonIgnore public ST generateTemplate(STGroup group) { ST template = group.createStringTemplate(group.rawGetTemplate(AweConstants.TEMPLATE_INFO)); ST children = super.generateTemplate(group); // Generate template template.add("e", this).add("children", children); // Retrieve code return template; } }
STGroup group = new STGroup('$', '$'); group.registerRenderer(...); CompiledST compiledTemplate = group.defineTemplate("name", ...); compiledTemplate.hasFormalArgs = false; // very important! // later on... ST template = group.getInstanceOf("name");
/** * Create new {@link StCompiler} instance. */ @Inject public StCompiler(OutputStreamFactory outputStreamFactory, @Assisted String templateFileName) { super(outputStreamFactory); STGroup group = new STGroupFile(templateFileName); group.setListener(new StErrorListener()); this.stGroup = group; }
protected STGroup getTemplateGroup(Iterable<String> templateFileNames) throws IOException { if (stg == null) { // Convert set of relative paths to .st files into a set of input suppliers Iterable<CharSource> templateInputSuppliers = Iterables.transform(templateFileNames, FILE_TO_INPUT_SUPPLIER_TRANSFORM); // Combine the header and all .st files and load everything into a StringTemplateGroup stg = new STGroup(); stg.setListener(ERROR_LISTENER); for (String templateFileName : templateFileNames) { stg.importTemplates(getTemplateGroupFromFile(templateFileName)); } for (Map.Entry<Class<?>, ? extends AttributeRenderer> entry : attributeRenderers.entrySet()) { Class<?> cls = entry.getKey(); AttributeRenderer renderer = entry.getValue(); stg.registerRenderer(cls, renderer); } } return stg; }
public void execute() { STGroup targetGroup = new STGroupFile(runtimeTemplates.getPath()); targetGroup.registerModelAdaptor(STGroup.class, new STGroupModelAdaptor()); targetGroup.registerRenderer(String.class, new StringRenderer(), true); targetGroup.defineDictionary("escape", new JavaEscapeStringMap()); targetGroup.defineDictionary("lines", new LinesStringMap()); targetGroup.defineDictionary("strlen", new StrlenStringMap()); String rootFolder = "org/antlr/v4/test/runtime/templates"; generateCodeForFoldersInIndex(targetGroup, rootFolder); }
public BuilderGenerator() { URL url = BuilderGenerator.class.getResource("/stringtemplates/builder-source.stg"); this.templateGroup = new STGroupFile(url, "UTF-8", '<', '>'); this.templateGroup.load(); if(!this.templateGroup.isDefined(SOURCE_TEMPLATE_NAME)) { throw new IllegalStateException("StringTemplate resource does not define 'builder_source' template"); } }