Skip to content

Commit

Permalink
fix a type incompatibility in the JsonApiModule dagger wiring
Browse files Browse the repository at this point in the history
  • Loading branch information
frett committed May 31, 2024
1 parent b38854f commit 8e4b8dc
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 1 deletion.
1 change: 1 addition & 0 deletions gto-support-dagger/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ dependencies {

// region jsonapi Module
compileOnly(project(":gto-support-jsonapi"))
testImplementation(project(":gto-support-jsonapi"))
// endregion jsonapi Module

// region Moshi Module
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ abstract class JsonApiModule {
@Provides
@ElementsIntoSet
@JsonApiModel
fun convertJsonApiModelClasses(@JsonApiModel classes: Set<KClass<*>>) = classes.map { it.java }.toSet()
fun convertJsonApiModelClasses(@JsonApiModel classes: Set<@JvmSuppressWildcards KClass<*>>) =
classes.map { it.java }.toSet()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package org.ccci.gto.android.common.dagger.jsonapi

import dagger.Component
import dagger.Module
import dagger.Provides
import dagger.multibindings.IntoSet
import javax.inject.Singleton
import kotlin.reflect.KClass
import kotlin.test.assertEquals
import org.ccci.gto.android.common.jsonapi.converter.LocaleTypeConverter
import org.ccci.gto.android.common.jsonapi.converter.TypeConverter
import org.junit.Test

class JsonApiModuleTest {
// region No Additional Classes or Converters
@Test
fun `JsonApiModule - No Additional Classes or Converters`() {
val component = DaggerJsonApiModuleTest_EmptyComponent.create()
assertEquals(0, component.converters().size)
assertEquals(0, component.classes().size)
}

@Singleton
@Component(modules = [JsonApiModule::class])
interface EmptyComponent {
@JsonApiModel
fun classes(): Set<Class<*>>
fun converters(): Set<TypeConverter<*>>
}
// endregion No Additional Classes or Converters

// region Additional Classes and Converters
@Test
fun `JsonApiModule - Additional Classes and Converters`() {
val component = DaggerJsonApiModuleTest_AdditionalClassesAndConvertersComponent.create()
assertEquals(setOf(LocaleTypeConverter), component.converters())
assertEquals(setOf(String::class.java, Int::class.java), component.classes())
}

@Module
object AdditionalClassesAndConvertersModule {
@Provides
@IntoSet
fun localeConverter(): TypeConverter<*> = LocaleTypeConverter

@Provides
@IntoSet
@JsonApiModel
fun stringClass(): Class<*> = String::class.java

@Provides
@IntoSet
@JsonApiModel
fun intKClass(): KClass<*> = Int::class
}

@Singleton
@Component(modules = [JsonApiModule::class, AdditionalClassesAndConvertersModule::class])
interface AdditionalClassesAndConvertersComponent {
@JsonApiModel
fun classes(): Set<Class<*>>
fun converters(): Set<TypeConverter<*>>
}
// endregion No Additional Classes or Converters
}

0 comments on commit 8e4b8dc

Please sign in to comment.