From 4fdc468d0880849972d243f356931b6aabd0eb48 Mon Sep 17 00:00:00 2001 From: gbq6 <24852447+gbq6@users.noreply.github.com.> Date: Mon, 29 Sep 2025 23:39:34 +0200 Subject: [PATCH 1/4] feature: Added performance tag --- MUTATORS_BY_TAG.generated.MD | 6 ++++++ .../java/refactorer/mutators/AppendCharacterWithChar.java | 2 +- .../engine/java/refactorer/mutators/AvoidFileStream.java | 4 ++-- .../refactorer/mutators/RemoveAllToClearCollection.java | 4 ++-- .../engine/java/refactorer/mutators/StringToString.java | 4 ++-- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/MUTATORS_BY_TAG.generated.MD b/MUTATORS_BY_TAG.generated.MD index 27d20692b..1fd1161b4 100644 --- a/MUTATORS_BY_TAG.generated.MD +++ b/MUTATORS_BY_TAG.generated.MD @@ -172,6 +172,12 @@ - [UseIndexOfChar](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java) - [UseUnderscoresInNumericLiterals](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseUnderscoresInNumericLiterals.java) +## Performance + +- [AppendCharacterWithChar](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java) +- [AvoidFileStream](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java) +- [StringToString](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java) + ## PitFall - [SimplifyBooleanExpression](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/SimplifyBooleanExpression.java) diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java index 81e8a51c8..05ca65797 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java @@ -49,7 +49,7 @@ public String minimalJavaVersion() { @Override public Set getTags() { - return ImmutableSet.of("String"); + return ImmutableSet.of("Performance", "String"); } @Override diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java index 712025f9f..5553d526c 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Benoit Lacelle - SOLVEN + * Copyright 2023-2025 Benoit Lacelle - SOLVEN * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,7 +42,7 @@ public String minimalJavaVersion() { @Override public Set getTags() { - return ImmutableSet.of("NIO"); + return ImmutableSet.of("NIO", "Performance"); } @Override diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java index 4d0fd4a34..51bfc74e7 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Benoit Lacelle - SOLVEN + * Copyright 2023-2025 Benoit Lacelle - SOLVEN * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,7 +43,7 @@ public String minimalJavaVersion() { @Override public Set getTags() { - return ImmutableSet.of("Collection"); + return ImmutableSet.of("Collection", "Performance"); } @Override diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java index 4a74ff6ee..aafbaa445 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Benoit Lacelle - SOLVEN + * Copyright 2023-2025 Benoit Lacelle - SOLVEN * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,7 +47,7 @@ public boolean isDraft() { @Override public Set getTags() { - return ImmutableSet.of("String"); + return ImmutableSet.of("Performance", "String"); } @Override From 621f50cef759544d744ec6b60f20cbe3ff31253c Mon Sep 17 00:00:00 2001 From: gbq6 <24852447+gbq6@users.noreply.github.com.> Date: Tue, 30 Sep 2025 17:52:51 +0200 Subject: [PATCH 2/4] Added UseIndexOfChar --- MUTATORS_BY_TAG.generated.MD | 1 + .../engine/java/refactorer/mutators/UseIndexOfChar.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/MUTATORS_BY_TAG.generated.MD b/MUTATORS_BY_TAG.generated.MD index 1fd1161b4..11bb8f6cc 100644 --- a/MUTATORS_BY_TAG.generated.MD +++ b/MUTATORS_BY_TAG.generated.MD @@ -177,6 +177,7 @@ - [AppendCharacterWithChar](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java) - [AvoidFileStream](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java) - [StringToString](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java) +- [UseIndexOfChar](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java) ## PitFall diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java index 12ada3977..b285cc1f6 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java @@ -44,7 +44,7 @@ public String minimalJavaVersion() { @Override public Set getTags() { - return ImmutableSet.of("String"); + return ImmutableSet.of("Performance", "String"); } @Override From 9b4c0d2cd6d500180960406ac677f1bbecbf97ee Mon Sep 17 00:00:00 2001 From: gbq6 <24852447+gbq6@users.noreply.github.com.> Date: Tue, 30 Sep 2025 23:47:46 +0200 Subject: [PATCH 3/4] Added describer --- MUTATORS_BY_TAG.generated.MD | 1 + .../engine/java/refactorer/meta/IMutatorDescriber.java | 4 ++-- .../refactorer/mutators/AppendCharacterWithChar.java | 8 +++++++- .../java/refactorer/mutators/AvoidFileStream.java | 9 ++++++++- .../mutators/RemoveAllToClearCollection.java | 8 +++++++- .../java/refactorer/mutators/StringToString.java | 9 ++++++++- .../java/refactorer/mutators/UseIndexOfChar.java | 10 ++++++++-- 7 files changed, 41 insertions(+), 8 deletions(-) diff --git a/MUTATORS_BY_TAG.generated.MD b/MUTATORS_BY_TAG.generated.MD index 11bb8f6cc..af313c752 100644 --- a/MUTATORS_BY_TAG.generated.MD +++ b/MUTATORS_BY_TAG.generated.MD @@ -176,6 +176,7 @@ - [AppendCharacterWithChar](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java) - [AvoidFileStream](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java) +- [RemoveAllToClearCollection](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java) - [StringToString](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java) - [UseIndexOfChar](java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java) diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/meta/IMutatorDescriber.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/meta/IMutatorDescriber.java index 7e0a792aa..b1f577299 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/meta/IMutatorDescriber.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/meta/IMutatorDescriber.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Benoit Lacelle - SOLVEN + * Copyright 2023-2025 Benoit Lacelle - SOLVEN * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,7 +43,7 @@ default boolean isDeprecationNotice() { * @see UseCollectionIsEmpty */ // Relates to https://eslint.org/docs/user-guide/command-line-interface#--fix-type - default boolean isPerformanceImprovment() { + default boolean isPerformanceImprovement() { return false; } diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java index 05ca65797..74a783527 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java @@ -29,6 +29,7 @@ import eu.solven.cleanthat.engine.java.refactorer.AJavaparserExprMutator; import eu.solven.cleanthat.engine.java.refactorer.NodeAndSymbolSolver; import eu.solven.cleanthat.engine.java.refactorer.helpers.MethodCallExprHelpers; +import eu.solven.cleanthat.engine.java.refactorer.meta.IMutatorDescriber; /** * Turns `stringBuilder.append("c")` into `stringBuilder.append('c')` @@ -37,7 +38,7 @@ * * @author Balazs Glatz */ -public class AppendCharacterWithChar extends AJavaparserExprMutator { +public class AppendCharacterWithChar extends AJavaparserExprMutator implements IMutatorDescriber { public static final String APOSTROPHE = "'"; public static final String METHOD_APPEND = "append"; @@ -47,6 +48,11 @@ public String minimalJavaVersion() { return IJdkVersionConstants.JDK_5; } + @Override + public boolean isPerformanceImprovement() { + return true; + } + @Override public Set getTags() { return ImmutableSet.of("Performance", "String"); diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java index 5553d526c..d06f7610f 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AvoidFileStream.java @@ -26,6 +26,7 @@ import eu.solven.cleanthat.engine.java.IJdkVersionConstants; import eu.solven.cleanthat.engine.java.refactorer.ATodoJavaParserMutator; +import eu.solven.cleanthat.engine.java.refactorer.meta.IMutatorDescriber; /** * Avoid use of {@link FileInputStream}, {@link FileOutputStream}, {@link FileReader} and {@link FileWriter} @@ -34,12 +35,18 @@ * */ @Deprecated(since = "Not-ready") -public class AvoidFileStream extends ATodoJavaParserMutator { +public class AvoidFileStream extends ATodoJavaParserMutator implements IMutatorDescriber { + @Override public String minimalJavaVersion() { return IJdkVersionConstants.JDK_7; } + @Override + public boolean isPerformanceImprovement() { + return true; + } + @Override public Set getTags() { return ImmutableSet.of("NIO", "Performance"); diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java index 51bfc74e7..0f911264e 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/RemoveAllToClearCollection.java @@ -27,13 +27,14 @@ import eu.solven.cleanthat.engine.java.refactorer.AJavaparserExprMutator; import eu.solven.cleanthat.engine.java.refactorer.NodeAndSymbolSolver; import eu.solven.cleanthat.engine.java.refactorer.helpers.MethodCallExprHelpers; +import eu.solven.cleanthat.engine.java.refactorer.meta.IMutatorDescriber; /** * Turns 'c.removeAll(c)' into 'c.clear()' in Collection * * @author Benoit Lacelle */ -public class RemoveAllToClearCollection extends AJavaparserExprMutator { +public class RemoveAllToClearCollection extends AJavaparserExprMutator implements IMutatorDescriber { @Override public String minimalJavaVersion() { @@ -41,6 +42,11 @@ public String minimalJavaVersion() { return IJdkVersionConstants.JDK_2; } + @Override + public boolean isPerformanceImprovement() { + return true; + } + @Override public Set getTags() { return ImmutableSet.of("Collection", "Performance"); diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java index aafbaa445..e6b70897a 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/StringToString.java @@ -26,13 +26,15 @@ import eu.solven.cleanthat.engine.java.refactorer.AJavaparserExprMutator; import eu.solven.cleanthat.engine.java.refactorer.NodeAndSymbolSolver; import eu.solven.cleanthat.engine.java.refactorer.helpers.MethodCallExprHelpers; +import eu.solven.cleanthat.engine.java.refactorer.meta.IMutatorDescriber; /** * Turns `"someString".toString()` into `"someString"` * * @author Benoit Lacelle */ -public class StringToString extends AJavaparserExprMutator { +public class StringToString extends AJavaparserExprMutator implements IMutatorDescriber { + private static final String METHOD_TO_STRING = "toString"; @Override @@ -45,6 +47,11 @@ public boolean isDraft() { return IS_PRODUCTION_READY; } + @Override + public boolean isPerformanceImprovement() { + return true; + } + @Override public Set getTags() { return ImmutableSet.of("Performance", "String"); diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java index b285cc1f6..556bb1150 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/UseIndexOfChar.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Benoit Lacelle - SOLVEN + * Copyright 2023-2025 Benoit Lacelle - SOLVEN * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,19 +29,25 @@ import eu.solven.cleanthat.engine.java.refactorer.AJavaparserNodeMutator; import eu.solven.cleanthat.engine.java.refactorer.NodeAndSymbolSolver; import eu.solven.cleanthat.engine.java.refactorer.helpers.MethodCallExprHelpers; +import eu.solven.cleanthat.engine.java.refactorer.meta.IMutatorDescriber; /** * Turns 's.indexOf("s")’ into ’s.indexOf('s')'. * * @author Benoit Lacelle */ -public class UseIndexOfChar extends AJavaparserNodeMutator { +public class UseIndexOfChar extends AJavaparserNodeMutator implements IMutatorDescriber { @Override public String minimalJavaVersion() { return IJdkVersionConstants.JDK_1; } + @Override + public boolean isPerformanceImprovement() { + return true; + } + @Override public Set getTags() { return ImmutableSet.of("Performance", "String"); From b525d38766b405c420bf2bc91890cfbe8cc33fd8 Mon Sep 17 00:00:00 2001 From: gbq6 <24852447+gbq6@users.noreply.github.com.> Date: Wed, 1 Oct 2025 13:21:58 +0200 Subject: [PATCH 4/4] Added comment --- .../engine/java/refactorer/mutators/AppendCharacterWithChar.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java index 74a783527..bec703bc5 100644 --- a/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java +++ b/java/src/main/java/eu/solven/cleanthat/engine/java/refactorer/mutators/AppendCharacterWithChar.java @@ -50,6 +50,7 @@ public String minimalJavaVersion() { @Override public boolean isPerformanceImprovement() { + // Avoids the extra indirection of creating or handling a String and uses the most direct, efficient overload. return true; }