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][Kotlin] Wrong default value is generated if the field type is BigDecimal #10866

Closed
5 of 6 tasks
alitams opened this issue Nov 16, 2021 · 3 comments · Fixed by #12213 or #12242
Closed
5 of 6 tasks

[BUG][Kotlin] Wrong default value is generated if the field type is BigDecimal #10866

alitams opened this issue Nov 16, 2021 · 3 comments · Fixed by #12213 or #12242

Comments

@alitams
Copy link

alitams commented Nov 16, 2021

Bug Report Checklist

  • Have you provided a full/minimal spec to reproduce the issue?
  • Have you validated the input using an OpenAPI validator (example)?
  • Have you tested with the latest master to confirm the issue still exists?
  • Have you searched for related issues/PRs?
  • What's the actual output vs expected output?
  • [Optional] Sponsorship to speed up the bug fix or feature request (example)
Description

If one of the type's mapping value is BigDecimal, and sets a default value, then a simple Int is given to the value.

Generated:

val bar: java.math.BigDecimal? = 0

Expected:

val bar: java.math.BigDecimal? = java.math.BigDecimal.ZERO

(or BigDecimal(0))

openapi-generator version

5.3.0

OpenAPI declaration file content or url
...
schemas:
  Foo:
      description: 'Xy'
      type: object
      properties:
        bar:
          type: number
          default: 0
Generation Details
java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 modules/openapi-generator-cli/target/openapi-generator-cli.jar generate \
   -i xy.yaml \
   -g kotlin-client \
   -o gen/generated \
   --additional-properties=library=jvm-retrofit2,useRxJava3=true,dateLibrary=threetenbp-localdatetime,enumPropertyNaming=UPPERCASE,serializationLibrary=jackson,enablePostProcessFile=true 
Steps to reproduce

Generate the code below, and check the result.

Related issues/PRs
Suggest a fix

The BigDecimal should handled to generate the schema well.

For example:

    override fun toDefaultValue(schema: Schema<*>?): String? {
        val referencedSchema = ModelUtils.getReferencedSchema(this.openAPI, schema)
        val defaultValue =
            if (referencedSchema.default is BigDecimal) {
                getBigDecimalDefaultValue(referencedSchema.default as BigDecimal)
            } else {
                super.toDefaultValue(schema)
            }

        return defaultValue ?: referencedSchema.default?.toString()
    }
@jaycarlton
Copy link

I see the same problem in Java. I was using

    ServiceUsage:
      description: Service Usage Consumer Quota Overrides
      properties:
        bigQueryDailyUsageQuotaOverrideValueBytes:
          description: |-
            Daily maximum query usage per project. Use 0 for no override (default limit is
            effectively unlimited).
          type: number
          format: long
          default: 0
      type: object

And the generated code tried to do

  @JsonProperty("bigQueryDailyUsageQuotaOverrideValueBytes")
 private BigDecimal bigQueryDailyUsageQuotaOverrideValueBytes = 0;

which fails at runtime with

error: incompatible types: int cannot be converted to BigDecimal
private BigDecimal bigQueryDailyUsageQuotaOverrideValueBytes = 0;

@sjoblomj
Copy link
Contributor

@alitams: I have provided a PR to fix this bug in #12213.

@jaycarlton: I am unable to reproduce your results in the Java client. Could you please provide the generator settings that you use when the bug appears?

@jaycarlton
Copy link

@sjoblomj We actually use swagger-codegen, so unless the bug is before the fork (assuming I have the history right), it wouldn't necessarily show up here. Sorry for the confusion.

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