/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.gosu.parser.expressions; import gw.lang.parser.GosuParserTypes; import gw.lang.parser.expressions.ITemplateStringLiteral; import gw.lang.parser.expressions.IProgram; import gw.lang.parser.template.ITemplateGenerator; import gw.internal.gosu.parser.Expression; import gw.internal.gosu.parser.CannotExecuteGosuException; import gw.lang.parser.template.TemplateParseException; import java.util.List; public class TemplateStringLiteral extends Expression implements ITemplateStringLiteral { private ITemplateGenerator _template; public TemplateStringLiteral(ITemplateGenerator template) { _template = template; setType( GosuParserTypes.STRING_TYPE() ); } public Object evaluate() { if( !isCompileTimeConstant() ) { return super.evaluate(); } throw new CannotExecuteGosuException(); } public IProgram getProgram() { if (_template.isValid()) { return _template.getProgram(); } else { String s = ""; List<TemplateParseException> parseExceptions = _template.getTemplateSyntaxProblems(); for (TemplateParseException parseException : parseExceptions) { s += parseException.getParseException().getMessage() + "\n"; } throw new RuntimeException( "String Template failed to parse: \n" + this + "\nOn class: " + getGosuClass().getName() + "\n Parse Errors:\n" + s ); } } @Override public String toString() { return "\"" + _template.toString() + "\""; } }