Skip to content

Commit cfb11a1

Browse files
http-client-java, refactor crossLanguageDefinitionId (#5429)
code-model, move it to `Language` Visible effect is that sync/async client should now have a crossLanguageDefinitionId. e.g. ``` "todo.TodoItemsClient": "Todo.TodoItems", ``` Previous, it is null, e.g. https://github.com/allenjzhang/typespec-e2e-demo/blob/main/todoApp/clients/java/src/main/resources/META-INF/todo_apiview_properties.json#L25 PS: should it be `null` instead of `"null"`?
1 parent f70cf37 commit cfb11a1

File tree

73 files changed

+537
-577
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+537
-577
lines changed

packages/http-client-java/emitter/src/code-model-builder.ts

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,7 @@ import { getSegment } from "@typespec/rest";
111111
import { getAddedOnVersions } from "@typespec/versioning";
112112
import { fail } from "assert";
113113
import pkg from "lodash";
114-
import {
115-
Client as CodeModelClient,
116-
CrossLanguageDefinition,
117-
EncodedSchema,
118-
} from "./common/client.js";
114+
import { Client as CodeModelClient, EncodedSchema } from "./common/client.js";
119115
import { CodeModel } from "./common/code-model.js";
120116
import { LongRunningMetadata } from "./common/long-running-metadata.js";
121117
import { Operation as CodeModelOperation, ConvenienceApi, Request } from "./common/operation.js";
@@ -549,7 +545,7 @@ export class CodeModelBuilder {
549545
// at present, use global security definition
550546
security: this.codeModel.security,
551547
});
552-
codeModelClient.crossLanguageDefinitionId = client.crossLanguageDefinitionId;
548+
codeModelClient.language.default.crossLanguageDefinitionId = client.crossLanguageDefinitionId;
553549

554550
// versioning
555551
const versions = client.apiVersions;
@@ -616,6 +612,7 @@ export class CodeModelBuilder {
616612
// operations without operation group
617613
const serviceMethodsWithoutSubClient = this.listServiceMethodsUnderClient(client);
618614
let codeModelGroup = new OperationGroup("");
615+
codeModelGroup.language.default.crossLanguageDefinitionId = client.crossLanguageDefinitionId;
619616
for (const serviceMethod of serviceMethodsWithoutSubClient) {
620617
if (!this.needToSkipProcessingOperation(serviceMethod.__raw, clientContext)) {
621618
codeModelGroup.addOperation(this.processOperation(serviceMethod, clientContext, ""));
@@ -639,6 +636,8 @@ export class CodeModelBuilder {
639636
// operation group with no operation is skipped
640637
if (serviceMethods.length > 0) {
641638
codeModelGroup = new OperationGroup(subClient.name);
639+
codeModelGroup.language.default.crossLanguageDefinitionId =
640+
subClient.crossLanguageDefinitionId;
642641
for (const serviceMethod of serviceMethods) {
643642
if (!this.needToSkipProcessingOperation(serviceMethod.__raw, clientContext)) {
644643
codeModelGroup.addOperation(
@@ -817,7 +816,7 @@ export class CodeModelBuilder {
817816
},
818817
});
819818

820-
(codeModelOperation as CrossLanguageDefinition).crossLanguageDefinitionId =
819+
codeModelOperation.language.default.crossLanguageDefinitionId =
821820
sdkMethod.crossLanguageDefintionId;
822821
codeModelOperation.internalApi = sdkMethod.access === "internal";
823822

@@ -2017,7 +2016,7 @@ export class CodeModelBuilder {
20172016
},
20182017
},
20192018
});
2020-
schema.crossLanguageDefinitionId = type.crossLanguageDefinitionId;
2019+
schema.language.default.crossLanguageDefinitionId = type.crossLanguageDefinitionId;
20212020
return this.codeModel.schemas.add(schema);
20222021
}
20232022

@@ -2117,8 +2116,7 @@ export class CodeModelBuilder {
21172116
},
21182117
},
21192118
});
2120-
(objectSchema as CrossLanguageDefinition).crossLanguageDefinitionId =
2121-
type.crossLanguageDefinitionId;
2119+
objectSchema.language.default.crossLanguageDefinitionId = type.crossLanguageDefinitionId;
21222120
this.codeModel.schemas.add(objectSchema);
21232121

21242122
// cache this now before we accidentally recurse on this type.
@@ -2541,17 +2539,18 @@ export class CodeModelBuilder {
25412539
const clientNamespace: string | undefined = type?.clientNamespace;
25422540

25432541
if (type) {
2542+
const crossLanguageDefinitionId = type.crossLanguageDefinitionId;
25442543
if (this.isBranded()) {
25452544
// special handling for namespace of model that cannot be mapped to azure-core
2546-
if (type.crossLanguageDefinitionId === "TypeSpec.Http.File") {
2545+
if (crossLanguageDefinitionId === "TypeSpec.Http.File") {
25472546
// TypeSpec.Http.File
25482547
return this.baseJavaNamespace;
2549-
} else if (type.crossLanguageDefinitionId === "Azure.Core.Foundations.OperationState") {
2548+
} else if (crossLanguageDefinitionId === "Azure.Core.Foundations.OperationState") {
25502549
// Azure.Core.OperationState
25512550
return this.baseJavaNamespace;
25522551
} else if (
2553-
type.crossLanguageDefinitionId === "Azure.Core.ResourceOperationStatus" ||
2554-
type.crossLanguageDefinitionId === "Azure.Core.Foundations.OperationStatus"
2552+
crossLanguageDefinitionId === "Azure.Core.ResourceOperationStatus" ||
2553+
crossLanguageDefinitionId === "Azure.Core.Foundations.OperationStatus"
25552554
) {
25562555
// Azure.Core.ResourceOperationStatus<>
25572556
// Azure.Core.Foundations.OperationStatus<>
@@ -2563,10 +2562,10 @@ export class CodeModelBuilder {
25632562
}
25642563
} else {
25652564
// special handling for namespace of model in TypeSpec
2566-
if (type.crossLanguageDefinitionId === "TypeSpec.Http.File") {
2565+
if (crossLanguageDefinitionId === "TypeSpec.Http.File") {
25672566
// TypeSpec.Http.File
25682567
return this.baseJavaNamespace;
2569-
} else if (type.crossLanguageDefinitionId.startsWith("TypeSpec.Rest.Resource.")) {
2568+
} else if (crossLanguageDefinitionId.startsWith("TypeSpec.Rest.Resource.")) {
25702569
// models in TypeSpec.Rest.Resource
25712570
return this.baseJavaNamespace;
25722571
}

packages/http-client-java/emitter/src/common/client.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { Aspect, Metadata, OperationGroup, Parameter, Security } from "@autorest/codemodel";
33
import { DeepPartial } from "@azure-tools/codegen";
44

5-
export interface Client extends Aspect, CrossLanguageDefinition {
5+
export interface Client extends Aspect {
66
/** All operations */
77
operationGroups: Array<OperationGroup>;
88

@@ -67,10 +67,6 @@ export class ServiceVersion extends Metadata {
6767
}
6868
}
6969

70-
export interface CrossLanguageDefinition {
71-
crossLanguageDefinitionId?: string;
72-
}
73-
7470
export interface EncodedSchema {
7571
encode?: string;
7672
}

packages/http-client-java/emitter/src/common/operation.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,10 @@ import {
99
SchemaType,
1010
} from "@autorest/codemodel";
1111
import { DeepPartial } from "@azure-tools/codegen";
12-
import { CrossLanguageDefinition } from "./client.js";
1312
import { LongRunningMetadata } from "./long-running-metadata.js";
1413

1514
/** represents a single callable endpoint with a discrete set of inputs, and any number of output possibilities (responses or exceptions) */
16-
export interface Operation extends Aspect, CrossLanguageDefinition {
15+
export interface Operation extends Aspect {
1716
/**
1817
* Original Operation ID if present.
1918
* This can be used to identify the original id of an operation before it is styled.

packages/http-client-java/emitter/src/external-schemas.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import {
1414
SdkModelType,
1515
SdkType,
1616
} from "@azure-tools/typespec-client-generator-core";
17-
import { CrossLanguageDefinition } from "./common/client.js";
1817
import { getNamespace, pascalCase } from "./utils.js";
1918

2019
/*
@@ -36,8 +35,7 @@ export function createResponseErrorSchema(
3635
},
3736
},
3837
});
39-
(responseErrorSchema as CrossLanguageDefinition).crossLanguageDefinitionId =
40-
"Azure.Core.Foundations.Error";
38+
responseErrorSchema.language.default.crossLanguageDefinitionId = "Azure.Core.Foundations.Error";
4139

4240
schemas.add(responseErrorSchema);
4341
responseErrorSchema.addProperty(
@@ -117,7 +115,7 @@ export function createResponseInnerErrorSchema(
117115
},
118116
},
119117
);
120-
(responseInnerErrorSchema as CrossLanguageDefinition).crossLanguageDefinitionId =
118+
responseInnerErrorSchema.language.default.crossLanguageDefinitionId =
121119
"Azure.Core.Foundations.InnerError";
122120

123121
schemas.add(responseInnerErrorSchema);
@@ -341,7 +339,7 @@ export function getFileDetailsSchema(
341339
fileDetailsSchema.language.default.description = fileSdkType.doc;
342340
}
343341
// crossLanguageDefinitionId
344-
(fileDetailsSchema as CrossLanguageDefinition).crossLanguageDefinitionId =
342+
fileDetailsSchema.language.default.crossLanguageDefinitionId =
345343
fileSdkType.crossLanguageDefinitionId;
346344

347345
let contentTypeProperty;

packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/extension/model/codemodel/ChoiceSchema.java

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ public class ChoiceSchema extends ValueSchema {
1818
private Schema choiceType;
1919
private List<ChoiceValue> choices = new ArrayList<>();
2020
private String summary;
21-
private String crossLanguageDefinitionId;
2221

2322
/**
2423
* Creates a new instance of the ChoiceSchema class.
@@ -73,24 +72,6 @@ public void setSummary(String summary) {
7372
this.summary = summary;
7473
}
7574

76-
/**
77-
* Gets the cross-language definition id.
78-
*
79-
* @return The cross-language definition id.
80-
*/
81-
public String getCrossLanguageDefinitionId() {
82-
return crossLanguageDefinitionId;
83-
}
84-
85-
/**
86-
* Sets the cross-language definition id.
87-
*
88-
* @param crossLanguageDefinitionId The cross-language definition id.
89-
*/
90-
public void setCrossLanguageDefinitionId(String crossLanguageDefinitionId) {
91-
this.crossLanguageDefinitionId = crossLanguageDefinitionId;
92-
}
93-
9475
@Override
9576
public String toString() {
9677
return sharedToString(this, ChoiceSchema.class.getName());
@@ -137,8 +118,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
137118
JsonWriter writeParentProperties(JsonWriter jsonWriter) throws IOException {
138119
return super.writeParentProperties(jsonWriter).writeJsonField("choiceType", choiceType)
139120
.writeArrayField("choices", choices, JsonWriter::writeJson)
140-
.writeStringField("summary", summary)
141-
.writeStringField("crossLanguageDefinitionId", crossLanguageDefinitionId);
121+
.writeStringField("summary", summary);
142122
}
143123

144124
/**
@@ -168,9 +148,6 @@ boolean tryConsumeParentProperties(ChoiceSchema schema, String fieldName, JsonRe
168148
} else if ("summary".equals(fieldName)) {
169149
schema.summary = reader.getString();
170150
return true;
171-
} else if ("crossLanguageDefinitionId".equals(fieldName)) {
172-
schema.crossLanguageDefinitionId = reader.getString();
173-
return true;
174151
}
175152

176153
return false;

packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/extension/model/codemodel/Client.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ public class Client extends Metadata {
2121
private Security security;
2222
private List<ApiVersion> apiVersions = new ArrayList<>();
2323
private ServiceVersion serviceVersion;
24-
private String crossLanguageDefinitionId;
2524
private Client parent;
2625
private List<Client> subClients = Collections.emptyList();
2726
private boolean buildMethodPublic = true;
@@ -142,24 +141,6 @@ public void setServiceVersion(ServiceVersion serviceVersion) {
142141
this.serviceVersion = serviceVersion;
143142
}
144143

145-
/**
146-
* Gets the cross-language definition id of the client.
147-
*
148-
* @return The cross-language definition id of the client.
149-
*/
150-
public String getCrossLanguageDefinitionId() {
151-
return crossLanguageDefinitionId;
152-
}
153-
154-
/**
155-
* Sets the cross-language definition id of the client.
156-
*
157-
* @param crossLanguageDefinitionId The cross-language definition id of the client.
158-
*/
159-
public void setCrossLanguageDefinitionId(String crossLanguageDefinitionId) {
160-
this.crossLanguageDefinitionId = crossLanguageDefinitionId;
161-
}
162-
163144
public Client getParent() {
164145
return parent;
165146
}
@@ -204,7 +185,6 @@ JsonWriter writeParentProperties(JsonWriter jsonWriter) throws IOException {
204185
.writeJsonField("security", security)
205186
.writeArrayField("apiVersions", apiVersions, JsonWriter::writeJson)
206187
.writeJsonField("serviceVersion", serviceVersion)
207-
.writeStringField("crossLanguageDefinitionId", crossLanguageDefinitionId)
208188
.writeJsonField("parent", parent)
209189
.writeArrayField("subClients", subClients, JsonWriter::writeJson)
210190
.writeBooleanField("buildMethodPublic", buildMethodPublic)
@@ -247,9 +227,6 @@ boolean tryConsumeParentProperties(Client client, String fieldName, JsonReader r
247227
} else if ("serviceVersion".equals(fieldName)) {
248228
client.serviceVersion = ServiceVersion.fromJson(reader);
249229
return true;
250-
} else if ("crossLanguageDefinitionId".equals(fieldName)) {
251-
client.crossLanguageDefinitionId = reader.getString();
252-
return true;
253230
} else if ("parent".equals(fieldName)) {
254231
client.parent = Client.fromJson(reader);
255232
return true;

packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/extension/model/codemodel/Language.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class Language implements JsonSerializable<Language> {
1919
private String description;
2020
private String summary;
2121
private String namespace;
22+
private String crossLanguageDefinitionId;
2223
private String comment;
2324

2425
/**
@@ -135,6 +136,24 @@ public void setComment(String comment) {
135136
this.comment = comment;
136137
}
137138

139+
/**
140+
* Gets the crossLanguageDefinitionId.
141+
*
142+
* @return The crossLanguageDefinitionId.
143+
*/
144+
public String getCrossLanguageDefinitionId() {
145+
return crossLanguageDefinitionId;
146+
}
147+
148+
/**
149+
* Sets the crossLanguageDefinitionId.
150+
*
151+
* @param crossLanguageDefinitionId The crossLanguageDefinitionId.
152+
*/
153+
public void setCrossLanguageDefinitionId(String crossLanguageDefinitionId) {
154+
this.crossLanguageDefinitionId = crossLanguageDefinitionId;
155+
}
156+
138157
@Override
139158
public String toString() {
140159
return "Language{name='" + name + "', serializedName='" + serializedName + "'}";
@@ -148,6 +167,7 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
148167
.writeStringField("description", description)
149168
.writeStringField("summary", summary)
150169
.writeStringField("namespace", namespace)
170+
.writeStringField("crossLanguageDefinitionId", crossLanguageDefinitionId)
151171
.writeStringField("comment", comment)
152172
.writeEndObject();
153173
}
@@ -171,6 +191,8 @@ public static Language fromJson(JsonReader jsonReader) throws IOException {
171191
language.summary = reader.getString();
172192
} else if ("namespace".equals(fieldName)) {
173193
language.namespace = reader.getString();
194+
} else if ("crossLanguageDefinitionId".equals(fieldName)) {
195+
language.crossLanguageDefinitionId = reader.getString();
174196
} else if ("comment".equals(fieldName)) {
175197
language.comment = reader.getString();
176198
} else {

packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/extension/model/codemodel/ObjectSchema.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ public class ObjectSchema extends ComplexSchema {
2525
private boolean flattenedSchema;
2626
// internal use, not from modelerfour
2727
private boolean stronglyTypedHeader;
28-
private String crossLanguageDefinitionId;
2928

3029
/**
3130
* Creates a new instance of the ObjectSchema class.
@@ -195,24 +194,6 @@ public void setStronglyTypedHeader(boolean stronglyTypedHeader) {
195194
this.stronglyTypedHeader = stronglyTypedHeader;
196195
}
197196

198-
/**
199-
* Gets the cross-language definition ID for this object.
200-
*
201-
* @return The cross-language definition ID for this object.
202-
*/
203-
public String getCrossLanguageDefinitionId() {
204-
return crossLanguageDefinitionId;
205-
}
206-
207-
/**
208-
* Sets the cross-language definition ID for this object.
209-
*
210-
* @param crossLanguageDefinitionId The cross-language definition ID for this object.
211-
*/
212-
public void setCrossLanguageDefinitionId(String crossLanguageDefinitionId) {
213-
this.crossLanguageDefinitionId = crossLanguageDefinitionId;
214-
}
215-
216197
@Override
217198
public JsonWriter toJson(JsonWriter jsonWriter) throws IOException {
218199
return super.writeParentProperties(jsonWriter.writeStartObject()).writeJsonField("discriminator", discriminator)
@@ -256,8 +237,6 @@ public static ObjectSchema fromJson(JsonReader jsonReader) throws IOException {
256237
schema.flattenedSchema = reader.getBoolean();
257238
} else if ("stronglyTypedHeader".equals(fieldName)) {
258239
schema.stronglyTypedHeader = reader.getBoolean();
259-
} else if ("crossLanguageDefinitionId".equals(fieldName)) {
260-
schema.crossLanguageDefinitionId = reader.getString();
261240
} else {
262241
reader.skipChildren();
263242
}

0 commit comments

Comments
 (0)