Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,6 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
protected Boolean zeroBasedEnums = null;
protected static final String zeroBasedEnumVendorExtension = "x-zero-based-enum";

// nullable type
protected Set<String> nullableType = new HashSet<>();

protected Set<String> valueTypes = new HashSet<>();

private final Logger LOGGER = LoggerFactory.getLogger(AbstractCSharpCodegen.class);

// special property keywords not allowed as these are the function names in the model files
Expand Down Expand Up @@ -201,42 +196,6 @@ public AbstractCSharpCodegen() {
instantiationTypes.put("list", "List");
instantiationTypes.put("map", "Dictionary");


// Nullable types here assume C# 2 support is not part of base
typeMapping = new HashMap<>();
typeMapping.put("string", "string");
typeMapping.put("binary", "byte[]");
typeMapping.put("ByteArray", "byte[]");
typeMapping.put("boolean", "bool?");
typeMapping.put("integer", "int?");
typeMapping.put("UnsignedInteger", "uint?");
typeMapping.put("UnsignedLong", "ulong?");
typeMapping.put("long", "long?");
typeMapping.put("float", "float?");
typeMapping.put("double", "double?");
typeMapping.put("number", "decimal?");
typeMapping.put("BigDecimal", "decimal?");
typeMapping.put("DateTime", "DateTime?");
typeMapping.put("date", "DateTime?");
typeMapping.put("file", "System.IO.Stream");
typeMapping.put("array", "List");
typeMapping.put("list", "List");
typeMapping.put("map", "Dictionary");
typeMapping.put("object", "Object");
typeMapping.put("UUID", "Guid?");
typeMapping.put("URI", "string");
typeMapping.put("AnyType", "Object");

// nullable type
nullableType = new HashSet<>(
Arrays.asList("decimal", "bool", "int", "uint", "long", "ulong", "float", "double",
"DateTime", "DateTimeOffset", "Guid")
);
// value Types
valueTypes = new HashSet<>(
Arrays.asList("decimal", "bool", "int", "uint", "long", "ulong", "float", "double")
);

this.setSortParamsByRequiredFlag(true);

// do it only on newer libraries to avoid breaking changes
Expand Down Expand Up @@ -449,6 +408,8 @@ public void execute(Template.Fragment fragment, Writer writer) throws IOExceptio
writer.write(content);
}
});

this.setTypeMapping();
}

@Override
Expand Down Expand Up @@ -578,13 +539,13 @@ private void patchProperty(Map<String, CodegenModel> enumRefs, CodegenModel mode
property.isPrimitiveType = true;
}

if (!property.isContainer && (nullableType.contains(property.dataType) || property.isEnum)) {
if (!property.isContainer && (this.getNullableTypes().contains(property.dataType) || property.isEnum)) {
property.vendorExtensions.put("x-csharp-value-type", true);
}

property.vendorExtensions.put("x-is-value-type", isValueType(property));

if (property.isNullable && !property.isContainer && (nullableType.contains(property.dataType) || property.isEnum)) {
if (property.isNullable && !property.isContainer && (this.getNullableTypes().contains(property.dataType) || property.isEnum)) {
property.vendorExtensions.put("x-nullable-value-type", true);
}

Expand Down Expand Up @@ -851,7 +812,7 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
private void patchParameter(CodegenParameter parameter) {
parameter.paramName = escapeReservedWord(parameter.paramName);

if (parameter.isNullable && !parameter.isContainer && (nullableType.contains(parameter.dataType) || parameter.isEnum)) {
if (parameter.isNullable && !parameter.isContainer && (this.getNullableTypes().contains(parameter.dataType) || parameter.isEnum)) {
parameter.vendorExtensions.put("x-nullable-value-type", true);
}

Expand All @@ -865,7 +826,7 @@ protected void processOperation(CodegenOperation operation) {
}

// TODO: move this into patchParamter
private void updateCodegenParametersEnum(List<CodegenParameter> parameters, List<ModelMap> allModels) {
protected void updateCodegenParametersEnum(List<CodegenParameter> parameters, List<ModelMap> allModels) {
for (CodegenParameter parameter : parameters) {
CodegenModel model = null;
for (ModelMap modelHashMap : allModels) {
Expand All @@ -886,13 +847,9 @@ private void updateCodegenParametersEnum(List<CodegenParameter> parameters, List
}
}

if (!parameter.isContainer && nullableType.contains(parameter.dataType)) {
if (!parameter.isContainer && this.getNullableTypes().contains(parameter.dataType)) {
parameter.vendorExtensions.put("x-csharp-value-type", true);
}

if (!parameter.required && parameter.vendorExtensions.get("x-csharp-value-type") != null) { //optional
parameter.dataType = parameter.dataType + "?";
}
}
}

Expand Down Expand Up @@ -1380,7 +1337,7 @@ public boolean isDataTypeString(String dataType) {
*/

protected boolean isValueType(CodegenProperty var) {
return (valueTypes.contains(var.dataType) || var.isEnum);
return (this.getValueTypes().contains(var.dataType) || var.isEnum);
}

@Override
Expand Down Expand Up @@ -1511,19 +1468,6 @@ public void setParameterExampleValue(CodegenParameter p) {
p.example = example;
}

@Override
public void postProcessParameter(CodegenParameter parameter) {
super.postProcessParameter(parameter);

// TODO: instead of appending the ?
// use isNullable, OptionalParameterLambda, or RequiredParameterLambda
if (!parameter.required && (nullReferenceTypesFlag || nullableType.contains(parameter.dataType))) {
parameter.dataType = parameter.dataType.endsWith("?")
? parameter.dataType
: parameter.dataType + "?";
}
}

@Override
public void postProcessFile(File file, String fileType) {
if (file == null) {
Expand Down Expand Up @@ -1577,4 +1521,38 @@ public String addRegularExpressionDelimiter(String pattern) {
return pattern;
}

@Deprecated
protected Set<String> getNullableTypes() {
throw new RuntimeException("This method should no longer be used.");
}

protected Set<String> getValueTypes() {
return new HashSet<>(Arrays.asList("decimal", "bool", "int", "uint", "long", "ulong", "float", "double", "DateTime", "DateTimeOffset", "Guid"));
}

protected void setTypeMapping() {
typeMapping = new HashMap<>();
typeMapping.put("string", "string");
typeMapping.put("binary", "byte[]");
typeMapping.put("ByteArray", "byte[]");
typeMapping.put("boolean", "bool");
typeMapping.put("integer", "int");
typeMapping.put("UnsignedInteger", "uint");
typeMapping.put("UnsignedLong", "ulong");
typeMapping.put("long", "long");
typeMapping.put("float", "float");
typeMapping.put("double", "double");
typeMapping.put("number", "decimal");
typeMapping.put("BigDecimal", "decimal");
typeMapping.put("DateTime", "DateTime");
typeMapping.put("date", "DateTime");
typeMapping.put("file", "System.IO.Stream");
typeMapping.put("array", "List");
typeMapping.put("list", "List");
typeMapping.put("map", "Dictionary");
typeMapping.put("object", "Object");
typeMapping.put("UUID", "Guid");
typeMapping.put("URI", "string");
typeMapping.put("AnyType", "Object");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,7 @@

import java.io.File;
import java.net.URL;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.*;

import static java.util.UUID.randomUUID;

Expand Down Expand Up @@ -136,17 +132,6 @@ public AspNetServerCodegen() {

cliOptions.clear();

typeMapping.put("boolean", "bool");
typeMapping.put("integer", "int");
typeMapping.put("float", "float");
typeMapping.put("long", "long");
typeMapping.put("double", "double");
typeMapping.put("number", "decimal");
typeMapping.put("DateTime", "DateTime");
typeMapping.put("date", "DateTime");
typeMapping.put("UUID", "Guid");
typeMapping.put("URI", "string");

setSupportNullable(Boolean.TRUE);

// CLI options
Expand Down Expand Up @@ -310,11 +295,58 @@ public AspNetServerCodegen() {
addOption(modelClassModifier.getOpt(), modelClassModifier.getDescription(), modelClassModifier.getOptValue());
}

@Deprecated
@Override
protected Set<String> getNullableTypes() {
return new HashSet<>(Arrays.asList("decimal", "bool", "int", "uint", "long", "ulong", "float", "double",
"DateTime", "DateTimeOffset", "Guid"));
}

@Override
protected Set<String> getValueTypes() {
return new HashSet<>(Arrays.asList("decimal", "bool", "int", "uint", "long", "ulong", "float", "double"));
}

@Override
public CodegenType getTag() {
return CodegenType.SERVER;
}

@Override
protected void setTypeMapping() {
super.setTypeMapping();
typeMapping.put("boolean", "bool");
typeMapping.put("integer", "int");
typeMapping.put("float", "float");
typeMapping.put("long", "long");
typeMapping.put("double", "double");
typeMapping.put("number", "decimal");
typeMapping.put("DateTime", "DateTime");
typeMapping.put("date", "DateTime");
typeMapping.put("UUID", "Guid");
typeMapping.put("URI", "string");
}

@Override
public void postProcessParameter(CodegenParameter parameter) {
super.postProcessParameter(parameter);

if (!parameter.dataType.endsWith("?") && !parameter.required && (nullReferenceTypesFlag || this.getNullableTypes().contains(parameter.dataType))) {
parameter.dataType = parameter.dataType + "?";
}
}

@Override
protected void updateCodegenParametersEnum(List<CodegenParameter> parameters, List<ModelMap> allModels) {
super.updateCodegenParametersEnum(parameters, allModels);

for (CodegenParameter parameter : parameters) {
if (!parameter.required && parameter.vendorExtensions.get("x-csharp-value-type") != null) { //optional
parameter.dataType = parameter.dataType + "?";
}
}
}

@Override
public String getName() {
return "aspnetcore";
Expand Down Expand Up @@ -443,6 +475,8 @@ public void processOpts() {

supportingFiles.add(new SupportingFile("Authentication" + File.separator + "ApiAuthentication.mustache", packageFolder + File.separator + "Authentication", "ApiAuthentication.cs"));
supportingFiles.add(new SupportingFile("Formatters" + File.separator + "InputFormatterStream.mustache", packageFolder + File.separator + "Formatters", "InputFormatterStream.cs"));

this.setTypeMapping();
}

public void setPackageGuid(String packageGuid) {
Expand Down Expand Up @@ -562,7 +596,7 @@ public String toRegularExpression(String pattern) {
@Override
public String getNullableType(Schema p, String type) {
if (languageSpecificPrimitives.contains(type)) {
if (isSupportNullable() && ModelUtils.isNullable(p) && (nullableType.contains(type) || nullReferenceTypesFlag)) {
if (isSupportNullable() && ModelUtils.isNullable(p) && (this.getNullableTypes().contains(type) || nullReferenceTypesFlag)) {
return type + "?";
} else {
return type;
Expand Down
Loading