From a5eb60243dfa12d3ca2cc8eb3bfff091654c66ab Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Thu, 30 Jul 2020 11:31:29 +0200 Subject: [PATCH] [java] Deprecate ASTThrowStatement#getFirstClassOrInterfaceTypeImage() Refs #2665 --- docs/pages/release_notes.md | 6 ++++++ .../pmd/lang/java/ast/ASTThrowStatement.java | 3 +++ .../java/rule/design/ExceptionAsFlowControlRule.java | 10 ++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index e5edabd1ea..a81826574e 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -30,6 +30,12 @@ This is a {{ site.pmd.release_type }} release. behavior will be discontinued in PMD 7, so missing `language` attributes are now reported as a forward compatibility warning. +#### Deprecated API + +##### For removal + +* {% jdoc !!pmd-java::lang.java.ast.ASTThrowStatement#getFirstClassOrInterfaceTypeImage() %} + ### External Contributions * [#2677](https://github.com/pmd/pmd/pull/2677): \[java] RedundantFieldInitializer can not detect a special case for char initialize: `char foo = '\0';` - [Mykhailo Palahuta](https://github.com/Drofff) diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java index bbf4c23b62..65f83d7cb3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTThrowStatement.java @@ -37,7 +37,10 @@ public class ASTThrowStatement extends AbstractJavaNode { * * @return the image of the first ASTClassOrInterfaceType node found or * null + * @deprecated This method is too specific and doesn't support all cases. + * It will be removed with PMD 7. */ + @Deprecated public final String getFirstClassOrInterfaceTypeImage() { final ASTClassOrInterfaceType t = getFirstDescendantOfType(ASTClassOrInterfaceType.class); return t == null ? null : t.getImage(); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ExceptionAsFlowControlRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ExceptionAsFlowControlRule.java index a18f218d7c..9e491325cf 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ExceptionAsFlowControlRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/design/ExceptionAsFlowControlRule.java @@ -6,6 +6,8 @@ package net.sourceforge.pmd.lang.java.rule.design; import java.util.List; +import org.apache.commons.lang3.StringUtils; + import net.sourceforge.pmd.lang.java.ast.ASTCatchStatement; import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType; import net.sourceforge.pmd.lang.java.ast.ASTFormalParameter; @@ -35,8 +37,7 @@ public class ExceptionAsFlowControlRule extends AbstractJavaRule { ASTFormalParameter fp = (ASTFormalParameter) catchStmt.getChild(0); ASTType type = fp.getFirstDescendantOfType(ASTType.class); ASTClassOrInterfaceType name = type.getFirstDescendantOfType(ASTClassOrInterfaceType.class); - if (node.getFirstClassOrInterfaceTypeImage() != null - && node.getFirstClassOrInterfaceTypeImage().equals(name.getImage())) { + if (isExceptionOfTypeThrown(node, name.getImage())) { addViolation(data, name); } } @@ -44,4 +45,9 @@ public class ExceptionAsFlowControlRule extends AbstractJavaRule { return data; } + private boolean isExceptionOfTypeThrown(ASTThrowStatement throwStatement, String typeName) { + final ASTClassOrInterfaceType t = throwStatement.getFirstDescendantOfType(ASTClassOrInterfaceType.class); + String thrownTypeName = t == null ? null : t.getImage(); + return StringUtils.equals(thrownTypeName, typeName); + } }