«Предпочитаю запускать процессор кинжала вместо этого класса» в Котлине

124

Я получаю эту заметку в сборке всякий раз, когда делаю инъекцию в класс kotlin (кстати, у меня есть смешанный проект Android с kotlin и java).

Например, после этой задачи gradle: compileStagingDebugJavaWithJavac(StagingDebug - мой вариант сборки) я получаю следующее сообщение:

«Примечание. Создание MembersInjector или Factory для com.packageNameXXX.CourseDiscoveryMapFragment. Вместо этого лучше запускать обработчик кинжалов над этим классом».

Мой код CourseDiscoveryMapFragment можно увидеть здесь:

class CourseDiscoveryMapFragment : Fragment(){

    @Inject
    lateinit var presenter: CourseDiscoveryMapPresenter

    lateinit var mapView: MapView

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        val view = inflater.inflate(R.layout.fragment_discovery_map, container, false)

        MapsInitializer.initialize(activity)

        mapView = view.mapView
        mapView.onCreate(savedInstanceState?.getBundle(BUNDLE_KEY_MAP_STATE))

        (activity as BaseActivity)
                .activityComponent.inject(this)
}

И мой ActivityComponent :

@ActivityScope
@Subcomponent(modules = ActivityModule.class)
public interface ActivityComponent {

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

    //Exposed to sub-graphs.
    Activity activity();
}

Итак, у меня есть компонент и модули кинжала, написанные на Java, в то время как у меня есть инъекции кинжала в Kotlin.

Это то, о чем мне следует беспокоиться?

Спасибо.

Фабио Карбальо
источник
Можете ли вы опубликовать всю ошибку / предупреждение, а также связанный с ней код?
marcospereira
4
Вопрос требует более подробной информации. Вы в основном написали запрос Google как вопрос.
Джейсон Минард,
@marcospereira Отредактировано! Спасибо!
Fábio Carballo
4
Эй, ты нашел решение или, может быть, причину этого предупреждения?
wojciech_maciejewski
3
Вот ответ: github.com/square/dagger/issues/537
Р. Загорский

Ответы:

5

Боюсь, ты не сможешь. Почему бы не написать модули зависимостей в Kotlin?

Чтобы писать модули зависимостей на java, вам необходимо настроить скрипт Gradle следующим образом:

 compile 'com.google.dagger:dagger:2.8'
 apt 'com.google.dagger:dagger-compiler:2.8'

Но для написания модулей зависимостей в Kotlin вы должны настроить свой скрипт Gradle следующим образом:

compile 'com.google.dagger:dagger:2.8' 
kapt 'com.google.dagger:dagger-compiler:2.8'

dagger нужен инструмент обработки аннотаций для генерации кода зависимости в процессе компиляции. Поэтому я думаю, вам просто нужно использовать правильный APT (инструмент обработки аннотаций) в соответствии с правильным языком.

Иаков
источник