in lib/interface_generator.js [13:109]
emitInterface(functions, apis, level = 0) {
this.emitln(`// This file is auto-generated, don't edit it. Thanks.`, level);
this.emitln(`package ${this.ctx.package};`, level);
this.emitln();
if (this.ctx.closable) {
this.emitln(`import com.aliyun.core.utils.SdkAutoCloseable;`, level);
}
this.emitln(`import ${this.ctx.package}.models.*;`, level);
if (this.ctx.extendsClass && this.ctx.config && this.ctx.config.signVersion === 'v3') {
this.emitln(`import ${this.ctx.extendsClass.package + '.Configuration;'}`);
this.emitln(`import ${this.ctx.extendsClass.package + '.auth.SignatureVersion;'}`);
}
this.emitln(`import darabonba.core.*;`, level);
this.emitln(`import darabonba.core.async.*;`, level);
this.emitln(`import darabonba.core.sync.*;`, level);
this.emitln();
this.emitln(`import java.util.concurrent.CompletableFuture;`, level);
this.emitln();
this.emitln(`public interface ${this.ctx.implements}${this.ctx.closable ? ' extends SdkAutoCloseable' : ''} {`, level);
// this.emitApiInterface(apis, level + 1);
this.emitln();
this.emitBuilderMethod(level + 1);
this.emitln();
this.emitCreatorMethod(level + 1);
this.emitFunctionInterface(functions, level + 1);
this.emitln();
this.emitln('}');
}
emitApiInterface(apis, level) {
for (let i = 0; i < apis.length; i++) {
this.emitln();
this.visitAnnotation(apis[i].annotation, level);
this.emit('', level);
this.visitType(apis[i].returnType);
this.emit(` ${_name(apis[i].apiName)}`);
this.visitParams(apis[i].params, level);
this.emitln(';');
}
}
emitFunctionInterface(functions, level) {
for (let i = 0; i < functions.length; i++) {
if (_name(functions[i].functionName) === 'main') {
continue;
}
if (this.ctx.closable && _name(functions[i].functionName) === 'close') {
continue;
}
this.emitln();
this.visitAnnotation(functions[i].annotation, level);
if (_name(functions[i].functionName).endsWith('WithAsyncResponseHandler')) {
this.emit(`<ReturnT> CompletableFuture<ReturnT>`);
} else {
this.emit(`${functions[i].isAsync ? 'CompletableFuture<' : ''}`, level);
if (functions[i].isAsync && (functions[i].returnType.lexeme === 'void' || functions[i].returnType.name === 'void')) {
this.emit(`Void`);
} else {
this.visitType(functions[i].returnType);
}
this.emit(`${functions[i].isAsync ? '>' : ''}`);
}
this.emit(` ${_name(functions[i].functionName)}`);
if (_name(functions[i].functionName).endsWith('WithAsyncResponseHandler')) {
const params = JSON.parse(JSON.stringify(functions[i].params));
params.params.pop();
this.emit('(');
this.visitPureParams(params, level);
this.emit(`, AsyncResponseHandler<`);
this.visitType(functions[i].returnType);
this.emit(`, ReturnT> responseHandler)`);
} else {
this.visitParams(functions[i].params, level);
}
this.emitln(';');
}
}
emitBuilderMethod(level) {
this.emitln(`static ${this.ctx.className}Builder builder() {`, level);
if (this.ctx.config && this.ctx.config.signVersion === 'v3') {
this.emitln(`return new ${this.ctx.className}Builder().serviceConfiguration(Configuration.create().setSignatureVersion(SignatureVersion.V3));`, level + 1);
} else {
this.emitln(`return new ${this.ctx.className}Builder();`, level + 1);
}
this.emitln(`}`, level);
}
emitCreatorMethod(level) {
this.emitln(`static ${this.ctx.implements} create() {`, level);
this.emitln(`return builder().build();`, level + 1);
this.emitln(`}`, level);
}
}