package ctbrec.variableexpansion; import ctbrec.variableexpansion.antlr.PostProcessingLexer; import ctbrec.variableexpansion.antlr.PostProcessingParser; import ctbrec.variableexpansion.functions.AntlrSyntacErrorAdapter; import lombok.extern.slf4j.Slf4j; import org.antlr.v4.runtime.*; import java.io.IOException; import java.io.StringReader; import java.util.HashMap; import java.util.Map; import java.util.Optional; @Slf4j abstract class AbstractVariableExpander { protected Map> placeholderValueSuppliers = new HashMap<>(); protected String fillInPlaceHolders(String input, Map> variables) { try (StringReader reader = new StringReader(input)) { CharStream s = CharStreams.fromReader(reader); PostProcessingLexer lexer = new PostProcessingLexer(s); CommonTokenStream tokens = new CommonTokenStream(lexer); PostProcessingParser parser = new PostProcessingParser(tokens); parser.addErrorListener(new AntlrSyntacErrorAdapter() { @Override public void syntaxError(Recognizer recognizer, Object o, int line, int pos, String s, RecognitionException e) { log.warn("Syntax error at {}:{} {}", line, pos, s); } }); PostProcessingParser.LineContext ctx = parser.line(); ParserVisitor visitor = new ParserVisitor(variables); return visitor.visit(ctx); } catch (IOException e) { log.error("Couldn't fill in placeholders", e); } return input; } public Map> getPlaceholderValueSuppliers() { return placeholderValueSuppliers; } }