forked from loafle/openapi-generator-original
Fix: "isAlias" of CodegenModel (#2758)
* Add test case to reproduce the issue https://github.com/OpenAPITools/openapi-generator/issues/2574 * Fix: an alias of "an alias of simple OAS type" has an incorrect property `isAlias: false` * Use ModelUtils instead of referring the "type" value directly * Delete an unnecessary condition * Tweak: the order of conditions * Fix wrong "isAlias" value on ComposedSchema
This commit is contained in:
parent
7882c614b9
commit
37556c2d96
@ -2047,7 +2047,8 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
if (schema.getExtensions() != null && !schema.getExtensions().isEmpty()) {
|
if (schema.getExtensions() != null && !schema.getExtensions().isEmpty()) {
|
||||||
m.getVendorExtensions().putAll(schema.getExtensions());
|
m.getVendorExtensions().putAll(schema.getExtensions());
|
||||||
}
|
}
|
||||||
m.isAlias = typeAliases.containsKey(name);
|
m.isAlias = (typeAliases.containsKey(name)
|
||||||
|
|| isAliasOfSimpleTypes(schema)); // check if the unaliased schema is an alias of simple OAS types
|
||||||
m.discriminator = createDiscriminator(name, schema);
|
m.discriminator = createDiscriminator(name, schema);
|
||||||
|
|
||||||
if (schema.getXml() != null) {
|
if (schema.getXml() != null) {
|
||||||
@ -4204,11 +4205,10 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
|
|
||||||
Map<String, String> aliases = new HashMap<>();
|
Map<String, String> aliases = new HashMap<>();
|
||||||
for (Map.Entry<String, Schema> entry : schemas.entrySet()) {
|
for (Map.Entry<String, Schema> entry : schemas.entrySet()) {
|
||||||
String oasName = entry.getKey();
|
|
||||||
Schema schema = entry.getValue();
|
Schema schema = entry.getValue();
|
||||||
|
if (isAliasOfSimpleTypes(schema)) {
|
||||||
|
String oasName = entry.getKey();
|
||||||
String schemaType = getPrimitiveType(schema);
|
String schemaType = getPrimitiveType(schema);
|
||||||
if (schemaType != null && !schemaType.equals("object") && !schemaType.equals("array")
|
|
||||||
&& schema.getEnum() == null && !ModelUtils.isMapSchema(schema)) {
|
|
||||||
aliases.put(oasName, schemaType);
|
aliases.put(oasName, schemaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4217,6 +4217,14 @@ public class DefaultCodegen implements CodegenConfig {
|
|||||||
return aliases;
|
return aliases;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Boolean isAliasOfSimpleTypes(Schema schema) {
|
||||||
|
return (!ModelUtils.isObjectSchema(schema)
|
||||||
|
&& !ModelUtils.isArraySchema(schema)
|
||||||
|
&& !ModelUtils.isMapSchema(schema)
|
||||||
|
&& !ModelUtils.isComposedSchema(schema)
|
||||||
|
&& schema.getEnum() == null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove characters not suitable for variable or method name from the input and camelize it
|
* Remove characters not suitable for variable or method name from the input and camelize it
|
||||||
*
|
*
|
||||||
|
@ -950,6 +950,28 @@ public class DefaultCodegenTest {
|
|||||||
Assert.assertTrue(cm.isDouble);
|
Assert.assertTrue(cm.isDouble);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAlias() {
|
||||||
|
final OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/type_alias.yaml");
|
||||||
|
new InlineModelResolver().flatten(openAPI);
|
||||||
|
|
||||||
|
final DefaultCodegen codegen = new DefaultCodegen();
|
||||||
|
codegen.setOpenAPI(openAPI);
|
||||||
|
|
||||||
|
CodegenModel typeAliasModel = codegen.fromModel(
|
||||||
|
"MyParameterTextField",
|
||||||
|
openAPI.getComponents().getSchemas().get("MyParameterTextField")
|
||||||
|
);
|
||||||
|
Assert.assertTrue(typeAliasModel.isAlias);
|
||||||
|
Assert.assertEquals("string", typeAliasModel.dataType);
|
||||||
|
|
||||||
|
CodegenModel composedModel = codegen.fromModel(
|
||||||
|
"ComposedModel",
|
||||||
|
openAPI.getComponents().getSchemas().get("ComposedModel")
|
||||||
|
);
|
||||||
|
Assert.assertFalse(composedModel.isAlias);
|
||||||
|
}
|
||||||
|
|
||||||
private void verifyPersonDiscriminator(CodegenDiscriminator discriminator) {
|
private void verifyPersonDiscriminator(CodegenDiscriminator discriminator) {
|
||||||
CodegenDiscriminator test = new CodegenDiscriminator();
|
CodegenDiscriminator test = new CodegenDiscriminator();
|
||||||
test.setPropertyName("DollarUnderscoretype");
|
test.setPropertyName("DollarUnderscoretype");
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
openapi: "3.0.1"
|
||||||
|
info:
|
||||||
|
version: 0.0.1
|
||||||
|
title: broken API
|
||||||
|
paths:
|
||||||
|
/test:
|
||||||
|
put:
|
||||||
|
summary: No description
|
||||||
|
requestBody:
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: '#/components/schemas/MyParameter'
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: "OK"
|
||||||
|
components:
|
||||||
|
schemas:
|
||||||
|
MyParameter:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
text_field:
|
||||||
|
$ref: '#/components/schemas/MyParameterTextField'
|
||||||
|
MyParameterTextField:
|
||||||
|
$ref: '#/components/schemas/TypeAliasToString'
|
||||||
|
TypeAliasToString:
|
||||||
|
type: string
|
||||||
|
minLength: 1
|
||||||
|
maxLength: 50
|
||||||
|
BaseModel:
|
||||||
|
type: object
|
||||||
|
discriminator: className
|
||||||
|
required:
|
||||||
|
- className
|
||||||
|
properties:
|
||||||
|
className:
|
||||||
|
type: string
|
||||||
|
ComposedModel:
|
||||||
|
allOf:
|
||||||
|
- $ref: '#/components/schemas/BaseModel'
|
||||||
|
- type: object
|
||||||
|
properties:
|
||||||
|
testProperty:
|
||||||
|
type: string
|
Loading…
x
Reference in New Issue
Block a user