diff --git a/CHANGELOG.md b/CHANGELOG.md index 2de1e7ec2..f544ab73c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [#4](https://github.com/green-code-initiative/ecoCode-python/issues/4) Deprecate rule EC66 for Python because not applicable (see details inside issue) - [#240](https://github.com/green-code-initiative/ecoCode/issues/240) Deprecate rule EC53 for Java because of no good arguments and not enough green measures - [#258](https://github.com/green-code-initiative/ecoCode/pull/258) Deprecate rule EC63 for Java because there are already 3 native Sonarqube rules that cover the same use cases +- [#259](https://github.com/green-code-initiative/ecoCode/pull/259) Deprecate rule EC75 for Java because not applicable since JDK8 ## [1.4.2] - 2023-12-05 diff --git a/RULES.md b/RULES.md index 93cdd318f..d889d783c 100644 --- a/RULES.md +++ b/RULES.md @@ -65,6 +65,7 @@ This table lists rules proposed by the community but deprecated in ecoCode plugi | EC53 | Java | Using arrays in foreach loops | No good arguments and not enough green measures. | [Github discussion with sources](https://github.com/green-code-initiative/ecoCode/issues/240) | | EC63 | Java | Unnecessarily assigning values to variables | There are already 3 native SonarQube rules for Java. | [Github discussion with sources](https://github.com/green-code-initiative/ecoCode/pull/258) | | EC66 | Python | Use single quote (') instead of quotation mark (") | Finally, not applicable for Python | [Github discussion with sources](https://github.com/green-code-initiative/ecoCode-python/issues/4) | +| EC75 | Java | Concatenate Strings in loop | Optimizations on Java concatenation Strings are useless since JDK8 | [Github discussion with sources](https://github.com/green-code-initiative/ecoCode/issues/246) | ## Refused / Deleted rules diff --git a/ecocode-rules-specifications/src/main/rules/EC75/java/EC75.asciidoc b/ecocode-rules-specifications/src/main/rules/EC75/java/EC75.asciidoc index 6cbc5ed2a..a0b7dad94 100644 --- a/ecocode-rules-specifications/src/main/rules/EC75/java/EC75.asciidoc +++ b/ecocode-rules-specifications/src/main/rules/EC75/java/EC75.asciidoc @@ -1,10 +1,15 @@ +*This rule is deprecated because not applicable to Java since JDK8, and will be removed soon.* + +== Why is this an issue? + Don't concatenate Strings in loop. Use `StringBuilder instead. Strings are immutable so each time you concatenate a String, a new String is created. This is a waste of memory and CPU. -## Noncompliant Code Example +== Noncompliant Code Example -```java +[source,java] +---- public String concatenateStrings(String[] strings) { String result = ""; @@ -22,11 +27,12 @@ public String concatenateStrings2() { } return result; } -``` +---- -## Compliant Solution +== Compliant Solution -```java +[source,java] +---- public String concatenateStrings(String[] strings) { StringBuilder result = new StringBuilder(); @@ -35,4 +41,4 @@ public String concatenateStrings(String[] strings) { } return result.toString(); } -``` +---- diff --git a/ecocode-rules-specifications/src/main/rules/EC75/java/EC75.json b/ecocode-rules-specifications/src/main/rules/EC75/java/EC75.json new file mode 100644 index 000000000..0b963543b --- /dev/null +++ b/ecocode-rules-specifications/src/main/rules/EC75/java/EC75.json @@ -0,0 +1,3 @@ +{ + "status": "deprecated" +} diff --git a/java-plugin/src/main/java/fr/greencodeinitiative/java/checks/AvoidConcatenateStringsInLoop.java b/java-plugin/src/main/java/fr/greencodeinitiative/java/checks/AvoidConcatenateStringsInLoop.java index 99b732c50..491f41277 100644 --- a/java-plugin/src/main/java/fr/greencodeinitiative/java/checks/AvoidConcatenateStringsInLoop.java +++ b/java-plugin/src/main/java/fr/greencodeinitiative/java/checks/AvoidConcatenateStringsInLoop.java @@ -30,6 +30,10 @@ import org.sonar.plugins.java.api.tree.Tree; import org.sonarsource.analyzer.commons.annotations.DeprecatedRuleKey; +/** + * @deprecated because not useless since JDK 8 + */ +@Deprecated(forRemoval = true) @Rule(key = "EC75") @DeprecatedRuleKey(repositoryKey = "greencodeinitiative-java", ruleKey = "S75") public class AvoidConcatenateStringsInLoop extends IssuableSubscriptionVisitor { diff --git a/java-plugin/src/test/java/fr/greencodeinitiative/java/checks/AvoidConcatenateStringsInLoopTest.java b/java-plugin/src/test/java/fr/greencodeinitiative/java/checks/AvoidConcatenateStringsInLoopTest.java index 00027474c..d3ad82f7d 100644 --- a/java-plugin/src/test/java/fr/greencodeinitiative/java/checks/AvoidConcatenateStringsInLoopTest.java +++ b/java-plugin/src/test/java/fr/greencodeinitiative/java/checks/AvoidConcatenateStringsInLoopTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import org.sonar.java.checks.verifier.CheckVerifier; +@Deprecated public class AvoidConcatenateStringsInLoopTest { @Test