Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[arouter-compiler:1.5.2] RouteProcessor init JavaNullPointerException! #1035

Open
gerenvip opened this issue Jan 10, 2023 · 2 comments
Open

Comments

@gerenvip
Copy link

使用 ”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

@gerenvip
Copy link
Author

@gerenvip
Copy link
Author

 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 就能规避这个问题了,望采纳

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant