“Prefere executar o processador da adaga nessa classe” em Kotlin

124

Estou recebendo esta nota na compilação sempre que injeto em uma classe kotlin (btw, eu tenho um projeto android misto com kotlin e java).

Por exemplo, após esta tarefa gradle: compileStagingDebugJavaWithJavac(StagingDebug é minha variante de construção), recebo esta mensagem:

"Nota: Gerando um MembersInjector ou Factory para com.packageNameXXX.CourseDiscoveryMapFragment. Prefere executar o processador do punhal sobre essa classe."

Meu código CourseDiscoveryMapFragment pode ser visto aqui:

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

E meu ActivityComponent é:

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

    void inject(BaseActivity baseActivity);

    void inject(CourseDiscoveryMapFragment fragment);

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

Então, eu estou tendo componentes e módulos de punhal escritos em Java, enquanto tenho injeções de punhal no Kotlin.

É com isso que eu deveria me preocupar?

Obrigado.

Fábio Carballo
fonte
Você pode postar todo o erro / aviso e também o código relacionado a ele?
Marcospereira
4
A questão precisa de mais detalhes. Você basicamente escreveu uma consulta no Google como uma pergunta.
Jayson Minard
@marcospereira Reeditado! Obrigado!
Fábio Carballo 26/01
4
Ei, você encontrou solução ou talvez o motivo desse aviso?
Wojciech_maciejewski
3
Aqui está a resposta: github.com/square/dagger/issues/537
R. Zagórski 2/16

Respostas:

5

Eu tenho medo que você não possa. Por que não escrever módulos de dependência no Kotlin?

Para escrever módulos de dependência em java, você precisa configurar seu script Gradle desta maneira:

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

Mas, para escrever módulos de dependência no Kotlin, você deve configurar seu script Gradle desta maneira:

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

O punhal precisa da ferramenta de processamento de anotação para gerar o código de dependência durante o processo de compilação. Então eu acho que você só precisa usar o APT (ferramenta de processamento de anotação) certo, de acordo com o idioma certo.

Jacob
fonte