Dagger: Enabling dagger.fastInit causes NPE in codegen

Created on 13 Aug 2018  路  3Comments  路  Source: google/dagger

In my project I tried enabling the dagger.fastInit compiler option with:

kapt {
  javacOptions {
    option("-Adagger.fastInit", "enabled")
  }
}

building the project I get this error:

e: [kapt] An exception occurred: java.lang.NullPointerException
        at com.google.common.base.Ascii.toUpperCase(Ascii.java:451)
        at dagger.internal.codegen.CompilerOptions.valueOf(CompilerOptions.java:314)
        at dagger.internal.codegen.CompilerOptions.fastInitEnabled(CompilerOptions.java:208)
        at dagger.internal.codegen.CompilerOptions.create(CompilerOptions.java:91)
        at dagger.internal.codegen.ProcessingEnvironmentModule.compilerOptions(ProcessingEnvironmentModule.java:84)
        at dagger.internal.codegen.ProcessingEnvironmentModule_CompilerOptionsFactory.get(ProcessingEnvironmentModule_CompilerOptionsFactory.java:27)
        at dagger.internal.codegen.ProcessingEnvironmentModule_CompilerOptionsFactory.get(ProcessingEnvironmentModule_CompilerOptionsFactory.java:8)
        at dagger.internal.SingleCheck.get(SingleCheck.java:49)
        at dagger.internal.codegen.InjectValidator_Factory.get(InjectValidator_Factory.java:31)
        at dagger.internal.codegen.InjectValidator_Factory.get(InjectValidator_Factory.java:8)
        at dagger.internal.codegen.InjectBindingRegistryImpl_Factory.get(InjectBindingRegistryImpl_Factory.java:51)
        at dagger.internal.codegen.InjectBindingRegistryImpl_Factory.get(InjectBindingRegistryImpl_Factory.java:9)
        at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
        at dagger.internal.codegen.DaggerComponentProcessor_ProcessorComponent.injectComponentProcessor(DaggerComponentProcessor_ProcessorComponent.java:660)
        at dagger.internal.codegen.DaggerComponentProcessor_ProcessorComponent.inject(DaggerComponentProcessor_ProcessorComponent.java:654)
        at dagger.internal.codegen.ComponentProcessor.initSteps(ComponentProcessor.java:105)
        at dagger.shaded.auto.common.BasicAnnotationProcessor.init(BasicAnnotationProcessor.java:118)
        at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.init(annotationProcessing.kt)
        at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:500)
        at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:597)
        at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:690)
        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:55)
        at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:27)
        at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:210)
        at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:175)
        at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:93)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:98)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:108)
        at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:85)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:370)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:61)
        at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:101)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:361)
        at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:126)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:154)
        at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:51)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:94)
        at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:50)
        at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:88)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:408)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:101)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:929)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:101)
        at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:969)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:928)
        at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:407)
        at sun.reflect.GeneratedMethodAccessor142.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:568)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
        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.17
Android Gradle Plugin: 3.1.4
Gradle: 4.9
Kotlin: 1.2.60

Most helpful comment

I believe you need:

-option("-Adagger.fastInit", "enabled")
+option("-Adagger.fastInit=enabled")

Annotation processor options only understand the key/value relationships AFAIK

All 3 comments

That is odd, since the options map in ProcessingEnvironment should never contain null values.

I believe you need:

-option("-Adagger.fastInit", "enabled")
+option("-Adagger.fastInit=enabled")

Annotation processor options only understand the key/value relationships AFAIK

Thanks @ronshapiro, that indeed worked. I misread the kapt doc, sorry for the noise.

Was this page helpful?
0 / 5 - 0 ratings