From c08f14500e0e9e8b7d843d25a0850befede9675b Mon Sep 17 00:00:00 2001 From: Justin Black Date: Tue, 17 Nov 2020 21:08:55 -0800 Subject: [PATCH] Revert "Do not use cached properties for additionalProperties (#7955)" (#7971) This reverts commit 057647cf1ee0793f2987e89f8a588aa3db3ceb5d. --- .../openapitools/codegen/DefaultCodegen.java | 79 +++++++++---------- .../builds/default-v3.0/models/EnumArrays.ts | 33 ++++---- .../builds/default-v3.0/models/EnumTest.ts | 67 ++++++++-------- .../default-v3.0/models/InlineObject2.ts | 35 ++++---- .../builds/default-v3.0/models/MapTest.ts | 18 ++--- .../builds/default-v3.0/models/Order.ts | 20 ++--- .../builds/default-v3.0/models/Pet.ts | 20 ++--- .../builds/enum/models/InlineObject.ts | 37 ++++----- .../builds/enum/models/InlineResponse200.ts | 37 ++++----- 9 files changed, 174 insertions(+), 172 deletions(-) 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 2bb55e8dafe..a13db5121fb 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 @@ -2573,17 +2573,26 @@ public class DefaultCodegen implements CodegenConfig { } // process 'additionalProperties' - setAddProps(schema, m); - // additionalProperties == True means that empty object will be used - // per the openapi spec, if additionalProperties is omitted it is defaulted to empty object - // so if we do that, set isAdditionalPropertiesTrue to True - // if an explicit schema is passed in to additionalProperties, set isAdditionalPropertiesTrue to False - if (schema.getAdditionalProperties() == null && !disallowAdditionalPropertiesIfNotPresent) { - m.isAdditionalPropertiesTrue = true; - } else if (schema.getAdditionalProperties() instanceof Boolean && Boolean.TRUE.equals(schema.getAdditionalProperties())) { - m.isAdditionalPropertiesTrue = true; + if (schema.getAdditionalProperties() == null) { + if (disallowAdditionalPropertiesIfNotPresent) { + m.isAdditionalPropertiesTrue = false; + } else { + m.isAdditionalPropertiesTrue = true; + CodegenProperty cp = fromProperty("", new Schema()); + m.setAdditionalProperties(cp); + } + } else if (schema.getAdditionalProperties() instanceof Boolean) { + if (Boolean.TRUE.equals(schema.getAdditionalProperties())) { + m.isAdditionalPropertiesTrue = true; + CodegenProperty cp = fromProperty("", new Schema()); + m.setAdditionalProperties(cp); + } else { + m.isAdditionalPropertiesTrue = false; + } } else { m.isAdditionalPropertiesTrue = false; + CodegenProperty cp = fromProperty("", (Schema) schema.getAdditionalProperties()); + m.setAdditionalProperties(cp); } // post process model properties @@ -3028,7 +3037,6 @@ public class DefaultCodegen implements CodegenConfig { * the (String name, Schema p) arguments. * Any subsequent processing of the CodegenModel return value must be idempotent * for a given (String name, Schema schema). - * Pass in null for the name to not use the schemaCodegenPropertyCache * * @param name name of the property * @param p OAS property schema @@ -3040,16 +3048,11 @@ public class DefaultCodegen implements CodegenConfig { return null; } LOGGER.debug("debugging fromProperty for " + name + " : " + p); - boolean nullName = (name == null); NamedSchema ns = new NamedSchema(name, p); - if (!nullName) { - CodegenProperty cpc = schemaCodegenPropertyCache.get(ns); - if (cpc != null) { - LOGGER.debug("Cached fromProperty for " + name + " : " + p.getName()); - return cpc; - } - } else { - name = ""; + CodegenProperty cpc = schemaCodegenPropertyCache.get(ns); + if (cpc != null) { + LOGGER.debug("Cached fromProperty for " + name + " : " + p.getName()); + return cpc; } // unalias schema p = unaliasSchema(p, importMapping); @@ -3373,9 +3376,7 @@ public class DefaultCodegen implements CodegenConfig { addVarsRequiredVarsAdditionaProps(p, property); LOGGER.debug("debugging from property return: " + property); - if (!nullName) { - schemaCodegenPropertyCache.put(ns, property); - } + schemaCodegenPropertyCache.put(ns, property); return property; } @@ -6161,25 +6162,6 @@ public class DefaultCodegen implements CodegenConfig { return codegenParameter; } - private void setAddProps(Schema schema, IJsonSchemaValidationProperties property){ - Schema usedSchema = new Schema(); - if (schema.getAdditionalProperties() == null) { - if (!disallowAdditionalPropertiesIfNotPresent) { - CodegenProperty cp = fromProperty(null, usedSchema); - property.setAdditionalProperties(cp); - } - } else if (schema.getAdditionalProperties() instanceof Boolean) { - if (Boolean.TRUE.equals(schema.getAdditionalProperties())) { - CodegenProperty cp = fromProperty(null, usedSchema); - property.setAdditionalProperties(cp); - } - } else { - usedSchema = (Schema) schema.getAdditionalProperties(); - CodegenProperty cp = fromProperty(null, usedSchema); - property.setAdditionalProperties(cp); - } - } - private void addVarsRequiredVarsAdditionaProps(Schema schema, IJsonSchemaValidationProperties property){ if (!"object".equals(schema.getType())) { return; @@ -6196,7 +6178,20 @@ public class DefaultCodegen implements CodegenConfig { .filter(p -> Boolean.TRUE.equals(p.required)).collect(Collectors.toList()); property.setRequiredVars(requireCpVars); } - setAddProps(schema, property); + if (schema.getAdditionalProperties() == null) { + if (!disallowAdditionalPropertiesIfNotPresent) { + CodegenProperty cp = fromProperty("", new Schema()); + property.setAdditionalProperties(cp); + } + } else if (schema.getAdditionalProperties() instanceof Boolean) { + if (Boolean.TRUE.equals(schema.getAdditionalProperties())) { + CodegenProperty cp = fromProperty("", new Schema()); + property.setAdditionalProperties(cp); + } + } else { + CodegenProperty cp = fromProperty("", (Schema) schema.getAdditionalProperties()); + property.setAdditionalProperties(cp); + } return; } diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumArrays.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumArrays.ts index 57c569031b4..cfab553c724 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumArrays.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumArrays.ts @@ -33,22 +33,6 @@ export interface EnumArrays { arrayEnum?: Array; } -/** -* @export -* @enum {string} -*/ -export enum EnumArraysJustSymbolEnum { - GreaterThanOrEqualTo = '>=', - Dollar = '$' -}/** -* @export -* @enum {string} -*/ -export enum EnumArraysArrayEnumEnum { - Fish = 'fish', - Crab = 'crab' -} - export function EnumArraysFromJSON(json: any): EnumArrays { return EnumArraysFromJSONTyped(json, false); } @@ -78,4 +62,21 @@ export function EnumArraysToJSON(value?: EnumArrays | null): any { }; } +/** +* @export +* @enum {string} +*/ +export enum EnumArraysJustSymbolEnum { + GreaterThanOrEqualTo = '>=', + Dollar = '$' +} +/** +* @export +* @enum {string} +*/ +export enum EnumArraysArrayEnumEnum { + Fish = 'fish', + Crab = 'crab' +} + diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumTest.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumTest.ts index fbd6a1cf2c8..3ba0162d6ab 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumTest.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/EnumTest.ts @@ -88,38 +88,6 @@ export interface EnumTest { outerEnumIntegerDefaultValue?: OuterEnumIntegerDefaultValue; } -/** -* @export -* @enum {string} -*/ -export enum EnumTestEnumStringEnum { - Upper = 'UPPER', - Lower = 'lower', - Empty = '' -}/** -* @export -* @enum {string} -*/ -export enum EnumTestEnumStringRequiredEnum { - Upper = 'UPPER', - Lower = 'lower', - Empty = '' -}/** -* @export -* @enum {string} -*/ -export enum EnumTestEnumIntegerEnum { - NUMBER_1 = 1, - NUMBER_MINUS_1 = -1 -}/** -* @export -* @enum {string} -*/ -export enum EnumTestEnumNumberEnum { - NUMBER_1_DOT_1 = 1.1, - NUMBER_MINUS_1_DOT_2 = -1.2 -} - export function EnumTestFromJSON(json: any): EnumTest { return EnumTestFromJSONTyped(json, false); } @@ -161,4 +129,39 @@ export function EnumTestToJSON(value?: EnumTest | null): any { }; } +/** +* @export +* @enum {string} +*/ +export enum EnumTestEnumStringEnum { + Upper = 'UPPER', + Lower = 'lower', + Empty = '' +} +/** +* @export +* @enum {string} +*/ +export enum EnumTestEnumStringRequiredEnum { + Upper = 'UPPER', + Lower = 'lower', + Empty = '' +} +/** +* @export +* @enum {string} +*/ +export enum EnumTestEnumIntegerEnum { + NUMBER_1 = 1, + NUMBER_MINUS_1 = -1 +} +/** +* @export +* @enum {string} +*/ +export enum EnumTestEnumNumberEnum { + NUMBER_1_DOT_1 = 1.1, + NUMBER_MINUS_1_DOT_2 = -1.2 +} + diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/InlineObject2.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/InlineObject2.ts index 7c8694d56a4..fbbb7001c5f 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/InlineObject2.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/InlineObject2.ts @@ -33,23 +33,6 @@ export interface InlineObject2 { enumFormString?: InlineObject2EnumFormStringEnum; } -/** -* @export -* @enum {string} -*/ -export enum InlineObject2EnumFormStringArrayEnum { - GreaterThan = '>', - Dollar = '$' -}/** -* @export -* @enum {string} -*/ -export enum InlineObject2EnumFormStringEnum { - Abc = '_abc', - Efg = '-efg', - Xyz = '(xyz)' -} - export function InlineObject2FromJSON(json: any): InlineObject2 { return InlineObject2FromJSONTyped(json, false); } @@ -79,4 +62,22 @@ export function InlineObject2ToJSON(value?: InlineObject2 | null): any { }; } +/** +* @export +* @enum {string} +*/ +export enum InlineObject2EnumFormStringArrayEnum { + GreaterThan = '>', + Dollar = '$' +} +/** +* @export +* @enum {string} +*/ +export enum InlineObject2EnumFormStringEnum { + Abc = '_abc', + Efg = '-efg', + Xyz = '(xyz)' +} + diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/MapTest.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/MapTest.ts index ca67d6cc33c..de13e08cb68 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/MapTest.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/MapTest.ts @@ -45,15 +45,6 @@ export interface MapTest { indirectMap?: { [key: string]: boolean; }; } -/** -* @export -* @enum {string} -*/ -export enum MapTestMapOfEnumStringEnum { - Upper = 'UPPER', - Lower = 'lower' -} - export function MapTestFromJSON(json: any): MapTest { return MapTestFromJSONTyped(json, false); } @@ -87,4 +78,13 @@ export function MapTestToJSON(value?: MapTest | null): any { }; } +/** +* @export +* @enum {string} +*/ +export enum MapTestMapOfEnumStringEnum { + Upper = 'UPPER', + Lower = 'lower' +} + diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Order.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Order.ts index 8ba94be0acd..23c8e752403 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Order.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Order.ts @@ -57,16 +57,6 @@ export interface Order { complete?: boolean; } -/** -* @export -* @enum {string} -*/ -export enum OrderStatusEnum { - Placed = 'placed', - Approved = 'approved', - Delivered = 'delivered' -} - export function OrderFromJSON(json: any): Order { return OrderFromJSONTyped(json, false); } @@ -104,4 +94,14 @@ export function OrderToJSON(value?: Order | null): any { }; } +/** +* @export +* @enum {string} +*/ +export enum OrderStatusEnum { + Placed = 'placed', + Approved = 'approved', + Delivered = 'delivered' +} + diff --git a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Pet.ts b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Pet.ts index f188f88dcee..24bb6915527 100644 --- a/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Pet.ts +++ b/samples/client/petstore/typescript-fetch/builds/default-v3.0/models/Pet.ts @@ -68,16 +68,6 @@ export interface Pet { status?: PetStatusEnum; } -/** -* @export -* @enum {string} -*/ -export enum PetStatusEnum { - Available = 'available', - Pending = 'pending', - Sold = 'sold' -} - export function PetFromJSON(json: any): Pet { return PetFromJSONTyped(json, false); } @@ -115,4 +105,14 @@ export function PetToJSON(value?: Pet | null): any { }; } +/** +* @export +* @enum {string} +*/ +export enum PetStatusEnum { + Available = 'available', + Pending = 'pending', + Sold = 'sold' +} + diff --git a/samples/client/petstore/typescript-fetch/builds/enum/models/InlineObject.ts b/samples/client/petstore/typescript-fetch/builds/enum/models/InlineObject.ts index e6592c5be29..a3b90dd840a 100644 --- a/samples/client/petstore/typescript-fetch/builds/enum/models/InlineObject.ts +++ b/samples/client/petstore/typescript-fetch/builds/enum/models/InlineObject.ts @@ -45,24 +45,6 @@ export interface InlineObject { nullableNumberEnum?: number | null; } -/** -* @export -* @enum {string} -*/ -export enum InlineObjectStringEnumEnum { - One = 'one', - Two = 'two', - Three = 'three' -}/** -* @export -* @enum {string} -*/ -export enum InlineObjectNumberEnumEnum { - NUMBER_1 = 1, - NUMBER_2 = 2, - NUMBER_3 = 3 -} - export function InlineObjectFromJSON(json: any): InlineObject { return InlineObjectFromJSONTyped(json, false); } @@ -96,4 +78,23 @@ export function InlineObjectToJSON(value?: InlineObject | null): any { }; } +/** +* @export +* @enum {string} +*/ +export enum InlineObjectStringEnumEnum { + One = 'one', + Two = 'two', + Three = 'three' +} +/** +* @export +* @enum {string} +*/ +export enum InlineObjectNumberEnumEnum { + NUMBER_1 = 1, + NUMBER_2 = 2, + NUMBER_3 = 3 +} + diff --git a/samples/client/petstore/typescript-fetch/builds/enum/models/InlineResponse200.ts b/samples/client/petstore/typescript-fetch/builds/enum/models/InlineResponse200.ts index 5b410f1ca99..41aad0beccb 100644 --- a/samples/client/petstore/typescript-fetch/builds/enum/models/InlineResponse200.ts +++ b/samples/client/petstore/typescript-fetch/builds/enum/models/InlineResponse200.ts @@ -45,24 +45,6 @@ export interface InlineResponse200 { nullableNumberEnum?: number | null; } -/** -* @export -* @enum {string} -*/ -export enum InlineResponse200StringEnumEnum { - One = 'one', - Two = 'two', - Three = 'three' -}/** -* @export -* @enum {string} -*/ -export enum InlineResponse200NumberEnumEnum { - NUMBER_1 = 1, - NUMBER_2 = 2, - NUMBER_3 = 3 -} - export function InlineResponse200FromJSON(json: any): InlineResponse200 { return InlineResponse200FromJSONTyped(json, false); } @@ -96,4 +78,23 @@ export function InlineResponse200ToJSON(value?: InlineResponse200 | null): any { }; } +/** +* @export +* @enum {string} +*/ +export enum InlineResponse200StringEnumEnum { + One = 'one', + Two = 'two', + Three = 'three' +} +/** +* @export +* @enum {string} +*/ +export enum InlineResponse200NumberEnumEnum { + NUMBER_1 = 1, + NUMBER_2 = 2, + NUMBER_3 = 3 +} +