Skip to content

Commit bb822df

Browse files
tsp, bug fix, remove SubNamespace from operation group name (#2899)
1 parent 35ed079 commit bb822df

File tree

9 files changed

+42
-30
lines changed

9 files changed

+42
-30
lines changed

javagen/src/main/java/com/azure/autorest/Javagen.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,12 @@ protected JavaPackage writeToTemplates(CodeModel codeModel, Client client, JavaS
173173
}
174174

175175
// Method group
176-
for (MethodGroupClient methodGroupClient : client.getServiceClient().getMethodGroupClients()) {
177-
javaPackage.addMethodGroup(methodGroupClient.getPackage(), methodGroupClient.getClassName(), methodGroupClient);
178-
if (settings.isGenerateClientInterfaces()) {
179-
javaPackage.addMethodGroupInterface(methodGroupClient.getInterfaceName(), methodGroupClient);
176+
if (CoreUtils.isNullOrEmpty(client.getServiceClients())) {
177+
writeMethodGroupClient(javaPackage, client.getServiceClient(), settings);
178+
} else {
179+
// multi-client from TypeSpec
180+
for (ServiceClient serviceClient : client.getServiceClients()) {
181+
writeMethodGroupClient(javaPackage, serviceClient, settings);
180182
}
181183
}
182184

@@ -342,6 +344,15 @@ protected void writeClientModels(Client client, JavaPackage javaPackage, JavaSet
342344
protected void writeHelperClasses(Client client, CodeModel codeModel, JavaPackage javaPackage, JavaSettings settings) {
343345
}
344346

347+
private static void writeMethodGroupClient(JavaPackage javaPackage, ServiceClient serviceClient, JavaSettings settings) {
348+
for (MethodGroupClient methodGroupClient : serviceClient.getMethodGroupClients()) {
349+
javaPackage.addMethodGroup(methodGroupClient.getPackage(), methodGroupClient.getClassName(), methodGroupClient);
350+
if (settings.isGenerateClientInterfaces()) {
351+
javaPackage.addMethodGroupInterface(methodGroupClient.getInterfaceName(), methodGroupClient);
352+
}
353+
}
354+
}
355+
345356
private void clear() {
346357
ClientModels.getInstance().clear();
347358
UnionModels.getInstance().clear();

javagen/src/main/java/com/azure/autorest/template/example/ProtocolTestWriter.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,11 @@
1313
import com.azure.autorest.model.javamodel.JavaClass;
1414
import com.azure.autorest.model.javamodel.JavaIfBlock;
1515
import com.azure.autorest.util.CodeNamer;
16-
import com.azure.core.credential.AccessToken;
1716
import com.azure.core.http.HttpClient;
1817
import com.azure.core.http.policy.HttpLogDetailLevel;
1918
import com.azure.core.http.policy.HttpLogOptions;
2019
import com.azure.core.util.Configuration;
21-
import reactor.core.publisher.Mono;
2220

23-
import java.time.OffsetDateTime;
2421
import java.util.Arrays;
2522
import java.util.HashSet;
2623
import java.util.Iterator;
@@ -43,13 +40,11 @@ public ProtocolTestWriter(TestContext testContext) {
4340
&& serviceClient.getSecurityInfo().getSecurityTypes().contains(Scheme.SecuritySchemeType.OAUTH2);
4441

4542
this.imports = new HashSet<>(Arrays.asList(
46-
AccessToken.class.getName(),
4743
HttpClient.class.getName(),
4844
HttpLogDetailLevel.class.getName(),
4945
HttpLogOptions.class.getName(),
5046
Configuration.class.getName(),
51-
OffsetDateTime.class.getName(),
52-
Mono.class.getName(),
47+
"com.azure.core.test.utils.MockTokenCredential",
5348
"com.azure.identity.DefaultAzureCredentialBuilder",
5449
"com.azure.core.test.TestProxyTestBase",
5550
"com.azure.core.test.TestMode",
@@ -106,7 +101,7 @@ public ProtocolTestWriter(TestContext testContext) {
106101
JavaIfBlock codeBlock = methodBlock.ifBlock("getTestMode() == TestMode.PLAYBACK", ifBlock -> {
107102
if (isTokenCredential) {
108103
ifBlock.line(String.format("%1$s.httpClient(interceptorManager.getPlaybackClient())", builderVarName));
109-
ifBlock.line(".credential(request -> Mono.just(new AccessToken(\"this_is_a_token\", OffsetDateTime.MAX)));");
104+
ifBlock.line(".credential(new MockTokenCredential());");
110105
} else {
111106
ifBlock.line(String.format("%1$s.httpClient(interceptorManager.getPlaybackClient());", builderVarName));
112107
}

typespec-extension/changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Release History
22

3+
## 0.18.5 (2024-08-08)
4+
5+
Compatible with compiler 0.58.
6+
37
## 0.18.4 (2024-08-07)
48

59
Compatible with compiler 0.58.

typespec-extension/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

typespec-extension/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@azure-tools/typespec-java",
3-
"version": "0.18.4",
3+
"version": "0.18.5",
44
"description": "TypeSpec library for emitting Java client from the TypeSpec REST protocol binding",
55
"keywords": [
66
"TypeSpec"

typespec-extension/src/code-model-builder.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -524,13 +524,15 @@ export class CodeModelBuilder {
524524
this.options["group-etag-headers"] = this.options["group-etag-headers"] ?? true;
525525

526526
for (const client of clients) {
527-
let clientName = client.name;
527+
let clientName: string = client.name;
528+
let clientSubNamespace: string | undefined = undefined;
528529
let javaNamespace = this.getJavaNamespace(this.namespace);
529530
const clientFullName = client.name;
530531
const clientNameSegments = clientFullName.split(".");
531532
if (clientNameSegments.length > 1) {
532533
clientName = clientNameSegments.at(-1)!;
533-
javaNamespace = this.getJavaNamespace(this.namespace + "." + clientNameSegments.slice(0, -1).join("."));
534+
clientSubNamespace = clientNameSegments.slice(0, -1).join(".");
535+
javaNamespace = this.getJavaNamespace(this.namespace + "." + clientSubNamespace);
534536
}
535537

536538
const codeModelClient = new CodeModelClient(clientName, this.getDoc(client.type), {
@@ -608,14 +610,19 @@ export class CodeModelBuilder {
608610
const operations = listOperationsInOperationGroup(this.sdkContext, operationGroup);
609611
// operation group with no operation is skipped
610612
if (operations.length > 0) {
611-
const groupPath = operationGroup.groupPath.split(".");
613+
// groupPath would be in format of "[<SubNamespace>.]<ClientName>.Chat.Completions"
614+
let operationGroupPath = operationGroup.groupPath;
615+
if (clientSubNamespace && operationGroup.groupPath.startsWith(clientSubNamespace + ".")) {
616+
// remove SubNamespace
617+
operationGroupPath = operationGroupPath.slice((clientSubNamespace + ".").length);
618+
}
619+
const groupPath = operationGroupPath.split(".");
612620
let operationGroupName: string;
613621
if (groupPath.length > 1) {
614-
// groupPath should be in format of "OpenAIClient.Chat.Completions"
622+
// remove ClientName
615623
operationGroupName = groupPath.slice(1).join("");
616624
} else {
617-
// protection
618-
operationGroupName = operationGroup.type.name;
625+
operationGroupName = groupPath[0];
619626
}
620627
codeModelGroup = new OperationGroup(operationGroupName);
621628
for (const operation of operations) {

typespec-tests/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
},
1111
"dependencies": {
1212
"@azure-tools/cadl-ranch-specs": "0.35.2",
13-
"@azure-tools/typespec-java": "file:/../typespec-extension/azure-tools-typespec-java-0.18.4.tgz"
13+
"@azure-tools/typespec-java": "file:/../typespec-extension/azure-tools-typespec-java-0.18.5.tgz"
1414
},
1515
"devDependencies": {
1616
"@typespec/prettier-plugin-typespec": "~0.58.0",

typespec-tests/src/test/java/com/authentication/oauth2/generated/OAuth2ClientTestBase.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@
1010

1111
import com.authentication.oauth2.OAuth2Client;
1212
import com.authentication.oauth2.OAuth2ClientBuilder;
13-
import com.azure.core.credential.AccessToken;
1413
import com.azure.core.http.HttpClient;
1514
import com.azure.core.http.policy.HttpLogDetailLevel;
1615
import com.azure.core.http.policy.HttpLogOptions;
1716
import com.azure.core.test.TestMode;
1817
import com.azure.core.test.TestProxyTestBase;
18+
import com.azure.core.test.utils.MockTokenCredential;
1919
import com.azure.identity.DefaultAzureCredentialBuilder;
20-
import java.time.OffsetDateTime;
21-
import reactor.core.publisher.Mono;
2220

2321
class OAuth2ClientTestBase extends TestProxyTestBase {
2422
protected OAuth2Client oAuth2Client;
@@ -29,7 +27,7 @@ protected void beforeTest() {
2927
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BASIC));
3028
if (getTestMode() == TestMode.PLAYBACK) {
3129
oAuth2Clientbuilder.httpClient(interceptorManager.getPlaybackClient())
32-
.credential(request -> Mono.just(new AccessToken("this_is_a_token", OffsetDateTime.MAX)));
30+
.credential(new MockTokenCredential());
3331
} else if (getTestMode() == TestMode.RECORD) {
3432
oAuth2Clientbuilder.addPolicy(interceptorManager.getRecordPolicy())
3533
.credential(new DefaultAzureCredentialBuilder().build());

typespec-tests/src/test/java/com/authentication/union/generated/UnionClientTestBase.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@
1010

1111
import com.authentication.union.UnionClient;
1212
import com.authentication.union.UnionClientBuilder;
13-
import com.azure.core.credential.AccessToken;
1413
import com.azure.core.http.HttpClient;
1514
import com.azure.core.http.policy.HttpLogDetailLevel;
1615
import com.azure.core.http.policy.HttpLogOptions;
1716
import com.azure.core.test.TestMode;
1817
import com.azure.core.test.TestProxyTestBase;
18+
import com.azure.core.test.utils.MockTokenCredential;
1919
import com.azure.identity.DefaultAzureCredentialBuilder;
20-
import java.time.OffsetDateTime;
21-
import reactor.core.publisher.Mono;
2220

2321
class UnionClientTestBase extends TestProxyTestBase {
2422
protected UnionClient unionClient;
@@ -28,8 +26,7 @@ protected void beforeTest() {
2826
UnionClientBuilder unionClientbuilder = new UnionClientBuilder().httpClient(HttpClient.createDefault())
2927
.httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BASIC));
3028
if (getTestMode() == TestMode.PLAYBACK) {
31-
unionClientbuilder.httpClient(interceptorManager.getPlaybackClient())
32-
.credential(request -> Mono.just(new AccessToken("this_is_a_token", OffsetDateTime.MAX)));
29+
unionClientbuilder.httpClient(interceptorManager.getPlaybackClient()).credential(new MockTokenCredential());
3330
} else if (getTestMode() == TestMode.RECORD) {
3431
unionClientbuilder.addPolicy(interceptorManager.getRecordPolicy())
3532
.credential(new DefaultAzureCredentialBuilder().build());

0 commit comments

Comments
 (0)