From 0bf60812e0c4e04dea1d983653dc9d7b98ef444b Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sun, 13 Nov 2022 17:52:15 +0530 Subject: [PATCH] refactor(di): workaround unstable IntoSet ordering EitherNet's ApiResultConverterFactory needs to go before any other (de)serialization factories, but multibindings do not have ordering guarantees. To fix this, I've changed the module to handle the EitherNet configuration within api and let core continue supplying everything else. --- .../dev/msfjarvis/claw/api/injection/ApiModule.kt | 11 +++++------ core/build.gradle.kts | 1 - .../claw/core/injection/RetrofitModule.kt | 15 --------------- 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/api/src/main/kotlin/dev/msfjarvis/claw/api/injection/ApiModule.kt b/api/src/main/kotlin/dev/msfjarvis/claw/api/injection/ApiModule.kt index 6132e74b..dd8aee7e 100644 --- a/api/src/main/kotlin/dev/msfjarvis/claw/api/injection/ApiModule.kt +++ b/api/src/main/kotlin/dev/msfjarvis/claw/api/injection/ApiModule.kt @@ -6,13 +6,14 @@ */ package dev.msfjarvis.claw.api.injection +import com.slack.eithernet.ApiResultCallAdapterFactory +import com.slack.eithernet.ApiResultConverterFactory import com.squareup.anvil.annotations.ContributesTo import dagger.Module import dagger.Provides import dev.msfjarvis.claw.api.LobstersApi import dev.msfjarvis.claw.injection.scopes.AppScope import okhttp3.OkHttpClient -import retrofit2.CallAdapter import retrofit2.Converter import retrofit2.Retrofit import retrofit2.create @@ -24,15 +25,13 @@ object ApiModule { fun provideRetrofit( client: OkHttpClient, converterFactories: Set<@JvmSuppressWildcards Converter.Factory>, - callAdapterFactories: Set<@JvmSuppressWildcards CallAdapter.Factory> ): Retrofit { return Retrofit.Builder() .client(client) .baseUrl(LobstersApi.BASE_URL) - .apply { - converterFactories.forEach(this::addConverterFactory) - callAdapterFactories.forEach(this::addCallAdapterFactory) - } + .addConverterFactory(ApiResultConverterFactory) + .addCallAdapterFactory(ApiResultCallAdapterFactory) + .apply { converterFactories.forEach(this::addConverterFactory) } .build() } diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 06ec1bb1..4375d818 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -22,7 +22,6 @@ dependencies { api(libs.okhttp.loggingInterceptor) implementation(projects.diScopes) implementation(libs.dagger) - implementation(libs.eithernet) implementation(libs.javax.inject) implementation(libs.napier) implementation(libs.okhttp.core) diff --git a/core/src/main/kotlin/dev/msfjarvis/claw/core/injection/RetrofitModule.kt b/core/src/main/kotlin/dev/msfjarvis/claw/core/injection/RetrofitModule.kt index 14bc187e..b4f3b958 100644 --- a/core/src/main/kotlin/dev/msfjarvis/claw/core/injection/RetrofitModule.kt +++ b/core/src/main/kotlin/dev/msfjarvis/claw/core/injection/RetrofitModule.kt @@ -7,8 +7,6 @@ package dev.msfjarvis.claw.core.injection import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory -import com.slack.eithernet.ApiResultCallAdapterFactory -import com.slack.eithernet.ApiResultConverterFactory import com.squareup.anvil.annotations.ContributesTo import dagger.Module import dagger.Provides @@ -17,25 +15,12 @@ import dev.msfjarvis.claw.injection.scopes.AppScope import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.json.Json import okhttp3.MediaType -import retrofit2.CallAdapter import retrofit2.Converter @Module @ContributesTo(AppScope::class) object RetrofitModule { - @Provides - @IntoSet - fun provideApiResultCallAdapterFactory(): CallAdapter.Factory { - return ApiResultCallAdapterFactory - } - - @Provides - @IntoSet - fun provideApiResultConverterFactory(): Converter.Factory { - return ApiResultConverterFactory - } - @OptIn(ExperimentalSerializationApi::class) @Provides @IntoSet