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

[Java] Fix missing underscores for PascalCase enum values #4837 #18594

Conversation

renatomameli
Copy link
Contributor

@renatomameli renatomameli commented May 7, 2024

Resolves: #4837

Addresses an issue with the conversion of enum values to valid variable names. When the enum value is a string and contains multiple words without separators (e.g., TestCase), underscores between the words were previously missing (e.g., "TESTCASE").

To address this issue, the existing underscore method is now applied to the value before all characters are converted to uppercase letters. The underscore method converts CamelCase to SCREAMING_SNAKE_CASE while preserving the case of individual words (e.g., TestCase becomes TEST_CASE)

Corresponding tests have been added.

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package 
    ./bin/generate-samples.sh ./bin/configs/*.yaml
    ./bin/utils/export_docs_generators.sh
    
    (For Windows users, please run the script in Git BASH)
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    IMPORTANT: Do NOT purge/delete any folders/files (e.g. tests) when regenerating the samples as manually written tests may be removed.
  • File the PR against the correct branch: master (upcoming 7.1.0 minor release - breaking changes with fallbacks), 8.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@renatomameli
Copy link
Contributor Author

@lwlee2608 @martin-mfg

@renatomameli
Copy link
Contributor Author

@wing328 samples updated

@renatomameli renatomameli requested a review from jimschubert as a code owner May 17, 2024 07:10
@renatomameli renatomameli force-pushed the renatomameli-fix-enum-PascalCase-underscores branch 2 times, most recently from 41e4593 to 3a6a427 Compare May 17, 2024 07:41
@renatomameli renatomameli force-pushed the renatomameli-fix-enum-PascalCase-underscores branch from 3a6a427 to edb4b0f Compare May 17, 2024 08:00
@wing328 wing328 modified the milestones: 7.6.0, 7.7.0 May 20, 2024
@wing328 wing328 merged commit bfa26ea into OpenAPITools:master May 21, 2024
143 checks passed
@wing328
Copy link
Member

wing328 commented May 21, 2024

thanks for the PR, which has been merged.

@wing328
Copy link
Member

wing328 commented May 21, 2024

For those who need to fallback to previous naming convention, please use the enum name mapping option: https://github.com/openapitools/openapi-generator/blob/master/docs/customization.md#name-mapping

@jpfinne
Copy link
Contributor

jpfinne commented Jul 19, 2024

An other workaround is x-enum-varnames in the contract.

https://openapi-generator.tech/docs/templating/#all-generators-core

Still a PITA to have such a change in a minor version

@frodeo
Copy link

frodeo commented Aug 28, 2024

Is there a way to revert back to the old behavior, for instance by setting a configuration parameter? I think this is a bad change. If you want underscores in the enums then you can put them into the swagger instead. The suggested "workarounds" are not really workarounds since we build the code using general pipelines and don't want to hardcode any manual mappings.

@MojoQ
Copy link

MojoQ commented Nov 14, 2024

One should really not introduce undocumented breaking changes with minor versions...

@T3rm1
Copy link

T3rm1 commented Nov 14, 2024

Please revert this change asap. Who is responsible for this and could do it? Maybe @wing328 ? This even introduces more bugs, e.g. "B2B" is now translated to "B2_B".

@wing328
Copy link
Member

wing328 commented Nov 25, 2024

I've filed #20172 to add the option enumPropertyNaming (MACRO_CASE, legacy) so that one can set it to legacy for fallback.

Please give it a try when you've time.

About including breaking changes with fallbacks in minor releases, please refer to the FAQ for more information: https://github.com/OpenAPITools/openapi-generator/wiki/FAQ#can-you-explain-how-the-releases-are-versioned

@MojoQ
Copy link

MojoQ commented Nov 25, 2024 via email

@wing328
Copy link
Member

wing328 commented Nov 25, 2024

In the release note (minor releases), there's a link to a list of breaking changes with fallbacks

e.g. https://github.com/OpenAPITools/openapi-generator/releases/tag/v7.7.0

@martin-mfg
Copy link
Contributor

I've filed #19630 to add the option enumPropertyNaming (MACRO_CASE, legacy) so that one can set it to legacy for fallback.

Please give it a try when you've time.

It seems the link is wrong and the new PR is actually #20172.

@wing328
Copy link
Member

wing328 commented Nov 26, 2024

you're right. updated the reply above. thanks

@wing328
Copy link
Member

wing328 commented Nov 29, 2024

update: PR merged. please give it a try with the latest master or snapshot version.

@T3rm1
Copy link

T3rm1 commented Nov 29, 2024

@wing328 I only looked at your PR and didn't try it out but I think it's still broken. B2B will still translate to B2_B. This is not wanted, is it?

@wing328
Copy link
Member

wing328 commented Nov 30, 2024

if your use cases didn't work before and after this PR (#18594), then please use enum name mapping option (enumNameMappings) instead for the time being.

https://github.com/openapitools/openapi-generator/blob/master/docs/customization.md#name-mapping

@MojoQ
Copy link

MojoQ commented Dec 6, 2024

Hey, @wing328 !
I tested the fix and it works perfectly well for me. Thanks a lot!

In the release note (minor releases), there's a link to a list of breaking changes with fallbacks

e.g. https://github.com/OpenAPITools/openapi-generator/releases/tag/v7.7.0

Thank you. I certainly should read more documentation before making such remarks :)
Sorry for that!
Thanks again for your fix! I really appreciate your work!
BR Mojo

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

Successfully merging this pull request may close these issues.

[REQ][Java] Enum name should have underscore in case the value is pascal case
7 participants