Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
5 of 6 tasks
adamkaplan opened this issue Mar 23, 2020 · 1 comment
Open
5 of 6 tasks

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

adamkaplan opened this issue Mar 23, 2020 · 1 comment

Comments

@adamkaplan
Copy link
Contributor

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • What's the version of OpenAPI Generator used?
  • Have you search for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Bounty to sponsor the fix (example)
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
  1. 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
Copy link

auto-labeler bot commented Mar 23, 2020

👍 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant