Преобразование статического метода из класса Dagger Module в Kotlin - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть следующий проект в Github: https://github.com/Ali-Rezaei/TMDb-Paging, который я использую Dagger2 для внедрения зависимостей.

Один из моих Module классов выглядит следующим образом: java:

@Module
public abstract class DetailModule {

    @FragmentScoped
    @ContributesAndroidInjector
    abstract DetailFragment detailFragment();

    @Provides
    @ActivityScoped
    static Movie provideMovie(DetailActivity activity) {
        return activity.getIntent().getExtras().getParcelable(EXTRA_MOVIE);
    }
}

Как видите, provideMovie метод static.Когда я конвертирую его в Kotlin:

@Module
abstract class DetailModule {

    @FragmentScoped
    @ContributesAndroidInjector
    internal abstract fun detailFragment(): DetailFragment

    companion object {

        @Provides
        @ActivityScoped
        internal fun provideMovie(activity: DetailActivity): Movie {
            return activity.intent.extras.getParcelable(EXTRA_MOVIE)
        }
    }
}

Но когда я строю проект, я получаю следующую ошибку компилятора Kotlin:

error: @Provides methods can only be present within a @Module or @ProducerModule
        public final com.sample.android.tmdb.vo.Movie provideMovie$app_debug(@org.jetbrains.annotations.NotNull()

Может ли быть любое решение иметь класс в Kotlin?

1 Ответ

0 голосов
/ 21 ноября 2018

Comanion Object является технически другим классом и не обозначен @Module.(Таким образом, вы получаете эту ошибку)

вам нужно использовать аннотации JVM для методов.Таким образом, Kotlin создаст статический метод внутри DetailModule.

Попробуйте @JvmStatic

@Module
    companion object {
         @JvmStatic
         @Provides
         @ActivityScoped
         internal fun provideMovie(activity: DetailActivity): Movie {
             return activity.intent.extras.getParcelable(EXTRA_MOVIE)
         }
    }
...