diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ConfigHelp.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ConfigHelp.java index 57734c781d4..07bf359e993 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ConfigHelp.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ConfigHelp.java @@ -74,6 +74,9 @@ public class ConfigHelp extends OpenApiGeneratorCommand { @Option(name = {"--inline-schema-name-mappings"}, title = "inline schema name mappings", description = "displays the inline schema name mappings (none)") private Boolean inlineSchemaNameMappings; + @Option(name = {"--inline-schema-name-defaults"}, title = "inline schema name defaults", description = "default values used when naming inline schema name") + private Boolean inlineSchemaNameDefaults; + @Option(name = {"--metadata"}, title = "metadata", description = "displays the generator metadata like the help txt for the generator and generator type etc") private Boolean metadata; @@ -464,6 +467,18 @@ public class ConfigHelp extends OpenApiGeneratorCommand { sb.append(newline); } + if (Boolean.TRUE.equals(inlineSchemaNameDefaults)) { + sb.append(newline).append("INLINE SCHEMA NAME DEFAULTS").append(newline).append(newline); + Map map = config.inlineSchemaNameDefault() + .entrySet() + .stream() + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> { + throw new IllegalStateException(String.format(Locale.ROOT, "Duplicated options! %s and %s", a, b)); + }, TreeMap::new)); + writePlainTextFromMap(sb, map, optIndent, optNestedIndent, "Inline scheme naming convention", "Defaulted to"); + sb.append(newline); + } + if (Boolean.TRUE.equals(instantiationTypes)) { sb.append(newline).append("INSTANTIATION TYPES").append(newline).append(newline); Map map = config.instantiationTypes() diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java index 1a7495cf26f..967fd6192dd 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java @@ -166,6 +166,13 @@ public class Generate extends OpenApiGeneratorCommand { + " You can also have multiple occurrences of this option.") private List inlineSchemaNameMappings = new ArrayList<>(); + @Option( + name = {"--inline-schema-name-defaults"}, + title = "inline schema name defaults", + description = "specifies the default values used when naming inline schema as such array items in the format of arrayItemSuffix=_inner,mapItemSuffix=_value. " + + " ONLY arrayItemSuffix, mapItemSuffix at the moment.") + private List inlineSchemaNameDefaults = new ArrayList<>(); + @Option( name = {"--server-variables"}, title = "server variables", @@ -431,6 +438,7 @@ public class Generate extends OpenApiGeneratorCommand { applyInstantiationTypesKvpList(instantiationTypes, configurator); applyImportMappingsKvpList(importMappings, configurator); applyInlineSchemaNameMappingsKvpList(inlineSchemaNameMappings, configurator); + applyInlineSchemaNameDefaultsKvpList(inlineSchemaNameDefaults, configurator); applyTypeMappingsKvpList(typeMappings, configurator); applyAdditionalPropertiesKvpList(additionalProperties, configurator); applyLanguageSpecificPrimitivesCsvList(languageSpecificPrimitives, configurator); diff --git a/modules/openapi-generator-core/src/main/java/org/openapitools/codegen/config/GeneratorSettings.java b/modules/openapi-generator-core/src/main/java/org/openapitools/codegen/config/GeneratorSettings.java index 0a12434b47b..265fd2f34e1 100644 --- a/modules/openapi-generator-core/src/main/java/org/openapitools/codegen/config/GeneratorSettings.java +++ b/modules/openapi-generator-core/src/main/java/org/openapitools/codegen/config/GeneratorSettings.java @@ -51,6 +51,7 @@ public final class GeneratorSettings implements Serializable { private final Map additionalProperties; private final Map importMappings; private final Map inlineSchemaNameMappings; + private final Map inlineSchemaNameDefaults; private final Set languageSpecificPrimitives; private final Map reservedWordsMappings; private final Map serverVariables; @@ -244,6 +245,15 @@ public final class GeneratorSettings implements Serializable { return inlineSchemaNameMappings; } + /** + * Gets inline schema name defaults between an inline schema naming convention and the default values. + * + * @return the inline schema name defaults + */ + public Map getInlineSchemaNameDefaults() { + return inlineSchemaNameDefaults; + } + /** * Gets language specific primitives. These are in addition to the "base" primitives defined in a generator. *

@@ -360,6 +370,7 @@ public final class GeneratorSettings implements Serializable { typeMappings = Collections.unmodifiableMap(builder.typeMappings); importMappings = Collections.unmodifiableMap(builder.importMappings); inlineSchemaNameMappings = Collections.unmodifiableMap(builder.inlineSchemaNameMappings); + inlineSchemaNameDefaults = Collections.unmodifiableMap(builder.inlineSchemaNameDefaults); languageSpecificPrimitives = Collections.unmodifiableSet(builder.languageSpecificPrimitives); reservedWordsMappings = Collections.unmodifiableMap(builder.reservedWordsMappings); serverVariables = Collections.unmodifiableMap(builder.serverVariables); @@ -431,6 +442,7 @@ public final class GeneratorSettings implements Serializable { additionalProperties = Collections.unmodifiableMap(new HashMap<>(0)); importMappings = Collections.unmodifiableMap(new HashMap<>(0)); inlineSchemaNameMappings = Collections.unmodifiableMap(new HashMap<>(0)); + inlineSchemaNameDefaults = Collections.unmodifiableMap(new HashMap<>(0)); languageSpecificPrimitives = Collections.unmodifiableSet(new HashSet<>(0)); reservedWordsMappings = Collections.unmodifiableMap(new HashMap<>(0)); serverVariables = Collections.unmodifiableMap(new HashMap<>(0)); @@ -485,6 +497,9 @@ public final class GeneratorSettings implements Serializable { if (copy.getInlineSchemaNameMappings() != null) { builder.inlineSchemaNameMappings.putAll(copy.getInlineSchemaNameMappings()); } + if (copy.getInlineSchemaNameDefaults() != null) { + builder.inlineSchemaNameDefaults.putAll(copy.getInlineSchemaNameDefaults()); + } if (copy.getLanguageSpecificPrimitives() != null) { builder.languageSpecificPrimitives.addAll(copy.getLanguageSpecificPrimitives()); } @@ -525,6 +540,7 @@ public final class GeneratorSettings implements Serializable { private Map additionalProperties; private Map importMappings; private Map inlineSchemaNameMappings; + private Map inlineSchemaNameDefaults; private Set languageSpecificPrimitives; private Map reservedWordsMappings; private Map serverVariables; @@ -543,6 +559,7 @@ public final class GeneratorSettings implements Serializable { additionalProperties = new HashMap<>(); importMappings = new HashMap<>(); inlineSchemaNameMappings = new HashMap<>(); + inlineSchemaNameDefaults = new HashMap<>(); languageSpecificPrimitives = new HashSet<>(); reservedWordsMappings = new HashMap<>(); serverVariables = new HashMap<>(); @@ -785,6 +802,32 @@ public final class GeneratorSettings implements Serializable { return this; } + /** + * Sets the {@code inlineSchemaNameDefaults} and returns a reference to this Builder so that the methods can be chained together. + * + * @param inlineSchemaNameDefaults the {@code inlineSchemaNameDefaults} to set + * @return a reference to this Builder + */ + public Builder withInlineSchemaNameDefaults(Map inlineSchemaNameDefaults) { + this.inlineSchemaNameDefaults = inlineSchemaNameDefaults; + return this; + } + + /** + * Sets a single {@code inlineSchemaNameDefaults} and returns a reference to this Builder so that the methods can be chained together. + * + * @param key Default naming convention + * @param value The value + * @return a reference to this Builder + */ + public Builder withInlineSchemaNameDefault(String key, String value) { + if (this.inlineSchemaNameDefaults == null) { + this.inlineSchemaNameDefaults = new HashMap<>(); + } + this.inlineSchemaNameDefaults.put(key, value); + return this; + } + /** * Sets the {@code inlineSchemaNameMappings} and returns a reference to this Builder so that the methods can be chained together. * @@ -799,8 +842,8 @@ public final class GeneratorSettings implements Serializable { /** * Sets a single {@code inlineSchemaNameMappings} and returns a reference to this Builder so that the methods can be chained together. * - * @param key A key for some import mapping - * @param value The value of some import mapping + * @param key A key for the inline schema mapping + * @param value The value of inline schema mapping * @return a reference to this Builder */ public Builder withInlineSchemaNameMapping(String key, String value) { @@ -997,6 +1040,7 @@ public final class GeneratorSettings implements Serializable { Objects.equals(getAdditionalProperties(), that.getAdditionalProperties()) && Objects.equals(getImportMappings(), that.getImportMappings()) && Objects.equals(getInlineSchemaNameMappings(), that.getInlineSchemaNameMappings()) && + Objects.equals(getInlineSchemaNameDefaults(), that.getInlineSchemaNameDefaults()) && Objects.equals(getLanguageSpecificPrimitives(), that.getLanguageSpecificPrimitives()) && Objects.equals(getReservedWordsMappings(), that.getReservedWordsMappings()) && Objects.equals(getGitHost(), that.getGitHost()) && @@ -1026,6 +1070,7 @@ public final class GeneratorSettings implements Serializable { getAdditionalProperties(), getImportMappings(), getInlineSchemaNameMappings(), + getInlineSchemaNameDefaults(), getLanguageSpecificPrimitives(), getReservedWordsMappings(), getGitHost(), diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt index 210fd17678c..c6410ced6e5 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt @@ -114,6 +114,7 @@ class OpenApiGeneratorPlugin : Plugin { languageSpecificPrimitives.set(generate.languageSpecificPrimitives) importMappings.set(generate.importMappings) inlineSchemaNameMappings.set(generate.inlineSchemaNameMappings) + inlineSchemaNameDefaults.set(generate.inlineSchemaNameDefaults) invokerPackage.set(generate.invokerPackage) groupId.set(generate.groupId) id.set(generate.id) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt index 557f6386dc0..6ea8608fd49 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt @@ -146,6 +146,11 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { */ val inlineSchemaNameMappings = project.objects.mapProperty() + /** + * Specifies default values for inline schema naming convention + */ + val inlineSchemaNameDefaults = project.objects.mapProperty() + /** * Root package for generated code. */ diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt index 69cb92e4bd3..5ebec599e6e 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt @@ -226,6 +226,13 @@ open class GenerateTask : DefaultTask() { @Input val inlineSchemaNameMappings = project.objects.mapProperty() + /** + * Specifies default values for inline schema naming convention + */ + @Optional + @Input + val inlineSchemaNameDefaults = project.objects.mapProperty() + /** * Root package for generated code. */ @@ -691,6 +698,12 @@ open class GenerateTask : DefaultTask() { } } + if (inlineSchemaNameDefaults.isPresent) { + inlineSchemaNameDefaults.get().forEach { entry -> + configurator.addInlineSchemaNameDefault(entry.key, entry.value) + } + } + if (typeMappings.isPresent) { typeMappings.get().forEach { entry -> configurator.addTypeMapping(entry.key, entry.value) diff --git a/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java b/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java index abb3cfe5d42..56e39b8284c 100644 --- a/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java +++ b/modules/openapi-generator-maven-plugin/src/main/java/org/openapitools/codegen/plugin/CodeGenMojo.java @@ -304,6 +304,12 @@ public class CodeGenMojo extends AbstractMojo { @Parameter(name = "inlineSchemaNameMappings", property = "openapi.generator.maven.plugin.inlineSchemaNameMappings") private List inlineSchemaNameMappings; + /** + * A map of inline scheme naming convention and the value + */ + @Parameter(name = "inlineSchemaNameDefaults", property = "openapi.generator.maven.plugin.inlineSchemaNameDefaults") + private List inlineSchemaNameDefaults; + /** * A map of swagger spec types and the generated code types to use for them */ @@ -666,11 +672,17 @@ public class CodeGenMojo extends AbstractMojo { } // Retained for backwards-compatibility with configOptions -> inline-schema-name-mappings - if (importMappings == null && configOptions.containsKey("inline-schema-name-mappings")) { + if (inlineSchemaNameMappings == null && configOptions.containsKey("inline-schema-name-mappings")) { applyInlineSchemaNameMappingsKvp(configOptions.get("inline-schema-name-mappings").toString(), configurator); } + // Retained for backwards-compatibility with configOptions -> inline-schema-name-defaults + if (inlineSchemaNameDefaults == null && configOptions.containsKey("inline-schema-name-defaults")) { + applyInlineSchemaNameDefaultsKvp(configOptions.get("inline-schema-name-defaults").toString(), + configurator); + } + // Retained for backwards-compatibility with configOptions -> type-mappings if (typeMappings == null && configOptions.containsKey("type-mappings")) { applyTypeMappingsKvp(configOptions.get("type-mappings").toString(), configurator); @@ -714,6 +726,11 @@ public class CodeGenMojo extends AbstractMojo { applyInlineSchemaNameMappingsKvpList(inlineSchemaNameMappings, configurator); } + // Apply Inline Schema Name Defaults + if (inlineSchemaNameDefaults != null && (configOptions == null || !configOptions.containsKey("inline-schema-name-defaults"))) { + applyInlineSchemaNameDefaultsKvpList(inlineSchemaNameDefaults, configurator); + } + // Apply Type Mappings if (typeMappings != null && (configOptions == null || !configOptions.containsKey("type-mappings"))) { applyTypeMappingsKvpList(typeMappings, configurator); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java index 9894f49595c..970bbe5a2b5 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConfig.java @@ -143,6 +143,8 @@ public interface CodegenConfig { Map inlineSchemaNameMapping(); + Map inlineSchemaNameDefault(); + Map apiTemplateFiles(); Map modelTemplateFiles(); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java index e4b539e2711..e82ee5999cd 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultCodegen.java @@ -155,6 +155,8 @@ public class DefaultCodegen implements CodegenConfig { protected Map importMapping = new HashMap<>(); // a map to store the mappping between inline schema and the name provided by the user protected Map inlineSchemaNameMapping = new HashMap<>(); + // a map to store the inline schema naming conventions + protected Map inlineSchemaNameDefault = new HashMap<>(); protected String modelPackage = "", apiPackage = "", fileSuffix; protected String modelNamePrefix = "", modelNameSuffix = ""; protected String apiNamePrefix = "", apiNameSuffix = "Api"; @@ -1063,6 +1065,11 @@ public class DefaultCodegen implements CodegenConfig { return inlineSchemaNameMapping; } + @Override + public Map inlineSchemaNameDefault() { + return inlineSchemaNameDefault; + } + @Override public String testPackage() { return testPackage; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index c4adb5adc8f..65f99563cc1 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -875,6 +875,7 @@ public class DefaultGenerator implements Generator { if (config.getUseInlineModelResolver()) { InlineModelResolver inlineModelResolver = new InlineModelResolver(); inlineModelResolver.setInlineSchemaNameMapping(config.inlineSchemaNameMapping()); + inlineModelResolver.setInlineSchemaNameDefaults(config.inlineSchemaNameDefault()); inlineModelResolver.flatten(openAPI); } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java index 64820253058..31c024ee6d9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java @@ -42,6 +42,7 @@ public class InlineModelResolver { private Map addedModels = new HashMap<>(); private Map generatedSignature = new HashMap<>(); private Map inlineSchemaNameMapping = new HashMap<>(); + private Map inlineSchemaNameDefaults = new HashMap<>(); private Set inlineSchemaNameMappingValues = new HashSet<>(); public boolean resolveInlineEnums = false; @@ -60,11 +61,20 @@ public class InlineModelResolver { final Logger LOGGER = LoggerFactory.getLogger(InlineModelResolver.class); + public InlineModelResolver() { + this.inlineSchemaNameDefaults.put("arrayItemSuffix", "_inner"); + this.inlineSchemaNameDefaults.put("mapItemSuffix", "_value"); + } + public void setInlineSchemaNameMapping(Map inlineSchemaNameMapping) { this.inlineSchemaNameMapping = inlineSchemaNameMapping; this.inlineSchemaNameMappingValues = new HashSet<>(inlineSchemaNameMapping.values()); } + public void setInlineSchemaNameDefaults(Map inlineSchemaNameDefaults) { + this.inlineSchemaNameDefaults.putAll(inlineSchemaNameDefaults); + } + void flatten(OpenAPI openAPI) { this.openAPI = openAPI; @@ -230,7 +240,7 @@ public class InlineModelResolver { if (schema.getAdditionalProperties() != null) { if (schema.getAdditionalProperties() instanceof Schema) { Schema inner = (Schema) schema.getAdditionalProperties(); - String schemaName = resolveModelName(schema.getTitle(), modelPrefix + "_value"); + String schemaName = resolveModelName(schema.getTitle(), modelPrefix + this.inlineSchemaNameDefaults.get("mapItemSuffix")); // Recurse to create $refs for inner models gatherInlineModels(inner, schemaName); if (isModelNeeded(inner)) { @@ -265,7 +275,7 @@ public class InlineModelResolver { " items must be defined for array schemas:\n " + schema.toString()); return; } - String schemaName = resolveModelName(items.getTitle(), modelPrefix + "_inner"); + String schemaName = resolveModelName(items.getTitle(), modelPrefix + this.inlineSchemaNameDefaults.get("arrayItemSuffix")); // Recurse to create $refs for inner models gatherInlineModels(items, schemaName); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfigurator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfigurator.java index 2a11f785feb..374ee3116da 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfigurator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfigurator.java @@ -69,6 +69,7 @@ public class CodegenConfigurator { private Map additionalProperties = new HashMap<>(); private Map importMappings = new HashMap<>(); private Map inlineSchemaNameMappings = new HashMap<>(); + private Map inlineSchemaNameDefaults = new HashMap<>(); private Set languageSpecificPrimitives = new HashSet<>(); private Map reservedWordsMappings = new HashMap<>(); private Map serverVariables = new HashMap<>(); @@ -115,6 +116,9 @@ public class CodegenConfigurator { if(generatorSettings.getInlineSchemaNameMappings() != null) { configurator.inlineSchemaNameMappings.putAll(generatorSettings.getInlineSchemaNameMappings()); } + if(generatorSettings.getInlineSchemaNameDefaults() != null) { + configurator.inlineSchemaNameDefaults.putAll(generatorSettings.getInlineSchemaNameDefaults()); + } if(generatorSettings.getLanguageSpecificPrimitives() != null) { configurator.languageSpecificPrimitives.addAll(generatorSettings.getLanguageSpecificPrimitives()); } @@ -190,6 +194,12 @@ public class CodegenConfigurator { return this; } + public CodegenConfigurator addInlineSchemaNameDefault(String key, String value) { + this.inlineSchemaNameDefaults.put(key, value); + generatorSettingsBuilder.withInlineSchemaNameDefault(key, value); + return this; + } + public CodegenConfigurator addInstantiationType(String key, String value) { this.instantiationTypes.put(key, value); generatorSettingsBuilder.withInstantiationType(key, value); @@ -350,6 +360,12 @@ public class CodegenConfigurator { return this; } + public CodegenConfigurator setInlineSchemaNameDefaults(Map inlineSchemaNameDefaults) { + this.inlineSchemaNameDefaults = inlineSchemaNameDefaults; + generatorSettingsBuilder.withInlineSchemaNameDefaults(inlineSchemaNameDefaults); + return this; + } + public CodegenConfigurator setInputSpec(String inputSpec) { this.inputSpec = inputSpec; workflowSettingsBuilder.withInputSpec(inputSpec); @@ -627,6 +643,7 @@ public class CodegenConfigurator { config.typeMapping().putAll(generatorSettings.getTypeMappings()); config.importMapping().putAll(generatorSettings.getImportMappings()); config.inlineSchemaNameMapping().putAll(generatorSettings.getInlineSchemaNameMappings()); + config.inlineSchemaNameDefault().putAll(generatorSettings.getInlineSchemaNameDefaults()); config.languageSpecificPrimitives().addAll(generatorSettings.getLanguageSpecificPrimitives()); config.reservedWordsMappings().putAll(generatorSettings.getReservedWordsMappings()); config.additionalProperties().putAll(generatorSettings.getAdditionalProperties()); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfiguratorUtils.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfiguratorUtils.java index db1333408cb..15a516a6558 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfiguratorUtils.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/config/CodegenConfiguratorUtils.java @@ -94,6 +94,19 @@ public final class CodegenConfiguratorUtils { } } + public static void applyInlineSchemaNameDefaultsKvpList(List inlineSchemaNameDefaults, CodegenConfigurator configurator) { + for (String propString : inlineSchemaNameDefaults) { + applyInlineSchemaNameDefaultsKvp(propString, configurator); + } + } + + public static void applyInlineSchemaNameDefaultsKvp(String inlineSchemaNameDefaults, CodegenConfigurator configurator) { + final Map map = createMapFromKeyValuePairs(inlineSchemaNameDefaults); + for (Map.Entry entry : map.entrySet()) { + configurator.addInlineSchemaNameDefault(entry.getKey().trim(), entry.getValue().trim()); + } + } + public static void applyTypeMappingsKvpList(List typeMappings, CodegenConfigurator configurator) { for (String propString : typeMappings) { applyTypeMappingsKvp(propString, configurator); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/InlineModelResolverTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/InlineModelResolverTest.java index 3ccca38b480..f3b2b4639e4 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/InlineModelResolverTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/InlineModelResolverTest.java @@ -1020,6 +1020,23 @@ public class InlineModelResolverTest { assertTrue(nothingNew.getProperties().get("arbitrary_request_body_array_property") instanceof ObjectSchema); } + @Test + public void testInlineSchemaNameDefault() { + OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/inline_model_resolver.yaml"); + InlineModelResolver resolver = new InlineModelResolver(); + Map inlineSchemaNameDefaults = new HashMap<>(); + inlineSchemaNameDefaults.put("arrayItemSuffix", "_something"); + resolver.setInlineSchemaNameDefaults(inlineSchemaNameDefaults); + resolver.flatten(openAPI); + + Schema schema = openAPI.getComponents().getSchemas().get("resolveInlineArrayRequestBody_request_something"); + assertTrue(schema.getProperties().get("street") instanceof StringSchema); + assertTrue(schema.getProperties().get("city") instanceof StringSchema); + + Schema nothingNew = openAPI.getComponents().getSchemas().get("arbitraryRequestBodyArrayProperty_request_something"); + assertTrue(nothingNew.getProperties().get("arbitrary_request_body_array_property") instanceof ObjectSchema); + } + @Test public void resolveInlineRequestBodyAllOf() { OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/inline_model_resolver.yaml"); @@ -1037,4 +1054,4 @@ public class InlineModelResolverTest { //RequestBody referencedRequestBody = ModelUtils.getReferencedRequestBody(openAPI, requestBodyReference); //assertTrue(referencedRequestBody.getRequired()); } -} \ No newline at end of file +}