"Je préfère exécuter le processeur de poignard sur cette classe à la place" dans Kotlin

124

J'obtiens cette note dans la construction chaque fois que je fais une injection dans une classe kotlin (btw, j'ai un projet android mixte avec kotlin et java).

Par exemple, après cette tâche gradle: compileStagingDebugJavaWithJavac(StagingDebug est ma variante de construction), je reçois ce message:

"Remarque: Génération d'un MembersInjector ou Factory pour com.packageNameXXX.CourseDiscoveryMapFragment. Préférez plutôt exécuter le processeur de poignard sur cette classe."

Mon code CourseDiscoveryMapFragment peut être vu ici:

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

Et mon ActivityComponent est:

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

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

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

Donc, j'ai des composants et des modules de poignard écrits en Java, tout en ayant des injections de poignards dans Kotlin.

Est-ce quelque chose dont je devrais m'inquiéter?

Je vous remercie.

Fábio Carballo
la source
Pouvez-vous publier toute l'erreur / l'avertissement ainsi que le code qui s'y rapporte?
marcospereira
4
La question a besoin de plus de détails. Vous avez essentiellement écrit une requête Google sous forme de question.
Jayson Minard
@marcospereira réédité! Merci!
Fábio Carballo
4
Hé, avez-vous trouvé une solution ou peut-être la raison de cet avertissement?
wojciech_maciejewski
3
Voici la réponse: github.com/square/dagger/issues/537
R. Zagórski

Réponses:

5

J'ai peur que vous ne puissiez pas. Pourquoi ne pas écrire des modules de dépendance dans Kotlin?

Pour écrire des modules de dépendance en java, vous devez configurer votre script Gradle de cette manière:

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

Mais, pour écrire des modules de dépendance dans Kotlin, vous devez configurer votre script Gradle de cette manière:

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

dagger a besoin de l'outil de traitement des annotations pour générer le code de dépendance pendant le processus de compilation. Je suppose donc que vous avez juste besoin d'utiliser le bon APT (outil de traitement d'annotations) selon le bon langage.

Jacob
la source