OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
21.75k stars 6.56k forks source link

[BUG] Nested arrays containing objects have no type #5667

Open adamkaplan opened 4 years ago

adamkaplan commented 4 years ago

Bug Report Checklist

Description

The generated type of an array that is nested within another array is erased to the "Any" type. The type is well defined in the OAPI declaration, and should be reflected in the generated code.

This issue does not happen for objects in array unless that array is within another array.

The issue also does not occur when the nested object type of specified via $ref. Examples provided.

openapi-generator version

master (4.3.0-SNAPSHOT)

OpenAPI declaration file content or url
openapi: 3.0.0
info:
  title: API
  version: "1.0"
paths:
  /endpoint:
    get:
      operationId: getTest
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                properties:
                  badProp:
                    type: array
                    items:
                      type: array
                      items:
                        type: object
                        additionalProperties: false
                        properties:
                          prop:
                            type: string
                  okProp:
                    type: array
                    items:
                      type: array
                      items:
                        $ref: '#/components/schemas/MyObj'
components:
  schemas:
    MyObj:
      type: object
      additionalProperties: false
      properties:
        prop:
          type: string
Command line used for generation

java -jar openapi-generator-cli.jar generate -g kotlin -i spec.yaml -o gen

(also fails for Swift and probably any typed languge)

Steps to reproduce
  1. Save the example declaration above to spec.yaml & run the example command-line
  2. Open the generated model file: cat gen/src/main/kotlin/org/openapitools/client/models/InlineResponse200.kt
  3. Observe invalid property, which includes kotlin.Any inner type:
    val badProp: kotlin.Array<kotlin.Array<kotlin.Any>>? = null
  4. Observe correct version, when using $ref, the inner type is MyObj:
    val okProp: kotlin.Array<kotlin.Array<MyObj>>? = null

Desired output:

val badProp: kotlin.Array<kotlin.Array<MyObj>>? = null

Either MyObj or a generated inline model. It should just not be Any.

Related issues/PRs

n/a

Suggest a fix

The code used to introspect the properties of arrays should respect for nested child arrays. I have not been able to figure out a fix for this yet.

auto-labeler[bot] commented 4 years ago

šŸ‘ Thanks for opening this issue! šŸ· I have applied any labels matching special text in your issue.

The team will review the labels and make any necessary changes.