user2934930
user2934930

Reputation: 1146

Dagger fails to recognize the provider implementation

I have a list of enum that I need to inject to view model via constructor but dagger fails with this error

 SelectDisabilityComponent.java:7: error: [Dagger/MissingBinding] java.util.List<? extends x.x.results.Disability> cannot be provided without an @Provides-annotated method.

This is the module

@Module
abstract class SelectDisabilityModule {

    @Binds
    abstract fun bindViewModelFactory(impl: SelectDisabilityViewModel.Factory): ViewModelProvider.Factory

    @Module
    companion object {

        @JvmStatic
        @Provides
        fun provideViewModel(fragment: SelectDisabilityFragment, factory: ViewModelProvider.Factory): SelectDisabilityViewModel {
            return ViewModelProvider(fragment, factory).get(SelectDisabilityViewModel::class.java)
        }

        @JvmStatic
        @Provides
        fun provideDisabilities(fragment: SelectDisabilityFragment) : List<Disability>? {
            return fragment.arguments?.getParcelable<DisabilityData>(SelectDisabilityFragment.DISABILITY_DATA)?.disabilities
        }


    }
}

This is the enum

enum class Disability(val value: String) {
    HEARING("hearing"), VISUAL("visual")
}

Upvotes: 1

Views: 170

Answers (1)

gpunto
gpunto

Reputation: 2852

The error message mentions a wildcard ? extends x.x.results.Disability. You probably need to use the @JvmSuppressWildcards annotation.

Try fun provideDisabilities(fragment: SelectDisabilityFragment) : List<@JvmSuppressWildcards Disability>.

By the way, I don't think you need the @JvmStatic with the newer versions of Dagger.

Upvotes: 1

Related Questions