【问题标题】:Java Parser comment statementJava Parser 注释语句
【发布时间】:2023-04-02 16:21:01
【问题描述】:

我正在尝试评论一个具体的陈述。

  1. 我的第一种方法是在 case 语句是“表达式语句”且表达式是特定的“方法调用表达式”时返回注释。
new ModifierVisitor<Object>() {
   public Visitable visit(ExpressionStmt expStmt, Object arg) {
      Expression exp = expStmt.getExpression();
         if (exp.isMethodCallExpr()) {

         // My other logic goes here
         
         return new LineComment(expStmt.toString());
         }
    }
}


但在将单元转储回字符串时失败。


java.lang.ClassCastException: com.github.javaparser.ast.comments.LineComment cannot be cast to com.github.javaparser.ast.stmt.Statement
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.visit(DefaultPrettyPrinterVisitor.java:1329)
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.visit(DefaultPrettyPrinterVisitor.java:163)
    at com.github.javaparser.ast.stmt.BlockStmt.accept(BlockStmt.java:76)
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.visit(DefaultPrettyPrinterVisitor.java:1220)
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.visit(DefaultPrettyPrinterVisitor.java:163)
    at com.github.javaparser.ast.body.MethodDeclaration.accept(MethodDeclaration.java:104)
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.printMembers(DefaultPrettyPrinterVisitor.java:190)
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.visit(DefaultPrettyPrinterVisitor.java:419)
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.visit(DefaultPrettyPrinterVisitor.java:163)
    at com.github.javaparser.ast.body.ClassOrInterfaceDeclaration.accept(ClassOrInterfaceDeclaration.java:98)
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.visit(DefaultPrettyPrinterVisitor.java:325)
    at com.github.javaparser.printer.DefaultPrettyPrinterVisitor.visit(DefaultPrettyPrinterVisitor.java:163)
    at com.github.javaparser.ast.CompilationUnit.accept(CompilationUnit.java:133)
    at com.github.javaparser.printer.DefaultPrettyPrinter.print(DefaultPrettyPrinter.java:104)
    at com.github.javaparser.ast.Node.toString(Node.java:320)


  1. 因为它表明您可以用另一个语句替换“语句”,所以我尝试了另一种方法来替换语句并用“空语句”替换。它对我有用,但输出看起来不太好,因为它留下了额外的 ';'在注释行之后。

  2. 第三次我尝试更深入,而不是替换语句,而是尝试用注释替换表达式。正如SO - Javaparser comment expression 中提到的那样,这也失败了。

知道如何解决这个问题吗?

【问题讨论】:

  • @Loggable。 logger.log(评论)。
  • 没听懂@OleksiiKyslytsyn .. 你能解释一下吗?
  • 对 Java 语言规范的快速浏览表明没有“注释语句”之类的东西 = cmets 在词法分析器中被删除。大概这个解析器坚持这一点。
  • @VinodPahuja desc 选择“是的,我可以”。通过外部文件。通过日志文件。通过记录器。

标签: javaparser


【解决方案1】:

我尝试了一种解决方法,感觉不是一个好的解决方案,但现在给了我预期的结果:

BlockStmt blockStmt = (BlockStmt) expStmt.getParentNode().get();
blockStmt.getStatement(blockStmt.getStatements().indexOf(expStmt) + 1).setLineComment(expStmt.toString());
return null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 1970-01-01
    相关资源
    最近更新 更多