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] Fixing subClassed types so that they can use enums #1051

Merged
merged 4 commits into from
Aug 20, 2015
Merged

[Java] Fixing subClassed types so that they can use enums #1051

merged 4 commits into from
Aug 20, 2015

Conversation

who
Copy link
Contributor

@who who commented Aug 5, 2015

This fixes #1050 .

The bug repros if your models use inheritance and enums together. In this event, swagger-codegen output is invalid Java code and will not compile. This is due to a type conflict with the properties copied from the parent class. The solution proposed in this PR is to remove any enums from child classes that already exist in the parent class.

@fehguy
Copy link
Contributor

fehguy commented Aug 6, 2015

I don't quite get this yet. Could you please add a test to verify the results of this?

@who
Copy link
Contributor Author

who commented Aug 6, 2015

@fehguy

Here's a repro:

me@box:/tmp/tmp.SUB54PNhX$ cd `mktemp -d /tmp/tmp.XXXXXXXXX`
me@box:/tmp/tmp.SUB54PNhX$ git clone https://github.com/swagger-api/swagger-codegen.git -q .
me@box:/tmp/tmp.SUB54PNhX$ git checkout develop_2.0
me@box:/tmp/tmp.SUB54PNhX$ sed -ie 's/1.0.9-SNAPSHOT/1.0.9/g' pom.xml 
me@box:/tmp/tmp.SUB54PNhX$ mvn clean install 
me@box:/tmp/tmp.SUB54PNhX$ java -jar ./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i https://gist.githubusercontent.com/who/2ad48a523ce91b646ba7/raw/e9cda73c4bd523fa04bfb59484d6fbfebf75baa2/repro_1051.json -l java -o output
me@box:/tmp/tmp.SUB54PNhX$ cd output; mvn compile;

Repro output:

[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for io.swagger:swagger-java-client:jar:1.0.0
[WARNING] 'build.plugins.plugin.version' for org.codehaus.mojo:build-helper-maven-plugin is missing. @ line 68, column 15
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building swagger-java-client 1.0.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- build-helper-maven-plugin:1.9.1:add-source (add_sources) @ swagger-java-client ---
[INFO] Source directory: /tmp/tmp.SUB54PNhX/output/src/main/java added.
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ swagger-java-client ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /tmp/tmp.SUB54PNhX/output/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ swagger-java-client ---
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 2 source files to /tmp/tmp.SUB54PNhX/output/target/classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /tmp/tmp.SUB54PNhX/output/src/main/java/io/swagger/client/model/SubObject.java:[35,23] error: getThingType() in SubObject cannot override getThingType() in SuperObject
[INFO] 1 error
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.321 s
[INFO] Finished at: 2015-08-05T21:29:17-07:00
[INFO] Final Memory: 12M/107M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project swagger-java-client: Compilation failure
[ERROR] /tmp/tmp.SUB54PNhX/output/src/main/java/io/swagger/client/model/SubObject.java:[35,23] error: getThingType() in SubObject cannot override getThingType() in SuperObject
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

@who
Copy link
Contributor Author

who commented Aug 6, 2015

@fehguy I'll put some tests together.

@who
Copy link
Contributor Author

who commented Aug 6, 2015

Ping @fehguy - I added a test for this

@who
Copy link
Contributor Author

who commented Aug 7, 2015

Hey @xhh, could I get your opinion on this PR?

The same bug probably exists in the Android (and maybe Scala) generators.

@who who changed the title Fixing subClassed types so that they can use enums [Java] Fixing subClassed types so that they can use enums Aug 7, 2015
@who
Copy link
Contributor Author

who commented Aug 20, 2015

@wing328 @fehguy Could this please be merged? It's blocking my team from using swagger codegen in some cases because the output doesn't compile.

@fehguy
Copy link
Contributor

fehguy commented Aug 20, 2015

@wing328 what do you think on this one?

@wing328
Copy link
Contributor

wing328 commented Aug 20, 2015

Tested and was able to repeat the compile error, which's addressed by this PR. Compared with the prevention approach, this approach (post-processing) is preferable in my opinion.

wing328 added a commit that referenced this pull request Aug 20, 2015
[Java] Fixing subClassed types so that they can use enums
@wing328 wing328 merged commit a610fb5 into swagger-api:develop_2.0 Aug 20, 2015
@who
Copy link
Contributor Author

who commented Aug 20, 2015

Thank you, @wing328 !

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

Successfully merging this pull request may close these issues.

3 participants