*/
public CajoledModule rewrite(List<CajoledModule> modules) {
if (modules.size() == 1) { return modules.get(0); }
FilePosition unk = FilePosition.UNKNOWN;
BuildInfo buildInfo = mgr.getBuildInfo();
Expression moduleInvocations = null;
for (CajoledModule module : modules) {
Expression invocation = (Expression) QuasiBuilder.substV(
"___.prepareModule(@moduleBody).instantiate___(___, IMPORTS___)",
"moduleBody", module.getModuleBody());
moduleInvocations = moduleInvocations != null
? Operation.createInfix(Operator.COMMA, moduleInvocations, invocation)
: invocation;
}
ObjectConstructor oc = (ObjectConstructor) QuasiBuilder.substV(
""
+ "({"
+ " instantiate: function (___, IMPORTS___) {"
+ " return @moduleInvocations?;"
+ " },"
+ " cajolerName: @cajolerName,"
+ " cajolerVersion: @cajolerVersion,"
+ " cajoledDate: @cajoledDate"
+ "})",
"moduleInvocations", moduleInvocations,
"cajolerName", StringLiteral.valueOf(unk, "com.google.caja"),
"cajolerVersion", StringLiteral.valueOf(
unk, buildInfo.getBuildVersion()),
"cajoledDate", new IntegerLiteral(unk, buildInfo.getCurrentTime()));
return new CajoledModule(oc);
}