public AbstractMessage visitProgram()

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();
  }