[PHP][php-nextgen] List all possible return types (fix #17113) (#20335)

* [PHP][php-nextgen] List all possible return types (fix #17113)

* Switch to LinkedHashSet
This commit is contained in:
Julian Vennen 2024-12-21 08:50:40 +01:00 committed by GitHub
parent 6180fea305
commit 806b99e43a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 13 deletions

View File

@ -34,11 +34,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.*;
public class PhpNextgenClientCodegen extends AbstractPhpCodegen {
@SuppressWarnings("hiding")
@ -189,16 +185,31 @@ public class PhpNextgenClientCodegen extends AbstractPhpCodegen {
objs = super.postProcessOperationsWithModels(objs, allModels);
OperationMap operations = objs.getOperations();
for (CodegenOperation operation : operations.getOperation()) {
if (operation.returnType == null) {
operation.vendorExtensions.putIfAbsent("x-php-return-type", "void");
} else {
if (operation.returnProperty.isContainer) { // array or map
operation.vendorExtensions.putIfAbsent("x-php-return-type", "array");
} else {
operation.vendorExtensions.putIfAbsent("x-php-return-type", operation.returnType);
Set<String> phpReturnTypeOptions = new LinkedHashSet<>();
Set<String> docReturnTypeOptions = new LinkedHashSet<>();
for (CodegenResponse response : operation.responses) {
if (response.dataType != null) {
String returnType = response.dataType;
if (response.isArray || response.isMap) {
// PHP does not understand array type hinting so we strip it
// The phpdoc will still contain the array type hinting
returnType = "array";
}
phpReturnTypeOptions.add(returnType);
docReturnTypeOptions.add(response.dataType);
}
}
if (phpReturnTypeOptions.isEmpty()) {
operation.vendorExtensions.putIfAbsent("x-php-return-type", "void");
operation.vendorExtensions.putIfAbsent("x-php-doc-return-type", "void");
} else {
operation.vendorExtensions.putIfAbsent("x-php-return-type", String.join("|", phpReturnTypeOptions));
operation.vendorExtensions.putIfAbsent("x-php-doc-return-type", String.join("|", docReturnTypeOptions));
}
for (CodegenParameter param : operation.allParams) {
if (param.isArray || param.isMap) {
param.vendorExtensions.putIfAbsent("x-php-param-type", "array");

View File

@ -164,7 +164,7 @@ use {{invokerPackage}}\ObjectSerializer;
*
* @throws ApiException on non-2xx response or if the response body is not in the expected format
* @throws InvalidArgumentException
* @return {{#returnType}}{{#responses}}{{#dataType}}{{^-first}}|{{/-first}}{{/dataType}}{{{dataType}}}{{/responses}}{{/returnType}}{{^returnType}}void{{/returnType}}
* @return {{{vendorExtensions.x-php-doc-return-type}}}
{{#isDeprecated}}
* @deprecated
{{/isDeprecated}}