Checked for method primitive return type

This commit is contained in:
John Armgardt
2021-12-02 15:52:30 -06:00
parent 2d57e6755a
commit 6fb8fb57e7
2 changed files with 11 additions and 2 deletions

View File

@ -14,6 +14,7 @@ import net.sourceforge.pmd.lang.java.ast.ASTPrimaryPrefix;
import net.sourceforge.pmd.lang.java.ast.ASTReferenceType;
import net.sourceforge.pmd.lang.java.ast.ASTType;
import net.sourceforge.pmd.lang.java.rule.AbstractJavaRule;
import net.sourceforge.pmd.lang.java.symboltable.MethodNameDeclaration;
import net.sourceforge.pmd.lang.java.symboltable.VariableNameDeclaration;
import net.sourceforge.pmd.lang.symboltable.NameDeclaration;
@ -54,7 +55,7 @@ public class UselessStringValueOfRule extends AbstractJavaRule {
&& "+".equals(gp.getImage())) {
boolean ok = false;
if (gp.getChild(0) == parent) {
return super.visit(node, data);
ok = !isPrimitive(gp.getChild(1));
} else {
for (int i = 0; !ok && gp.getChild(i) != parent; i++) {
ok = !isPrimitive(gp.getChild(i));
@ -71,7 +72,7 @@ public class UselessStringValueOfRule extends AbstractJavaRule {
private static boolean isPrimitive(Node parent) {
boolean result = false;
if (parent instanceof ASTPrimaryExpression && parent.getNumChildren() == 1) {
if (parent instanceof ASTPrimaryExpression && parent.getNumChildren() > 0) {
Node child = parent.getChild(0);
if (child instanceof ASTPrimaryPrefix && child.getNumChildren() == 1) {
Node gc = child.getChild(0);
@ -80,6 +81,9 @@ public class UselessStringValueOfRule extends AbstractJavaRule {
NameDeclaration nd = name.getNameDeclaration();
if (nd instanceof VariableNameDeclaration && ((VariableNameDeclaration) nd).isPrimitiveType()) {
result = true;
} else if (nd instanceof MethodNameDeclaration
&& ((MethodNameDeclaration) nd).isPrimitiveReturnType()) {
result = true;
}
} else if (gc instanceof ASTLiteral) {
result = !((ASTLiteral) gc).isStringLiteral();

View File

@ -32,6 +32,11 @@ public class MethodNameDeclaration extends AbstractNameDeclaration {
return p.isVarargs();
}
public boolean isPrimitiveReturnType() {
return getMethodNameDeclaratorNode().getParent().getResultType().getChild(0)
.getChild(0) instanceof ASTPrimitiveType;
}
public ASTMethodDeclarator getMethodNameDeclaratorNode() {
return (ASTMethodDeclarator) node;
}