Skip to content

Commit 695e819

Browse files
authored
Merge pull request #8463 from john-french/newlineInCommentsCSharp
added logic for newlines in comments for operation descriptions only
2 parents 33b2e1e + d8f6ff8 commit 695e819

File tree

5 files changed

+69
-15
lines changed

5 files changed

+69
-15
lines changed

modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,8 @@ public static enum ENUM_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case,
214214
public static final String GENERATE_PROPERTY_CHANGED = "generatePropertyChanged";
215215
public static final String GENERATE_PROPERTY_CHANGED_DESC = "Specifies that models support raising property changed events.";
216216

217+
public static final String PRESERVE_COMMENT_NEWLINES = "preserveNewlinesInComments";
218+
217219
public static final String NON_PUBLIC_API = "nonPublicApi";
218220
public static final String NON_PUBLIC_API_DESC = "Generates code with reduced access modifiers; allows embedding elsewhere without exposing non-public API calls to consumers.";
219221

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AbstractCSharpCodegen.java

Lines changed: 59 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,22 @@
55
import io.swagger.codegen.*;
66
import io.swagger.codegen.mustache.*;
77
import io.swagger.codegen.utils.ModelUtils;
8+
import io.swagger.models.Operation;
9+
import io.swagger.models.Path;
10+
import io.swagger.models.Swagger;
811
import io.swagger.models.properties.*;
912
import org.apache.commons.lang3.StringUtils;
1013
import org.slf4j.Logger;
1114
import org.slf4j.LoggerFactory;
1215

1316
import java.io.File;
14-
import java.util.*;
17+
import java.util.ArrayList;
18+
import java.util.Arrays;
19+
import java.util.HashMap;
20+
import java.util.HashSet;
21+
import java.util.List;
22+
import java.util.Map;
23+
import java.util.Set;
1524

1625
public abstract class AbstractCSharpCodegen extends DefaultCodegen implements CodegenConfig {
1726

@@ -22,6 +31,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
2231
protected boolean useDateTimeOffsetFlag = false;
2332
protected boolean useCollection = false;
2433
protected boolean returnICollection = false;
34+
protected boolean preserveNewLines = false;
2535
protected boolean netCoreProjectFileFlag = false;
2636

2737
protected String modelPropertyNaming = CodegenConstants.MODEL_PROPERTY_NAMING_TYPE.PascalCase.name();
@@ -78,7 +88,7 @@ public AbstractCSharpCodegen() {
7888
// fully qualified name
7989
"Client", "client", "parameter",
8090
// local variable names in API methods (endpoints)
81-
"localVarPath", "localVarPathParams", "localVarQueryParams", "localVarHeaderParams",
91+
"localVarPath", "localVarPathParams", "localVarQueryParams", "localVarHeaderParams",
8292
"localVarFormParams", "localVarFileParams", "localVarStatusCode", "localVarResponse",
8393
"localVarPostBody", "localVarHttpHeaderAccepts", "localVarHttpHeaderAccept",
8494
"localVarHttpContentTypes", "localVarHttpContentType",
@@ -210,14 +220,14 @@ public void processOpts() {
210220
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
211221
LOGGER.warn(String.format("%s is not used by C# generators. Please use %s", CodegenConstants.INVOKER_PACKAGE, CodegenConstants.PACKAGE_NAME));
212222
}
213-
223+
214224
// {{packageTitle}}
215225
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_TITLE)) {
216226
setPackageTitle((String) additionalProperties.get(CodegenConstants.PACKAGE_TITLE));
217227
} else {
218228
additionalProperties.put(CodegenConstants.PACKAGE_TITLE, packageTitle);
219229
}
220-
230+
221231
// {{packageProductName}}
222232
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_PRODUCTNAME)) {
223233
setPackageProductName((String) additionalProperties.get(CodegenConstants.PACKAGE_PRODUCTNAME));
@@ -231,14 +241,14 @@ public void processOpts() {
231241
} else {
232242
additionalProperties.put(CodegenConstants.PACKAGE_DESCRIPTION, packageDescription);
233243
}
234-
244+
235245
// {{packageCompany}}
236246
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_COMPANY)) {
237247
setPackageCompany((String) additionalProperties.get(CodegenConstants.PACKAGE_COMPANY));
238248
} else {
239249
additionalProperties.put(CodegenConstants.PACKAGE_COMPANY, packageCompany);
240250
}
241-
251+
242252
// {{packageCopyright}}
243253
if (additionalProperties.containsKey(CodegenConstants.PACKAGE_COPYRIGHT)) {
244254
setPackageCopyright((String) additionalProperties.get(CodegenConstants.PACKAGE_COPYRIGHT));
@@ -252,7 +262,7 @@ public void processOpts() {
252262
} else {
253263
additionalProperties.put(CodegenConstants.PACKAGE_AUTHORS, packageAuthors);
254264
}
255-
265+
256266
// {{useDateTimeOffset}}
257267
if (additionalProperties.containsKey(CodegenConstants.USE_DATETIME_OFFSET)) {
258268
useDateTimeOffset(convertPropertyToBooleanAndWriteBack(CodegenConstants.USE_DATETIME_OFFSET));
@@ -284,6 +294,10 @@ public void processOpts() {
284294
additionalProperties.put(CodegenConstants.NETCORE_PROJECT_FILE, netCoreProjectFileFlag);
285295
}
286296

297+
if (additionalProperties.containsKey(CodegenConstants.PRESERVE_COMMENT_NEWLINES)) {
298+
setPreserveNewLines(Boolean.valueOf(additionalProperties.get(CodegenConstants.PRESERVE_COMMENT_NEWLINES).toString()));
299+
}
300+
287301
if (additionalProperties.containsKey(CodegenConstants.INTERFACE_PREFIX)) {
288302
String useInterfacePrefix = additionalProperties.get(CodegenConstants.INTERFACE_PREFIX).toString();
289303
if("false".equals(useInterfacePrefix.toLowerCase())) {
@@ -626,10 +640,10 @@ public String toParamName(String name) {
626640
}
627641

628642
return name;
629-
}
643+
}
630644

631645
@Override
632-
public String escapeReservedWord(String name) {
646+
public String escapeReservedWord(String name) {
633647
if(this.reservedWordsMappings().containsKey(name)) {
634648
return this.reservedWordsMappings().get(name);
635649
}
@@ -864,31 +878,31 @@ public void setPackageName(String packageName) {
864878
public void setPackageVersion(String packageVersion) {
865879
this.packageVersion = packageVersion;
866880
}
867-
881+
868882
public void setPackageTitle(String packageTitle) {
869883
this.packageTitle = packageTitle;
870884
}
871-
885+
872886
public void setPackageProductName(String packageProductName) {
873887
this.packageProductName = packageProductName;
874888
}
875889

876890
public void setPackageDescription(String packageDescription) {
877891
this.packageDescription = packageDescription;
878892
}
879-
893+
880894
public void setPackageCompany(String packageCompany) {
881895
this.packageCompany = packageCompany;
882896
}
883-
897+
884898
public void setPackageCopyright(String packageCopyright) {
885899
this.packageCopyright = packageCopyright;
886900
}
887901

888902
public void setPackageAuthors(String packageAuthors) {
889903
this.packageAuthors = packageAuthors;
890904
}
891-
905+
892906
public void setSourceFolder(String sourceFolder) {
893907
this.sourceFolder = sourceFolder;
894908
}
@@ -948,6 +962,32 @@ public String testPackageName() {
948962
return this.packageName + ".Test";
949963
}
950964

965+
public boolean isPreserveNewLines() {
966+
return preserveNewLines;
967+
}
968+
969+
public void setPreserveNewLines(boolean preserveNewLines) {
970+
this.preserveNewLines = preserveNewLines;
971+
}
972+
973+
@Override
974+
public void preprocessSwagger(Swagger swagger) {
975+
if(this.preserveNewLines) {
976+
for(String pathname: swagger.getPaths().keySet()) {
977+
Path path = swagger.getPaths().get(pathname);
978+
for (Operation op : path.getOperations()) {
979+
if (op.getDescription() != null) {
980+
op.setDescription(preservation(op.getDescription()));
981+
}
982+
}
983+
}
984+
}
985+
}
986+
987+
public String preservation(String input) {
988+
return input.replaceAll("\\n", "~~N");
989+
}
990+
951991
@Override
952992
public String escapeQuotationMark(String input) {
953993
// remove " to avoid code injection
@@ -956,6 +996,10 @@ public String escapeQuotationMark(String input) {
956996

957997
@Override
958998
public String escapeUnsafeCharacters(String input) {
959-
return input.replace("*/", "*_/").replace("/*", "/_*").replace("--", "- -");
999+
String intermediate = input.replace("*/", "*_/").replace("/*", "/_*").replace("--", "- -");
1000+
1001+
intermediate = intermediate.replaceAll("~~N", "\n /// ");
1002+
1003+
return intermediate;
9601004
}
9611005
}

modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/AspNetCoreServerCodegen.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ public AspNetCoreServerCodegen() {
5959
CodegenConstants.SOURCE_FOLDER_DESC,
6060
sourceFolder);
6161

62+
addOption(CodegenConstants.PRESERVE_COMMENT_NEWLINES,
63+
"Preserve newlines in comments",
64+
String.valueOf(this.preserveNewLines));
65+
6266
// CLI Switches
6367
addSwitch(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG,
6468
CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG_DESC,

modules/swagger-codegen/src/test/java/io/swagger/codegen/aspnetcore/AspNetCoreServerOptionsTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ protected void setExpectations() {
3131
times = 1;
3232
serverCodegen.setSourceFolder(AspNetCoreServerOptionsProvider.SOURCE_FOLDER_VALUE);
3333
times = 1;
34+
serverCodegen.setPreserveNewLines(AspNetCoreServerOptionsProvider.PRESERVE_NEW_LINES);
35+
times = 1;
3436
serverCodegen.setPackageGuid(AspNetCoreServerOptionsProvider.PROJECT_GUID_VALUE);
3537
times = 1;
3638
serverCodegen.useDateTimeOffset(true);

modules/swagger-codegen/src/test/java/io/swagger/codegen/options/AspNetCoreServerOptionsProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class AspNetCoreServerOptionsProvider implements OptionsProvider {
1010
public static final String PACKAGE_NAME_VALUE = "swagger_server_aspnetcore";
1111
public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT";
1212
public static final String SOURCE_FOLDER_VALUE = "src_aspnetcore";
13+
public static final boolean PRESERVE_NEW_LINES = false;
1314

1415
@Override
1516
public String getLanguage() {
@@ -24,6 +25,7 @@ public Map<String, String> createOptions() {
2425
.put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
2526
.put(CodegenConstants.OPTIONAL_PROJECT_GUID, PROJECT_GUID_VALUE)
2627
.put(CodegenConstants.SORT_PARAMS_BY_REQUIRED_FLAG, "true")
28+
.put(CodegenConstants.PRESERVE_COMMENT_NEWLINES, "false")
2729
.put(CodegenConstants.USE_DATETIME_OFFSET, "true")
2830
.put(CodegenConstants.USE_COLLECTION, "false")
2931
.put(CodegenConstants.RETURN_ICOLLECTION, "false")

0 commit comments

Comments
 (0)