[java] Add test cases for InefficientStringBuffering

Originally from #1932

Author: jborgers <jborgers@jpinpoint.com>
This commit is contained in:
Andreas Dangel
2020-06-13 20:00:51 +02:00
parent bff3bcb487
commit 67cca2a123

View File

@ -340,6 +340,84 @@ public class Foo {
String str2 = "b";
StringBuffer sb = new StringBuffer(str1.length() + str2.length());
}
}
]]></code>
</test-code>
<test-code>
<description>Violation: Avoid contact in append method invocations</description>
<expected-problems>3</expected-problems>
<expected-linenumbers>9,18,24</expected-linenumbers>
<code><![CDATA[
public class Foo {
private static final String STATIC_FINAL_F = "static_final_field";
private static String static_f = "static_field";
private final String FINAL_F = "final_field";
private void concatIsBad(String arg) {
StringBuilder sb = new StringBuilder();
sb.append("arg='" + arg + "'"); // bad
}
private void concatNumericIsBad() {
StringBuilder sb = new StringBuilder();
sb.append(1 + 2); // bad
}
private String testStaticBad() {
StringBuilder sb = new StringBuilder().append("fld:" + static_f); // bad
return sb.toString();
}
private String testFinalLocalBad() {
String local = "local"; // non-final, jdk9+ optimized with indified Strings, assumed still worse
return new StringBuilder().append("fld:" + local).toString(); // assumed bad
}
}
]]></code>
</test-code>
<test-code>
<description>No violation: Avoid contact in append method invocations</description>
<expected-problems>0</expected-problems>
<code><![CDATA[
public class Foo {
private static final String STATIC_FINAL_F = "static_final_field";
private final String FINAL_F = "final_field";
private void good(String arg) {
StringBuilder sb = new StringBuilder();
sb.append("arg='").append(arg).append("'");
}
public void testAddInSecondOrThirdArgAppendGood() {
StringBuilder wrappedLine = new StringBuilder();
String str = "bar";
int offset = 1;
int wrapLength = 2;
wrappedLine.append(str, offset + 1, wrapLength + offset + 1); // + but no string concat
}
private String testLiteralsGood(String arg) {
StringBuilder sb = new StringBuilder();
sb.append("lit:" + "etc");
return sb.toString();
}
private String testFinalFieldGood() { // final assumed a constant expression
return new StringBuilder().append("fld:" + FINAL_F).toString(); //good
}
private String testStaticFinalFieldGood() {
return new StringBuilder().append("fld:" + STATIC_FINAL_F).toString(); // good
}
private String testFinalLocalGood() {
final String local = "local"; // final assumed a constant expression
return new StringBuilder().append("fld:" + local).toString(); // good
}
}
]]></code>
</test-code>