From deae32ea6fa699327310ec7608d65dfba375c0c3 Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Thu, 12 Sep 2024 16:18:25 +0800 Subject: [PATCH] http-client-java, support client parameter to client (#4415) This is only part of the support for https://github.com/Azure/autorest.java/issues/2428 cadl-ranch https://github.com/Azure/cadl-ranch/pull/727 user code ```java InitializationClient client = new InitializationClientBuilder() .name("client1") .buildClient(); client.action(); ``` --- .../emitter/src/code-model-builder.ts | 15 ++++++++++++++- packages/http-client-java/emitter/src/models.ts | 7 ++++++- .../core/mapper/ServiceClientMapper.java | 6 ++++-- .../http-client-generator-test/package.json | 2 +- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/packages/http-client-java/emitter/src/code-model-builder.ts b/packages/http-client-java/emitter/src/code-model-builder.ts index 263da6dd15..e56a4600bd 100644 --- a/packages/http-client-java/emitter/src/code-model-builder.ts +++ b/packages/http-client-java/emitter/src/code-model-builder.ts @@ -1148,10 +1148,19 @@ export class CodeModelBuilder { } } + // TODO: use param.onClient after TCGC fix + const parameterOnClient = + !isApiVersion(this.sdkContext, param) && + param.correspondingMethodParams && + param.correspondingMethodParams.length > 0 && + param.correspondingMethodParams[0].onClient; + const nullable = param.type.kind === "nullable"; const parameter = new Parameter(param.name, param.details ?? "", schema, { summary: param.description, - implementation: ImplementationLocation.Method, + implementation: parameterOnClient + ? ImplementationLocation.Client + : ImplementationLocation.Method, required: !param.optional, nullable: nullable, protocol: { @@ -1169,6 +1178,10 @@ export class CodeModelBuilder { }); op.addParameter(parameter); + if (parameterOnClient) { + clientContext.addGlobalParameter(parameter); + } + this.trackSchemaUsage(schema, { usage: [SchemaContext.Input] }); if (op.convenienceApi) { diff --git a/packages/http-client-java/emitter/src/models.ts b/packages/http-client-java/emitter/src/models.ts index c31704ce26..95fa98e255 100644 --- a/packages/http-client-java/emitter/src/models.ts +++ b/packages/http-client-java/emitter/src/models.ts @@ -31,7 +31,12 @@ export class ClientContext { } addGlobalParameter(parameter: Parameter) { - if (!this.globalParameters.includes(parameter)) { + if ( + !this.globalParameters.includes(parameter) && + !this.globalParameters.some( + (it) => it.language.default.name === parameter.language.default.name + ) + ) { this.globalParameters.push(parameter); } } diff --git a/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/mapper/ServiceClientMapper.java b/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/mapper/ServiceClientMapper.java index 6aa444d80e..8ea7fea571 100644 --- a/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/mapper/ServiceClientMapper.java +++ b/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/mapper/ServiceClientMapper.java @@ -209,8 +209,10 @@ protected List processClientProperties(Client client, Str continue; } - String serviceClientPropertyDescription = + String description = p.getDescription() != null ? p.getDescription() : p.getLanguage().getJava().getDescription(); + String summary = p.getSummary(); + description = SchemaUtil.mergeSummaryWithDescription(summary, description); String serviceClientPropertyName = CodeNamer.getPropertyName(p.getLanguage().getJava().getName()); @@ -233,7 +235,7 @@ protected List processClientProperties(Client client, Str if (serviceClientPropertyClientType != ClassType.TOKEN_CREDENTIAL) { ServiceClientProperty serviceClientProperty = new ServiceClientProperty.Builder() - .description(serviceClientPropertyDescription) + .description(description) .type(serviceClientPropertyClientType) .name(serviceClientPropertyName) .readOnly(serviceClientPropertyIsReadOnly) diff --git a/packages/http-client-java/generator/http-client-generator-test/package.json b/packages/http-client-java/generator/http-client-generator-test/package.json index 0fb78ecfdd..a502c6d78c 100644 --- a/packages/http-client-java/generator/http-client-generator-test/package.json +++ b/packages/http-client-java/generator/http-client-generator-test/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "type": "module", "scripts": { - "clean": "rimraf ./node_modules/@typespec/http-client-java ./package-lock.json", + "clean": "rimraf ./node_modules/@typespec/http-client-java ./package-lock.json ./tsp-output", "format": "npm run -s prettier -- --write", "check-format": "npm run prettier -- --check", "prettier": "prettier --config ./.prettierrc.yaml **/*.tsp",