环境版本:
- ioGame 版本:21.30
- Java 版本:21
问题描述: 使用 GenerateFileKit.generate("com.xxx.xxx") 扫描包含 @ProtobufClass 注解的包时,出现 NullPointerException。
复现步骤:
- 定义多个使用 @ProtobufClass 和 @ProtoFileMerge 注解的类,注释中出现多行字符,或者用命令行方式运行的时候
- 调用 GenerateFileKit.generate("com.xxx.xxx") 扫描包含这些类的包
- 观察到错误日志
完整错误堆栈:
java.lang.NullPointerException:
Cannot invoke "com.thoughtworks.
qdox.model.JavaClass.getComment()"
because "javaClass" is null
at com.iohao.game.widget.light.
protobuf.ProtoJavaAnalyse.
lambda$convert$3
(ProtoJavaAnalyse.java:123)
at java.base/java.util.stream.
ReferencePipeline$3$1.accept
(ReferencePipeline.java:197)
at java.base/java.util.
ArrayList$ArrayListSpliterator.
forEachRemaining(ArrayList.
java:1708)
at java.base/java.util.stream.
AbstractPipeline.copyInto
(AbstractPipeline.java:509)
at java.base/java.util.stream.
AbstractPipeline.wrapAndCopyInto
(AbstractPipeline.java:499)
at java.base/java.util.stream.
AbstractPipeline.evaluate
(AbstractPipeline.java:234)
at java.base/java.util.stream.
ReferencePipeline.collect
(ReferencePipeline.java:682)
at com.iohao.game.widget.light.
protobuf.ProtoJavaAnalyse.
convert(ProtoJavaAnalyse.
java:136)
at com.iohao.game.widget.light.
protobuf.ProtoJavaAnalyse.
analyse(ProtoJavaAnalyse.
java:93)
at com.iohao.game.widget.light.
protobuf.ProtoJavaAnalyse.
analyse(ProtoJavaAnalyse.
java:57)
at com.iohao.game.widget.light.
protobuf.ProtoGenerateFile.
lambda$generate$0
(ProtoGenerateFile.java:91)
at java.base/java.util.stream.
ForEachOps$ForEachOp$OfRef.
accept(ForEachOps.java:184)
...
at com.iohao.game.widget.light.
protobuf.kit.GenerateFileKit.
generate(GenerateFileKit.
java:59)
at com.iohao.game.widget.light.
protobuf.kit.GenerateFileKit.
generate(GenerateFileKit.
java:77)
相关代码位置:
- ProtoJavaAnalyse.java:123 - lambda$convert$3
- ProtoJavaAnalyse.java:136 - convert() 方法中的 collect()
- ProtoJavaAnalyse.java:93 - analyse() 方法
期望行为: 扫描包时应该正确处理所有类,即使某些类的 QDox 解析出现问题,也应该生成 proto 文件而不是抛出 NPE。
实际行为: 抛出 NullPointerException
可能的根因: ProtoJavaAnalyse.convert() 方法中,当 javaClass 为 null 时直接调用 javaClass.getComment() 导致 NPE。
环境版本:
问题描述: 使用 GenerateFileKit.generate("com.xxx.xxx") 扫描包含 @ProtobufClass 注解的包时,出现 NullPointerException。
复现步骤:
完整错误堆栈:
相关代码位置:
期望行为: 扫描包时应该正确处理所有类,即使某些类的 QDox 解析出现问题,也应该生成 proto 文件而不是抛出 NPE。
实际行为: 抛出 NullPointerException
可能的根因: ProtoJavaAnalyse.convert() 方法中,当 javaClass 为 null 时直接调用 javaClass.getComment() 导致 NPE。