package xapi.dev.elemental;
import com.github.javaparser.JavaParser;
import com.github.javaparser.ParseException;
import com.github.javaparser.ast.expr.UiContainerExpr;
import com.github.javaparser.ast.plugin.Transformer;
import com.github.javaparser.ast.plugin.UiTransformer;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.MethodInvocationTree;
import xapi.fu.Debuggable;
import xapi.fu.Rethrowable;
import xapi.javac.dev.api.InjectionResolver;
import xapi.javac.dev.api.JavacService;
import xapi.javac.dev.template.TemplateGenerator;
import xapi.source.read.JavaModel.IsType;
/**
* @author James X. Nelson (james@wetheinter.net)
* Created on 4/3/16.
*/
public class ElementalTemplateGenerator implements TemplateGenerator, Debuggable, Rethrowable {
UiTransformer transformer;
@Override
public boolean generateTemplate(
JavacService service,
CompilationUnitTree cup,
MethodInvocationTree source,
IsType type,
String value,
InjectionResolver resolver
) {
if (value.trim().startsWith("<")) {
try {
final UiContainerExpr expr = JavaParser.parseUiContainer(value);
final Transformer transformer = getTransformer();
String src = expr.toSource(transformer);
resolver.replace(source, src);
} catch (ParseException e) {
throw rethrow(e);
}
}
return false;
}
protected UiTransformer newTransformer() {
return new UiTransformer();
}
public final UiTransformer getTransformer() {
if (transformer == null) {
transformer = newTransformer();
transformer.setPlugin(new ElementalTemplatePlugin<>());
}
return transformer;
}
}