Add return and throw as ok places

This commit is contained in:
Clément Fournier committed 2022-02-18 10:35:53 +01:00
1 parent 2f714ee432
commit fda60f7d20
2 files changed
+33 -1

No files matched your search

@@ -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);
}
@@ -1068,4 +1068,32 @@ public final class ControlEvent {
}
]]></code>
</test-code>
<test-code>
<description>Return and throw mean not used here</description>
<expected-problems>1</expected-problems>
<expected-linenumbers>3</expected-linenumbers>
<expected-messages>
<message>Call to `getLanguage` on foreign value `rule` (degree 2)</message>
</expected-messages>
<code><![CDATA[
class Foo {
public String toString(Rule rule) {
rule.getLanguage().doSomething(); // warn
println(rule.getLanguage()); // no warning
if (foo)
return rule.getLanguage(); // no warning
else
throw rule.getLanguage(); // no warning
}
}
interface Language {
String getName();
void doSomething();
}
interface Rule {
Language getLanguage();
}
]]></code>
</test-code>
</test-data>