Skip to content

RenameVariable doesn't rename qualified field reference #6195

@protocol7

Description

@protocol7

What version of OpenRewrite are you using?

  • org.openrewrite:rewrite-core:8.64.0

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

  @Test
  void renameVariableQualifiedField() {
    rewriteRun(
        spec ->
            spec.recipe(
                toRecipe(
                    () ->
                        new JavaIsoVisitor<>() {
                          @Override
                          public J.VariableDeclarations.NamedVariable visitVariable(
                              J.VariableDeclarations.NamedVariable variable,
                              ExecutionContext executionContext) {
                            if ("foo".equals(variable.getSimpleName())) {
                              doAfterVisit(new RenameVariable<>(variable, "FOO"));
                            }
                            return super.visitVariable(variable, executionContext);
                          }
                        })),
        // language=java
        java(
            """
                import java.util.ArrayList;
                import java.util.List;

                public class Bar {
                  private static final List<String> foo = new ArrayList<>();

                  public void bar() {
                    for (String f : foo) {}
                    for (String f : Bar.foo) {}
                  }
                }
            """,
            """
                import java.util.ArrayList;
                import java.util.List;

                public class Bar {
                  private static final List<String> FOO = new ArrayList<>();

                  public void bar() {
                    for (String f : FOO) {}
                    for (String f : Bar.FOO) {}
                  }
                }
            """));
  }
org.opentest4j.AssertionFailedError: [Unexpected result in "Bar.java":
diff --git a/Bar.java b/Bar.java
index 17bb04c..56465db 100644
--- a/Bar.java
+++ b/Bar.java
@@ -6,6 +6,6 @@

   public void bar() {
     for (String f : FOO) {}
-    for (String f : Bar.FOO) {}
+    for (String f : Bar.foo) {}
   }
 }
\ No newline at end of file
]
expected:
  "import java.util.ArrayList;
  import java.util.List;

  public class Bar {
    private static final List<String> FOO = new ArrayList<>();

    public void bar() {
      for (String f : FOO) {}
      for (String f : Bar.FOO) {}
    }
  }"
 but was:
  "import java.util.ArrayList;
  import java.util.List;

  public class Bar {
    private static final List<String> FOO = new ArrayList<>();

    public void bar() {
      for (String f : FOO) {}
      for (String f : Bar.foo) {}
    }
  }"
	at org.openrewrite.test.RewriteTest.assertContentEquals(RewriteTest.java:628)
	at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:518)
	at org.openrewrite.test.RewriteTest.rewriteRun(RewriteTest.java:130)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingquestionFurther information is requested

    Type

    No type

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions