0

I have the following Java code which works fine

@Module(subcomponents = {MainActivityComponent.class})
abstract public class ActivityBuilder {

    @Provides
    @Singleton
    static Context provideContext(Application application) {
        return application;
    }

    @Binds
    @IntoMap
    @ClassKey(MainActivity.class)
    abstract AndroidInjector.Factory<?> bindMainActivity(MainActivityComponent.Builder builder);
}

When I convert it to Kotlin

@Module(subcomponents = [MainActivityComponent::class])
abstract class ActivityBuilder {
    companion object {
        @Provides
        @Singleton
        fun provideContext(application: Application): Context {
            return application
        }
    }

    @Binds
    @IntoMap
    @ClassKey(MainActivity::class)
    abstract fun bindMainActivity(builder: MainActivityComponent.Builder): AndroidInjector.Factory<*>

}

I got error stating I can't have my @Provides on the static function.

error: @Provides methods can only be present within a @Module or @ProducerModule
    public final android.content.Context provideContext(@org.jetbrains.annotations.NotNull()
                                         ^  

How could I fix that?

Elye
  • 53,639
  • 54
  • 212
  • 474
  • https://stackoverflow.com/questions/44894218/dagger-2-static-provider-methods-in-kotlin – Elye Jan 05 '19 at 09:01

1 Answers1

5

Apparently the below works.

@Module(subcomponents = [MainActivityComponent::class])
abstract class ActivityBuilder {

    @Module
    companion object {
        @JvmStatic
        @Provides
        @Singleton
        fun provideContext(application: Application): Context {
            return application
        }
    }

    @Binds
    @IntoMap
    @ClassKey(MainActivity::class)
    abstract fun bindMainActivity(builder: MainActivityComponent.Builder): AndroidInjector.Factory<*>

}
Elye
  • 53,639
  • 54
  • 212
  • 474