From 91b942b1dc278514712ca7359124e7dac311867a Mon Sep 17 00:00:00 2001 From: Mykhailo Palahuta Date: Tue, 28 Jul 2020 17:11:14 +0300 Subject: [PATCH] [java]AvoidCatchingThrowable can not detect the case: catch (java.lang.Throwable t) --- .../errorprone/AvoidCatchingThrowableRule.java | 14 ++++++-------- .../errorprone/xml/AvoidCatchingThrowable.xml | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidCatchingThrowableRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidCatchingThrowableRule.java index 168c159924..56a4a51049 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidCatchingThrowableRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/errorprone/AvoidCatchingThrowableRule.java @@ -5,8 +5,6 @@ package net.sourceforge.pmd.lang.java.rule.errorprone; import net.sourceforge.pmd.lang.java.ast.ASTCatchStatement; -import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; -import net.sourceforge.pmd.lang.java.ast.ASTType; import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; /** @@ -18,12 +16,12 @@ import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule; public class AvoidCatchingThrowableRule extends AbstractJavaRule { @Override - public Object visit(ASTCatchStatement node, Object data) { - ASTType type = node.getFirstDescendantOfType(ASTType.class); - ASTClassOrInterfaceType name = type.getFirstDescendantOfType(ASTClassOrInterfaceType.class); - if (name.hasImageEqualTo("Throwable")) { - addViolation(data, name); + public Object visit(ASTCatchStatement catchStatement, Object data) { + for (Class caughtException : catchStatement.getCaughtExceptionTypes()) { + if (Throwable.class.equals(caughtException)) { + addViolation(data, catchStatement); + } } - return super.visit(node, data); + return super.visit(catchStatement, data); } } diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidCatchingThrowable.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidCatchingThrowable.xml index 2e9dd79627..a64289f0f4 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidCatchingThrowable.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/errorprone/xml/AvoidCatchingThrowable.xml @@ -24,6 +24,23 @@ public class Foo { void foo() { try {} catch (RuntimeException t) {} } +} + ]]> + + + + full class name false-negative test + 1 + 5 +