mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2026-03-24 19:39:08 +00:00
Remove null checks for C# value types (#2933)
This commit is contained in:
@@ -76,6 +76,8 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
// nullable type
|
||||
protected Set<String> nullableType = new HashSet<String>();
|
||||
|
||||
protected Set<String> valueTypes = new HashSet<String>();
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractCSharpCodegen.class);
|
||||
|
||||
public AbstractCSharpCodegen() {
|
||||
@@ -191,6 +193,10 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
nullableType = new HashSet<String>(
|
||||
Arrays.asList("decimal", "bool", "int", "float", "long", "double", "DateTime", "Guid")
|
||||
);
|
||||
// value Types
|
||||
valueTypes = new HashSet<String>(
|
||||
Arrays.asList("decimal", "bool", "int", "float", "long", "double")
|
||||
);
|
||||
}
|
||||
|
||||
public void setReturnICollection(boolean returnICollection) {
|
||||
@@ -415,6 +421,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
public Map<String, Object> postProcessAllModels(Map<String, Object> objs) {
|
||||
final Map<String, Object> processed = super.postProcessAllModels(objs);
|
||||
postProcessEnumRefs(processed);
|
||||
updateValueTypeProperty(processed);
|
||||
return processed;
|
||||
}
|
||||
|
||||
@@ -455,6 +462,19 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
var.isPrimitiveType = true;
|
||||
}
|
||||
}
|
||||
for (CodegenProperty var : model.vars) {
|
||||
if (enumRefs.containsKey(var.dataType)) {
|
||||
// Handle any enum properties referred to by $ref.
|
||||
// This is different in C# than most other generators, because enums in C# are compiled to integral types,
|
||||
// while enums in many other languages are true objects.
|
||||
CodegenModel refModel = enumRefs.get(var.dataType);
|
||||
var.allowableValues = refModel.allowableValues;
|
||||
var.isEnum = true;
|
||||
|
||||
// We do these after updateCodegenPropertyEnum to avoid generalities that don't mesh with C#.
|
||||
var.isPrimitiveType = true;
|
||||
}
|
||||
}
|
||||
|
||||
// We're looping all models here.
|
||||
if (model.isEnum) {
|
||||
@@ -542,6 +562,23 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update property if it is a C# value type
|
||||
*
|
||||
* @param models list of all models
|
||||
*/
|
||||
protected void updateValueTypeProperty(Map<String, Object> models) {
|
||||
for (Map.Entry<String, Object> entry : models.entrySet()) {
|
||||
String openAPIName = entry.getKey();
|
||||
CodegenModel model = ModelUtils.getModelByName(openAPIName, models);
|
||||
if (model != null) {
|
||||
for (CodegenProperty var : model.vars) {
|
||||
var.vendorExtensions.put("isValueType", isValueType(var));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> postProcessOperationsWithModels(Map<String, Object> objs, List<Object> allModels) {
|
||||
super.postProcessOperationsWithModels(objs, allModels);
|
||||
@@ -1056,6 +1093,17 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
|
||||
"double".equals(dataType) || "decimal".equals(dataType) || "float".equals(dataType);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return true if the property being passed is a C# value type
|
||||
*
|
||||
* @param var property
|
||||
* @return true if property is a value type
|
||||
*/
|
||||
|
||||
protected boolean isValueType(CodegenProperty var) {
|
||||
return (valueTypes.contains(var.dataType) || var.isEnum ) ;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setParameterExampleValue(CodegenParameter codegenParameter) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user