alibaba / ARouter

💪 A framework for assisting in the renovation of Android componentization (帮助 Android App 进行组件化改造的路由框架)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[arouter-compiler:1.5.2] RouteProcessor init JavaNullPointerException!

gerenvip opened this issue · comments

使用 ”com.alibaba:arouter-api:1.5.2“,"com.alibaba:arouter-compiler:1.5.2"
配合 androidx 使用 "androidx.room:room-compiler:2.4.3" // or 2.4.0
RouteProcessor.init 时 NullPointerException

经测试,单独使用 room-compiler 编译OK,
单独使用 arouter 编译 NullPointerException
回退 "com.alibaba:arouter-compiler:1.2.2" 与room 搭配 编译OK
看日志像是 room 版本号升级支持了Processor的增量编译,导致RouteProcessor这边出问题
辛苦帮忙排查下原因,感谢

crash 日志如下:

Caused by: com.sun.tools.javac.processing.AnnotationProcessingError: java.lang.NullPointerException
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.(JavacProcessingEnvironment.java:712)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:791)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:886)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1227)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1340)
at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)
... 41 more
Caused by: java.lang.NullPointerException
at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalFiler.createResource(incrementalProcessors.kt:122)
at com.alibaba.android.arouter.compiler.processor.RouteProcessor.init(RouteProcessor.java:86)
at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.init(incrementalProcessors.kt:41)
at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.init(annotationProcessing.kt:197)
at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.(JavacProcessingEnvironment.java:691)
... 46 more

 override fun init(processingEnv: ProcessingEnvironment) {
        if (!kind.canRunIncrementally) {
            processor.init(processingEnv)
        } else {
            val originalFiler = processingEnv.filer
            val incrementalFiler = IncrementalFiler(originalFiler)
            val incProcEnvironment = IncrementalProcessingEnvironment(processingEnv, incrementalFiler)
            processor.init(incProcEnvironment)
            incrementalFiler.dependencyCollector = dependencyCollector.value
        }
    }

看情况 在 init 方法内部调用 mFiler.createResource ,这时候还在 init 的调用栈中, incrementalFiler.dependencyCollector 还未赋值,这时候使用必然 NPE,懒加载 docWriter 就能规避这个问题了,望采纳