2
votes

NonExistentClass ne peut pas être converti en annotation

J'ai ajouté une nouvelle interface Retrofit à mon projet contenant quelques Endpoints annotés avec les annotations @GET et @HEADERS , après avoir injecté ladite interface dans une classe de référentiel en utilisant l'annotation @Inject dans le constructeur de ladite classe, Android Studio renvoie cette erreur:

@error.NonExistentClass()

Après avoir regardé le code Java généré, il remplace le @GET et @HEADERS annotations avec ceci:

NonExistentClass cannot be converted to Annotation

J'ai déjà essayé ce qui suit:

  • Utilisation de annotatioProcessor au lieu de kapt

  • Définition de jetifier.enabled sur false dans gradle.properties

  • Définition de generateStubs sur true dans mon fichier build.gradle

  • Définition de correctErrorTypes sur true dans mon fichier build.gradle

J'utilise:

  • Android Studio 3.3

  • Kotlin 1.3.11

  • Dague 2.21

  • Rénovation 2.3.0

  • Kotlin

  • Kapt

Serait-ce un problème de portée de poignard? ou Retrofit / dagger pas entièrement compatible avec les nouvelles versions du plugin Kapt?


3 commentaires

Pouvez-vous montrer du code?


J'ai trouvé la solution, mon projet est multi-module et le module remote contenait la dépendance retrofit , pour une raison quelconque, l'EDI permet d'accéder au remote dépendances du module du module app , l'ajout des dépendances retrofit sur le module a résolu le problème


Merci @AlfredoBejarano J'ai compris mon problème, cela m'a pris plus de temps que je ne le pensais, mais l'erreur pour moi était en fait très explicite. J'ajouterai une réponse qui pourrait aider les autres.


3 Réponses :


3
votes

Heureusement, cette question m'a amené à comprendre mon problème. En déplaçant les classes d'un module d'application vers une bibliothèque, je faisais référence à une classe d'annotation qui n'existait que dans un dossier de débogage. Donc, les versions de débogage étaient bien, mais les appels à gradlew install ont échoué lors de la génération des fichiers de version.

L'erreur pour moi était très explicite même si cela m'a pris beaucoup de temps à réaliser - le fichier généré avait littéralement remplacé l'annotation manquante par @error.NonExistentClass()

Déplacer le fichier dans l'ensemble src principal signifiait que les versions de débogage et de publication pouvaient voir la classe. Ce qui m'a pris du temps à comprendre, c'est que je supposais que c'était un problème de Dagger masqué par kapt, mais en réalité c'était juste un vieux problème de Dagger. Mon conseil est de regarder attentivement la configuration de votre Dagger.


1 commentaires

Je pense que l'astuce ici est que si vous dépendiez d'un module qui dépendait d'un autre module / bibliothèque (par exemple Retrofit) mais que vous définissez Retrofit comme une dépendance implémentation au lieu de api < / code>, alors votre module ne le verrait pas de manière transitoire et kapt échouerait.



1
votes

Pour moi, j'ai récemment supprimé la dague d'un projet et j'ai oublié de supprimer les annotations @Singleton et @Inject des classes concernées.


0 commentaires

0
votes

Pour moi, il supprime péniblement tous les @Singleton et @OpenForTesting sur mes classes Module. Et en supprimant deux classes DAO et un référentiel dont les classes de modèle de support ne sont plus annotées avec @Entity.


0 commentaires