Skip to content

Parsing invalid Javadoc reference fails #5443

@protocol7

Description

@protocol7

What version of OpenRewrite are you using?

  • org.openrewrite:rewrite-core:8.52.1

What is the smallest, simplest way to reproduce the problem?

This is a case the Javadoc is invalid, but where the parser should yet not fail. This was found in our code base but have since been fixed so this is not a blocker for us.

  @Test
  void parsingIncorrectJavadocValueReference() {
    rewriteRun(
        // language=java
        java(
            """
            public class Foo {
                private static final String BAR = "bar";

                /**
                This is an incorrect reference {@value BAR}
                */
                public void foo() {}
            }
            """));
  }

Fails with:

org.openrewrite.internal.RecipeRunException: java.lang.NullPointerException: Cannot invoke "org.openrewrite.java.tree.JRightPadded.getElement()" because "this.containing" is null
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:281)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:154)
	at org.openrewrite.java.JavadocVisitor.javaVisitorVisit(JavadocVisitor.java:38)
	at org.openrewrite.java.JavadocPrinter.visitInlinedValue(JavadocPrinter.java:148)
	at org.openrewrite.java.JavadocPrinter.visitInlinedValue(JavadocPrinter.java:29)
	at org.openrewrite.java.tree.Javadoc$InlinedValue.acceptJavadoc(Javadoc.java:282)
	at org.openrewrite.java.tree.Javadoc.accept(Javadoc.java:39)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.java.JavadocPrinter.visit(JavadocPrinter.java:352)
	at org.openrewrite.java.JavadocPrinter.visitDocComment(JavadocPrinter.java:71)
	at org.openrewrite.java.JavadocPrinter.visitDocComment(JavadocPrinter.java:29)
	at org.openrewrite.java.tree.Javadoc$DocComment.acceptJavadoc(Javadoc.java:158)
	at org.openrewrite.java.tree.Javadoc.accept(Javadoc.java:39)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:154)
	at org.openrewrite.java.tree.Javadoc$DocComment.printComment(Javadoc.java:163)
	at org.openrewrite.java.JavaPrinter.visitSpace(JavaPrinter.java:69)
	at org.openrewrite.java.JavaPrinter.beforeSyntax(JavaPrinter.java:1263)
	at org.openrewrite.java.JavaPrinter.beforeSyntax(JavaPrinter.java:1252)
	at org.openrewrite.java.JavaPrinter.visitMethodDeclaration(JavaPrinter.java:828)
	at org.openrewrite.java.JavaPrinter.visitMethodDeclaration(JavaPrinter.java:35)
	at org.openrewrite.java.tree.J$MethodDeclaration.acceptJava(J.java:3811)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.java.JavaPrinter.visitStatement(JavaPrinter.java:403)
	at org.openrewrite.java.JavaPrinter.visitStatements(JavaPrinter.java:394)
	at org.openrewrite.java.JavaPrinter.visitBlock(JavaPrinter.java:385)
	at org.openrewrite.java.JavaPrinter.visitBlock(JavaPrinter.java:35)
	at org.openrewrite.java.tree.J$Block.acceptJava(J.java:837)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.java.JavaPrinter.visitClassDeclaration(JavaPrinter.java:558)
	at org.openrewrite.java.JavaPrinter.visitClassDeclaration(JavaPrinter.java:35)
	at org.openrewrite.java.tree.J$ClassDeclaration.acceptJava(J.java:1345)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:291)
	at org.openrewrite.java.JavaPrinter.visitCompilationUnit(JavaPrinter.java:571)
	at org.openrewrite.java.JavaPrinter.visitCompilationUnit(JavaPrinter.java:35)
	at org.openrewrite.java.tree.J$CompilationUnit.acceptJava(J.java:1616)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:154)
	at org.openrewrite.Tree.print(Tree.java:81)
	at org.openrewrite.SourceFile.printAll(SourceFile.java:102)
	at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:314)
	at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:130)
	at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:125)
	at 
KnownBugsTest.parsingIncorrectJavadocValueReference(KnownBugsTest.java:338)
Caused by: java.lang.NullPointerException: Cannot invoke "org.openrewrite.java.tree.JRightPadded.getElement()" because "this.containing" is null
	at org.openrewrite.java.tree.J$MemberReference.getContaining(J.java:3544)
	at org.openrewrite.java.JavadocPrinter$JavadocJavaPrinter.visitMemberReference(JavadocPrinter.java:400)
	at org.openrewrite.java.JavadocPrinter$JavadocJavaPrinter.visitMemberReference(JavadocPrinter.java:366)
	at org.openrewrite.java.tree.J$MemberReference.acceptJava(J.java:3614)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:154)
	at org.openrewrite.java.JavadocVisitor.javaVisitorVisit(JavadocVisitor.java:38)
	at org.openrewrite.java.JavadocPrinter.visitInlinedValue(JavadocPrinter.java:148)
	at org.openrewrite.java.JavadocPrinter.visitInlinedValue(JavadocPrinter.java:29)
	at org.openrewrite.java.tree.Javadoc$InlinedValue.acceptJavadoc(Javadoc.java:282)
	at org.openrewrite.java.tree.Javadoc.accept(Javadoc.java:39)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.java.JavadocPrinter.visit(JavadocPrinter.java:352)
	at org.openrewrite.java.JavadocPrinter.visitDocComment(JavadocPrinter.java:71)
	at org.openrewrite.java.JavadocPrinter.visitDocComment(JavadocPrinter.java:29)
	at org.openrewrite.java.tree.Javadoc$DocComment.acceptJavadoc(Javadoc.java:158)
	at org.openrewrite.java.tree.Javadoc.accept(Javadoc.java:39)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:154)
	at org.openrewrite.java.tree.Javadoc$DocComment.printComment(Javadoc.java:163)
	at org.openrewrite.java.JavaPrinter.visitSpace(JavaPrinter.java:69)
	at org.openrewrite.java.JavaPrinter.beforeSyntax(JavaPrinter.java:1263)
	at org.openrewrite.java.JavaPrinter.beforeSyntax(JavaPrinter.java:1252)
	at org.openrewrite.java.JavaPrinter.visitMethodDeclaration(JavaPrinter.java:828)
	at org.openrewrite.java.JavaPrinter.visitMethodDeclaration(JavaPrinter.java:35)
	at org.openrewrite.java.tree.J$MethodDeclaration.acceptJava(J.java:3811)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.java.JavaPrinter.visitStatement(JavaPrinter.java:403)
	at org.openrewrite.java.JavaPrinter.visitStatements(JavaPrinter.java:394)
	at org.openrewrite.java.JavaPrinter.visitBlock(JavaPrinter.java:385)
	at org.openrewrite.java.JavaPrinter.visitBlock(JavaPrinter.java:35)
	at org.openrewrite.java.tree.J$Block.acceptJava(J.java:837)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.java.JavaPrinter.visitClassDeclaration(JavaPrinter.java:558)
	at org.openrewrite.java.JavaPrinter.visitClassDeclaration(JavaPrinter.java:35)
	at org.openrewrite.java.tree.J$ClassDeclaration.acceptJava(J.java:1345)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:291)
	at org.openrewrite.java.JavaPrinter.visitCompilationUnit(JavaPrinter.java:571)
	at org.openrewrite.java.JavaPrinter.visitCompilationUnit(JavaPrinter.java:35)
	at org.openrewrite.java.tree.J$CompilationUnit.acceptJava(J.java:1616)
	at org.openrewrite.java.tree.J.accept(J.java:58)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:245)
	at org.openrewrite.TreeVisitor.visit(TreeVisitor.java:154)
	at org.openrewrite.Tree.print(Tree.java:81)
	at org.openrewrite.SourceFile.printAll(SourceFile.java:102)
	at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:314)
	at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:130)
	at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:125)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions