From c6809aa94d89a0cf410a4e0d0bbdd8b2b96a2da2 Mon Sep 17 00:00:00 2001 From: Alan Zimmer <48699787+alzimmermsft@users.noreply.github.com> Date: Mon, 9 Sep 2024 22:56:09 -0400 Subject: [PATCH] Porting fix from autorest.java (#4371) https://github.com/Azure/autorest.java/pull/2943 Co-authored-by: Weidong Xu --- .../ClientModelPropertiesManager.java | 18 + .../http-client-generator-test/Generate.ps1 | 4 +- .../DiscriminatorEdgeCasesAsyncClient.java | 130 +++++++ .../DiscriminatorEdgeCasesClient.java | 127 +++++++ .../DiscriminatorEdgeCasesClientBuilder.java} | 67 ++-- .../DiscriminatorEdgeCasesClientImpl.java} | 349 +++++++++--------- .../implementation/package-info.java | 5 +- .../models/ChildWithAnotherDiscriminator.java | 143 +++++++ ...ldWithRequiredPropertyAsDiscriminator.java | 141 +++++++ .../GrandChildWithAnotherDiscriminator.java | 101 +++++ .../GrandChildWithRequiredProperty.java | 97 +++++ .../models/ParentWithRequiredProperty.java | 105 ++++++ .../models/package-info.java | 5 +- .../package-info.java | 5 +- ...riminatoredgecases_apiview_properties.json | 21 ++ ...=> cadl-discriminatoredgecases.properties} | 0 .../DiscriminatorEdgeCasesClientTestBase.java | 38 ++ .../tsp/discriminator-edge-cases.tsp | 54 +++ .../generator/http-client-generator/pom.xml | 1 + 19 files changed, 1190 insertions(+), 221 deletions(-) create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesAsyncClient.java create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesClient.java rename packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/{naming/NamingClientBuilder.java => discriminatoredgecases/DiscriminatorEdgeCasesClientBuilder.java} (73%) rename packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/{naming/implementation/NamingOpsImpl.java => discriminatoredgecases/implementation/DiscriminatorEdgeCasesClientImpl.java} (51%) rename packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/{naming => discriminatoredgecases}/implementation/package-info.java (64%) create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ChildWithAnotherDiscriminator.java create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ChildWithRequiredPropertyAsDiscriminator.java create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/GrandChildWithAnotherDiscriminator.java create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/GrandChildWithRequiredProperty.java create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ParentWithRequiredProperty.java rename packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/{naming => discriminatoredgecases}/models/package-info.java (66%) rename packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/{naming => discriminatoredgecases}/package-info.java (68%) create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/main/resources/META-INF/cadl-discriminatoredgecases_apiview_properties.json rename packages/http-client-java/generator/http-client-generator-test/src/main/resources/{cadl-naming.properties => cadl-discriminatoredgecases.properties} (100%) create mode 100644 packages/http-client-java/generator/http-client-generator-test/src/test/java/com/cadl/discriminatoredgecases/generated/DiscriminatorEdgeCasesClientTestBase.java create mode 100644 packages/http-client-java/generator/http-client-generator-test/tsp/discriminator-edge-cases.tsp diff --git a/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/implementation/ClientModelPropertiesManager.java b/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/implementation/ClientModelPropertiesManager.java index e5792bc64..6c3e16e11 100644 --- a/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/implementation/ClientModelPropertiesManager.java +++ b/packages/http-client-java/generator/http-client-generator-core/src/main/java/com/microsoft/typespec/http/client/generator/core/implementation/ClientModelPropertiesManager.java @@ -234,6 +234,24 @@ public final class ClientModelPropertiesManager { } } + // Temporary fix to a larger problem where the discriminator property is defined by a parent model, but not as + // a discriminator. This results in the discriminator property being serialized and deserialized twice as it + // shows up once as a regular property and once as a discriminator property. This will remove the regular + // property from the super properties and indicate that the discriminator came from a parent model. + if (discriminatorProperty != null) { + String serializedDiscriminatorName = discriminatorProperty.getProperty().getSerializedName(); + ClientModelProperty removed; + if ((removed = superRequiredProperties.remove(serializedDiscriminatorName)) != null) { + discriminatorProperty = new ClientModelPropertyWithMetadata(model, removed.newBuilder() + .defaultValue(discriminatorProperty.getProperty().getDefaultValue()).build(), + true); + } else if ((removed = superSetterProperties.remove(serializedDiscriminatorName)) != null) { + discriminatorProperty = new ClientModelPropertyWithMetadata(model, removed.newBuilder() + .defaultValue(discriminatorProperty.getProperty().getDefaultValue()).build(), + true); + } + } + this.hasRequiredProperties = hasRequiredProperties; this.requiredPropertiesCount = requiredProperties.size() + superRequiredProperties.size(); this.setterPropertiesCount = setterProperties.size() + superSetterProperties.size(); diff --git a/packages/http-client-java/generator/http-client-generator-test/Generate.ps1 b/packages/http-client-java/generator/http-client-generator-test/Generate.ps1 index bb0a06c22..8a2e843bf 100644 --- a/packages/http-client-java/generator/http-client-generator-test/Generate.ps1 +++ b/packages/http-client-java/generator/http-client-generator-test/Generate.ps1 @@ -113,13 +113,13 @@ $generateScript = { } } -Set-Location ../../ +Set-Location (Resolve-Path (Join-Path $PSScriptRoot '..' '..')) npm install npm run build npm pack -Set-Location ./generator/http-client-generator-test +Set-Location $PSScriptRoot if (Test-Path node_modules) { diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesAsyncClient.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesAsyncClient.java new file mode 100644 index 000000000..5a1c5f968 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesAsyncClient.java @@ -0,0 +1,130 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.cadl.discriminatoredgecases; + +import com.azure.core.annotation.Generated; +import com.azure.core.annotation.ReturnType; +import com.azure.core.annotation.ServiceClient; +import com.azure.core.annotation.ServiceMethod; +import com.azure.core.exception.ClientAuthenticationException; +import com.azure.core.exception.HttpResponseException; +import com.azure.core.exception.ResourceModifiedException; +import com.azure.core.exception.ResourceNotFoundException; +import com.azure.core.http.rest.RequestOptions; +import com.azure.core.http.rest.Response; +import com.azure.core.util.BinaryData; +import com.azure.core.util.FluxUtil; +import com.cadl.discriminatoredgecases.implementation.DiscriminatorEdgeCasesClientImpl; +import com.cadl.discriminatoredgecases.models.ChildWithAnotherDiscriminator; +import com.cadl.discriminatoredgecases.models.ChildWithRequiredPropertyAsDiscriminator; +import reactor.core.publisher.Mono; + +/** + * Initializes a new instance of the asynchronous DiscriminatorEdgeCasesClient type. + */ +@ServiceClient(builder = DiscriminatorEdgeCasesClientBuilder.class, isAsync = true) +public final class DiscriminatorEdgeCasesAsyncClient { + @Generated + private final DiscriminatorEdgeCasesClientImpl serviceClient; + + /** + * Initializes an instance of DiscriminatorEdgeCasesAsyncClient class. + * + * @param serviceClient the service client implementation. + */ + @Generated + DiscriminatorEdgeCasesAsyncClient(DiscriminatorEdgeCasesClientImpl serviceClient) { + this.serviceClient = serviceClient; + } + + /** + * The getChildRequiredDiscrim operation. + *

Response Body Schema

+ * + *
{@code
+     * {
+     *     discriminator: String (Required)
+     *     aProperty: String (Required)
+     *     anotherProperty: String (Required)
+     * }
+     * }
+ * + * @param requestOptions The options to configure the HTTP request before HTTP client sends it. + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @return the response body along with {@link Response} on successful completion of {@link Mono}. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public Mono> getChildRequiredDiscrimWithResponse(RequestOptions requestOptions) { + return this.serviceClient.getChildRequiredDiscrimWithResponseAsync(requestOptions); + } + + /** + * The getChildNewDiscrim operation. + *

Response Body Schema

+ * + *
{@code
+     * {
+     *     discriminator: String (Required)
+     *     aProperty: String (Required)
+     *     differentDiscriminator: String (Required)
+     *     yetAnotherProperty: String (Required)
+     * }
+     * }
+ * + * @param requestOptions The options to configure the HTTP request before HTTP client sends it. + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @return the response body along with {@link Response} on successful completion of {@link Mono}. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public Mono> getChildNewDiscrimWithResponse(RequestOptions requestOptions) { + return this.serviceClient.getChildNewDiscrimWithResponseAsync(requestOptions); + } + + /** + * The getChildRequiredDiscrim operation. + * + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent. + * @return the response body on successful completion of {@link Mono}. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public Mono getChildRequiredDiscrim() { + // Generated convenience method for getChildRequiredDiscrimWithResponse + RequestOptions requestOptions = new RequestOptions(); + return getChildRequiredDiscrimWithResponse(requestOptions).flatMap(FluxUtil::toMono) + .map(protocolMethodData -> protocolMethodData.toObject(ChildWithRequiredPropertyAsDiscriminator.class)); + } + + /** + * The getChildNewDiscrim operation. + * + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent. + * @return the response body on successful completion of {@link Mono}. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public Mono getChildNewDiscrim() { + // Generated convenience method for getChildNewDiscrimWithResponse + RequestOptions requestOptions = new RequestOptions(); + return getChildNewDiscrimWithResponse(requestOptions).flatMap(FluxUtil::toMono) + .map(protocolMethodData -> protocolMethodData.toObject(ChildWithAnotherDiscriminator.class)); + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesClient.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesClient.java new file mode 100644 index 000000000..3c3d67418 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesClient.java @@ -0,0 +1,127 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.cadl.discriminatoredgecases; + +import com.azure.core.annotation.Generated; +import com.azure.core.annotation.ReturnType; +import com.azure.core.annotation.ServiceClient; +import com.azure.core.annotation.ServiceMethod; +import com.azure.core.exception.ClientAuthenticationException; +import com.azure.core.exception.HttpResponseException; +import com.azure.core.exception.ResourceModifiedException; +import com.azure.core.exception.ResourceNotFoundException; +import com.azure.core.http.rest.RequestOptions; +import com.azure.core.http.rest.Response; +import com.azure.core.util.BinaryData; +import com.cadl.discriminatoredgecases.implementation.DiscriminatorEdgeCasesClientImpl; +import com.cadl.discriminatoredgecases.models.ChildWithAnotherDiscriminator; +import com.cadl.discriminatoredgecases.models.ChildWithRequiredPropertyAsDiscriminator; + +/** + * Initializes a new instance of the synchronous DiscriminatorEdgeCasesClient type. + */ +@ServiceClient(builder = DiscriminatorEdgeCasesClientBuilder.class) +public final class DiscriminatorEdgeCasesClient { + @Generated + private final DiscriminatorEdgeCasesClientImpl serviceClient; + + /** + * Initializes an instance of DiscriminatorEdgeCasesClient class. + * + * @param serviceClient the service client implementation. + */ + @Generated + DiscriminatorEdgeCasesClient(DiscriminatorEdgeCasesClientImpl serviceClient) { + this.serviceClient = serviceClient; + } + + /** + * The getChildRequiredDiscrim operation. + *

Response Body Schema

+ * + *
{@code
+     * {
+     *     discriminator: String (Required)
+     *     aProperty: String (Required)
+     *     anotherProperty: String (Required)
+     * }
+     * }
+ * + * @param requestOptions The options to configure the HTTP request before HTTP client sends it. + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @return the response body along with {@link Response}. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public Response getChildRequiredDiscrimWithResponse(RequestOptions requestOptions) { + return this.serviceClient.getChildRequiredDiscrimWithResponse(requestOptions); + } + + /** + * The getChildNewDiscrim operation. + *

Response Body Schema

+ * + *
{@code
+     * {
+     *     discriminator: String (Required)
+     *     aProperty: String (Required)
+     *     differentDiscriminator: String (Required)
+     *     yetAnotherProperty: String (Required)
+     * }
+     * }
+ * + * @param requestOptions The options to configure the HTTP request before HTTP client sends it. + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @return the response body along with {@link Response}. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public Response getChildNewDiscrimWithResponse(RequestOptions requestOptions) { + return this.serviceClient.getChildNewDiscrimWithResponse(requestOptions); + } + + /** + * The getChildRequiredDiscrim operation. + * + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent. + * @return the response. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public ChildWithRequiredPropertyAsDiscriminator getChildRequiredDiscrim() { + // Generated convenience method for getChildRequiredDiscrimWithResponse + RequestOptions requestOptions = new RequestOptions(); + return getChildRequiredDiscrimWithResponse(requestOptions).getValue() + .toObject(ChildWithRequiredPropertyAsDiscriminator.class); + } + + /** + * The getChildNewDiscrim operation. + * + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent. + * @return the response. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public ChildWithAnotherDiscriminator getChildNewDiscrim() { + // Generated convenience method for getChildNewDiscrimWithResponse + RequestOptions requestOptions = new RequestOptions(); + return getChildNewDiscrimWithResponse(requestOptions).getValue().toObject(ChildWithAnotherDiscriminator.class); + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/NamingClientBuilder.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesClientBuilder.java similarity index 73% rename from packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/NamingClientBuilder.java rename to packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesClientBuilder.java index f1c45ce59..998da21ec 100644 --- a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/NamingClientBuilder.java +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/DiscriminatorEdgeCasesClientBuilder.java @@ -2,7 +2,7 @@ // Licensed under the MIT License. // Code generated by Microsoft (R) TypeSpec Code Generator. -package com.cadl.naming; +package com.cadl.discriminatoredgecases; import com.azure.core.annotation.Generated; import com.azure.core.annotation.ServiceClientBuilder; @@ -31,18 +31,18 @@ import com.azure.core.util.CoreUtils; import com.azure.core.util.builder.ClientBuilderUtil; import com.azure.core.util.logging.ClientLogger; import com.azure.core.util.serializer.JacksonAdapter; -import com.cadl.naming.implementation.NamingClientImpl; +import com.cadl.discriminatoredgecases.implementation.DiscriminatorEdgeCasesClientImpl; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; /** - * A builder for creating a new instance of the NamingClient type. + * A builder for creating a new instance of the DiscriminatorEdgeCasesClient type. */ -@ServiceClientBuilder(serviceClients = { NamingClient.class, NamingAsyncClient.class }) -public final class NamingClientBuilder implements HttpTrait, - ConfigurationTrait, EndpointTrait { +@ServiceClientBuilder(serviceClients = { DiscriminatorEdgeCasesClient.class, DiscriminatorEdgeCasesAsyncClient.class }) +public final class DiscriminatorEdgeCasesClientBuilder implements HttpTrait, + ConfigurationTrait, EndpointTrait { @Generated private static final String SDK_NAME = "name"; @@ -50,16 +50,17 @@ public final class NamingClientBuilder implements HttpTrait private static final String SDK_VERSION = "version"; @Generated - private static final Map PROPERTIES = CoreUtils.getProperties("cadl-naming.properties"); + private static final Map PROPERTIES + = CoreUtils.getProperties("cadl-discriminatoredgecases.properties"); @Generated private final List pipelinePolicies; /** - * Create an instance of the NamingClientBuilder. + * Create an instance of the DiscriminatorEdgeCasesClientBuilder. */ @Generated - public NamingClientBuilder() { + public DiscriminatorEdgeCasesClientBuilder() { this.pipelinePolicies = new ArrayList<>(); } @@ -74,7 +75,7 @@ public final class NamingClientBuilder implements HttpTrait */ @Generated @Override - public NamingClientBuilder pipeline(HttpPipeline pipeline) { + public DiscriminatorEdgeCasesClientBuilder pipeline(HttpPipeline pipeline) { if (this.pipeline != null && pipeline == null) { LOGGER.atInfo().log("HttpPipeline is being set to 'null' when it was previously configured."); } @@ -93,7 +94,7 @@ public final class NamingClientBuilder implements HttpTrait */ @Generated @Override - public NamingClientBuilder httpClient(HttpClient httpClient) { + public DiscriminatorEdgeCasesClientBuilder httpClient(HttpClient httpClient) { this.httpClient = httpClient; return this; } @@ -109,7 +110,7 @@ public final class NamingClientBuilder implements HttpTrait */ @Generated @Override - public NamingClientBuilder httpLogOptions(HttpLogOptions httpLogOptions) { + public DiscriminatorEdgeCasesClientBuilder httpLogOptions(HttpLogOptions httpLogOptions) { this.httpLogOptions = httpLogOptions; return this; } @@ -125,7 +126,7 @@ public final class NamingClientBuilder implements HttpTrait */ @Generated @Override - public NamingClientBuilder clientOptions(ClientOptions clientOptions) { + public DiscriminatorEdgeCasesClientBuilder clientOptions(ClientOptions clientOptions) { this.clientOptions = clientOptions; return this; } @@ -141,7 +142,7 @@ public final class NamingClientBuilder implements HttpTrait */ @Generated @Override - public NamingClientBuilder retryOptions(RetryOptions retryOptions) { + public DiscriminatorEdgeCasesClientBuilder retryOptions(RetryOptions retryOptions) { this.retryOptions = retryOptions; return this; } @@ -151,7 +152,7 @@ public final class NamingClientBuilder implements HttpTrait */ @Generated @Override - public NamingClientBuilder addPolicy(HttpPipelinePolicy customPolicy) { + public DiscriminatorEdgeCasesClientBuilder addPolicy(HttpPipelinePolicy customPolicy) { Objects.requireNonNull(customPolicy, "'customPolicy' cannot be null."); pipelinePolicies.add(customPolicy); return this; @@ -168,7 +169,7 @@ public final class NamingClientBuilder implements HttpTrait */ @Generated @Override - public NamingClientBuilder configuration(Configuration configuration) { + public DiscriminatorEdgeCasesClientBuilder configuration(Configuration configuration) { this.configuration = configuration; return this; } @@ -184,7 +185,7 @@ public final class NamingClientBuilder implements HttpTrait */ @Generated @Override - public NamingClientBuilder endpoint(String endpoint) { + public DiscriminatorEdgeCasesClientBuilder endpoint(String endpoint) { this.endpoint = endpoint; return this; } @@ -199,25 +200,25 @@ public final class NamingClientBuilder implements HttpTrait * Sets The retry policy that will attempt to retry failed requests, if applicable. * * @param retryPolicy the retryPolicy value. - * @return the NamingClientBuilder. + * @return the DiscriminatorEdgeCasesClientBuilder. */ @Generated - public NamingClientBuilder retryPolicy(RetryPolicy retryPolicy) { + public DiscriminatorEdgeCasesClientBuilder retryPolicy(RetryPolicy retryPolicy) { this.retryPolicy = retryPolicy; return this; } /** - * Builds an instance of NamingClientImpl with the provided parameters. + * Builds an instance of DiscriminatorEdgeCasesClientImpl with the provided parameters. * - * @return an instance of NamingClientImpl. + * @return an instance of DiscriminatorEdgeCasesClientImpl. */ @Generated - private NamingClientImpl buildInnerClient() { + private DiscriminatorEdgeCasesClientImpl buildInnerClient() { this.validateClient(); HttpPipeline localPipeline = (pipeline != null) ? pipeline : createHttpPipeline(); - NamingClientImpl client - = new NamingClientImpl(localPipeline, JacksonAdapter.createDefaultSerializerAdapter(), this.endpoint); + DiscriminatorEdgeCasesClientImpl client = new DiscriminatorEdgeCasesClientImpl(localPipeline, + JacksonAdapter.createDefaultSerializerAdapter(), this.endpoint); return client; } @@ -264,24 +265,24 @@ public final class NamingClientBuilder implements HttpTrait } /** - * Builds an instance of NamingAsyncClient class. + * Builds an instance of DiscriminatorEdgeCasesAsyncClient class. * - * @return an instance of NamingAsyncClient. + * @return an instance of DiscriminatorEdgeCasesAsyncClient. */ @Generated - public NamingAsyncClient buildAsyncClient() { - return new NamingAsyncClient(buildInnerClient().getNamingOps()); + public DiscriminatorEdgeCasesAsyncClient buildAsyncClient() { + return new DiscriminatorEdgeCasesAsyncClient(buildInnerClient()); } /** - * Builds an instance of NamingClient class. + * Builds an instance of DiscriminatorEdgeCasesClient class. * - * @return an instance of NamingClient. + * @return an instance of DiscriminatorEdgeCasesClient. */ @Generated - public NamingClient buildClient() { - return new NamingClient(buildInnerClient().getNamingOps()); + public DiscriminatorEdgeCasesClient buildClient() { + return new DiscriminatorEdgeCasesClient(buildInnerClient()); } - private static final ClientLogger LOGGER = new ClientLogger(NamingClientBuilder.class); + private static final ClientLogger LOGGER = new ClientLogger(DiscriminatorEdgeCasesClientBuilder.class); } diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/implementation/NamingOpsImpl.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/implementation/DiscriminatorEdgeCasesClientImpl.java similarity index 51% rename from packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/implementation/NamingOpsImpl.java rename to packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/implementation/DiscriminatorEdgeCasesClientImpl.java index 5ec21c69f..06e355a19 100644 --- a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/implementation/NamingOpsImpl.java +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/implementation/DiscriminatorEdgeCasesClientImpl.java @@ -2,16 +2,13 @@ // Licensed under the MIT License. // Code generated by Microsoft (R) TypeSpec Code Generator. -package com.cadl.naming.implementation; +package com.cadl.discriminatoredgecases.implementation; -import com.azure.core.annotation.BodyParam; import com.azure.core.annotation.ExpectedResponses; import com.azure.core.annotation.Get; import com.azure.core.annotation.HeaderParam; import com.azure.core.annotation.Host; import com.azure.core.annotation.HostParam; -import com.azure.core.annotation.Post; -import com.azure.core.annotation.QueryParam; import com.azure.core.annotation.ReturnType; import com.azure.core.annotation.ServiceInterface; import com.azure.core.annotation.ServiceMethod; @@ -20,217 +17,160 @@ import com.azure.core.exception.ClientAuthenticationException; import com.azure.core.exception.HttpResponseException; import com.azure.core.exception.ResourceModifiedException; import com.azure.core.exception.ResourceNotFoundException; +import com.azure.core.http.HttpPipeline; +import com.azure.core.http.HttpPipelineBuilder; +import com.azure.core.http.policy.RetryPolicy; +import com.azure.core.http.policy.UserAgentPolicy; import com.azure.core.http.rest.RequestOptions; import com.azure.core.http.rest.Response; import com.azure.core.http.rest.RestProxy; import com.azure.core.util.BinaryData; import com.azure.core.util.Context; import com.azure.core.util.FluxUtil; +import com.azure.core.util.serializer.JacksonAdapter; +import com.azure.core.util.serializer.SerializerAdapter; import reactor.core.publisher.Mono; /** - * An instance of this class provides access to all the operations defined in NamingOps. + * Initializes a new instance of the DiscriminatorEdgeCasesClient type. */ -public final class NamingOpsImpl { +public final class DiscriminatorEdgeCasesClientImpl { /** * The proxy service used to perform REST calls. */ - private final NamingOpsService service; + private final DiscriminatorEdgeCasesClientService service; /** - * The service client containing this operation class. + * Service host. */ - private final NamingClientImpl client; + private final String endpoint; /** - * Initializes an instance of NamingOpsImpl. + * Gets Service host. * - * @param client the instance of the service client containing this operation class. + * @return the endpoint value. */ - NamingOpsImpl(NamingClientImpl client) { - this.service - = RestProxy.create(NamingOpsService.class, client.getHttpPipeline(), client.getSerializerAdapter()); - this.client = client; + public String getEndpoint() { + return this.endpoint; } /** - * The interface defining all the services for NamingClientNamingOps to be used by the proxy service to perform REST - * calls. + * The HTTP pipeline to send requests through. + */ + private final HttpPipeline httpPipeline; + + /** + * Gets The HTTP pipeline to send requests through. + * + * @return the httpPipeline value. + */ + public HttpPipeline getHttpPipeline() { + return this.httpPipeline; + } + + /** + * The serializer to serialize an object into a string. + */ + private final SerializerAdapter serializerAdapter; + + /** + * Gets The serializer to serialize an object into a string. + * + * @return the serializerAdapter value. + */ + public SerializerAdapter getSerializerAdapter() { + return this.serializerAdapter; + } + + /** + * Initializes an instance of DiscriminatorEdgeCasesClient client. + * + * @param endpoint Service host. + */ + public DiscriminatorEdgeCasesClientImpl(String endpoint) { + this(new HttpPipelineBuilder().policies(new UserAgentPolicy(), new RetryPolicy()).build(), + JacksonAdapter.createDefaultSerializerAdapter(), endpoint); + } + + /** + * Initializes an instance of DiscriminatorEdgeCasesClient client. + * + * @param httpPipeline The HTTP pipeline to send requests through. + * @param endpoint Service host. + */ + public DiscriminatorEdgeCasesClientImpl(HttpPipeline httpPipeline, String endpoint) { + this(httpPipeline, JacksonAdapter.createDefaultSerializerAdapter(), endpoint); + } + + /** + * Initializes an instance of DiscriminatorEdgeCasesClient client. + * + * @param httpPipeline The HTTP pipeline to send requests through. + * @param serializerAdapter The serializer to serialize an object into a string. + * @param endpoint Service host. + */ + public DiscriminatorEdgeCasesClientImpl(HttpPipeline httpPipeline, SerializerAdapter serializerAdapter, + String endpoint) { + this.httpPipeline = httpPipeline; + this.serializerAdapter = serializerAdapter; + this.endpoint = endpoint; + this.service = RestProxy.create(DiscriminatorEdgeCasesClientService.class, this.httpPipeline, + this.getSerializerAdapter()); + } + + /** + * The interface defining all the services for DiscriminatorEdgeCasesClient to be used by the proxy service to + * perform REST calls. */ @Host("{endpoint}") - @ServiceInterface(name = "NamingClientNamingOp") - public interface NamingOpsService { - @Post("/naming") + @ServiceInterface(name = "DiscriminatorEdgeCas") + public interface DiscriminatorEdgeCasesClientService { + @Get("/model/childrequireddiscrim") @ExpectedResponses({ 200 }) @UnexpectedResponseExceptionType(value = ClientAuthenticationException.class, code = { 401 }) @UnexpectedResponseExceptionType(value = ResourceNotFoundException.class, code = { 404 }) @UnexpectedResponseExceptionType(value = ResourceModifiedException.class, code = { 409 }) @UnexpectedResponseExceptionType(HttpResponseException.class) - Mono> post(@HostParam("endpoint") String endpoint, @QueryParam("name") String name, - @HeaderParam("Content-Type") String contentType, @HeaderParam("Accept") String accept, - @BodyParam("application/json") BinaryData body, RequestOptions requestOptions, Context context); - - @Post("/naming") - @ExpectedResponses({ 200 }) - @UnexpectedResponseExceptionType(value = ClientAuthenticationException.class, code = { 401 }) - @UnexpectedResponseExceptionType(value = ResourceNotFoundException.class, code = { 404 }) - @UnexpectedResponseExceptionType(value = ResourceModifiedException.class, code = { 409 }) - @UnexpectedResponseExceptionType(HttpResponseException.class) - Response postSync(@HostParam("endpoint") String endpoint, @QueryParam("name") String name, - @HeaderParam("Content-Type") String contentType, @HeaderParam("Accept") String accept, - @BodyParam("application/json") BinaryData body, RequestOptions requestOptions, Context context); - - @Get("/naming") - @ExpectedResponses({ 200 }) - @UnexpectedResponseExceptionType(value = ClientAuthenticationException.class, code = { 401 }) - @UnexpectedResponseExceptionType(value = ResourceNotFoundException.class, code = { 404 }) - @UnexpectedResponseExceptionType(value = ResourceModifiedException.class, code = { 409 }) - @UnexpectedResponseExceptionType(HttpResponseException.class) - Mono> getAnonymous(@HostParam("endpoint") String endpoint, + Mono> getChildRequiredDiscrim(@HostParam("endpoint") String endpoint, @HeaderParam("Accept") String accept, RequestOptions requestOptions, Context context); - @Get("/naming") + @Get("/model/childrequireddiscrim") @ExpectedResponses({ 200 }) @UnexpectedResponseExceptionType(value = ClientAuthenticationException.class, code = { 401 }) @UnexpectedResponseExceptionType(value = ResourceNotFoundException.class, code = { 404 }) @UnexpectedResponseExceptionType(value = ResourceModifiedException.class, code = { 409 }) @UnexpectedResponseExceptionType(HttpResponseException.class) - Response getAnonymousSync(@HostParam("endpoint") String endpoint, + Response getChildRequiredDiscrimSync(@HostParam("endpoint") String endpoint, + @HeaderParam("Accept") String accept, RequestOptions requestOptions, Context context); + + @Get("/model/childnewdiscrim") + @ExpectedResponses({ 200 }) + @UnexpectedResponseExceptionType(value = ClientAuthenticationException.class, code = { 401 }) + @UnexpectedResponseExceptionType(value = ResourceNotFoundException.class, code = { 404 }) + @UnexpectedResponseExceptionType(value = ResourceModifiedException.class, code = { 409 }) + @UnexpectedResponseExceptionType(HttpResponseException.class) + Mono> getChildNewDiscrim(@HostParam("endpoint") String endpoint, + @HeaderParam("Accept") String accept, RequestOptions requestOptions, Context context); + + @Get("/model/childnewdiscrim") + @ExpectedResponses({ 200 }) + @UnexpectedResponseExceptionType(value = ClientAuthenticationException.class, code = { 401 }) + @UnexpectedResponseExceptionType(value = ResourceNotFoundException.class, code = { 404 }) + @UnexpectedResponseExceptionType(value = ResourceModifiedException.class, code = { 409 }) + @UnexpectedResponseExceptionType(HttpResponseException.class) + Response getChildNewDiscrimSync(@HostParam("endpoint") String endpoint, @HeaderParam("Accept") String accept, RequestOptions requestOptions, Context context); } /** - * summary of POST op - * - * description of POST op. - *

Header Parameters

- * - * - * - * - *
Header Parameters
NameTypeRequiredDescription
etagStringNosummary of etag header parameter - * - * description of etag header parameter
- * You can add these to a request with {@link RequestOptions#addHeader} - *

Request Body Schema

- * - *
{@code
-     * {
-     *     parameters (Optional): {
-     *         type: String(Type1/Type2) (Required)
-     *     }
-     * }
-     * }
- * + * The getChildRequiredDiscrim operation. *

Response Body Schema

* *
{@code
      * {
-     *     name: String (Required)
-     *     data (Required): {
-     *         data (Required): {
-     *             @data.kind: String (Required)
-     *         }
-     *     }
-     *     type: String(Blob/File) (Required)
-     *     status: String(Running/Completed/Failed) (Required)
-     *     anonymous (Required): {
-     *         last_error (Required): {
-     *             code: String(server_error/rate_limit_exceeded/invalid_prompt) (Required)
-     *         }
-     *     }
-     * }
-     * }
- * - * @param name summary of name query parameter - * - * description of name query parameter. - * @param body The body parameter. - * @param requestOptions The options to configure the HTTP request before HTTP client sends it. - * @throws HttpResponseException thrown if the request is rejected by server. - * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. - * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. - * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. - * @return summary of Response along with {@link Response} on successful completion of {@link Mono}. - */ - @ServiceMethod(returns = ReturnType.SINGLE) - public Mono> postWithResponseAsync(String name, BinaryData body, - RequestOptions requestOptions) { - final String contentType = "application/json"; - final String accept = "application/json"; - return FluxUtil.withContext(context -> service.post(this.client.getEndpoint(), name, contentType, accept, body, - requestOptions, context)); - } - - /** - * summary of POST op - * - * description of POST op. - *

Header Parameters

- * - * - * - * - *
Header Parameters
NameTypeRequiredDescription
etagStringNosummary of etag header parameter - * - * description of etag header parameter
- * You can add these to a request with {@link RequestOptions#addHeader} - *

Request Body Schema

- * - *
{@code
-     * {
-     *     parameters (Optional): {
-     *         type: String(Type1/Type2) (Required)
-     *     }
-     * }
-     * }
- * - *

Response Body Schema

- * - *
{@code
-     * {
-     *     name: String (Required)
-     *     data (Required): {
-     *         data (Required): {
-     *             @data.kind: String (Required)
-     *         }
-     *     }
-     *     type: String(Blob/File) (Required)
-     *     status: String(Running/Completed/Failed) (Required)
-     *     anonymous (Required): {
-     *         last_error (Required): {
-     *             code: String(server_error/rate_limit_exceeded/invalid_prompt) (Required)
-     *         }
-     *     }
-     * }
-     * }
- * - * @param name summary of name query parameter - * - * description of name query parameter. - * @param body The body parameter. - * @param requestOptions The options to configure the HTTP request before HTTP client sends it. - * @throws HttpResponseException thrown if the request is rejected by server. - * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. - * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. - * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. - * @return summary of Response along with {@link Response}. - */ - @ServiceMethod(returns = ReturnType.SINGLE) - public Response postWithResponse(String name, BinaryData body, RequestOptions requestOptions) { - final String contentType = "application/json"; - final String accept = "application/json"; - return service.postSync(this.client.getEndpoint(), name, contentType, accept, body, requestOptions, - Context.NONE); - } - - /** - * The getAnonymous operation. - *

Response Body Schema

- * - *
{@code
-     * {
-     *     name: String (Required)
+     *     discriminator: String (Required)
+     *     aProperty: String (Required)
+     *     anotherProperty: String (Required)
      * }
      * }
* @@ -242,19 +182,21 @@ public final class NamingOpsImpl { * @return the response body along with {@link Response} on successful completion of {@link Mono}. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Mono> getAnonymousWithResponseAsync(RequestOptions requestOptions) { + public Mono> getChildRequiredDiscrimWithResponseAsync(RequestOptions requestOptions) { final String accept = "application/json"; - return FluxUtil - .withContext(context -> service.getAnonymous(this.client.getEndpoint(), accept, requestOptions, context)); + return FluxUtil.withContext( + context -> service.getChildRequiredDiscrim(this.getEndpoint(), accept, requestOptions, context)); } /** - * The getAnonymous operation. + * The getChildRequiredDiscrim operation. *

Response Body Schema

* *
{@code
      * {
-     *     name: String (Required)
+     *     discriminator: String (Required)
+     *     aProperty: String (Required)
+     *     anotherProperty: String (Required)
      * }
      * }
* @@ -266,8 +208,61 @@ public final class NamingOpsImpl { * @return the response body along with {@link Response}. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response getAnonymousWithResponse(RequestOptions requestOptions) { + public Response getChildRequiredDiscrimWithResponse(RequestOptions requestOptions) { final String accept = "application/json"; - return service.getAnonymousSync(this.client.getEndpoint(), accept, requestOptions, Context.NONE); + return service.getChildRequiredDiscrimSync(this.getEndpoint(), accept, requestOptions, Context.NONE); + } + + /** + * The getChildNewDiscrim operation. + *

Response Body Schema

+ * + *
{@code
+     * {
+     *     discriminator: String (Required)
+     *     aProperty: String (Required)
+     *     differentDiscriminator: String (Required)
+     *     yetAnotherProperty: String (Required)
+     * }
+     * }
+ * + * @param requestOptions The options to configure the HTTP request before HTTP client sends it. + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @return the response body along with {@link Response} on successful completion of {@link Mono}. + */ + @ServiceMethod(returns = ReturnType.SINGLE) + public Mono> getChildNewDiscrimWithResponseAsync(RequestOptions requestOptions) { + final String accept = "application/json"; + return FluxUtil + .withContext(context -> service.getChildNewDiscrim(this.getEndpoint(), accept, requestOptions, context)); + } + + /** + * The getChildNewDiscrim operation. + *

Response Body Schema

+ * + *
{@code
+     * {
+     *     discriminator: String (Required)
+     *     aProperty: String (Required)
+     *     differentDiscriminator: String (Required)
+     *     yetAnotherProperty: String (Required)
+     * }
+     * }
+ * + * @param requestOptions The options to configure the HTTP request before HTTP client sends it. + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @return the response body along with {@link Response}. + */ + @ServiceMethod(returns = ReturnType.SINGLE) + public Response getChildNewDiscrimWithResponse(RequestOptions requestOptions) { + final String accept = "application/json"; + return service.getChildNewDiscrimSync(this.getEndpoint(), accept, requestOptions, Context.NONE); } } diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/implementation/package-info.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/implementation/package-info.java similarity index 64% rename from packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/implementation/package-info.java rename to packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/implementation/package-info.java index e39e9cae6..07841affa 100644 --- a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/implementation/package-info.java +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/implementation/package-info.java @@ -4,8 +4,7 @@ /** * - * Package containing the implementations for Naming. - * description of Naming. + * Package containing the implementations for DiscriminatorEdgeCases. * */ -package com.cadl.naming.implementation; +package com.cadl.discriminatoredgecases.implementation; diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ChildWithAnotherDiscriminator.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ChildWithAnotherDiscriminator.java new file mode 100644 index 000000000..dd853c326 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ChildWithAnotherDiscriminator.java @@ -0,0 +1,143 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.cadl.discriminatoredgecases.models; + +import com.azure.core.annotation.Generated; +import com.azure.core.annotation.Immutable; +import com.azure.json.JsonReader; +import com.azure.json.JsonToken; +import com.azure.json.JsonWriter; +import java.io.IOException; + +/** + * The ChildWithAnotherDiscriminator model. + */ +@Immutable +public class ChildWithAnotherDiscriminator extends ParentWithRequiredProperty { + /* + * Discriminator property for ChildWithAnotherDiscriminator. + */ + @Generated + private String differentDiscriminator = "ChildWithAnotherDiscriminator"; + + /* + * The yetAnotherProperty property. + */ + @Generated + private final String yetAnotherProperty; + + /** + * Creates an instance of ChildWithAnotherDiscriminator class. + * + * @param discriminator the discriminator value to set. + * @param aProperty the aProperty value to set. + * @param yetAnotherProperty the yetAnotherProperty value to set. + */ + @Generated + protected ChildWithAnotherDiscriminator(String discriminator, String aProperty, String yetAnotherProperty) { + super(discriminator, aProperty); + this.yetAnotherProperty = yetAnotherProperty; + } + + /** + * Get the differentDiscriminator property: Discriminator property for ChildWithAnotherDiscriminator. + * + * @return the differentDiscriminator value. + */ + @Generated + public String getDifferentDiscriminator() { + return this.differentDiscriminator; + } + + /** + * Get the yetAnotherProperty property: The yetAnotherProperty property. + * + * @return the yetAnotherProperty value. + */ + @Generated + public String getYetAnotherProperty() { + return this.yetAnotherProperty; + } + + /** + * {@inheritDoc} + */ + @Generated + @Override + public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { + jsonWriter.writeStartObject(); + jsonWriter.writeStringField("discriminator", getDiscriminator()); + jsonWriter.writeStringField("aProperty", getAProperty()); + jsonWriter.writeStringField("yetAnotherProperty", this.yetAnotherProperty); + jsonWriter.writeStringField("differentDiscriminator", this.differentDiscriminator); + return jsonWriter.writeEndObject(); + } + + /** + * Reads an instance of ChildWithAnotherDiscriminator from the JsonReader. + * + * @param jsonReader The JsonReader being read. + * @return An instance of ChildWithAnotherDiscriminator if the JsonReader was pointing to an instance of it, or null + * if it was pointing to JSON null. + * @throws IllegalStateException If the deserialized JSON object was missing any required properties. + * @throws IOException If an error occurs while reading the ChildWithAnotherDiscriminator. + */ + @Generated + public static ChildWithAnotherDiscriminator fromJson(JsonReader jsonReader) throws IOException { + return jsonReader.readObject(reader -> { + String discriminatorValue = null; + try (JsonReader readerToUse = reader.bufferObject()) { + readerToUse.nextToken(); // Prepare for reading + while (readerToUse.nextToken() != JsonToken.END_OBJECT) { + String fieldName = readerToUse.getFieldName(); + readerToUse.nextToken(); + if ("differentDiscriminator".equals(fieldName)) { + discriminatorValue = readerToUse.getString(); + break; + } else { + readerToUse.skipChildren(); + } + } + // Use the discriminator value to determine which subtype should be deserialized. + if ("anotherValue".equals(discriminatorValue)) { + return GrandChildWithAnotherDiscriminator.fromJson(readerToUse.reset()); + } else { + return fromJsonKnownDiscriminator(readerToUse.reset()); + } + } + }); + } + + @Generated + static ChildWithAnotherDiscriminator fromJsonKnownDiscriminator(JsonReader jsonReader) throws IOException { + return jsonReader.readObject(reader -> { + String discriminator = null; + String aProperty = null; + String yetAnotherProperty = null; + String differentDiscriminator = null; + while (reader.nextToken() != JsonToken.END_OBJECT) { + String fieldName = reader.getFieldName(); + reader.nextToken(); + + if ("discriminator".equals(fieldName)) { + discriminator = reader.getString(); + } else if ("aProperty".equals(fieldName)) { + aProperty = reader.getString(); + } else if ("yetAnotherProperty".equals(fieldName)) { + yetAnotherProperty = reader.getString(); + } else if ("differentDiscriminator".equals(fieldName)) { + differentDiscriminator = reader.getString(); + } else { + reader.skipChildren(); + } + } + ChildWithAnotherDiscriminator deserializedChildWithAnotherDiscriminator + = new ChildWithAnotherDiscriminator(discriminator, aProperty, yetAnotherProperty); + deserializedChildWithAnotherDiscriminator.differentDiscriminator = differentDiscriminator; + + return deserializedChildWithAnotherDiscriminator; + }); + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ChildWithRequiredPropertyAsDiscriminator.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ChildWithRequiredPropertyAsDiscriminator.java new file mode 100644 index 000000000..5f9f0c142 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ChildWithRequiredPropertyAsDiscriminator.java @@ -0,0 +1,141 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.cadl.discriminatoredgecases.models; + +import com.azure.core.annotation.Generated; +import com.azure.core.annotation.Immutable; +import com.azure.json.JsonReader; +import com.azure.json.JsonToken; +import com.azure.json.JsonWriter; +import java.io.IOException; + +/** + * The ChildWithRequiredPropertyAsDiscriminator model. + */ +@Immutable +public class ChildWithRequiredPropertyAsDiscriminator extends ParentWithRequiredProperty { + /* + * Discriminator property for ChildWithRequiredPropertyAsDiscriminator. + */ + @Generated + private String discriminator = "ChildWithRequiredPropertyAsDiscriminator"; + + /* + * The anotherProperty property. + */ + @Generated + private final String anotherProperty; + + /** + * Creates an instance of ChildWithRequiredPropertyAsDiscriminator class. + * + * @param discriminator the discriminator value to set. + * @param aProperty the aProperty value to set. + * @param anotherProperty the anotherProperty value to set. + */ + @Generated + protected ChildWithRequiredPropertyAsDiscriminator(String discriminator, String aProperty, String anotherProperty) { + super(discriminator, aProperty); + this.anotherProperty = anotherProperty; + } + + /** + * Get the discriminator property: Discriminator property for ChildWithRequiredPropertyAsDiscriminator. + * + * @return the discriminator value. + */ + @Generated + @Override + public String getDiscriminator() { + return this.discriminator; + } + + /** + * Get the anotherProperty property: The anotherProperty property. + * + * @return the anotherProperty value. + */ + @Generated + public String getAnotherProperty() { + return this.anotherProperty; + } + + /** + * {@inheritDoc} + */ + @Generated + @Override + public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { + jsonWriter.writeStartObject(); + jsonWriter.writeStringField("aProperty", getAProperty()); + jsonWriter.writeStringField("anotherProperty", this.anotherProperty); + jsonWriter.writeStringField("discriminator", this.discriminator); + return jsonWriter.writeEndObject(); + } + + /** + * Reads an instance of ChildWithRequiredPropertyAsDiscriminator from the JsonReader. + * + * @param jsonReader The JsonReader being read. + * @return An instance of ChildWithRequiredPropertyAsDiscriminator if the JsonReader was pointing to an instance of + * it, or null if it was pointing to JSON null. + * @throws IllegalStateException If the deserialized JSON object was missing any required properties. + * @throws IOException If an error occurs while reading the ChildWithRequiredPropertyAsDiscriminator. + */ + @Generated + public static ChildWithRequiredPropertyAsDiscriminator fromJson(JsonReader jsonReader) throws IOException { + return jsonReader.readObject(reader -> { + String discriminatorValue = null; + try (JsonReader readerToUse = reader.bufferObject()) { + readerToUse.nextToken(); // Prepare for reading + while (readerToUse.nextToken() != JsonToken.END_OBJECT) { + String fieldName = readerToUse.getFieldName(); + readerToUse.nextToken(); + if ("discriminator".equals(fieldName)) { + discriminatorValue = readerToUse.getString(); + break; + } else { + readerToUse.skipChildren(); + } + } + // Use the discriminator value to determine which subtype should be deserialized. + if ("aValue".equals(discriminatorValue)) { + return GrandChildWithRequiredProperty.fromJson(readerToUse.reset()); + } else { + return fromJsonKnownDiscriminator(readerToUse.reset()); + } + } + }); + } + + @Generated + static ChildWithRequiredPropertyAsDiscriminator fromJsonKnownDiscriminator(JsonReader jsonReader) + throws IOException { + return jsonReader.readObject(reader -> { + String aProperty = null; + String anotherProperty = null; + String discriminator = null; + while (reader.nextToken() != JsonToken.END_OBJECT) { + String fieldName = reader.getFieldName(); + reader.nextToken(); + + if ("aProperty".equals(fieldName)) { + aProperty = reader.getString(); + } else if ("anotherProperty".equals(fieldName)) { + anotherProperty = reader.getString(); + } else if ("discriminator".equals(fieldName)) { + discriminator = reader.getString(); + } else { + reader.skipChildren(); + } + } + ChildWithRequiredPropertyAsDiscriminator deserializedChildWithRequiredPropertyAsDiscriminator + = new ChildWithRequiredPropertyAsDiscriminator(discriminator, aProperty, anotherProperty); + deserializedChildWithRequiredPropertyAsDiscriminator.discriminator = discriminator; + + return deserializedChildWithRequiredPropertyAsDiscriminator; + }); + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/GrandChildWithAnotherDiscriminator.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/GrandChildWithAnotherDiscriminator.java new file mode 100644 index 000000000..8cef091a0 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/GrandChildWithAnotherDiscriminator.java @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.cadl.discriminatoredgecases.models; + +import com.azure.core.annotation.Generated; +import com.azure.core.annotation.Immutable; +import com.azure.json.JsonReader; +import com.azure.json.JsonToken; +import com.azure.json.JsonWriter; +import java.io.IOException; + +/** + * The GrandChildWithAnotherDiscriminator model. + */ +@Immutable +public final class GrandChildWithAnotherDiscriminator extends ChildWithAnotherDiscriminator { + /* + * Discriminator property for ChildWithAnotherDiscriminator. + */ + @Generated + private String differentDiscriminator = "anotherValue"; + + /** + * Creates an instance of GrandChildWithAnotherDiscriminator class. + * + * @param discriminator the discriminator value to set. + * @param aProperty the aProperty value to set. + * @param yetAnotherProperty the yetAnotherProperty value to set. + */ + @Generated + private GrandChildWithAnotherDiscriminator(String discriminator, String aProperty, String yetAnotherProperty) { + super(discriminator, aProperty, yetAnotherProperty); + } + + /** + * Get the differentDiscriminator property: Discriminator property for ChildWithAnotherDiscriminator. + * + * @return the differentDiscriminator value. + */ + @Generated + @Override + public String getDifferentDiscriminator() { + return this.differentDiscriminator; + } + + /** + * {@inheritDoc} + */ + @Generated + @Override + public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { + jsonWriter.writeStartObject(); + jsonWriter.writeStringField("discriminator", getDiscriminator()); + jsonWriter.writeStringField("aProperty", getAProperty()); + jsonWriter.writeStringField("yetAnotherProperty", getYetAnotherProperty()); + jsonWriter.writeStringField("differentDiscriminator", this.differentDiscriminator); + return jsonWriter.writeEndObject(); + } + + /** + * Reads an instance of GrandChildWithAnotherDiscriminator from the JsonReader. + * + * @param jsonReader The JsonReader being read. + * @return An instance of GrandChildWithAnotherDiscriminator if the JsonReader was pointing to an instance of it, or + * null if it was pointing to JSON null. + * @throws IllegalStateException If the deserialized JSON object was missing any required properties. + * @throws IOException If an error occurs while reading the GrandChildWithAnotherDiscriminator. + */ + @Generated + public static GrandChildWithAnotherDiscriminator fromJson(JsonReader jsonReader) throws IOException { + return jsonReader.readObject(reader -> { + String discriminator = null; + String aProperty = null; + String yetAnotherProperty = null; + String differentDiscriminator = "anotherValue"; + while (reader.nextToken() != JsonToken.END_OBJECT) { + String fieldName = reader.getFieldName(); + reader.nextToken(); + + if ("discriminator".equals(fieldName)) { + discriminator = reader.getString(); + } else if ("aProperty".equals(fieldName)) { + aProperty = reader.getString(); + } else if ("yetAnotherProperty".equals(fieldName)) { + yetAnotherProperty = reader.getString(); + } else if ("differentDiscriminator".equals(fieldName)) { + differentDiscriminator = reader.getString(); + } else { + reader.skipChildren(); + } + } + GrandChildWithAnotherDiscriminator deserializedGrandChildWithAnotherDiscriminator + = new GrandChildWithAnotherDiscriminator(discriminator, aProperty, yetAnotherProperty); + deserializedGrandChildWithAnotherDiscriminator.differentDiscriminator = differentDiscriminator; + + return deserializedGrandChildWithAnotherDiscriminator; + }); + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/GrandChildWithRequiredProperty.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/GrandChildWithRequiredProperty.java new file mode 100644 index 000000000..63c0f8779 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/GrandChildWithRequiredProperty.java @@ -0,0 +1,97 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.cadl.discriminatoredgecases.models; + +import com.azure.core.annotation.Generated; +import com.azure.core.annotation.Immutable; +import com.azure.json.JsonReader; +import com.azure.json.JsonToken; +import com.azure.json.JsonWriter; +import java.io.IOException; + +/** + * The GrandChildWithRequiredProperty model. + */ +@Immutable +public final class GrandChildWithRequiredProperty extends ChildWithRequiredPropertyAsDiscriminator { + /* + * Discriminator property for ChildWithRequiredPropertyAsDiscriminator. + */ + @Generated + private String discriminator = "aValue"; + + /** + * Creates an instance of GrandChildWithRequiredProperty class. + * + * @param discriminator the discriminator value to set. + * @param aProperty the aProperty value to set. + * @param anotherProperty the anotherProperty value to set. + */ + @Generated + private GrandChildWithRequiredProperty(String discriminator, String aProperty, String anotherProperty) { + super(discriminator, aProperty, anotherProperty); + } + + /** + * Get the discriminator property: Discriminator property for ChildWithRequiredPropertyAsDiscriminator. + * + * @return the discriminator value. + */ + @Generated + @Override + public String getDiscriminator() { + return this.discriminator; + } + + /** + * {@inheritDoc} + */ + @Generated + @Override + public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { + jsonWriter.writeStartObject(); + jsonWriter.writeStringField("aProperty", getAProperty()); + jsonWriter.writeStringField("anotherProperty", getAnotherProperty()); + jsonWriter.writeStringField("discriminator", this.discriminator); + return jsonWriter.writeEndObject(); + } + + /** + * Reads an instance of GrandChildWithRequiredProperty from the JsonReader. + * + * @param jsonReader The JsonReader being read. + * @return An instance of GrandChildWithRequiredProperty if the JsonReader was pointing to an instance of it, or + * null if it was pointing to JSON null. + * @throws IllegalStateException If the deserialized JSON object was missing any required properties. + * @throws IOException If an error occurs while reading the GrandChildWithRequiredProperty. + */ + @Generated + public static GrandChildWithRequiredProperty fromJson(JsonReader jsonReader) throws IOException { + return jsonReader.readObject(reader -> { + String aProperty = null; + String anotherProperty = null; + String discriminator = "aValue"; + while (reader.nextToken() != JsonToken.END_OBJECT) { + String fieldName = reader.getFieldName(); + reader.nextToken(); + + if ("aProperty".equals(fieldName)) { + aProperty = reader.getString(); + } else if ("anotherProperty".equals(fieldName)) { + anotherProperty = reader.getString(); + } else if ("discriminator".equals(fieldName)) { + discriminator = reader.getString(); + } else { + reader.skipChildren(); + } + } + GrandChildWithRequiredProperty deserializedGrandChildWithRequiredProperty + = new GrandChildWithRequiredProperty(discriminator, aProperty, anotherProperty); + deserializedGrandChildWithRequiredProperty.discriminator = discriminator; + + return deserializedGrandChildWithRequiredProperty; + }); + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ParentWithRequiredProperty.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ParentWithRequiredProperty.java new file mode 100644 index 000000000..baa0d41c5 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/ParentWithRequiredProperty.java @@ -0,0 +1,105 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.cadl.discriminatoredgecases.models; + +import com.azure.core.annotation.Generated; +import com.azure.core.annotation.Immutable; +import com.azure.json.JsonReader; +import com.azure.json.JsonSerializable; +import com.azure.json.JsonToken; +import com.azure.json.JsonWriter; +import java.io.IOException; + +/** + * The ParentWithRequiredProperty model. + */ +@Immutable +public class ParentWithRequiredProperty implements JsonSerializable { + /* + * The discriminator property. + */ + @Generated + private final String discriminator; + + /* + * The aProperty property. + */ + @Generated + private final String aProperty; + + /** + * Creates an instance of ParentWithRequiredProperty class. + * + * @param discriminator the discriminator value to set. + * @param aProperty the aProperty value to set. + */ + @Generated + protected ParentWithRequiredProperty(String discriminator, String aProperty) { + this.discriminator = discriminator; + this.aProperty = aProperty; + } + + /** + * Get the discriminator property: The discriminator property. + * + * @return the discriminator value. + */ + @Generated + public String getDiscriminator() { + return this.discriminator; + } + + /** + * Get the aProperty property: The aProperty property. + * + * @return the aProperty value. + */ + @Generated + public String getAProperty() { + return this.aProperty; + } + + /** + * {@inheritDoc} + */ + @Generated + @Override + public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { + jsonWriter.writeStartObject(); + jsonWriter.writeStringField("discriminator", this.discriminator); + jsonWriter.writeStringField("aProperty", this.aProperty); + return jsonWriter.writeEndObject(); + } + + /** + * Reads an instance of ParentWithRequiredProperty from the JsonReader. + * + * @param jsonReader The JsonReader being read. + * @return An instance of ParentWithRequiredProperty if the JsonReader was pointing to an instance of it, or null if + * it was pointing to JSON null. + * @throws IllegalStateException If the deserialized JSON object was missing any required properties. + * @throws IOException If an error occurs while reading the ParentWithRequiredProperty. + */ + @Generated + public static ParentWithRequiredProperty fromJson(JsonReader jsonReader) throws IOException { + return jsonReader.readObject(reader -> { + String discriminator = null; + String aProperty = null; + while (reader.nextToken() != JsonToken.END_OBJECT) { + String fieldName = reader.getFieldName(); + reader.nextToken(); + + if ("discriminator".equals(fieldName)) { + discriminator = reader.getString(); + } else if ("aProperty".equals(fieldName)) { + aProperty = reader.getString(); + } else { + reader.skipChildren(); + } + } + return new ParentWithRequiredProperty(discriminator, aProperty); + }); + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/models/package-info.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/package-info.java similarity index 66% rename from packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/models/package-info.java rename to packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/package-info.java index 41c730326..f4ec6f237 100644 --- a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/models/package-info.java +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/models/package-info.java @@ -4,8 +4,7 @@ /** * - * Package containing the data models for Naming. - * description of Naming. + * Package containing the data models for DiscriminatorEdgeCases. * */ -package com.cadl.naming.models; +package com.cadl.discriminatoredgecases.models; diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/package-info.java b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/package-info.java similarity index 68% rename from packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/package-info.java rename to packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/package-info.java index 12cf7f737..4405d8689 100644 --- a/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/naming/package-info.java +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/java/com/cadl/discriminatoredgecases/package-info.java @@ -4,8 +4,7 @@ /** * - * Package containing the classes for Naming. - * description of Naming. + * Package containing the classes for DiscriminatorEdgeCases. * */ -package com.cadl.naming; +package com.cadl.discriminatoredgecases; diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/resources/META-INF/cadl-discriminatoredgecases_apiview_properties.json b/packages/http-client-java/generator/http-client-generator-test/src/main/resources/META-INF/cadl-discriminatoredgecases_apiview_properties.json new file mode 100644 index 000000000..f5c21d5f0 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/main/resources/META-INF/cadl-discriminatoredgecases_apiview_properties.json @@ -0,0 +1,21 @@ +{ + "flavor": "Azure", + "CrossLanguageDefinitionId": { + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesAsyncClient": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesAsyncClient.getChildNewDiscrim": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp.getChildNewDiscrim", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesAsyncClient.getChildNewDiscrimWithResponse": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp.getChildNewDiscrim", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesAsyncClient.getChildRequiredDiscrim": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp.getChildRequiredDiscrim", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesAsyncClient.getChildRequiredDiscrimWithResponse": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp.getChildRequiredDiscrim", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesClient": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesClient.getChildNewDiscrim": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp.getChildNewDiscrim", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesClient.getChildNewDiscrimWithResponse": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp.getChildNewDiscrim", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesClient.getChildRequiredDiscrim": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp.getChildRequiredDiscrim", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesClient.getChildRequiredDiscrimWithResponse": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp.getChildRequiredDiscrim", + "com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesClientBuilder": "Cadl.DiscriminatorEdgeCases.DiscriminatorEdgeCasesOp", + "com.cadl.discriminatoredgecases.models.ChildWithAnotherDiscriminator": "Cadl.DiscriminatorEdgeCases.ChildWithAnotherDiscriminator", + "com.cadl.discriminatoredgecases.models.ChildWithRequiredPropertyAsDiscriminator": "Cadl.DiscriminatorEdgeCases.ChildWithRequiredPropertyAsDiscriminator", + "com.cadl.discriminatoredgecases.models.GrandChildWithAnotherDiscriminator": "Cadl.DiscriminatorEdgeCases.GrandChildWithAnotherDiscriminator", + "com.cadl.discriminatoredgecases.models.GrandChildWithRequiredProperty": "Cadl.DiscriminatorEdgeCases.GrandChildWithRequiredProperty", + "com.cadl.discriminatoredgecases.models.ParentWithRequiredProperty": "Cadl.DiscriminatorEdgeCases.ParentWithRequiredProperty" + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/src/main/resources/cadl-naming.properties b/packages/http-client-java/generator/http-client-generator-test/src/main/resources/cadl-discriminatoredgecases.properties similarity index 100% rename from packages/http-client-java/generator/http-client-generator-test/src/main/resources/cadl-naming.properties rename to packages/http-client-java/generator/http-client-generator-test/src/main/resources/cadl-discriminatoredgecases.properties diff --git a/packages/http-client-java/generator/http-client-generator-test/src/test/java/com/cadl/discriminatoredgecases/generated/DiscriminatorEdgeCasesClientTestBase.java b/packages/http-client-java/generator/http-client-generator-test/src/test/java/com/cadl/discriminatoredgecases/generated/DiscriminatorEdgeCasesClientTestBase.java new file mode 100644 index 000000000..440b20306 --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/src/test/java/com/cadl/discriminatoredgecases/generated/DiscriminatorEdgeCasesClientTestBase.java @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package com.cadl.discriminatoredgecases.generated; + +// The Java test files under 'generated' package are generated for your reference. +// If you wish to modify these files, please copy them out of the 'generated' package, and modify there. +// See https://aka.ms/azsdk/dpg/java/tests for guide on adding a test. + +import com.azure.core.http.HttpClient; +import com.azure.core.http.policy.HttpLogDetailLevel; +import com.azure.core.http.policy.HttpLogOptions; +import com.azure.core.test.TestMode; +import com.azure.core.test.TestProxyTestBase; +import com.azure.core.util.Configuration; +import com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesClient; +import com.cadl.discriminatoredgecases.DiscriminatorEdgeCasesClientBuilder; + +class DiscriminatorEdgeCasesClientTestBase extends TestProxyTestBase { + protected DiscriminatorEdgeCasesClient discriminatorEdgeCasesClient; + + @Override + protected void beforeTest() { + DiscriminatorEdgeCasesClientBuilder discriminatorEdgeCasesClientbuilder + = new DiscriminatorEdgeCasesClientBuilder() + .endpoint(Configuration.getGlobalConfiguration().get("ENDPOINT", "endpoint")) + .httpClient(HttpClient.createDefault()) + .httpLogOptions(new HttpLogOptions().setLogLevel(HttpLogDetailLevel.BASIC)); + if (getTestMode() == TestMode.PLAYBACK) { + discriminatorEdgeCasesClientbuilder.httpClient(interceptorManager.getPlaybackClient()); + } else if (getTestMode() == TestMode.RECORD) { + discriminatorEdgeCasesClientbuilder.addPolicy(interceptorManager.getRecordPolicy()); + } + discriminatorEdgeCasesClient = discriminatorEdgeCasesClientbuilder.buildClient(); + + } +} diff --git a/packages/http-client-java/generator/http-client-generator-test/tsp/discriminator-edge-cases.tsp b/packages/http-client-java/generator/http-client-generator-test/tsp/discriminator-edge-cases.tsp new file mode 100644 index 000000000..bff3f2f6f --- /dev/null +++ b/packages/http-client-java/generator/http-client-generator-test/tsp/discriminator-edge-cases.tsp @@ -0,0 +1,54 @@ +import "@typespec/rest"; +import "@azure-tools/typespec-azure-core"; +import "@azure-tools/typespec-client-generator-core"; + +using TypeSpec.Http; +using Azure.Core; +using Azure.ClientGenerator.Core; + +@service({ + title: "DiscriminatorEdgeCases", +}) +namespace Cadl.DiscriminatorEdgeCases; + +model ParentWithRequiredProperty { + discriminator: string; + aProperty: string; +} + +@discriminator("discriminator") +model ChildWithRequiredPropertyAsDiscriminator extends ParentWithRequiredProperty { + anotherProperty: string; +} + +@discriminator("differentDiscriminator") +model ChildWithAnotherDiscriminator extends ParentWithRequiredProperty { + yetAnotherProperty: string; +} + +model GrandChildWithRequiredProperty extends ChildWithRequiredPropertyAsDiscriminator { + discriminator: "aValue"; +} + +model GrandChildWithAnotherDiscriminator extends ChildWithAnotherDiscriminator { + differentDiscriminator: "anotherValue"; +} + +@client({ + service: Cadl.DiscriminatorEdgeCases, + name: "DiscriminatorEdgeCasesClient", +}) +@route("/model") +interface DiscriminatorEdgeCasesOp { + @get + @route("/childrequireddiscrim") + getChildRequiredDiscrim(): { + @body body: ChildWithRequiredPropertyAsDiscriminator; + }; + + @get + @route("/childnewdiscrim") + getChildNewDiscrim(): { + @body body: ChildWithAnotherDiscriminator; + }; +} diff --git a/packages/http-client-java/generator/http-client-generator/pom.xml b/packages/http-client-java/generator/http-client-generator/pom.xml index 971ee12c0..3bd279843 100644 --- a/packages/http-client-java/generator/http-client-generator/pom.xml +++ b/packages/http-client-java/generator/http-client-generator/pom.xml @@ -65,6 +65,7 @@ ${shade.finalName} true + false ${shade.mainClass}