== Why is this an issue? ``++StringBuffer++`` and ``++StringBuilder++`` instances that are ``++append++``ed but never ``++toString++``ed needlessly clutter the code, and worse are a drag on performance. Either they should be removed, or the missing ``++toString++`` call added. === Noncompliant code example [source,java] ---- public void doSomething(List strings) { StringBuilder sb = new StringBuilder(); // Noncompliant sb.append("Got: "); for (String str : strings) { sb.append(str).append(", "); // ... } } ---- === Compliant solution [source,java] ---- public void doSomething(List strings) { for (String str : strings) { // ... } } ---- or [source,java] ---- public void doSomething(List strings) { StringBuilder sb = new StringBuilder(); sb.append("Got: "); for (String str : strings) { sb.append(str).append(", "); // ... } LOGGER.info(sb.toString); } ---- === Exceptions This rule ignores ``++StringBuffer++``s and ``++StringBuilder++``s that are passed as method arguments on the grounds that they are likely ``++toString++``ed there. ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Remove this "String[Buffer|Builder]"; it is appended to but ".toString" is never called. ''' == Comments And Links (visible only on this page) === relates to: S3075 === on 15 Jun 2015, 15:30:13 Ann Campbell wrote: CodePro: Unused StringBuffer, UnusedStringBuilder === on 15 Jun 2015, 20:17:52 Nicolas Peru wrote: Looks good === on 18 Sep 2015, 12:44:18 Ann Campbell wrote: fyi [~tamas.vajk] === on 15 Oct 2015, 07:12:06 Tamas Vajk wrote: Thanks [~ann.campbell.2]. I see one problem with this rule. We might pass the ``++StringBuilder++`` to a method, which internally calls ``++ToString++``, but at the declaring scope we won't know this. So if the ``++StringBuilder++`` is passed to a method we should not report on it. === on 15 Oct 2015, 11:32:13 Ann Campbell wrote: Thanks [~tamas.vajk], I've added an explicit exception. endif::env-github,rspecator-view[]