Skip to content

Commit d10880c

Browse files
committed
2 parents 2d8ee32 + 849fec2 commit d10880c

File tree

3 files changed

+34
-3
lines changed

3 files changed

+34
-3
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,9 @@ apiTemplateFiles are for API outputs only (controllers/handlers).
256256
// A cache to efficiently lookup a Schema instance based on the return value of `toModelName()`.
257257
private Map<String, Schema> modelNameToSchemaCache;
258258

259+
// A cache to efficiently lookup schema `toModelName()` based on the schema Key
260+
private Map<String, String> schemaKeyToModelNameCache = new HashMap<>();
261+
259262
@Override
260263
public List<CliOption> cliOptions() {
261264
return cliOptions;
@@ -2322,7 +2325,13 @@ public String toApiName(String name) {
23222325
*/
23232326
@Override
23242327
public String toModelName(final String name) {
2325-
return camelize(modelNamePrefix + "_" + name + "_" + modelNameSuffix);
2328+
if (schemaKeyToModelNameCache.containsKey(name)) {
2329+
return schemaKeyToModelNameCache.get(name);
2330+
}
2331+
2332+
String camelizedName = camelize(modelNamePrefix + "_" + name + "_" + modelNameSuffix);
2333+
schemaKeyToModelNameCache.put(name, camelizedName);
2334+
return camelizedName;
23262335
}
23272336

23282337
private static class NamedSchema {

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
9090
// special property keywords not allowed as these are the function names in the model files
9191
protected Set<String> propertySpecialKeywords = new HashSet<>(Arrays.asList("ToString", "ToJson", "GetHashCode", "Equals", "ShouldSerializeToString"));
9292

93+
// A cache to efficiently lookup schema `toModelName()` based on the schema Key
94+
private Map<String, String> schemaKeyToModelNameCache = new HashMap<>();
95+
9396
public AbstractCSharpCodegen() {
9497
super();
9598

@@ -1035,6 +1038,13 @@ public String toModelName(String name) {
10351038
if (importMapping.containsKey(name)) {
10361039
return importMapping.get(name);
10371040
}
1041+
1042+
// memoization
1043+
String origName = name;
1044+
if (schemaKeyToModelNameCache.containsKey(origName)) {
1045+
return schemaKeyToModelNameCache.get(origName);
1046+
}
1047+
10381048
if (!StringUtils.isEmpty(modelNamePrefix)) {
10391049
name = modelNamePrefix + "_" + name;
10401050
}
@@ -1058,9 +1068,12 @@ public String toModelName(String name) {
10581068
name = "model_" + name; // e.g. 200Response => Model200Response (after camelize)
10591069
}
10601070

1071+
String camelizedName = camelize(name);
1072+
schemaKeyToModelNameCache.put(origName, camelizedName);
1073+
10611074
// camelize the model name
10621075
// phone_number => PhoneNumber
1063-
return camelize(name);
1076+
return camelizedName;
10641077
}
10651078

10661079
@Override

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ public class GoClientCodegen extends AbstractGoCodegen {
4949
protected boolean isGoSubmodule = false;
5050
protected boolean useOneOfDiscriminatorLookup = false; // use oneOf discriminator's mapping for model lookup
5151

52+
// A cache to efficiently lookup schema `toModelName()` based on the schema Key
53+
private Map<String, String> schemaKeyToModelNameCache = new HashMap<>();
54+
5255
public GoClientCodegen() {
5356
super();
5457

@@ -312,8 +315,14 @@ public String toApiDocFilename(String name) {
312315

313316
@Override
314317
public String toModelName(String name) {
318+
if (schemaKeyToModelNameCache.containsKey(name)) {
319+
return schemaKeyToModelNameCache.get(name);
320+
}
321+
315322
// underscoring would also lowercase the whole name, thus losing acronyms which are in capitals
316-
return camelize(toModel(name, false));
323+
String camelizedName = camelize(toModel(name, false));
324+
schemaKeyToModelNameCache.put(name, camelizedName);
325+
return camelizedName;
317326
}
318327

319328
public String escapeReservedWord(String name) {

0 commit comments

Comments
 (0)