Created by: jvandort
This code is probably not ready to merge yet, but I was not too sure of a better way to spark regarding adding better support for immutable generated code. This PR adds support for generating code with immutable guava collections as opposed to the standard java collections. There may still need to be changes to the pom.xml
mustache files to get the jaxrs codegen ready to use, but since it seems each version of some language templates each have their own version of some files, I was curious if there was a streamlined method of updating templates across languages.
There is a lot of special cases where this does not work -- for example some of the return types in in the java
language generators are explicitly checking the returnType
for List
and Map
, which does not match ImmutableList
and ImmutableMap
. (See postProcessOperationsWithModels
in
JavaPlayFrameworkCodegen.java
.) With all of the special cases that individually handle collections, and all of the hard-coded List
s and Map
s in the the mustache files, it is not feasible to support immutable collections for all language without a lot more code changes. These changes do however seem to work well with the jaxrs language types. Perhaps there is a way to enable this feature only for those language generators.
I re-ran (locally) all sample jaxrs
and java
generators in the bin
folder, and the changes in the PR produce no changes to the generated code with the flag disabled.
PR checklist
-
Read the contribution guidelines. -
If contributing template-only or documentation-only changes which will change sample output, build the project before. -
Run the shell script(s) under ./bin/
(or Windows batch scripts under.\bin\windows
) to update Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit, and these must match the expectations made by your contribution. You only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
if updating the code or mustache templates for a language ({LANG}
) (e.g. php, ruby, python, etc). -
File the PR against the correct branch: master
,4.3.x
,5.0.x
. Default:master
. -
Copy the technical committee to review the pull request if your PR is targeting a particular programming language.