I added a new Retrofit interface to my project containing a couple of Endpoints annotated with the @GET
and @HEADERS
annotations, after Injecting said interface to a repository class using the @Inject
annotation in the constructor of said class, Android Studio throws this error:
NonExistentClass cannot be converted to Annotation
After taking a look at the generated Java code, it replaces the @GET
and @HEADERS
annotations with this:
@error.NonExistentClass()
I've already tried the following:
Using annotatioProcessor
instead of kapt
Setting jetifier.enabled
to false
in gradle.properties
Setting generateStubs
to true
in my build.gradle
file
Setting correctErrorTypes
to true
in my build.gradle
file
Im using:
Android Studio 3.3
Kotlin 1.3.11
Dagger 2.21
Retrofit 2.3.0
Kotlin
Kapt
could it be some dagger scope issue? or Retrofit / dagger not fully compatible with the new versions of the Kapt plugin?
Luckily this question led me to figure out my issue. While moving around classes from an app module into a library, I was referencing an annotation class which only existed in a debug folder. So debug builds were fine, but calls to gradlew install
failed when generating release files.
The error for me was very explicit although it took me a long time to realize - the generated file had literally replaced the missing annotation with @error.NonExistentClass()
Moving the file into the main src set meant both debug and release builds could see the class. What took me a while to figure out was that I assumed this was a Dagger issue being masked by kapt, but really it was just a regular old Dagger issue. My advice is to look at your Dagger setup carefully.