Skip to content

FinalizeLocalVariables might fail with IllegalStateException on a Kotlin or Groovy build script #702

@greg-at-moderne

Description

@greg-at-moderne

What version of OpenRewrite are you using?

OR current main (7edbbf01ab8a9b666ef3c2003ee7b8e0c66a4967)
rewrite-static-analysis (428d8b0)

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

Add the following test to a new file src/test/java/org/openrewrite/staticanalysis/kotlin/FinalizeLocalVariablesTest.java:

    @Override
    public void defaults(RecipeSpec spec) {
        spec.recipe(new FinalizeLocalVariables());
    }

    @Test
    void kotlinVar() {
        rewriteRun(
          kotlin(
            """
            var x = 1
            """
          )
        );
    }

Observed

java.lang.IllegalStateException: Expected to find a matching parent for Cursor{VariableDeclarations->CompilationUnit->root}
	at org.openrewrite.Cursor.dropParentUntil(Cursor.java:200)
	at org.openrewrite.staticanalysis.FinalizeLocalVariables$1.getCursorToParentScope(FinalizeLocalVariables.java:94)
	at org.openrewrite.staticanalysis.FinalizeLocalVariables$1.visitVariableDeclarations(FinalizeLocalVariables.java:75)
	at org.openrewrite.staticanalysis.FinalizeLocalVariables$1.visitVariableDeclarations(FinalizeLocalVariables.java:46)
	at org.openrewrite.staticanalysis.FinalizeLocalVariables_1_KotlinVisitor.visitVariableDeclarations(FinalizeLocalVariables_1_KotlinVisitor.zig:81)

OSS repro

Groovy

Same story for Groovy:

java.lang.IllegalStateException: Expected to find a matching parent for Cursor{VariableDeclarations->CompilationUnit->root}
  org.openrewrite.Cursor.dropParentUntil(Cursor.java:200)
  org.openrewrite.staticanalysis.FinalizeLocalVariables$1.getCursorToParentScope(FinalizeLocalVariables.java:94)
  org.openrewrite.staticanalysis.FinalizeLocalVariables$1.visitVariableDeclarations(FinalizeLocalVariables.java:75)
  org.openrewrite.staticanalysis.FinalizeLocalVariables$1.visitVariableDeclarations(FinalizeLocalVariables.java:46)
  org.openrewrite.staticanalysis.FinalizeLocalVariables_1_GroovyVisitor.visitVariableDeclarations(FinalizeLocalVariables_1_GroovyVisitor.zig:123)
  org.openrewrite.java.tree.J$VariableDeclarations.acceptJava(J.java:6166)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions