diff --git a/src/main/java/org/openrewrite/staticanalysis/ReplaceDuplicateStringLiterals.java b/src/main/java/org/openrewrite/staticanalysis/ReplaceDuplicateStringLiterals.java index 1f4138dd75..4047398824 100644 --- a/src/main/java/org/openrewrite/staticanalysis/ReplaceDuplicateStringLiterals.java +++ b/src/main/java/org/openrewrite/staticanalysis/ReplaceDuplicateStringLiterals.java @@ -44,6 +44,12 @@ public class ReplaceDuplicateStringLiterals extends Recipe { @Nullable Boolean includeTestSources; + @Option(displayName = "Maximum length of the generate variable names", + description = "By default this is set to 100 characters", + required = false) + @Nullable + Integer maxVariableLength = 100; + @Override public String getDisplayName() { return "Replace duplicate `String` literals"; @@ -181,7 +187,12 @@ private String transformToVariableName(String valueOfLiteral) { prevIsLower = Character.isLowerCase(c); } } - return VariableNameUtils.normalizeName(newName.toString()); + String newNameString = newName.toString(); + while (newNameString.length() > maxVariableLength){ + int indexOf = newNameString.lastIndexOf("_"); + newNameString = newNameString.substring(0, indexOf > -1 ? indexOf : maxVariableLength); + } + return VariableNameUtils.normalizeName(newNameString); } }); } diff --git a/src/test/java/org/openrewrite/staticanalysis/ReplaceDuplicateStringLiteralsTest.java b/src/test/java/org/openrewrite/staticanalysis/ReplaceDuplicateStringLiteralsTest.java index 63b3f7a8f7..849e7f3773 100644 --- a/src/test/java/org/openrewrite/staticanalysis/ReplaceDuplicateStringLiteralsTest.java +++ b/src/test/java/org/openrewrite/staticanalysis/ReplaceDuplicateStringLiteralsTest.java @@ -148,6 +148,32 @@ class A { ); } + @Test + void generatedNameIsVeryLong() { + rewriteRun( + //language=java + java( + """ + package org.foo; + class A { + final String val1 = "ThisIsAnUnreasonablyLongVariableNameItGoesOnAndOnForAVeryLongTimeItMightNeverEndWhoIsToKnowHowLongItWillKeepGoingAndGoing"; + final String val2 = "ThisIsAnUnreasonablyLongVariableNameItGoesOnAndOnForAVeryLongTimeItMightNeverEndWhoIsToKnowHowLongItWillKeepGoingAndGoing"; + final String val3 = "ThisIsAnUnreasonablyLongVariableNameItGoesOnAndOnForAVeryLongTimeItMightNeverEndWhoIsToKnowHowLongItWillKeepGoingAndGoing"; + } + """, + """ + package org.foo; + class A { + private static final String THIS_IS_AN_UNREASONABLY_LONG_VARIABLE_NAME_IT_GOES_ON_AND_ON_FOR_AVERY_LONG_TIME_IT_MIGHT_NEVER_END = "ThisIsAnUnreasonablyLongVariableNameItGoesOnAndOnForAVeryLongTimeItMightNeverEndWhoIsToKnowHowLongItWillKeepGoingAndGoing"; + final String val1 = THIS_IS_AN_UNREASONABLY_LONG_VARIABLE_NAME_IT_GOES_ON_AND_ON_FOR_AVERY_LONG_TIME_IT_MIGHT_NEVER_END; + final String val2 = THIS_IS_AN_UNREASONABLY_LONG_VARIABLE_NAME_IT_GOES_ON_AND_ON_FOR_AVERY_LONG_TIME_IT_MIGHT_NEVER_END; + final String val3 = THIS_IS_AN_UNREASONABLY_LONG_VARIABLE_NAME_IT_GOES_ON_AND_ON_FOR_AVERY_LONG_TIME_IT_MIGHT_NEVER_END; + } + """ + ) + ); + } + @Test void replaceRedundantLiteralInMethodInvocation() { rewriteRun(