codegen()

in lib/client_generator.js [58:115]


  codegen(level = 0) {
    const nonStaticWraps = this.ast.moduleBody.nodes.filter((item) => { return item.type === 'function' && !item.isStatic; });
    const apis = this.ast.moduleBody.nodes.filter((item) => { return item.type === 'api'; });
    const models = this.ast.moduleBody.nodes.filter((item) => { return item.type === 'model'; });
    const types = this.ast.moduleBody.nodes.filter((item) => { return item.type === 'type'; });
    const init = this.ast.moduleBody.nodes.filter((item) => { return item.type === 'init'; });
    const functions = this.ast.moduleBody.nodes.filter((item) => { return item.type === 'function'; });
    if (nonStaticWraps.length > 0 || apis.length > 0) {
      this.ctx.extendParam.writeConstruct = true;
    }
    if (models.length > 0) {
      this.ctx.extendParam.writeImport = true;
    }
    if (this.ast.extends) {
      this.ctx.extendsName = _name(this.ast.extends);
      this.ctx.extendsClass.className = this.ctx.imports[this.ctx.extendsName].className;
      this.ctx.extendsClass.package = this.ctx.imports[this.ctx.extendsName].package;
    }
    this.emitHeader(level);
    this.emitln();
    types.forEach(type => { this.emitEachType(type, level + 1); });
    this.emitln();
    if (this.ctx.exec) {
      init.forEach(i => { this.emitEachInit(i, level + 1); });
    } else if (init.length === 1) {
      init.forEach(i => { this.emitConstructor(i, level + 1); });
    }
    // this.emitln();
    // apis.forEach(api => { this.emitEachAPI(api, level + 1); });
    functions.forEach(func => {
      if (_name(func.functionName) === 'close' && !this.ctx.exec && this.ctx.implements) {
        this.ctx.closable = true;
      }
      this.emitln();
      this.emitEachFunction(func, level + 1);
    });
    this.emitln();
    this.emitFooter(level);

    const sseIterators = this.ctx.iterators.filter((item) => {
      return item.iteratorStyle === SSE;
    });
    if (sseIterators.length <= 0) {
      this.output = this.output.replace('import darabonba.core.sse.SSEHttpResponseHandler;\n', '');
    }

    if (!this.ctx.exec && init.length === 1) {
      const builder = new BuilderGenerator(this.ast, this.ctx);
      builder.codegen(level);
      save(path.join(this.ctx.outputDir, `${this.ctx.className}Builder.java`), builder.output);
    }

    if (!this.ctx.exec && this.ctx.implements) {
      const inter = new InterfaceGenerator(this.ast, this.ctx);
      inter.emitInterface(nonStaticWraps, apis, level);
      save(path.join(this.ctx.outputDir, `${this.ctx.implements}.java`), inter.output);
    }
  }