diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 7389568782..ea6a9ac1c7 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -19,6 +19,11 @@ This is a {{ site.pmd.release_type }} release. * The Java rules {% rule "java/errorprone/InvalidSlf4jMessageFormat" %} and {% rule "java/errorprone/MoreThanOneLogger" %} (`java-errorprone`) now both support [Log4j2](https://logging.apache.org/log4j/2.x/). +* The Java rule {% rule "java/design/LawOfDemeter" %} (`java-design`) ignores now also Builders, that are + not assigned to a local variable, but just directly used within a method call chain. The method, that creates + the builder needs to end with "Builder", e.g. `newBuilder()` or `initBuilder()` works. This change + fixes a couple of false positives. + ### Fixed Issues * core @@ -66,6 +71,7 @@ This is a {{ site.pmd.release_type }} release. ### External Contributions +* [#2010](https://github.com/pmd/pmd/pull/2010): \[java] LawOfDemeter to support inner builder pattern - [Gregor Riegler](https://github.com/gregorriegler) * [#2012](https://github.com/pmd/pmd/pull/2012): \[java] Fixes 336, slf4j log4j2 support - [Mark Hall](https://github.com/markhall82) * [#2032](https://github.com/pmd/pmd/pull/2032): \[core] Allow adding SourceCode directly into CPD - [Nathan Braun](https://github.com/nbraun-Google) * [#2047](https://github.com/pmd/pmd/pull/2047): \[java] Fix computation of metrics with annotations - [Andi](https://github.com/andipabst) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/LawOfDemeterRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/LawOfDemeterRule.java index cb0d15b00a..4c1b5a1ae2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/LawOfDemeterRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/LawOfDemeterRule.java @@ -168,7 +168,8 @@ public class LawOfDemeterRule extends AbstractJavaRule { private boolean isNotBuilder() { return baseType != StringBuffer.class && baseType != StringBuilder.class - && !"StringBuilder".equals(baseTypeName) && !"StringBuffer".equals(baseTypeName); + && !"StringBuilder".equals(baseTypeName) && !"StringBuffer".equals(baseTypeName) + && !methodName.endsWith("Builder"); } private static List findSuffixesWithoutArguments(ASTPrimaryExpression expr) { diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/LawOfDemeter.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/LawOfDemeter.xml index 80f0cd1f10..174a178519 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/LawOfDemeter.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/design/xml/LawOfDemeter.xml @@ -269,6 +269,20 @@ public class Test { final FooBuilder fooBuilder = FooBuilder.newBuilder(); fooBuilder.withBar(); } +} + ]]> + + + #2010 False Positive for Law of Demeter + 0 +