"Lebih suka menjalankan prosesor dagger di atas kelas itu" di Kotlin

124

Saya mendapatkan catatan ini di build setiap kali saya melakukan injeksi ke kelas kotlin (btw, saya memiliki proyek android campuran dengan kotlin dan java).

Misalnya, setelah tugas gradle ini: compileStagingDebugJavaWithJavac(StagingDebug adalah varian build saya), saya mendapatkan pesan ini:

"Catatan: Membuat MembersInjector atau Pabrik untuk com.packageNameXXX.CourseDiscoveryMapFragment. Lebih suka menjalankan dagger processor di atas kelas itu."

Kode CourseDiscoveryMapFragment saya dapat dilihat di sini:

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)
}

Dan ActivityComponent saya adalah:

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

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

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

Jadi, saya memiliki komponen dagger dan modul yang ditulis di Java, sementara injeksi dagger di Kotlin.

Apakah ini sesuatu yang harus saya khawatirkan?

Terima kasih.

Fábio Carballo
sumber
Bisakah Anda memposting seluruh kesalahan / peringatan dan juga kode yang terkait dengannya?
marcospereira
4
Pertanyaannya perlu lebih detail. Anda pada dasarnya menulis kueri google sebagai pertanyaan.
Jayson Minard
@marcospereira Diedit ulang! Terima kasih!
Fábio Carballo
4
Hei, apakah Anda menemukan solusi atau mungkin alasan untuk peringatan itu?
wojciech_maciejewski
3
Ini jawabannya: github.com/square/dagger/issues/537
R. Zagórski

Jawaban:

5

Saya khawatir Anda tidak bisa. Mengapa tidak menulis modul dependensi di Kotlin?

Untuk menulis modul dependensi di java, Anda perlu mengonfigurasi skrip Gradle Anda dengan cara ini:

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

Namun, untuk menulis modul dependensi di Kotlin, Anda harus mengonfigurasi skrip Gradle Anda dengan cara ini:

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

dagger membutuhkan alat pemrosesan anotasi untuk menghasilkan kode ketergantungan selama proses kompilasi. Jadi saya rasa Anda hanya perlu menggunakan APT (alat pengolah anotasi) yang benar sesuai dengan bahasa yang benar.

Yakub
sumber