From 8311e0c76ff5057c320d804c1d1af77b81ed5cbf Mon Sep 17 00:00:00 2001 From: Leanne Kerford Date: Tue, 22 Oct 2024 11:53:36 -0700 Subject: [PATCH] Add used enums into the list of used variable names (#4600) * Add used enums into the list of used variable names Currently, Enums aren't being added to the list of used variable names which can result in collisions when naming new variable. * Update rewrite-java/src/main/java/org/openrewrite/java/VariableNameUtils.java Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --------- Co-authored-by: Sam Snyder Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../openrewrite/java/VariableNameUtilsTest.java | 17 +++++++++++++++++ .../org/openrewrite/java/VariableNameUtils.java | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/rewrite-java-test/src/test/java/org/openrewrite/java/VariableNameUtilsTest.java b/rewrite-java-test/src/test/java/org/openrewrite/java/VariableNameUtilsTest.java index 34d99bde524..7d9fcb738bf 100644 --- a/rewrite-java-test/src/test/java/org/openrewrite/java/VariableNameUtilsTest.java +++ b/rewrite-java-test/src/test/java/org/openrewrite/java/VariableNameUtilsTest.java @@ -106,6 +106,23 @@ class Test { ); } + @Test + void enumFieldNames() { + rewriteRun( + baseTest("myType", "myType,TYPES"), + java( + """ + class Test { + TYPES myType; + } + enum TYPES { + VALUE, NUMBER, TEXT + } + """ + ) + ); + } + @Test void allClassFieldsAreFound() { rewriteRun( diff --git a/rewrite-java/src/main/java/org/openrewrite/java/VariableNameUtils.java b/rewrite-java/src/main/java/org/openrewrite/java/VariableNameUtils.java index 90a960ee503..e9a880d0600 100644 --- a/rewrite-java/src/main/java/org/openrewrite/java/VariableNameUtils.java +++ b/rewrite-java/src/main/java/org/openrewrite/java/VariableNameUtils.java @@ -263,6 +263,16 @@ public J.VariableDeclarations.NamedVariable visitVariable(J.VariableDeclarations return super.visitVariable(variable, strings); } + @Override + public J.Identifier visitIdentifier(J.Identifier identifier, Set namesInScope) { + J.Identifier v = super.visitIdentifier(identifier, namesInScope); + if (v.getType() instanceof JavaType.Class && + ((JavaType.Class) v.getType()).getKind() == JavaType.FullyQualified.Kind.Enum) { + namesInScope.add(v.getSimpleName()); + } + return v; + } + private void addImportedStaticFieldNames(@Nullable JavaSourceFile cu, Cursor classCursor) { if (cu != null) { List imports = cu.getImports();