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 0e67cd9284..4b3830d620 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 @@ -31,6 +31,8 @@ import net.sourceforge.pmd.lang.java.ast.ASTExpressionStatement; import net.sourceforge.pmd.lang.java.ast.ASTFieldAccess; import net.sourceforge.pmd.lang.java.ast.ASTForeachStatement; import net.sourceforge.pmd.lang.java.ast.ASTMethodCall; +import net.sourceforge.pmd.lang.java.ast.ASTReturnStatement; +import net.sourceforge.pmd.lang.java.ast.ASTThrowStatement; import net.sourceforge.pmd.lang.java.ast.ASTTypeExpression; import net.sourceforge.pmd.lang.java.ast.ASTVariableAccess; import net.sourceforge.pmd.lang.java.ast.QualifiableExpression; @@ -242,7 +244,9 @@ public class LawOfDemeterRule extends AbstractJavaRulechainRule { private boolean isUsedInThisMethod(ASTExpression expr) { return !(expr.getParent() instanceof ASTExpressionStatement) - && !(expr.getParent() instanceof ASTArgumentList); + && !(expr.getParent() instanceof ASTArgumentList) + && !(expr.getParent() instanceof ASTReturnStatement) + && !(expr.getParent() instanceof ASTThrowStatement); } 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 41bd3cf20f..7aae4e6267 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 @@ -1068,4 +1068,32 @@ public final class ControlEvent { } ]]> + + Return and throw mean not used here + 1 + 3 + + Call to `getLanguage` on foreign value `rule` (degree 2) + + +