diff --git a/src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java b/src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java index 0d8dcfafff..5edfed25d4 100644 --- a/src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java +++ b/src/main/java/io/swagger/codegen/v3/generators/java/JavaClientCodegen.java @@ -40,6 +40,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida public static final String USE_RX_JAVA = "useRxJava"; public static final String USE_RX_JAVA2 = "useRxJava2"; + public static final String USE_RX_JAVA3 = "useRxJava3"; public static final String DO_NOT_USE_RX = "doNotUseRx"; public static final String USE_PLAY_WS = "usePlayWS"; public static final String PLAY_VERSION = "playVersion"; @@ -55,6 +56,7 @@ public class JavaClientCodegen extends AbstractJavaCodegen implements BeanValida protected String gradleWrapperPackage = "gradle.wrapper"; protected boolean useRxJava = false; protected boolean useRxJava2 = false; + protected boolean useRxJava3 = false; protected boolean doNotUseRx = true; // backwards compatibility for swagger configs that specify neither rx1 nor rx2 (mustache does not allow for boolean operators so we need this extra field) protected boolean usePlayWS = false; protected String playVersion = PLAY_25; @@ -76,6 +78,7 @@ public JavaClientCodegen() { cliOptions.add(CliOption.newBoolean(USE_RX_JAVA, "Whether to use the RxJava adapter with the retrofit2 library.")); cliOptions.add(CliOption.newBoolean(USE_RX_JAVA2, "Whether to use the RxJava2 adapter with the retrofit2 library.")); + cliOptions.add(CliOption.newBoolean(USE_RX_JAVA3, "Whether to use the RxJava3 adapter with the retrofit2 library.")); cliOptions.add(CliOption.newBoolean(PARCELABLE_MODEL, "Whether to generate models for Android that implement Parcelable with the okhttp-gson library.")); cliOptions.add(CliOption.newBoolean(USE_PLAY_WS, "Use Play! Async HTTP client (Play WS API)")); cliOptions.add(CliOption.newString(PLAY_VERSION, "Version of Play! Framework (possible values \"play24\", \"play25\")")); @@ -122,15 +125,17 @@ public String getHelp() { public void processOpts() { super.processOpts(); - if (additionalProperties.containsKey(USE_RX_JAVA) && additionalProperties.containsKey(USE_RX_JAVA2)) { - LOGGER.warn("You specified both RxJava versions 1 and 2 but they are mutually exclusive. Defaulting to v2."); - } else if (additionalProperties.containsKey(USE_RX_JAVA)) { + if (additionalProperties.containsKey(USE_RX_JAVA)) { this.setUseRxJava(Boolean.valueOf(additionalProperties.get(USE_RX_JAVA).toString())); } if (additionalProperties.containsKey(USE_RX_JAVA2)) { this.setUseRxJava2(Boolean.valueOf(additionalProperties.get(USE_RX_JAVA2).toString())); } - if (!useRxJava && !useRxJava2) { + if (additionalProperties.containsKey(USE_RX_JAVA3)) { + this.setUseRxJava3(Boolean.valueOf(additionalProperties.get(USE_RX_JAVA3).toString())); + } + + if (!useRxJava && !useRxJava2 && !useRxJava3) { additionalProperties.put(DO_NOT_USE_RX, true); } if (additionalProperties.containsKey(USE_PLAY_WS)) { @@ -553,6 +558,11 @@ public void setUseRxJava2(boolean useRxJava2) { doNotUseRx = false; } + public void setUseRxJava3(boolean useRxJava3) { + this.useRxJava3 = useRxJava3; + doNotUseRx = false; + } + public void setDoNotUseRx(boolean doNotUseRx) { this.doNotUseRx = doNotUseRx; } diff --git a/src/main/resources/handlebars/Java/libraries/retrofit2/ApiClient.mustache b/src/main/resources/handlebars/Java/libraries/retrofit2/ApiClient.mustache index 8e81e572cd..c8b53f5a1c 100644 --- a/src/main/resources/handlebars/Java/libraries/retrofit2/ApiClient.mustache +++ b/src/main/resources/handlebars/Java/libraries/retrofit2/ApiClient.mustache @@ -23,6 +23,9 @@ import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; {{#useRxJava2}} import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; {{/useRxJava2}} +{{#useRxJava3}} +import hu.akarnokd.rxjava3.retrofit.RxJava3CallAdapterFactory; +{{/useRxJava3}} import retrofit2.converter.gson.GsonConverterFactory; import retrofit2.converter.scalars.ScalarsConverterFactory; import {{invokerPackage}}.auth.HttpBasicAuth; @@ -142,7 +145,9 @@ public class ApiClient { .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) {{/useRxJava}}{{#useRxJava2}} .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) - {{/useRxJava2}} + {{/useRxJava2}}{{#useRxJava3}} + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) + {{/useRxJava3}} .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonCustomConverterFactory.create(json.getGson())); } diff --git a/src/main/resources/handlebars/Java/libraries/retrofit2/api.mustache b/src/main/resources/handlebars/Java/libraries/retrofit2/api.mustache index ccfe0df071..2d9dfc3517 100644 --- a/src/main/resources/handlebars/Java/libraries/retrofit2/api.mustache +++ b/src/main/resources/handlebars/Java/libraries/retrofit2/api.mustache @@ -8,6 +8,9 @@ import rx.Observable; {{#useRxJava2}} import io.reactivex.Observable; {{/useRxJava2}} +{{#useRxJava3}} +import io.reactivex.rxjava3.core.Observable; +{{/useRxJava3}} {{#doNotUseRx}} import retrofit2.Call; {{/doNotUseRx}} diff --git a/src/main/resources/handlebars/Java/libraries/retrofit2/pom.mustache b/src/main/resources/handlebars/Java/libraries/retrofit2/pom.mustache index 828fd892da..a9da7810fe 100644 --- a/src/main/resources/handlebars/Java/libraries/retrofit2/pom.mustache +++ b/src/main/resources/handlebars/Java/libraries/retrofit2/pom.mustache @@ -246,6 +246,18 @@ ${retrofit-version} {{/useRxJava2}} + {{#useRxJava3}} + + io.reactivex.rxjava3 + rxjava + ${rxjava-version} + + + com.github.akarnokd + rxjava3-retrofit-adapter + 3.0.0 + + {{/useRxJava3}} {{#usePlayWS}}