23
23
import com .samskivert .mustache .Mustache ;
24
24
import com .samskivert .mustache .Mustache .Compiler ;
25
25
import com .samskivert .mustache .Mustache .Lambda ;
26
-
27
26
import io .swagger .v3 .core .util .Json ;
28
27
import io .swagger .v3 .oas .models .OpenAPI ;
29
28
import io .swagger .v3 .oas .models .Operation ;
30
29
import io .swagger .v3 .oas .models .callbacks .Callback ;
31
30
import io .swagger .v3 .oas .models .examples .Example ;
32
31
import io .swagger .v3 .oas .models .headers .Header ;
33
- import io .swagger .v3 .oas .models .media .*;
34
- import io .swagger .v3 .oas .models .parameters .*;
32
+ import io .swagger .v3 .oas .models .media .ArraySchema ;
33
+ import io .swagger .v3 .oas .models .media .ComposedSchema ;
34
+ import io .swagger .v3 .oas .models .media .Content ;
35
+ import io .swagger .v3 .oas .models .media .MediaType ;
36
+ import io .swagger .v3 .oas .models .media .Schema ;
37
+ import io .swagger .v3 .oas .models .media .StringSchema ;
38
+ import io .swagger .v3 .oas .models .parameters .CookieParameter ;
39
+ import io .swagger .v3 .oas .models .parameters .HeaderParameter ;
40
+ import io .swagger .v3 .oas .models .parameters .Parameter ;
41
+ import io .swagger .v3 .oas .models .parameters .PathParameter ;
42
+ import io .swagger .v3 .oas .models .parameters .QueryParameter ;
43
+ import io .swagger .v3 .oas .models .parameters .RequestBody ;
35
44
import io .swagger .v3 .oas .models .responses .ApiResponse ;
36
45
import io .swagger .v3 .oas .models .responses .ApiResponses ;
37
46
import io .swagger .v3 .oas .models .security .OAuthFlow ;
62
71
import org .slf4j .LoggerFactory ;
63
72
64
73
import java .io .File ;
65
- import java .util .*;
74
+ import java .util .ArrayList ;
75
+ import java .util .Arrays ;
76
+ import java .util .Collection ;
77
+ import java .util .Collections ;
78
+ import java .util .Comparator ;
79
+ import java .util .HashMap ;
80
+ import java .util .HashSet ;
81
+ import java .util .Iterator ;
82
+ import java .util .LinkedHashMap ;
83
+ import java .util .LinkedList ;
84
+ import java .util .List ;
85
+ import java .util .Locale ;
86
+ import java .util .Map ;
66
87
import java .util .Map .Entry ;
88
+ import java .util .Objects ;
89
+ import java .util .Optional ;
90
+ import java .util .Set ;
91
+ import java .util .TreeSet ;
67
92
import java .util .regex .Matcher ;
68
93
import java .util .regex .Pattern ;
69
94
import java .util .stream .Collectors ;
70
95
import java .util .stream .Stream ;
71
96
72
- import static org .openapitools .codegen .utils .StringUtils .*;
97
+ import static org .openapitools .codegen .utils .StringUtils .camelize ;
98
+ import static org .openapitools .codegen .utils .StringUtils .escape ;
99
+ import static org .openapitools .codegen .utils .StringUtils .underscore ;
73
100
74
101
public class DefaultCodegen implements CodegenConfig {
75
102
private static final Logger LOGGER = LoggerFactory .getLogger (DefaultCodegen .class );
@@ -80,7 +107,8 @@ public class DefaultCodegen implements CodegenConfig {
80
107
protected Set <String > defaultIncludes = new HashSet <String >();
81
108
protected Map <String , String > typeMapping = new HashMap <String , String >();
82
109
protected Map <String , String > instantiationTypes = new HashMap <String , String >();
83
- protected Set <String > reservedWords = new HashSet <String >();
110
+ private final Set <String > reservedWordsCaseSensitive = new HashSet <String >();
111
+ private final Set <String > reservedWordsCaseInsensitive = new HashSet <String >();
84
112
protected Set <String > languageSpecificPrimitives = new HashSet <String >();
85
113
protected Map <String , String > importMapping = new HashMap <String , String >();
86
114
protected String modelPackage = "" , apiPackage = "" , fileSuffix ;
@@ -621,10 +649,6 @@ public Map<String, String> instantiationTypes() {
621
649
return instantiationTypes ;
622
650
}
623
651
624
- public Set <String > reservedWords () {
625
- return reservedWords ;
626
- }
627
-
628
652
public Set <String > languageSpecificPrimitives () {
629
653
return languageSpecificPrimitives ;
630
654
}
@@ -927,7 +951,7 @@ public String toOperationId(String operationId) {
927
951
* @return the sanitized variable name
928
952
*/
929
953
public String toVarName (String name ) {
930
- if (reservedWords . contains (name )) {
954
+ if (this . isReservedWord (name )) {
931
955
return escapeReservedWord (name );
932
956
} else if (((CharSequence ) name ).chars ().anyMatch (character -> specialCharReplacements .keySet ().contains ("" + ((char ) character )))) {
933
957
return escape (name , specialCharReplacements , null , null );
@@ -945,7 +969,7 @@ public String toVarName(String name) {
945
969
*/
946
970
public String toParamName (String name ) {
947
971
name = removeNonNameElementToCamelCase (name ); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
948
- if (reservedWords . contains (name )) {
972
+ if (this . isReservedWord (name )) {
949
973
return escapeReservedWord (name );
950
974
} else if (((CharSequence ) name ).chars ().anyMatch (character -> specialCharReplacements .keySet ().contains ("" + ((char ) character )))) {
951
975
return escape (name , specialCharReplacements , null , null );
@@ -1071,8 +1095,6 @@ public DefaultCodegen() {
1071
1095
1072
1096
instantiationTypes = new HashMap <String , String >();
1073
1097
1074
- reservedWords = new HashSet <String >();
1075
-
1076
1098
importMapping = new HashMap <String , String >();
1077
1099
importMapping .put ("BigDecimal" , "java.math.BigDecimal" );
1078
1100
importMapping .put ("UUID" , "java.util.UUID" );
@@ -1729,7 +1751,7 @@ public CodegenModel fromModel(String name, Schema schema) {
1729
1751
1730
1752
CodegenModel m = CodegenModelFactory .newInstance (CodegenModelType .MODEL );
1731
1753
1732
- if (reservedWords . contains (name )) {
1754
+ if (this . isReservedWord (name )) {
1733
1755
m .name = escapeReservedWord (name );
1734
1756
} else {
1735
1757
m .name = name ;
@@ -3412,15 +3434,28 @@ public int compare(CodegenSecurity one, CodegenSecurity another) {
3412
3434
return codegenSecurities ;
3413
3435
}
3414
3436
3415
- protected void setReservedWordsLowerCase (List <String > words ) {
3416
- reservedWords = new HashSet <String >();
3417
- for (String word : words ) {
3418
- reservedWords .add (word .toLowerCase (Locale .ROOT ));
3419
- }
3437
+ public void registerReservedWordsCaseInsensitive (Collection <String > reserved ) {
3438
+ reserved .forEach (it -> this .reservedWordsCaseInsensitive .add (it .toLowerCase (Locale .ROOT )));
3439
+ }
3440
+
3441
+ public void registerReservedWordsCaseSensitive (Collection <String > reserved ) {
3442
+ this .reservedWordsCaseSensitive .addAll (reserved );
3420
3443
}
3421
3444
3422
- protected boolean isReservedWord (String word ) {
3423
- return word != null && reservedWords .contains (word .toLowerCase (Locale .ROOT ));
3445
+ /**
3446
+ * This function tests the word against the two sets reservedWordsCaseInsensitive and reservedWordsCaseSensitive.
3447
+ * If the word is in any of these lists the method will return true.
3448
+ * Attention: The method will return false if word is null!
3449
+ *
3450
+ * @param word The key which should be checked against the reserved words sets.
3451
+ * @return Whether the word is in the reserved sets.
3452
+ */
3453
+ public final boolean isReservedWord (String word ) {
3454
+ if (word == null ) {
3455
+ return false ;
3456
+ }
3457
+ return this .reservedWordsCaseSensitive .contains (word )
3458
+ || this .reservedWordsCaseInsensitive .contains (word .toLowerCase (Locale .ROOT ));
3424
3459
}
3425
3460
3426
3461
/**
0 commit comments