From 4bd039dd4e563ba6e1c1c944c1bf58baa0300f3a Mon Sep 17 00:00:00 2001
From: William Cheng <wing328hk@gmail.com>
Date: Sat, 23 Jul 2022 18:48:41 +0800
Subject: [PATCH] add model caching to kotlin generators

---
 .../codegen/languages/AbstractKotlinCodegen.java       | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java
index 20517280da1..40ed03ac6a7 100644
--- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java
+++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractKotlinCodegen.java
@@ -75,6 +75,8 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
     // ref: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-hash-map/
     protected Set<String> propertyAdditionalKeywords = new HashSet<>(Arrays.asList("entries", "keys", "size", "values"));
 
+    private Map<String, String> schemaKeyToModelNameCache = new HashMap<>();
+
     public AbstractKotlinCodegen() {
         super();
 
@@ -668,6 +670,11 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
      */
     @Override
     public String toModelName(final String name) {
+        // memoization
+        String origName = name;
+        if (schemaKeyToModelNameCache.containsKey(origName)) {
+            return schemaKeyToModelNameCache.get(origName);
+        }
 
         // Allow for explicitly configured kotlin.* and java.* types
         if (name.startsWith("kotlin.") || name.startsWith("java.")) {
@@ -717,7 +724,8 @@ public abstract class AbstractKotlinCodegen extends DefaultCodegen implements Co
             return modelName;
         }
 
-        return titleCase(modifiedName);
+        schemaKeyToModelNameCache.put(origName, titleCase(modifiedName));
+        return schemaKeyToModelNameCache.get(origName);
     }
 
     /**
-- 
GitLab