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

refactor: RxJava2/3 support #3166

Merged
merged 1 commit into from
Jun 14, 2021
Merged

Conversation

aoudiamoncef
Copy link
Contributor

Hi @martinbonnin

I tried to simplify RxJava integration code in this PR.

I'm waiting for feedback

Thanks

@martinbonnin
Copy link
Contributor

martinbonnin commented Jun 10, 2021

Hi @aoudiamoncef !

Thanks for sending this. Do you mind giving a high level overview of the changes? I can see some lambdas being used instead of anonymous classes. I think that's ok as we have a minimum of Java8+ and Android 15+. Mind be worth double checking that the minimum AGP version we support actually has desugaring for lambdas (the lambda will be compiled so I guess it's it's more about the bytecode being produced).

Besides lambdas, is there anything else?

@aoudiamoncef
Copy link
Contributor Author

I roll backed changes from RxJava2

Lamdas for RxJava 3 are supported(Java 8+)

Replaced call.clone deperectated method with call.toBuilder.build

Added some @NotNull annotations.

@martinbonnin
Copy link
Contributor

martinbonnin commented Jun 11, 2021

Sorry got side tracked!

Not sure I understand why the lambda situation would be different on RxJava2 compared to RxJava3? The two files almost have the same content today and I'd like to keep it that way if possible.

@@ -52,7 +52,7 @@ private Rx2Apollo() {
public static <T> Observable<Response<T>> from(@NotNull final ApolloQueryWatcher<T> watcher) {
checkNotNull(watcher, "watcher == null");
return Observable.create(new ObservableOnSubscribe<Response<T>>() {
@Override public void subscribe(final ObservableEmitter<Response<T>> emitter) throws Exception {
@Override public void subscribe(@NotNull final ObservableEmitter<Response<T>> emitter) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 for @NotNull
+1 for removing the throws Exception, I guess it was carried over from the super interface but it's never used in this implementation.

@Override public void subscribe(final ObservableEmitter<Response<T>> emitter) throws Exception {
ApolloCall<T> clone = call.clone();
@Override public void subscribe(@NotNull final ObservableEmitter<Response<T>> emitter) {
ApolloCall<T> clone = call.toBuilder().build();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@martinbonnin
Copy link
Contributor

Looks good to me! Thinking more about this, I think it's fine to use lambdas everywhere. We support JDK8+ and on Android, AGP 3.0.0 can desugar lambdas-produced bytecode. Let me know if I'm missing something.

@aoudiamoncef
Copy link
Contributor Author

Cool, if there is no issue with Android, let's add Lambdas to Rxjava2.

@martinbonnin
Copy link
Contributor

Cool, if there is no issue with Android, let's add Lambdas to Rxjava2.

👍 I don't think there's an issue. Also Android can use RxJava3 as well so there's no reason not to have the same code in both.

@martinbonnin
Copy link
Contributor

For the record, that's the current diff between both files:

<  * The Rx2Apollo class provides methods for converting ApolloCall, ApolloPrefetch and ApolloWatcher types to RxJava 2
---
>  * The Rx3Apollo class provides methods for converting ApolloCall, ApolloPrefetch and ApolloWatcher types to RxJava 3
31c31
< public class Rx2Apollo {
---
> public class Rx3Apollo {
33c33
<   private Rx2Apollo() {
---
>   private Rx3Apollo() {
218c218
<     emitter.setDisposable(getRx2Disposable(cancelable));
---
>     emitter.setDisposable(getRx3Disposable(cancelable));
222c222
<     emitter.setDisposable(getRx2Disposable(cancelable));
---
>     emitter.setDisposable(getRx3Disposable(cancelable));
226c226
<     emitter.setDisposable(getRx2Disposable(cancelable));
---
>     emitter.setDisposable(getRx3Disposable(cancelable));
229c229
<   private static Disposable getRx2Disposable(final Cancelable cancelable) {
---
>   private static Disposable getRx3Disposable(final Cancelable cancelable) {

@aoudiamoncef aoudiamoncef reopened this Jun 11, 2021
@martinbonnin martinbonnin merged commit 34400a6 into apollographql:main Jun 14, 2021
martinbonnin added a commit that referenced this pull request Nov 22, 2021

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
* Add a "Who is Apollo" section to the main README (#3073)

* Slight tweaks to the "Who is Apollo?" README section (#3079)

To align with apollographql/apollo-client#8079.

* Update dependency gatsby-theme-apollo-docs to v4.7.3

* Issue #3095: Expose channel capacity parameter. (#3096)

Co-authored-by: Neal Sanche <neal@yourarq.com>

* Update dependency gatsby to v2.32.13

* Update dependency gatsby-theme-apollo-docs to v4.7.4

* Fix Float input fields Java codegen with default values in json schemas (#3109)

* Fix Float input fields Java codegen with default values in json schemas

see #3108

* add a test case for lists in defaultValues and handle it

Co-authored-by: Martin Bonnin <martin@mbonnin.net>

* bump Kotlin and Coroutines to 1.5.0 (#3113)

* bump Kotlin and Coroutines to 1.5.0

* make the KotlinCompile task depend on antlr generation

* update metalava-plugin

* update metalava

* update metalava using Jdk8.

Not really sure why the signatures would differ based on the java
version...

* release 2.5.7

* version is now 2.5.8-SNAPSHOT

* Update README.md (#3120)

* Replace spectrum with discourse (#3123)

* Discourse: pre-fill the category and tags

* Update multi-modules.mdx (#3125)

* Implement Query Batching for `apollo-runtime` (#3117)

* Implement Query Batching for `apollo-runtime`

* update metalava signatures

* Trigger HTTP call on max batch size, added synchronization, throw when using GET method

* Unit tests for BatchPoller

* Fix checkstyle

* Propagate parsing errors in callbacks, better syncrhonization, use LinkedList

* Added some tests for batch response parsing

* Added tests for request body + headers

* Builder API to enable per query batching, dont rely on time for tests

* update Metalava signatures

Co-authored-by: Martin Bonnin <martin@mbonnin.net>

* pass 'operationName' in the introspection query (#3126)

* bump junit (#3131)

* Update dependency gatsby-theme-apollo-docs to v4.7.6

* feat: add Reactor support (#3138)

* feat: add Reactor support

resolves #627

* remove .gitignore that is handled by the top level one

* update metalava signatures

Co-authored-by: Martin Bonnin <martin@mbonnin.net>

* Update dependency gatsby-theme-apollo-docs to v4.7.9

* add reactor in the left column of the doc (#3141)

* release 2.5.8

* version is now 2.5.9-SNAPSHOT

* Fix overriding `canBeBatched` value when cloning `QueryCall` with `toBuilder()` (#3146)

* Update get-started-multiplatform.mdx (#3150)

update dep version forcing as per gradle new api

* Update badge from Bintray to MavenCentral for apollo-idling-resource (#3153)

Thanks!

* Update 09-write-your-first-mutation.mdx (#3154)

* Update 01-configure-project.mdx

* Update 02-add-the-graphql-schema.mdx

* release 2.5.9

* version is now 2.5.10-SNAPSHOT

* refactor: RxJava 2/3 support (#3166)

* Update dependency striptags to 3.2.0 [SECURITY] (#3178)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency gatsby-theme-apollo-docs to v4.7.11

* Update dependency gatsby-theme-apollo-docs to v4.7.12

* remove duplicate executionContext (#3213)

* feat: add Mutiny support (#3198)

* feat: add Mutiny support

* Update gatsby-config.js

Co-authored-by: Martin Bonnin <martin@mbonnin.net>

* add v3 docs (#3223)

* Add 3.0 alpha notice (#3231)

* Update dependency gatsby-theme-apollo-docs to v4.7.13

* July 2021 ROADMAP update (#3255)

* Update ROADMAP.md

* Update dependency gatsby-theme-apollo-docs to v4.7.14

* Update multi-modules.mdx

Add a not about multi platform, See #3297

* Update multi-modules.mdx

Remove deleted branch

* Replace Spectrum with community.apollographql.com (#3299)

* Update ROADMAP.md

* Update dependency path-parse to 1.0.7 [SECURITY] (#3296)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency gatsby-theme-apollo-docs to v4.7.15

* Remove root redirect and build deploy previews at / (#3309)

* Deploy the prod site at the root (#3312)

* Update dependency gatsby-theme-apollo-docs to v4.7.16

* Remove path prefixes for docs redirects (#3329)

* Updated coroutines for use native-mt version (#3330)

* Updated coroutines for use native-mt version

* Update get-started-multiplatform.mdx

Co-authored-by: Martin Bonnin <martin@mbonnin.net>

* Update dependency gatsby-theme-apollo-docs to v4.7.18

* Increase Json nesting to 256 (#3334)

Closes #3308

* Bump docs theme to add Algolia search (#3346)

* Configure for updated docs theme

* Upgrade docs theme

* Bump docs theme version

* Bump docs theme version

* Update docs theme version

* Move config from docs netlify.toml to root level netlify.toml

* Upgrade docs theme

* Upgrade docs theme

* Upgrade docs theme

* Upgrade docs theme

* Bump docs theme to v5

Co-authored-by: Trevor Blades <tdblades@gmail.com>

* Update dependency gatsby-theme-apollo-docs to v5.0.1

* Add Reactor && Mutiny to advanced topics (#3355)

* feat: add Mutiny support

* Update gatsby-config.js

* doc: Add Reactor && Mutiny to advanced topics

Co-authored-by: Martin Bonnin <martin@mbonnin.net>

* Update dependency gatsby-theme-apollo-docs to v5.0.2

* Update dependency gatsby-theme-apollo-docs to v5.0.3

* Update dependency gatsby-theme-apollo-docs to v5.0.7

* Who is Apollo README updates (#3379)

Small updates to align "Who is Apollo" sections across repos.

* Update dependency gatsby-theme-apollo-docs to v5.0.8

* Give a hint at errorPayload (#3381)

See #3369

* docs: Configure custom Algolia filters (#3378)

* Configure algolia filters

* Upgrade theme

* Upgrade theme

* Adding Benoit (#3388)

* Workaround wrong input field default values (#3398)

* add a test case for #3394

* do not generate defaultValues for input fields of input object type

* make an exception for emptyList for backward compatibility

* do not crash when trying to indent the GraphQL document (#3399)

* Minor improvements to the Tutorial documentation (#3396)

* Minor improvements to the Tutorial documentation

* Rephrase a sentence

Co-authored-by: Martin Bonnin <martin@mbonnin.net>

* Remove unneeded dependency

* Use 2.5.9 to be consistent with the code on tutorial's repo

Co-authored-by: Martin Bonnin <martin@mbonnin.net>

* Add ./gradlew push${MainService}ApolloOperations (#3403)

* add RegisterOperations

* add ApolloRegisterOperationsTask

* add a test case

* fix bad copy/paste

* update metalava signatures

* add some doc

* Update docs/source/advanced/operation-safelisting.mdx

Co-authored-by: Benoit Lubek <BoD@JRAF.org>

* Update docs/source/advanced/operation-safelisting.mdx

Co-authored-by: Benoit Lubek <BoD@JRAF.org>

* add the link to the operation registry server documentation

Co-authored-by: Benoit Lubek <BoD@JRAF.org>

* Replace 'data graph' with 'graph' (#3389)

* Operation Registry: normalize queries before computing the hash (#3406)

* add normalization

* be robust to Number.toString() in JS being different from
Double.toString() in Java

* remove extra "only"

* workaround a doc issue where the 3.x was used instead of 2.x

* release 2.5.10

* version is now 2.5.11-SNAPSHOT

* Indicate the supported native platforms in the doc (2.x) (#3419)

* Indicate the supported native platforms in the doc.

* Clarification about the `js` target also being available

* Added toString method for Input (#3427)

* Fix outdated doc about FileUpload (#3429)

* Update ROADMAP.md (#3445)

* update ROADMAP.md

* update ROADMAP.md

* Update dependency gatsby-theme-apollo-docs to v5.3.1

* Make safelistingHash closer to its apollo-tooling counterpart (#3471)

* take #2 on query normalization

* added a comment

* add comment

* Update dependency gatsby-theme-apollo-docs to v5.3.2

* Update dependency gatsby-theme-apollo-docs to v5.3.3

* Update dependency url-parse to 1.5.2 [SECURITY] (#3522)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency ws to 7.4.6 [SECURITY] (#3523)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency ssri to 7.1.1 [SECURITY] (#3521)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency postcss to 7.0.36 [SECURITY] (#3519)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency object-path to 0.11.8 [SECURITY] (#3518)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency dns-packet to 1.3.2 [SECURITY] (#3517)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency browserslist to 4.16.5 [SECURITY] (#3516)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Update dependency axios to 0.21.2 [SECURITY] (#3515)

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* Bump docs theme and align React version w/ other docsets (#3539)

* Always make sure the Response is closed (#3541)

* release 2.5.11

* version is now 2.5.12-SNAPSHOT

* Gateway clarification based on license change

* Update dependency gatsby-theme-apollo-docs to v5.3.8

* update docs dependencies

* pass 'operationName' in the introspection query (#3126)

* update ROADMAP

* add multiplatform in the multimodules doc

* Remove root redirect and build deploy previews at / (#3309)

* Deploy the prod site at the root (#3312)

* Remove path prefixes for docs redirects (#3329)

* add a Kotlin Native Doc

inspired by commit 2e2f5d9

* Bump docs theme to add Algolia search (#3346)

* Configure for updated docs theme

* Upgrade docs theme

* Bump docs theme version

* Bump docs theme version

* Update docs theme version

* Move config from docs netlify.toml to root level netlify.toml

* Upgrade docs theme

* Upgrade docs theme

* Upgrade docs theme

* Upgrade docs theme

* Bump docs theme to v5

Co-authored-by: Trevor Blades <tdblades@gmail.com>

* update algolia filters

* Adding Benoit (#3388)

* replace data graph with 'graph'

* premliminary work for registerOperations

* wip

* wip

* fix sorting

* add Gradle tasks for registerOperations

* add safelisting doc

* update apiDump

* revert debug and fix tests that require mpp-utils

Co-authored-by: Danielle Man <man.danielleh@gmail.com>
Co-authored-by: Hugh Willson <hugh@octonary.com>
Co-authored-by: Renovate Bot <bot@renovateapp.com>
Co-authored-by: Neal Sanche <neal.sanche@robotsandpencils.com>
Co-authored-by: Neal Sanche <neal@yourarq.com>
Co-authored-by: Joaquim Verges <joaquim.verges@gmail.com>
Co-authored-by: Moncef AOUDIA <22281426+aoudiamoncef@users.noreply.github.com>
Co-authored-by: Fabio Santo <fabio.santo.mail@gmail.com>
Co-authored-by: Nicola Corti <corti.nico@gmail.com>
Co-authored-by: Robert Theis <943135+rmtheis@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Stephen Barlow <stephen@apollographql.com>
Co-authored-by: Trevor Blades <tdblades@gmail.com>
Co-authored-by: Виталий <vir@provir.ru>
Co-authored-by: Janessa Garrow <janessa@apollographql.com>
Co-authored-by: Benoit Lubek <BoD@JRAF.org>
Co-authored-by: Andrew Orobator <orobator.andrew@gmail.com>
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.

None yet

2 participants