Skip to content

ProtoJavaAnalyse.convert() throws NPE when scanning package with QDox: "Cannot invoke JavaClass.getComment() because javaClass is null" #537

@kevinchen18

Description

@kevinchen18

环境版本:

  • ioGame 版本:21.30
  • Java 版本:21
    问题描述: 使用 GenerateFileKit.generate("com.xxx.xxx") 扫描包含 @ProtobufClass 注解的包时,出现 NullPointerException。

复现步骤:

  1. 定义多个使用 @ProtobufClass 和 @ProtoFileMerge 注解的类,注释中出现多行字符,或者用命令行方式运行的时候
  2. 调用 GenerateFileKit.generate("com.xxx.xxx") 扫描包含这些类的包
  3. 观察到错误日志
    完整错误堆栈:
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。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions