[Refactor] create a static function to build map of codegen model (#18138)

* refactor to build map of codegen model

* update
This commit is contained in:
William Cheng
2024-03-19 09:15:33 +08:00
committed by GitHub
parent b59957a095
commit 3155a70c3f
9 changed files with 44 additions and 57 deletions

View File

@@ -791,6 +791,8 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
additionalProperties.put("x-http-statuses-with-return", httpStatusesWithReturn);
HashMap<String, CodegenModel> modelMaps = ModelMap.toCodegenModelMap(allModels);
if (objs != null) {
OperationMap operations = objs.getOperations();
if (operations != null) {
@@ -1041,57 +1043,57 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
}
for (CodegenParameter parameter : operation.allParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.bodyParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.cookieParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.formParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.headerParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.implicitHeadersParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.optionalParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.pathParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.queryParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.notNullableParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
for (CodegenParameter parameter : operation.requiredParams) {
CodegenModel model = getModelFromParameter(allModels, parameter);
CodegenModel model = getModelFromParameter(modelMaps, parameter);
patchParameter(model, parameter);
}
@@ -1118,10 +1120,12 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
/**
* Returns the model related to the given parameter
*/
private CodegenModel getModelFromParameter(List<ModelMap> allModels, CodegenParameter parameter) {
return parameter.isModel || parameter.getIsEnumOrRef()
? allModels.stream().map(m -> m.getModel()).filter(m -> m.getClassname().equals(parameter.dataType)).findFirst().orElse(null)
: null;
private CodegenModel getModelFromParameter(HashMap<String, CodegenModel> allModels, CodegenParameter parameter) {
if (parameter.isModel || parameter.getIsEnumOrRef()) {
return allModels.getOrDefault(parameter.dataType, null);
} else {
return null;
}
}
/**

View File

@@ -599,14 +599,9 @@ public class CrystalClientCodegen extends DefaultCodegen {
return objs;
}
OperationMap operations = objs.getOperations();
HashMap<String, CodegenModel> modelMaps = new HashMap<>();
HashMap<String, CodegenModel> modelMaps = ModelMap.toCodegenModelMap(allModels);
HashMap<String, Integer> processedModelMaps = new HashMap<>();
for (ModelMap modelMap : allModels) {
CodegenModel m = modelMap.getModel();
modelMaps.put(m.classname, m);
}
List<CodegenOperation> operationList = operations.getOperation();
for (CodegenOperation op : operationList) {
for (CodegenParameter p : op.allParams) {

View File

@@ -533,14 +533,9 @@ public class GoClientCodegen extends AbstractGoCodegen {
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
objs = super.postProcessOperationsWithModels(objs, allModels);
OperationMap operations = objs.getOperations();
HashMap<String, CodegenModel> modelMaps = new HashMap<>();
HashMap<String, CodegenModel> modelMaps = ModelMap.toCodegenModelMap(allModels);
HashMap<String, ArrayList<Integer>> processedModelMaps = new HashMap<>();
for (ModelMap modelMap : allModels) {
CodegenModel m = modelMap.getModel();
modelMaps.put(m.classname, m);
}
List<CodegenOperation> operationList = operations.getOperation();
for (CodegenOperation op : operationList) {
for (CodegenParameter p : op.allParams) {

View File

@@ -1043,14 +1043,9 @@ public class PowerShellClientCodegen extends DefaultCodegen implements CodegenCo
@Override
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
OperationMap operations = objs.getOperations();
HashMap<String, CodegenModel> modelMaps = new HashMap<>();
HashMap<String, CodegenModel> modelMaps = ModelMap.toCodegenModelMap(allModels);
HashMap<String, Integer> processedModelMaps = new HashMap<>();
for (ModelMap modelMap : allModels) {
CodegenModel m = modelMap.getModel();
modelMaps.put(m.classname, m);
}
List<CodegenOperation> operationList = operations.getOperation();
for (CodegenOperation op : operationList) {
int index = 0;

View File

@@ -911,13 +911,7 @@ public class RClientCodegen extends DefaultCodegen implements CodegenConfig {
@Override
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
OperationMap objectMap = objs.getOperations();
HashMap<String, CodegenModel> modelMaps = new HashMap<>();
for (ModelMap modelMap : allModels) {
CodegenModel m = modelMap.getModel();
modelMaps.put(m.classname, m);
}
HashMap<String, CodegenModel> modelMaps = ModelMap.toCodegenModelMap(allModels);
List<CodegenOperation> operations = objectMap.getOperation();
for (CodegenOperation operation : operations) {
for (CodegenParameter cp : operation.allParams) {

View File

@@ -651,14 +651,9 @@ public class RubyClientCodegen extends AbstractRubyCodegen {
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
objs = super.postProcessOperationsWithModels(objs, allModels);
OperationMap operations = objs.getOperations();
HashMap<String, CodegenModel> modelMaps = new HashMap<>();
HashMap<String, CodegenModel> modelMaps = ModelMap.toCodegenModelMap(allModels);
HashMap<String, Integer> processedModelMaps = new HashMap<>();
for (ModelMap modelMap : allModels) {
CodegenModel m = modelMap.getModel();
modelMaps.put(m.classname, m);
}
List<CodegenOperation> operationList = operations.getOperation();
for (CodegenOperation op : operationList) {
for (CodegenParameter p : op.allParams) {

View File

@@ -1256,11 +1256,7 @@ public class Swift5ClientCodegen extends DefaultCodegen implements CodegenConfig
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
OperationMap objectMap = objs.getOperations();
HashMap<String, CodegenModel> modelMaps = new HashMap<>();
for (ModelMap modelMap : allModels) {
CodegenModel m = modelMap.getModel();
modelMaps.put(m.classname, m);
}
HashMap<String, CodegenModel> modelMaps = ModelMap.toCodegenModelMap(allModels);
List<CodegenOperation> operations = objectMap.getOperation();
for (CodegenOperation operation : operations) {

View File

@@ -729,12 +729,7 @@ public class SwiftCombineClientCodegen extends DefaultCodegen implements Codegen
public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<ModelMap> allModels) {
Map<String, Object> objectMap = (Map<String, Object>) objs.get("operations");
HashMap<String, CodegenModel> modelMaps = new HashMap<String, CodegenModel>();
for (Object o : allModels) {
HashMap<String, Object> h = (HashMap<String, Object>) o;
CodegenModel m = (CodegenModel) h.get("model");
modelMaps.put(m.classname, m);
}
HashMap<String, CodegenModel> modelMaps = ModelMap.toCodegenModelMap(allModels);
List<CodegenOperation> operations = (List<CodegenOperation>) objectMap.get("operation");
for (CodegenOperation operation : operations) {

View File

@@ -1,6 +1,7 @@
package org.openapitools.codegen.model;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.openapitools.codegen.CodegenModel;
@@ -22,4 +23,21 @@ public class ModelMap extends HashMap<String, Object> {
public CodegenModel getModel() {
return (CodegenModel) get("model");
}
/**
* Convert a list of ModelMap to map of CodegenModel.
*
* @param allModels list of model map
* @return map of Codegen Model
*/
static public HashMap<String, CodegenModel> toCodegenModelMap(List<ModelMap> allModels) {
HashMap<String, CodegenModel> modelMaps = new HashMap<>();
for (ModelMap modelMap : allModels) {
CodegenModel m = modelMap.getModel();
modelMaps.put(m.classname, m);
}
return modelMaps;
}
}