2016-01-22 1 views
108

Je reçois cette note dans la construction quand je fais une injection dans une classe kotlin (btw, j'ai un projet Android mixte avec kotlin et java) ."Je préfère utiliser le processeur dague sur cette classe à la place" dans Kotlin

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

. « Note: Création d'un MembersInjector ou l'usine pour com.packageNameXXX.CourseDiscoveryMapFragment préfèrent courir le processeur d'épée sur cette classe à la place. "

Mon CourseDiscoveryMapFragment Code 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, je suis ayant un composant de poignard et modules écrits en Java , tout en ayant des injections de poignard à Kotlin.

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

Merci.

+0

Pouvez-vous poster toute erreur/avertissement ainsi que le code lié à elle? – marcospereira

+4

La question nécessite plus de détails. Vous avez essentiellement écrit une requête google comme question. –

+0

@marcospereira Ré-édité! Merci! –

Répondre

4

Je crains que vous ne pouvez 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 façon:

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

Mais, d'écrire des modules de dépendance à Kotlin, vous devez configurer votre script Gradle dans ce chemin:

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

poignard besoin du annotati sur l'outil de traitement pour générer le code de dépendance au cours du processus de compilation. Donc je suppose que vous avez juste besoin d'utiliser le bon APT (outil de traitement des annotations) selon le bon langage.

1

je suppose un problème de configuration dans le fichier gradle

Android studio par défaut ne vous permet pas de naviguer vers le code généré Dagger 2 en tant que classes légitimes parce qu'ils ne sont pas normalement ajoutés au chemin source. L'ajout du plugin annotationProcessor ajoutera ces fichiers dans le chemin de classe IDE et vous permettra d'avoir plus de visibilité.

Assurez-vous de mettre à niveau vers la dernière version gradle utiliser le annotationProcessor

dependencies { 
    compileOnly 'com.google.dagger:dagger-android:2.11' 
    compileOnly 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries 
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11' 
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11' 
} 

Source: https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2