From 78585ecc6511788af02f6f0a1f1a11edc48c34a4 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Mon, 29 Jul 2024 17:19:02 +0200 Subject: [PATCH 1/9] fix usage --- .../com/algolia/codegen/cts/tests/ParametersWithDataType.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java b/generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java index 03d4a1a5b4c..4645e63af99 100644 --- a/generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java +++ b/generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java @@ -329,6 +329,8 @@ private void handleModel( return; } + System.out.println(param); + Map vars = (Map) param; List> values = new ArrayList<>(); List> additionalPropertyValues = new ArrayList<>(); From 0d906f05d6c8db91b78e23aac0e5190827e1cd60 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Mon, 29 Jul 2024 17:39:25 +0200 Subject: [PATCH 2/9] remove log --- .../com/algolia/codegen/cts/tests/ParametersWithDataType.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java b/generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java index 4645e63af99..03d4a1a5b4c 100644 --- a/generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java +++ b/generators/src/main/java/com/algolia/codegen/cts/tests/ParametersWithDataType.java @@ -329,8 +329,6 @@ private void handleModel( return; } - System.out.println(param); - Map vars = (Map) param; List> values = new ArrayList<>(); List> additionalPropertyValues = new ArrayList<>(); From 1966c08e913c682c84ed338f68ff7fcaa5cc334e Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Mon, 29 Jul 2024 19:06:50 +0200 Subject: [PATCH 3/9] feat(clients): delete unused models --- .../algolia/codegen/AlgoliaJavaGenerator.java | 2 +- .../codegen/utils/GenericPropagator.java | 8 +- .../codegen/utils/OrphanDestroyer.java | 136 ++++++++++++++++++ 3 files changed, 141 insertions(+), 5 deletions(-) create mode 100644 generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java index becdb89dd50..7ba337cb671 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java @@ -2,7 +2,6 @@ import com.algolia.codegen.exceptions.*; import com.algolia.codegen.utils.*; -import com.algolia.codegen.utils.OneOf; import com.google.common.collect.ImmutableMap.Builder; import com.samskivert.mustache.Mustache; import com.samskivert.mustache.Mustache.Lambda; @@ -98,6 +97,7 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List modelsMap, b } } + public static void propagateGenericsToModels(Map modelsMap) { + propagateGenericsToModels(modelsMap, false); + } + /** Mark operations with a generic return type with x-is-generic */ public static void propagateGenericsToOperations(OperationsMap operations, List allModels) { Map models = convertToMap(allModels); @@ -207,8 +211,4 @@ public static void propagateGenericsToOperations(OperationsMap operations, List< } } } - - public static void propagateGenericsToModels(Map modelsMap) { - propagateGenericsToModels(modelsMap, false); - } } diff --git a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java new file mode 100644 index 00000000000..027b0be9c47 --- /dev/null +++ b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java @@ -0,0 +1,136 @@ +package com.algolia.codegen.utils; + +import java.io.File; +import java.util.*; +import org.openapitools.codegen.*; +import org.openapitools.codegen.model.ModelMap; +import org.openapitools.codegen.model.OperationsMap; + +public class OrphanDestroyer { + + private static Set primitiveModels = new HashSet<>(Arrays.asList("object", "array", "string", "boolean", "integer")); + private static Set helperModels = new HashSet<>( + Arrays.asList("apiKeyOperation", "securedApiKeyRestrictions", "replaceAllObjectsResponse") + ); + + private Map models; + private HashSet visitedModels; + + private OrphanDestroyer(Map models) { + this.visitedModels = new HashSet<>(); + this.models = models; + } + + private String stripType(String type) { + if (type.startsWith("List<")) { + return stripType(type.substring(5, type.length() - 1)).trim(); + } else if (type.startsWith("Map<")) { + return stripType(type.substring(4, type.length() - 1).split(",", 2)[1].trim()); + } + return type.trim(); + } + + private CodegenModel getModel(String name) { + // openapi generator returns some weird error when looking for primitive type, so we filter them + // by hand + if (primitiveModels.contains(name)) { + return null; + } + + return models.get(stripType(name)); + } + + private CodegenModel propertyToModel(CodegenProperty prop) { + return prop == null ? null : getModel(prop.openApiType); + } + + private void exploreProperties(CodegenModel model, List properties) { + for (CodegenProperty property : properties) { + CodegenModel propModel = propertyToModel(property); + if (propModel != null && !visitedModels.contains(propModel.name)) { + System.out.println("Visiting property: " + propModel.name + " from " + model.name); + visitedModels.add(propModel.name); + visitModelRecursive(propModel); + } + CodegenModel itemsModel = propertyToModel(property.mostInnerItems); + if (itemsModel != null && !visitedModels.contains(itemsModel.name)) { + System.out.println("Visiting item: " + itemsModel.name + " from " + model.name); + visitedModels.add(itemsModel.name); + visitModelRecursive(itemsModel); + } + } + } + + private void visitModelRecursive(CodegenModel model) { + exploreProperties(model, model.getVars()); + if (model.getComposedSchemas() != null && model.getComposedSchemas().getOneOf() != null) { + exploreProperties(model, model.getComposedSchemas().getOneOf()); + } + } + + private static Map convertToMap(List models) { + Map modelsMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (ModelMap modelMap : models) { + CodegenModel model = modelMap.getModel(); + modelsMap.put(model.name, model); + } + return modelsMap; + } + + private void exploreGraph(OperationsMap operations) { + for (CodegenModel model : models.values()) { + visitModelRecursive(model); + } + + for (CodegenOperation ope : operations.getOperations().getOperation()) { + if (ope.returnType != null) { + CodegenModel returnType = getModel(ope.returnType); + if (returnType != null) { + visitedModels.add(returnType.name); + } + } + for (CodegenParameter param : ope.allParams) { + CodegenModel paramType = getModel(param.dataType); + if (paramType != null) { + visitedModels.add(paramType.name); + } + CodegenModel itemsModel = propertyToModel(param.mostInnerItems); + if (itemsModel != null) { + visitedModels.add(itemsModel.name); + } + } + } + } + + /** remove all the unused models, most likely the sub models of allOf */ + public static void removeOrphans(CodegenConfig config, OperationsMap operations, List allModels) { + // visit all the models that are accessible from: + // - the properties of a model (needs recursive search) + // - the return type of an operation + // - the parameters of an operation + + OrphanDestroyer orphanDestroyer = new OrphanDestroyer(convertToMap(allModels)); + + Helpers.prettyPrint("Models: " + orphanDestroyer.models.keySet()); + + orphanDestroyer.exploreGraph(operations); + + List toRemove = new ArrayList<>(); + for (String modelName : orphanDestroyer.models.keySet()) { + if (!helperModels.contains(modelName) && !orphanDestroyer.visitedModels.contains(modelName)) { + toRemove.add(modelName); + } + } + + String templateName = config.modelTemplateFiles().keySet().iterator().next(); + + for (String modelName : toRemove) { + String filename = config.modelFilename(templateName, modelName); + File file = new File(filename); + if (file.exists()) { + file.delete(); + System.out.println("Removed orphan model: " + modelName); + } + } + } +} From 9a443f63579d8a80599cf3b5a4c401a78699575f Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Mon, 29 Jul 2024 22:22:48 +0200 Subject: [PATCH 4/9] add to all --- .../codegen/AlgoliaCSharpGenerator.java | 2 +- .../algolia/codegen/AlgoliaGoGenerator.java | 2 +- .../algolia/codegen/AlgoliaJavaGenerator.java | 2 +- .../codegen/AlgoliaKotlinGenerator.java | 2 +- .../algolia/codegen/AlgoliaPhpGenerator.java | 1 + .../codegen/AlgoliaPythonGenerator.java | 1 + .../algolia/codegen/AlgoliaRubyGenerator.java | 1 + .../codegen/AlgoliaScalaGenerator.java | 1 + .../codegen/AlgoliaSwiftGenerator.java | 5 ++- .../codegen/utils/GenericPropagator.java | 2 -- .../codegen/utils/OrphanDestroyer.java | 31 +++++++------------ 11 files changed, 22 insertions(+), 28 deletions(-) diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java index 2fed33ae9b3..c58cde28c5a 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java @@ -2,7 +2,6 @@ import com.algolia.codegen.exceptions.*; import com.algolia.codegen.utils.*; -import com.algolia.codegen.utils.OneOf; import com.samskivert.mustache.Mustache; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; @@ -142,6 +141,7 @@ public void processOpenAPI(OpenAPI openAPI) { @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java index 6673768ca01..2fd5a40508f 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java @@ -3,7 +3,6 @@ import com.algolia.codegen.exceptions.*; import com.algolia.codegen.lambda.ScreamingSnakeCaseLambda; import com.algolia.codegen.utils.*; -import com.algolia.codegen.utils.OneOf; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.samskivert.mustache.Mustache; @@ -132,6 +131,7 @@ public Map postProcessAllModels(Map objs) @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models, true); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java index 7ba337cb671..a11c810ef41 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java @@ -95,9 +95,9 @@ public Map postProcessAllModels(Map objs) @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); - OrphanDestroyer.removeOrphans(this, operations, models); return operations; } diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaKotlinGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaKotlinGenerator.java index 17547ef08c4..9d1db3f2432 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaKotlinGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaKotlinGenerator.java @@ -1,7 +1,6 @@ package com.algolia.codegen; import com.algolia.codegen.utils.*; -import com.algolia.codegen.utils.OneOf; import com.samskivert.mustache.Mustache; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; @@ -188,6 +187,7 @@ private static void jsonParent(Map models) { @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java index 8646d664967..87fec145157 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java @@ -77,6 +77,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); return operations; } diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java index b5b87943318..62c26528e70 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java @@ -120,6 +120,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); List> imports = operations.getImports(); diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaRubyGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaRubyGenerator.java index a154828b5e2..065a27634ef 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaRubyGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaRubyGenerator.java @@ -82,6 +82,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); return operations; } diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java index a434821b162..b1114c8cdee 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java @@ -140,6 +140,7 @@ public Map postProcessAllModels(Map objs) @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java index dc9203af2f4..16dc6e78b11 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java @@ -4,9 +4,7 @@ import static org.openapitools.codegen.utils.StringUtils.camelize; import com.algolia.codegen.exceptions.*; -import com.algolia.codegen.utils.GenericPropagator; -import com.algolia.codegen.utils.Helpers; -import com.algolia.codegen.utils.OneOf; +import com.algolia.codegen.utils.*; import com.samskivert.mustache.Mustache; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.Operation; @@ -288,6 +286,7 @@ public void processOpenAPI(OpenAPI openAPI) { @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); + OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/utils/GenericPropagator.java b/generators/src/main/java/com/algolia/codegen/utils/GenericPropagator.java index 35cf923e59d..b2cfa403023 100644 --- a/generators/src/main/java/com/algolia/codegen/utils/GenericPropagator.java +++ b/generators/src/main/java/com/algolia/codegen/utils/GenericPropagator.java @@ -9,8 +9,6 @@ public class GenericPropagator { - public String language; - private static Set primitiveModels = new HashSet<>(Arrays.asList("object", "array", "string", "boolean", "integer")); // Only static use of this class diff --git a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java index 027b0be9c47..54adccdd74b 100644 --- a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java +++ b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java @@ -9,9 +9,6 @@ public class OrphanDestroyer { private static Set primitiveModels = new HashSet<>(Arrays.asList("object", "array", "string", "boolean", "integer")); - private static Set helperModels = new HashSet<>( - Arrays.asList("apiKeyOperation", "securedApiKeyRestrictions", "replaceAllObjectsResponse") - ); private Map models; private HashSet visitedModels; @@ -21,15 +18,6 @@ private OrphanDestroyer(Map models) { this.models = models; } - private String stripType(String type) { - if (type.startsWith("List<")) { - return stripType(type.substring(5, type.length() - 1)).trim(); - } else if (type.startsWith("Map<")) { - return stripType(type.substring(4, type.length() - 1).split(",", 2)[1].trim()); - } - return type.trim(); - } - private CodegenModel getModel(String name) { // openapi generator returns some weird error when looking for primitive type, so we filter them // by hand @@ -37,7 +25,7 @@ private CodegenModel getModel(String name) { return null; } - return models.get(stripType(name)); + return models.get(name); } private CodegenModel propertyToModel(CodegenProperty prop) { @@ -84,13 +72,13 @@ private void exploreGraph(OperationsMap operations) { for (CodegenOperation ope : operations.getOperations().getOperation()) { if (ope.returnType != null) { - CodegenModel returnType = getModel(ope.returnType); + CodegenModel returnType = getModel(ope.returnBaseType); if (returnType != null) { visitedModels.add(returnType.name); } } for (CodegenParameter param : ope.allParams) { - CodegenModel paramType = getModel(param.dataType); + CodegenModel paramType = getModel(param.baseType != null ? param.baseType : param.dataType); if (paramType != null) { visitedModels.add(paramType.name); } @@ -103,7 +91,7 @@ private void exploreGraph(OperationsMap operations) { } /** remove all the unused models, most likely the sub models of allOf */ - public static void removeOrphans(CodegenConfig config, OperationsMap operations, List allModels) { + public static void removeOrphans(CodegenConfig config, OperationsMap operations, List allModels, boolean keepError) { // visit all the models that are accessible from: // - the properties of a model (needs recursive search) // - the return type of an operation @@ -111,13 +99,14 @@ public static void removeOrphans(CodegenConfig config, OperationsMap operations, OrphanDestroyer orphanDestroyer = new OrphanDestroyer(convertToMap(allModels)); - Helpers.prettyPrint("Models: " + orphanDestroyer.models.keySet()); - orphanDestroyer.exploreGraph(operations); List toRemove = new ArrayList<>(); for (String modelName : orphanDestroyer.models.keySet()) { - if (!helperModels.contains(modelName) && !orphanDestroyer.visitedModels.contains(modelName)) { + if (keepError && modelName.equals("ErrorBase")) { + continue; + } + if (!orphanDestroyer.visitedModels.contains(modelName)) { toRemove.add(modelName); } } @@ -133,4 +122,8 @@ public static void removeOrphans(CodegenConfig config, OperationsMap operations, } } } + + public static void removeOrphans(CodegenConfig config, OperationsMap operations, List allModels) { + removeOrphans(config, operations, allModels, false); + } } From bc76603d216efb197c4d43652522e2e179472757 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Tue, 30 Jul 2024 00:33:49 +0200 Subject: [PATCH 5/9] fix scala and csharp --- .../main/java/com/algolia/codegen/AlgoliaScalaGenerator.java | 2 +- .../main/java/com/algolia/codegen/utils/OrphanDestroyer.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java index b1114c8cdee..90ab06a19d3 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java @@ -140,7 +140,7 @@ public Map postProcessAllModels(Map objs) @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models); + OrphanDestroyer.removeOrphans(this, operations, models, true); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java index 54adccdd74b..fcd1fd767c3 100644 --- a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java +++ b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java @@ -19,6 +19,7 @@ private OrphanDestroyer(Map models) { } private CodegenModel getModel(String name) { + name = name.replace("?", ""); // openapi generator returns some weird error when looking for primitive type, so we filter them // by hand if (primitiveModels.contains(name)) { From 6f1bd5d2c129da7b63779e05b2c92e570b4b5edf Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Tue, 30 Jul 2024 08:00:24 +0200 Subject: [PATCH 6/9] swity nifty --- .../codegen/utils/OrphanDestroyer.java | 20 ++++++++++++------- templates/scala/api.mustache | 3 --- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java index fcd1fd767c3..29a23a748e4 100644 --- a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java +++ b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java @@ -11,10 +11,10 @@ public class OrphanDestroyer { private static Set primitiveModels = new HashSet<>(Arrays.asList("object", "array", "string", "boolean", "integer")); private Map models; - private HashSet visitedModels; + private Set visitedModels; private OrphanDestroyer(Map models) { - this.visitedModels = new HashSet<>(); + this.visitedModels = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); this.models = models; } @@ -43,7 +43,12 @@ private void exploreProperties(CodegenModel model, List propert } CodegenModel itemsModel = propertyToModel(property.mostInnerItems); if (itemsModel != null && !visitedModels.contains(itemsModel.name)) { - System.out.println("Visiting item: " + itemsModel.name + " from " + model.name); + System.out.println( + "Visiting item: " + itemsModel.name + " from " + model.name + " original name " + property.mostInnerItems.openApiType + ); + // In csharp the real model name varies if its part of the modelMapping so we have to add + // both + visitedModels.add(property.mostInnerItems.openApiType); visitedModels.add(itemsModel.name); visitModelRecursive(itemsModel); } @@ -57,11 +62,12 @@ private void visitModelRecursive(CodegenModel model) { } } - private static Map convertToMap(List models) { + private static Map convertToMap(CodegenConfig config, List models) { Map modelsMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); for (ModelMap modelMap : models) { CodegenModel model = modelMap.getModel(); - modelsMap.put(model.name, model); + + modelsMap.put(config.toModelName(model.name), model); } return modelsMap; } @@ -98,8 +104,8 @@ public static void removeOrphans(CodegenConfig config, OperationsMap operations, // - the return type of an operation // - the parameters of an operation - OrphanDestroyer orphanDestroyer = new OrphanDestroyer(convertToMap(allModels)); - + OrphanDestroyer orphanDestroyer = new OrphanDestroyer(convertToMap(config, allModels)); + Helpers.prettyPrint(orphanDestroyer.models.keySet()); orphanDestroyer.exploreGraph(operations); List toRemove = new ArrayList<>(); diff --git a/templates/scala/api.mustache b/templates/scala/api.mustache index df462f7aa23..55560be04bc 100644 --- a/templates/scala/api.mustache +++ b/templates/scala/api.mustache @@ -3,9 +3,6 @@ */ package {{package}} -{{#imports}} -import {{import}} -{{/imports}} import {{modelPackage}}._ import algoliasearch.ApiClient import algoliasearch.api.{{classname}}.hosts From bb9073209fcb6a80de8a63b1f4f869cab388dfda Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Tue, 30 Jul 2024 08:45:40 +0200 Subject: [PATCH 7/9] i give up --- .../main/java/com/algolia/codegen/AlgoliaGoGenerator.java | 2 ++ .../java/com/algolia/codegen/AlgoliaScalaGenerator.java | 1 - .../java/com/algolia/codegen/AlgoliaSwiftGenerator.java | 1 - .../java/com/algolia/codegen/utils/OrphanDestroyer.java | 6 +----- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java index 2fd5a40508f..670c0a267b4 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java @@ -43,6 +43,8 @@ public void processOpts() { typeMapping.put("object", "map[string]any"); typeMapping.put("AnyType", "any"); + modelNameMapping.put("range", "modelRange"); + apiTestTemplateFiles.clear(); modelTestTemplateFiles.clear(); apiDocTemplateFiles.clear(); diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java index 90ab06a19d3..a434821b162 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaScalaGenerator.java @@ -140,7 +140,6 @@ public Map postProcessAllModels(Map objs) @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models, true); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java index 16dc6e78b11..fe2dd01b3ff 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaSwiftGenerator.java @@ -286,7 +286,6 @@ public void processOpenAPI(OpenAPI openAPI) { @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java index 29a23a748e4..1e55d8b826f 100644 --- a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java +++ b/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java @@ -37,15 +37,12 @@ private void exploreProperties(CodegenModel model, List propert for (CodegenProperty property : properties) { CodegenModel propModel = propertyToModel(property); if (propModel != null && !visitedModels.contains(propModel.name)) { - System.out.println("Visiting property: " + propModel.name + " from " + model.name); + visitedModels.add(property.openApiType); visitedModels.add(propModel.name); visitModelRecursive(propModel); } CodegenModel itemsModel = propertyToModel(property.mostInnerItems); if (itemsModel != null && !visitedModels.contains(itemsModel.name)) { - System.out.println( - "Visiting item: " + itemsModel.name + " from " + model.name + " original name " + property.mostInnerItems.openApiType - ); // In csharp the real model name varies if its part of the modelMapping so we have to add // both visitedModels.add(property.mostInnerItems.openApiType); @@ -125,7 +122,6 @@ public static void removeOrphans(CodegenConfig config, OperationsMap operations, File file = new File(filename); if (file.exists()) { file.delete(); - System.out.println("Removed orphan model: " + modelName); } } } From 8985378fc0897f8e2673e0172b971817acc938e9 Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Tue, 30 Jul 2024 11:02:04 +0200 Subject: [PATCH 8/9] friendlier name --- .../algolia/codegen/AlgoliaCSharpGenerator.java | 2 +- .../com/algolia/codegen/AlgoliaGoGenerator.java | 2 +- .../com/algolia/codegen/AlgoliaJavaGenerator.java | 2 +- .../algolia/codegen/AlgoliaKotlinGenerator.java | 2 +- .../com/algolia/codegen/AlgoliaPhpGenerator.java | 2 +- .../algolia/codegen/AlgoliaPythonGenerator.java | 2 +- .../com/algolia/codegen/AlgoliaRubyGenerator.java | 2 +- .../{OrphanDestroyer.java => ModelPruner.java} | 14 +++++++------- templates/scala/api.mustache | 4 +++- 9 files changed, 17 insertions(+), 15 deletions(-) rename generators/src/main/java/com/algolia/codegen/utils/{OrphanDestroyer.java => ModelPruner.java} (91%) diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java index c58cde28c5a..06cfdb53e6e 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaCSharpGenerator.java @@ -141,7 +141,7 @@ public void processOpenAPI(OpenAPI openAPI) { @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models); + ModelPruner.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java index 670c0a267b4..aad528b4876 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaGoGenerator.java @@ -133,7 +133,7 @@ public Map postProcessAllModels(Map objs) @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models, true); + ModelPruner.removeOrphans(this, operations, models, true); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java index a11c810ef41..17cdd32fa43 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavaGenerator.java @@ -95,7 +95,7 @@ public Map postProcessAllModels(Map objs) @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models); + ModelPruner.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaKotlinGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaKotlinGenerator.java index 9d1db3f2432..74fd6e90c05 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaKotlinGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaKotlinGenerator.java @@ -187,7 +187,7 @@ private static void jsonParent(Map models) { @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models); + ModelPruner.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); GenericPropagator.propagateGenericsToOperations(operations, models); return operations; diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java index 87fec145157..5acde700d58 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaPhpGenerator.java @@ -77,7 +77,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models); + ModelPruner.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); return operations; } diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java index 62c26528e70..1cdae971169 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaPythonGenerator.java @@ -120,7 +120,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models); + ModelPruner.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); List> imports = operations.getImports(); diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaRubyGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaRubyGenerator.java index 065a27634ef..f8fa44178c4 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaRubyGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaRubyGenerator.java @@ -82,7 +82,7 @@ public CodegenOperation fromOperation(String path, String httpMethod, Operation @Override public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List models) { OperationsMap operations = super.postProcessOperationsWithModels(objs, models); - OrphanDestroyer.removeOrphans(this, operations, models); + ModelPruner.removeOrphans(this, operations, models); Helpers.removeHelpers(operations); return operations; } diff --git a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java b/generators/src/main/java/com/algolia/codegen/utils/ModelPruner.java similarity index 91% rename from generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java rename to generators/src/main/java/com/algolia/codegen/utils/ModelPruner.java index 1e55d8b826f..4317bfc1f23 100644 --- a/generators/src/main/java/com/algolia/codegen/utils/OrphanDestroyer.java +++ b/generators/src/main/java/com/algolia/codegen/utils/ModelPruner.java @@ -6,14 +6,14 @@ import org.openapitools.codegen.model.ModelMap; import org.openapitools.codegen.model.OperationsMap; -public class OrphanDestroyer { +public class ModelPruner { private static Set primitiveModels = new HashSet<>(Arrays.asList("object", "array", "string", "boolean", "integer")); private Map models; private Set visitedModels; - private OrphanDestroyer(Map models) { + private ModelPruner(Map models) { this.visitedModels = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); this.models = models; } @@ -101,16 +101,16 @@ public static void removeOrphans(CodegenConfig config, OperationsMap operations, // - the return type of an operation // - the parameters of an operation - OrphanDestroyer orphanDestroyer = new OrphanDestroyer(convertToMap(config, allModels)); - Helpers.prettyPrint(orphanDestroyer.models.keySet()); - orphanDestroyer.exploreGraph(operations); + ModelPruner modelPruner = new ModelPruner(convertToMap(config, allModels)); + Helpers.prettyPrint(modelPruner.models.keySet()); + modelPruner.exploreGraph(operations); List toRemove = new ArrayList<>(); - for (String modelName : orphanDestroyer.models.keySet()) { + for (String modelName : modelPruner.models.keySet()) { if (keepError && modelName.equals("ErrorBase")) { continue; } - if (!orphanDestroyer.visitedModels.contains(modelName)) { + if (!modelPruner.visitedModels.contains(modelName)) { toRemove.add(modelName); } } diff --git a/templates/scala/api.mustache b/templates/scala/api.mustache index 55560be04bc..f437266934a 100644 --- a/templates/scala/api.mustache +++ b/templates/scala/api.mustache @@ -2,7 +2,9 @@ * {{{generationBanner}}} */ package {{package}} - +{{#imports}} +import {{import}} +{{/imports}} import {{modelPackage}}._ import algoliasearch.ApiClient import algoliasearch.api.{{classname}}.hosts From da68fab22695665e6958fbf59a298ab762d4b8fe Mon Sep 17 00:00:00 2001 From: Pierre Millot Date: Tue, 30 Jul 2024 11:04:35 +0200 Subject: [PATCH 9/9] revert scala --- templates/scala/api.mustache | 1 + 1 file changed, 1 insertion(+) diff --git a/templates/scala/api.mustache b/templates/scala/api.mustache index f437266934a..df462f7aa23 100644 --- a/templates/scala/api.mustache +++ b/templates/scala/api.mustache @@ -2,6 +2,7 @@ * {{{generationBanner}}} */ package {{package}} + {{#imports}} import {{import}} {{/imports}}