Dagger: not a valid name: <set-?>Provider After updating android studio to 3.5

Created on 20 Aug 2019  路  20Comments  路  Source: google/dagger

Hi all, i'm facing issue with dagger after updating android studio to 3.5, this is the stacktrace

e: [kapt] An exception occurred: java.lang.IllegalArgumentException: not a valid name: <set-?>Provider
    at com.squareup.javapoet.Util.checkArgument(Util.java:53)
    at com.squareup.javapoet.FieldSpec.builder(FieldSpec.java:91)
    at dagger.internal.codegen.MembersInjectorGenerator.write(MembersInjectorGenerator.java:157)
    at dagger.internal.codegen.MembersInjectorGenerator.write(MembersInjectorGenerator.java:66)
    at dagger.internal.codegen.SourceFileGenerator.generate(SourceFileGenerator.java:78)
    at dagger.internal.codegen.InjectBindingRegistryImpl$BindingsCollection.generateBindings(InjectBindingRegistryImpl.java:89)
    at dagger.internal.codegen.InjectBindingRegistryImpl.generateSourcesForRequiredBindings(InjectBindingRegistryImpl.java:183)
    at dagger.internal.codegen.ComponentProcessor.postRound(ComponentProcessor.java:189)
    at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:183)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt)
    at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:132)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
    at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:80)
    at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:36)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:223)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:187)
    at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:98)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:95)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:105)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:80)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:398)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:65)
    at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:107)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:389)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:118)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:166)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:56)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:84)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:42)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:104)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:442)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:102)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:1005)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:102)
    at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:138)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:1047)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:1004)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:441)
    at sun.reflect.GeneratedMethodAccessor103.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:834)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Dagger version: 2.24

Most helpful comment

Seems that i have managed it to work on:
android studio 3.5.0
dagger version 2.24,
gradle plugin 2.5.0
wrapper 5.4.1

Just double check that your project neither use @set:Inject or @Inject set structures.

@Inject
lateinit var: Some

would be enough

image

All 20 comments

Same on dagger 2.16

I get the same error on 2.24 too.

Same error since moved to Android Studio 3.5, it's only triggered while running tests from inside the IDE. Console is fine.

I encountered the same error after migrating to Android Studio 3.5 for 2.24 version. It seems to be because of changes in kapt.

Same issue here using dagger 2.11.

Same issue here using dagger 2.19.

avoiding any usages of @set:Inject can be used as a workaround

avoiding any usages of @set:Inject can be used as a workaround

I don't have any @set:Inject, other suggestions?

For me this did not work:

@set:Inject
lateinit var something: Something

This did not work either:

var something: Something? = null
   @Inject set

But, this did:

var something: Something? = null
   @Inject set(value) {
      field = value
   }

IDE will complain that the full declaration is redundant and can be simplified, however this was the only way that kapt accepted :)

@TheMedo thanks! It works.

It seems that before the update @Inject set was shorthand for field = value but this magic is now removed (more explicit).

You can also use:

@Inject
@JvmField
var something: Something? = null

Thanks to @mennovogel

For what it's worth I was able to get it to compile if i downgrade from gradle plugin 3.5.0 to 3.4.2 as a temporary developer fix to unblock while we try the above

@JvmField

change

Seems that i have managed it to work on:
android studio 3.5.0
dagger version 2.24,
gradle plugin 2.5.0
wrapper 5.4.1
Just double check that your project neither use @set:Inject or @Inject set structures.

@Inject
lateinit var: Some

would be enough

Seems that i have managed it to work on:
android studio 3.5.0
dagger version 2.24,
gradle plugin 2.5.0
wrapper 5.4.1

Just double check that your project neither use @set:Inject or @Inject set structures.

@Inject
lateinit var: Some

would be enough

image

I get the same error on 2.24 too.

However, I was able to build after changing the SDK location AdoptOpenJDK 8 or Amazon Corretto 8.

/usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    1.8.0_222, x86_64:  "Amazon Corretto 8" /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home
    1.8.0_222, x86_64:  "AdoptOpenJDK 8"    /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

I got exactly the same issue after Android Studio was updated to the version 3.5
I fixed this issue in 4 steps:

  1. Added kotlinOptions section with jvmTarget into _app/build.gradle_
    kotlinOptions { jvmTarget = "1.8" }
    (the section compileOptions is already there)
    compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
  2. Upgraded dagger from _2.22.1_ to _2.24_

  3. Disabled incremental kapt in gradle.properties
    kapt.incremental.apt=false

  4. Invalidated build cache, restarted Android Studio and rebuilt the project

Note, that the CI build is working all the time.

I got exactly the same issue after Android Studio was updated to the version 3.5
I fixed this issue in 4 steps:

  1. Added kotlinOptions section with jvmTarget into _app/build.gradle_
    kotlinOptions { jvmTarget = "1.8" }
    (the section compileOptions is already there)
    compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
  2. Upgraded dagger from _2.22.1_ to _2.24_
  3. Disabled incremental kapt in gradle.properties
    kapt.incremental.apt=false
  4. Invalidated build cache, restarted Android Studio and rebuilt the project

Note, that the CI build is working all the time.

Didn't help in my case :(

I see this on 2.25.2 specifically with JDK 11. Appears to work fine with JDK 8.

Repro: https://github.com/ZacSweers/CatchUp/pull/204
JAVA_HOME: /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home
Command: ./gradlew clean :app:assembleDebug --no-build-cache --stacktrace

Caused by: java.lang.IllegalArgumentException: not a valid name: [email protected] intArray
        at com.squareup.javapoet.Util.checkArgument(Util.java:53)
        at com.squareup.javapoet.MethodSpec$Builder.<init>(MethodSpec.java:295)
        at com.squareup.javapoet.MethodSpec$Builder.<init>(MethodSpec.java:279)
        at com.squareup.javapoet.MethodSpec.methodBuilder(MethodSpec.java:173)
        at dagger.internal.codegen.writing.PrivateMethodBindingExpression.addMethod(PrivateMethodBindingExpression.java:66)
        at dagger.internal.codegen.writing.MethodBindingExpression.getDependencyExpression(MethodBindingExpression.java:82)
        at dagger.internal.codegen.writing.ComponentBindingExpressions.getDependencyExpression(ComponentBindingExpressions.java:127)
        at dagger.internal.codegen.writing.ComponentBindingExpressions.getDependencyArgumentExpression(ComponentBindingExpressions.java:195)
        at dagger.internal.codegen.writing.MembersInjectionMethods.lambda$membersInjectionMethod$0(MembersInjectionMethods.java:117)
        at dagger.internal.codegen.writing.InjectionMethods$InjectionSiteMethod.invoke(InjectionMethods.java:345)
        at dagger.internal.codegen.writing.InjectionMethods$InjectionSiteMethod.lambda$invokeAll$0(InjectionMethods.java:315)
        at com.google.common.collect.CollectSpliterators$1WithCharacteristics.lambda$forEachRemaining$1(CollectSpliterators.java:64)
        at com.google.common.collect.CollectSpliterators$1WithCharacteristics.forEachRemaining(CollectSpliterators.java:64)
        at dagger.internal.codegen.writing.InjectionMethods$InjectionSiteMethod.invokeAll(InjectionMethods.java:323)
        at dagger.internal.codegen.writing.MembersInjectionMethods.membersInjectionMethod(MembersInjectionMethods.java:109)
        at dagger.internal.codegen.base.Util.reentrantComputeIfAbsent(Util.java:33)
        at dagger.internal.codegen.writing.MembersInjectionMethods.getOrCreate(MembersInjectionMethods.java:79)
        at dagger.internal.codegen.writing.MembersInjectionBindingExpression.membersInjectionInvocation(MembersInjectionBindingExpression.java:70)
        at dagger.internal.codegen.writing.MembersInjectionBindingExpression.getComponentMethodImplementation(MembersInjectionBindingExpression.java:64)
        at dagger.internal.codegen.writing.ComponentBindingExpressions.getComponentMethod(ComponentBindingExpressions.java:220)
        at dagger.internal.codegen.ComponentImplementationBuilder.addInterfaceMethods(ComponentImplementationBuilder.java:171)
        at dagger.internal.codegen.ComponentImplementationBuilder.build(ComponentImplementationBuilder.java:136)
        at dagger.internal.codegen.ComponentImplementationBuilder.buildChildImplementation(ComponentImplementationBuilder.java:271)
        at dagger.internal.codegen.ComponentImplementationBuilder.addChildComponents(ComponentImplementationBuilder.java:257)
        at dagger.internal.codegen.ComponentImplementationBuilder.build(ComponentImplementationBuilder.java:137)
        at dagger.internal.codegen.ComponentImplementationBuilder.buildChildImplementation(ComponentImplementationBuilder.java:271)
        at dagger.internal.codegen.ComponentImplementationBuilder.addChildComponents(ComponentImplementationBuilder.java:257)
        at dagger.internal.codegen.ComponentImplementationBuilder.build(ComponentImplementationBuilder.java:137)
        at dagger.internal.codegen.ComponentImplementationFactory.createComponentImplementationUncached(ComponentImplementationFactory.java:84)
        at dagger.internal.codegen.ComponentImplementationFactory.lambda$createComponentImplementation$0(ComponentImplementationFactory.java:60)
        at dagger.internal.codegen.base.Util.reentrantComputeIfAbsent(Util.java:33)
        at dagger.internal.codegen.ComponentImplementationFactory.createComponentImplementation(ComponentImplementationFactory.java:57)
        at dagger.internal.codegen.ComponentGenerator.write(ComponentGenerator.java:70)
        at dagger.internal.codegen.ComponentGenerator.write(ComponentGenerator.java:39)
        at dagger.internal.codegen.base.SourceFileGenerator.generate(SourceFileGenerator.java:77)
        at dagger.internal.codegen.base.SourceFileGenerator.generate(SourceFileGenerator.java:69)
        at dagger.internal.codegen.ComponentProcessingStep.generateComponent(ComponentProcessingStep.java:170)
        at dagger.internal.codegen.ComponentProcessingStep.processRootComponent(ComponentProcessingStep.java:152)
        at dagger.internal.codegen.ComponentProcessingStep.process(ComponentProcessingStep.java:131)
        at dagger.internal.codegen.ComponentProcessingStep.process(ComponentProcessingStep.java:62)
        at dagger.internal.codegen.validation.TypeCheckingProcessingStep.lambda$process$0(TypeCheckingProcessingStep.java:51)
        at com.google.common.collect.RegularImmutableMap.forEach(RegularImmutableMap.java:185)
        at dagger.internal.codegen.validation.TypeCheckingProcessingStep.process(TypeCheckingProcessingStep.java:48)
        at dagger.internal.codegen.ComponentProcessingStep.process(ComponentProcessingStep.java:124)
        at dagger.internal.codegen.ComponentProcessingStep.process(ComponentProcessingStep.java:62)
        at dagger.internal.codegen.statistics.DaggerStatisticsCollectingProcessingStep.process(DaggerStatisticsCollectingProcessingStep.java:52)
        at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:330)
        at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:181)
        at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt)
        at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:147)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:980)
        ... 38 more

Have you seen this article?
https://www.donnfelker.com/dagger-open-jdk-version-mismatch/

When changing the jdk location in the module settings to what I'm running Android Studio with I no longer get this problem.

My jdk location: /usr/lib/jvm/java-1.8.0-openjdk

This links to my current jdk which is /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.fc31.x86_64 as seen below:

$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

Hit this again today:
JDK 11.0.8
Kotlin 1.4.10
Dagger 2.28.3

@Singleton
class FooClass @Inject constructor(
    thingProvider: ThingProvider
) : FooTracker(thingProvider) {

    var myVar: Boolean = false
        .....

}

Which produces bytecode like:

// access flags 0x11
public final setMyVar(Z)V
// annotable parameter count: 1 (visible)
// annotable parameter count: 1 (invisible)
L0
LINENUMBER 13 L0
ALOAD 0
ILOAD 1
PUTFIELD com/example/FooClass.myVar : Z
RETURN
L1
LOCALVARIABLE this Lcom/example/FooClass; L0 L1 0
LOCALVARIABLE <set-?> Z L0 L1 1
MAXSTACK = 2
MAXLOCALS = 2

Looks like <set-?> is a local variable name?

and we get this exception...

Caused by: com.sun.tools.javac.processing.AnnotationProcessingError: java.lang.IllegalArgumentException: not a valid name: <set-?>Provider
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:992)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:896)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1222)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1334)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1157)
        ... 38 more
Caused by: java.lang.IllegalArgumentException: not a valid name: <set-?>Provider
        at com.squareup.javapoet.Util.checkArgument(Util.java:53)
        at com.squareup.javapoet.FieldSpec.builder(FieldSpec.java:91)
        at dagger.internal.codegen.writing.MembersInjectorGenerator.write(MembersInjectorGenerator.java:177)
        at dagger.internal.codegen.writing.MembersInjectorGenerator.write(MembersInjectorGenerator.java:73)
        at dagger.internal.codegen.base.SourceFileGenerator.generate(SourceFileGenerator.java:77)
        at dagger.internal.codegen.validation.InjectBindingRegistryImpl$BindingsCollection.generateBindings(InjectBindingRegistryImpl.java:97)
        at dagger.internal.codegen.validation.InjectBindingRegistryImpl.generateSourcesForRequiredBindings(InjectBindingRegistryImpl.java:191)
        at dagger.internal.codegen.ComponentProcessor.postRound(ComponentProcessor.java:198)
        at dagger.shaded.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:183)
        at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt)
        at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:161)
        at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:980)
        ... 43 more
Was this page helpful?
0 / 5 - 0 ratings