"Prefiero ejecutar el procesador de dagas sobre esa clase" en Kotlin

124

Recibo esta nota en la compilación cada vez que hago una inyección en una clase de kotlin (por cierto, tengo un proyecto mixto de Android con kotlin y java).

Por ejemplo, después de esta tarea gradle: compileStagingDebugJavaWithJavac(StagingDebug es mi variante de compilación), recibo este mensaje:

"Nota: Generando un MembersInjector o Factory para com.packageNameXXX.CourseDiscoveryMapFragment. En su lugar, prefiera ejecutar el procesador de dagas sobre esa clase".

Mi código de CourseDiscoveryMapFragment se puede ver aquí:

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

Y mi Componente de actividad es:

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

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

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

Entonces, tengo componentes y módulos de dagas escritos en Java, mientras tengo inyecciones de dagas en Kotlin.

¿Es esto algo de lo que debería preocuparme?

Gracias.

Fábio Carballo
fuente
¿Puede publicar todo el error / advertencia y también el código relacionado con él?
marcospereira
44
La pregunta necesita más detalles. Básicamente escribiste una consulta de Google como una pregunta.
Jayson Minard
@marcospereira Reeditado! ¡Gracias!
Fábio Carballo
44
Oye, ¿encontraste solución o tal vez razón para esa advertencia?
wojciech_maciejewski
3
Aquí está la respuesta: github.com/square/dagger/issues/537
R. Zagórski

Respuestas:

5

Me temo que no puedes. ¿Por qué no escribir módulos de dependencia en Kotlin?

Para escribir módulos de dependencia en java, debe configurar su script Gradle de esta manera:

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

Pero, para escribir módulos de dependencia en Kotlin, debe configurar su script Gradle de esta manera:

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

Dagger necesita la herramienta de procesamiento de anotaciones para generar el código de dependencia durante el proceso de compilación. Así que supongo que solo necesitas usar la APT (herramienta de procesamiento de anotaciones) correcta según el lenguaje correcto.

Jacob
fuente