in transpiler/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/Transpiler.java [324:372]
public AbstractMessage visitProgram(ProgramContext ctx) {
String packageName = defaultPackageName();
if (ctx.packageName() != null) {
packageName =
ctx.packageName().identifier() != null
? ctx.packageName().identifier().getText()
: ctx.packageName().CONST_STRING().getText();
packageName = TranspilerHelper.preprocessString(packageName);
}
ImmutableList<Import> imports =
ctx.importStatement().stream().map(i -> (Import) i.accept(this)).collect(toImmutableList());
ImmutableList<Option> options =
ctx.optionStatement().stream().map(o -> (Option) o.accept(this)).collect(toImmutableList());
String rootEnvName = String.format(TranspilerData.ROOT_FUNCTION_NAME_FORMAT, packageName);
pushEnv(
rootEnvName,
Collections.singletonList(Argument.newBuilder().setName(TranspilerData.ROOT_VAR).build()));
ImmutableList<FieldMapping> rootMappings =
ctx.statement().stream().map(s -> (FieldMapping) s.accept(this)).collect(toImmutableList());
FunctionDefinition rootBlock =
this.environment
.generateDefinition(false, rootMappings)
.setMeta(functionMeta(ctx.statement(), FunctionType.ROOT))
.build();
this.environment = this.environment.getParent();
ctx.functionDef().forEach(f -> f.accept(this));
PipelineConfig.Builder config =
PipelineConfig.newBuilder()
.setPackageName(packageName)
.setMeta(
ctx.packageName() != null
? withSymbol(Meta.newBuilder(), ctx.packageName())
: withImpliedPackageDefSymbol(Meta.newBuilder(), packageName))
.addAllImports(imports)
.addAllOptions(options)
.setRootBlock(rootBlock)
.addAllFunctions(this.allFunctions);
if (fileInfo != null) {
config.setMeta(Meta.newBuilder().putEntries(FILE_META_KEY, Any.pack(fileInfo)));
}
return config.build();
}