diff --git a/.chronus/changes/http-client-java_support-exact-2026-4-21-17-10-37.md b/.chronus/changes/http-client-java_support-exact-2026-4-21-17-10-37.md new file mode 100644 index 00000000000..510a1fc14d5 --- /dev/null +++ b/.chronus/changes/http-client-java_support-exact-2026-4-21-17-10-37.md @@ -0,0 +1,7 @@ +--- +changeKind: feature +packages: + - "@typespec/http-client-java" +--- + +Support exact name from TCGC. \ No newline at end of file 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 cad773176b4..064374097c8 100644 --- a/packages/http-client-java/emitter/src/code-model-builder.ts +++ b/packages/http-client-java/emitter/src/code-model-builder.ts @@ -400,6 +400,10 @@ export class CodeModelBuilder { }, clientDefaultValue: arg.clientDefaultValue, }); + if (arg.isExactName) { + parameter.language.java = parameter.language.java ?? new Language(); + parameter.language.java.name = arg.name; + } } hostParameters.push(this.codeModel.addGlobalParameter(parameter)); }); @@ -996,7 +1000,7 @@ export class CodeModelBuilder { codeModelOperation.convenienceApi = new ConvenienceApi(convenienceApiName); } if (diagnostic) { - codeModelOperation.language.java = new Language(); + codeModelOperation.language.java = codeModelOperation.language.java ?? new Language(); codeModelOperation.language.java.comment = diagnostic.message; } @@ -1558,6 +1562,10 @@ export class CodeModelBuilder { }, extensions: extensions, }); + if (param.isExactName) { + parameter.language.java = parameter.language.java ?? new Language(); + parameter.language.java.name = param.name; + } op.addParameter(parameter); if (parameterOnClient) { @@ -2221,26 +2229,28 @@ export class CodeModelBuilder { !existBodyProperty.readOnly && !(existBodyProperty.schema instanceof ConstantSchema) ) { - request.parameters.push( - new VirtualParameter( - existBodyProperty.language.default.name, - existBodyProperty.language.default.description, - existBodyProperty.schema, - { - originalParameter: originalParameter, - targetProperty: existBodyProperty, - language: { - default: { - serializedName: existBodyProperty.serializedName, - }, + const virtualParameter = new VirtualParameter( + existBodyProperty.language.default.name, + existBodyProperty.language.default.description, + existBodyProperty.schema, + { + originalParameter: originalParameter, + targetProperty: existBodyProperty, + language: { + default: { + serializedName: existBodyProperty.serializedName, }, - summary: existBodyProperty.summary, - implementation: ImplementationLocation.Method, - required: existBodyProperty.required, - nullable: existBodyProperty.nullable, }, - ), + summary: existBodyProperty.summary, + implementation: ImplementationLocation.Method, + required: existBodyProperty.required, + nullable: existBodyProperty.nullable, + }, ); + if (existBodyProperty.language?.java?.name) { + virtualParameter.language.java = existBodyProperty.language.java; + } + request.parameters.push(virtualParameter); } } } @@ -2274,16 +2284,19 @@ export class CodeModelBuilder { break; } - headers.push( - new HttpHeader(header.serializedName, schema, { - language: { - default: { - name: header.name, - description: header.summary ?? header.doc, - }, + const httpHeader = new HttpHeader(header.serializedName, schema, { + language: { + default: { + name: header.name, + description: header.summary ?? header.doc, }, - }), - ); + }, + }); + if (header.isExactName) { + httpHeader.language.java = httpHeader.language.java ?? new Language(); + httpHeader.language.java.name = header.name; + } + headers.push(httpHeader); } } @@ -2716,6 +2729,10 @@ export class CodeModelBuilder { }, }, }); + if (type.isExactName) { + schema.language.java = schema.language.java ?? new Language(); + schema.language.java.name = type.name; + } if (type.external) { // java name schema.language.java = schema.language.java ?? new Language(); @@ -2832,6 +2849,10 @@ export class CodeModelBuilder { }, }, }); + if (type.isExactName) { + objectSchema.language.java = objectSchema.language.java ?? new Language(); + objectSchema.language.java.name = type.name; + } objectSchema.language.default.crossLanguageDefinitionId = type.crossLanguageDefinitionId; if (type.external) { @@ -2997,6 +3018,10 @@ export class CodeModelBuilder { serializedName: getPropertySerializedName(modelProperty), extensions: extensions, }); + if (modelProperty.isExactName) { + codeModelProperty.language.java = codeModelProperty.language.java ?? new Language(); + codeModelProperty.language.java.name = modelProperty.name; + } if (modelProperty.encode) { if (schema instanceof ArraySchema) { // ArrayEncoding @@ -3054,6 +3079,10 @@ export class CodeModelBuilder { }, }, }); + if (type.isExactName) { + objectSchema.language.java = objectSchema.language.java ?? new Language(); + objectSchema.language.java.name = type.name; + } const variantSchema = this.processSchema(it, variantName); objectSchema.addProperty( diff --git a/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/preprocessor/tranformer/Transformer.java b/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/preprocessor/tranformer/Transformer.java index 446f05a4524..f28ed6f3630 100644 --- a/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/preprocessor/tranformer/Transformer.java +++ b/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/preprocessor/tranformer/Transformer.java @@ -588,7 +588,10 @@ private void renameType(Metadata schema) { private void renameProperty(Property property) { Language language = property.getLanguage().getDefault(); Language java = addJavaLanguage(property); - java.setName(CodeNamer.getPropertyName(language.getName())); + if (property.getLanguage().getJava().getName() == null + || property.getLanguage().getJava().getName().isEmpty()) { + java.setName(CodeNamer.getPropertyName(language.getName())); + } java.setSerializedName(language.getSerializedName()); java.setDescription(language.getDescription()); property.getLanguage().setJava(java); @@ -606,7 +609,9 @@ private void renameCodeModel(CodeModel codeModel) { private void renameClient(Metadata client) { Language language = client.getLanguage().getDefault(); Language java = addJavaLanguage(client); - java.setName(CodeNamer.getClientName(language.getName())); + if (client.getLanguage().getJava().getName() == null || client.getLanguage().getJava().getName().isEmpty()) { + java.setName(CodeNamer.getClientName(language.getName())); + } java.setDescription(language.getDescription()); client.getLanguage().setJava(java); } @@ -614,7 +619,9 @@ private void renameClient(Metadata client) { private void renameVariable(Metadata schema) { Language language = schema.getLanguage().getDefault(); Language java = addJavaLanguage(schema); - java.setName(CodeNamer.getParameterName(language.getName())); + if (schema.getLanguage().getJava().getName() == null || schema.getLanguage().getJava().getName().isEmpty()) { + java.setName(CodeNamer.getParameterName(language.getName())); + } java.setSerializedName(language.getSerializedName()); java.setDescription(language.getDescription()); schema.getLanguage().setJava(java); @@ -623,7 +630,9 @@ private void renameVariable(Metadata schema) { private void renameMethodGroup(Metadata schema) { Language language = schema.getLanguage().getDefault(); Language java = addJavaLanguage(schema); - java.setName(CodeNamer.getMethodGroupName(language.getName())); + if (schema.getLanguage().getJava().getName() == null || schema.getLanguage().getJava().getName().isEmpty()) { + java.setName(CodeNamer.getMethodGroupName(language.getName())); + } java.setSerializedName(language.getSerializedName()); java.setDescription(language.getDescription()); schema.getLanguage().setJava(java); @@ -632,7 +641,9 @@ private void renameMethodGroup(Metadata schema) { private void renameMethod(Metadata schema) { Language language = schema.getLanguage().getDefault(); Language java = addJavaLanguage(schema); - java.setName(CodeNamer.getMethodName(language.getName())); + if (schema.getLanguage().getJava().getName() == null || schema.getLanguage().getJava().getName().isEmpty()) { + java.setName(CodeNamer.getMethodName(language.getName())); + } java.setSerializedName(language.getSerializedName()); java.setDescription(language.getDescription()); }