From 80cba026c2ecda9fc7c770cd78df134ca0803e79 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sun, 16 Feb 2020 13:12:28 +0100 Subject: [PATCH] [java] Deprecate getArgumentCount()/getParameterCount() * ASTArguments#getArgumentCount() * ASTFormalParameters#getParameterCount() Refs #2271 --- docs/pages/release_notes.md | 6 ++++-- .../pmd/lang/java/ast/ASTArgumentList.java | 9 +++++++++ .../pmd/lang/java/ast/ASTArguments.java | 16 ++++++++++++++-- .../lang/java/ast/ASTConstructorDeclaration.java | 2 +- .../ast/ASTExplicitConstructorInvocation.java | 4 ++-- .../pmd/lang/java/ast/ASTFormalParameters.java | 10 +++++++++- .../pmd/lang/java/ast/ASTMethodDeclaration.java | 2 +- .../pmd/lang/java/ast/ASTMethodDeclarator.java | 2 +- .../pmd/lang/java/ast/ASTPrimarySuffix.java | 2 +- .../pmd/lang/java/ast/DumpFacade.java | 4 ++-- .../signature/JavaOperationSignature.java | 4 ++-- .../AccessorClassGenerationRule.java | 2 +- .../JUnitAssertionsShouldIncludeMessageRule.java | 2 +- .../rule/bestpractices/MissingOverrideRule.java | 4 ++-- .../codestyle/ClassNamingConventionsRule.java | 2 +- .../ConstructorCallsOverridableMethodRule.java | 4 ++-- .../performance/BigIntegerInstantiationRule.java | 2 +- .../performance/StringInstantiationRule.java | 2 +- .../rule/security/HardCodedCryptoKeyRule.java | 2 +- .../java/rule/security/InsecureCryptoIvRule.java | 2 +- .../java/symboltable/MethodNameDeclaration.java | 4 ++-- .../pmd/lang/java/symboltable/NameFinder.java | 2 +- 22 files changed, 60 insertions(+), 29 deletions(-) diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index b6e947ad79..834c546dfa 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -42,8 +42,6 @@ the suppressions with a `NOPMD` comment. See [Suppressing warnings](pmd_userdocs ### API Changes -#### Deprecated API - #### Deprecated APIs ##### Internal API @@ -111,6 +109,10 @@ methods on {% jdoc apex::lang.apex.ast.ApexParserVisitor %} and its implementati * {% jdoc java::lang.java.ast.ASTYieldStatement %} will not implement {% jdoc java::lang.java.ast.TypeNode %} anymore come 7.0.0. Test the type of the expression nested within it. * {% jdoc java::lang.java.metrics.JavaMetrics %}, {% jdoc java::lang.java.metrics.JavaMetricsComputer %} + * {% jdoc !!java::lang.java.ast.ASTArguments#getArgumentCount() %}. + Use {% jdoc java::lang.java.ast.ASTArguments#size() %} instead. + * {% jdoc !!java::lang.java.ast.ASTFormalParameters#getParameterCount() %}. + Use {% jdoc java::lang.java.ast.ASTFormalParameters#size() %} instead. * pmd-apex * {% jdoc java::lang.apex.metrics.ApexMetrics %}, {% jdoc java::lang.java.metrics.JavaMetricsComputer %} diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java index 08c57dd9a7..a1db7aebd0 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArgumentList.java @@ -24,4 +24,13 @@ public class ASTArgumentList extends AbstractJavaNode { public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); } + + /** + * Gets the number of arguments. + * + * @return the number of arguments. + */ + public int size() { + return this.getNumChildren(); + } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java index 009f645899..fd9fb5dbad 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTArguments.java @@ -20,11 +20,23 @@ public class ASTArguments extends AbstractJavaNode { super(p, id); } - public int getArgumentCount() { + /** + * Gets the number of arguments. + * @return + */ + public int size() { if (this.getNumChildren() == 0) { return 0; } - return this.getChild(0).getNumChildren(); + return ((ASTArgumentList) this.getChild(0)).size(); + } + + /** + * @deprecated for removal. Use {@link #size()} or {@link ASTArgumentList#size()} instead. + */ + @Deprecated + public int getArgumentCount() { + return size(); } @Override diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java index ed57be5330..3e3f473bd3 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTConstructorDeclaration.java @@ -65,7 +65,7 @@ public class ASTConstructorDeclaration extends AbstractMethodOrConstructorDeclar * (excluding any receiver parameter). A varargs parameter counts as one. */ public int getArity() { - return getFormalParameters().getParameterCount(); + return getFormalParameters().size(); } //@Override // enable this with PMD 7.0.0 - see interface ASTMethodOrConstructorDeclaration diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java index 622ab94228..badbf6c685 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTExplicitConstructorInvocation.java @@ -29,9 +29,9 @@ public class ASTExplicitConstructorInvocation extends AbstractJavaNode { public int getArgumentCount() { if (this.getNumChildren() == 1) { - return ((ASTArguments) this.getChild(0)).getArgumentCount(); + return ((ASTArguments) this.getChild(0)).size(); } else { - return ((ASTArguments) this.getChild(1)).getArgumentCount(); + return ((ASTArguments) this.getChild(1)).size(); } } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java index 40adda2a39..b492f7f2c1 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTFormalParameters.java @@ -24,12 +24,20 @@ public class ASTFormalParameters extends AbstractJavaNode implements Iterable parameters = findChildrenOfType(ASTFormalParameter.class); return !parameters.isEmpty() && parameters.get(0).isExplicitReceiverParameter() ? parameters.size() - 1 : parameters.size(); } + /** + * @deprecated for removal. Use {@link #size()} instead. + */ + @Deprecated + public int getParameterCount() { + return size(); + } + @Override public Object jjtAccept(JavaParserVisitor visitor, Object data) { return visitor.visit(this, data); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java index 45631c1361..fe39f9db94 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.java @@ -151,7 +151,7 @@ public class ASTMethodDeclaration extends AbstractMethodOrConstructorDeclaration * (excluding any receiver parameter). A varargs parameter counts as one. */ public int getArity() { - return getFormalParameters().getParameterCount(); + return getFormalParameters().size(); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java index c91b57bda8..c8f17b95ab 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclarator.java @@ -31,7 +31,7 @@ public class ASTMethodDeclarator extends AbstractJavaNode { */ @Deprecated public int getParameterCount() { - return getFirstChildOfType(ASTFormalParameters.class).getParameterCount(); + return getFirstChildOfType(ASTFormalParameters.class).size(); } /** diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java index 67e0d79e27..2ec9b2e923 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTPrimarySuffix.java @@ -55,7 +55,7 @@ public class ASTPrimarySuffix extends AbstractJavaTypeNode { if (!this.isArguments()) { return -1; } - return ((ASTArguments) getChild(getNumChildren() - 1)).getArgumentCount(); + return ((ASTArguments) getChild(getNumChildren() - 1)).size(); } @Override diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java index eb5b46e7f0..29d713e630 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/DumpFacade.java @@ -107,7 +107,7 @@ public class DumpFacade extends JavaParserVisitorAdapter { // Other extras if (node instanceof ASTArguments) { - extras.add(String.valueOf(((ASTArguments) node).getArgumentCount())); + extras.add(String.valueOf(((ASTArguments) node).size())); } else if (node instanceof ASTAssignmentOperator) { extras.add(((ASTAssignmentOperator) node).isCompound() ? "compound" : "simple"); } else if (node instanceof ASTClassOrInterfaceBodyDeclaration) { @@ -146,7 +146,7 @@ public class DumpFacade extends JavaParserVisitorAdapter { extras.add("varargs"); } } else if (node instanceof ASTFormalParameters) { - extras.add(String.valueOf(((ASTFormalParameters) node).getParameterCount())); + extras.add(String.valueOf(((ASTFormalParameters) node).size())); } else if (node instanceof ASTIfStatement) { if (((ASTIfStatement) node).hasElse()) { extras.add("has else"); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/multifile/signature/JavaOperationSignature.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/multifile/signature/JavaOperationSignature.java index 45afbc061e..2c20589f93 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/multifile/signature/JavaOperationSignature.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/multifile/signature/JavaOperationSignature.java @@ -139,7 +139,7 @@ public final class JavaOperationSignature extends JavaSignature fieldNames) { - if (node.getFirstDescendantOfType(ASTFormalParameters.class).getParameterCount() != 0 + if (node.getFirstDescendantOfType(ASTFormalParameters.class).size() != 0 || node.getFirstDescendantOfType(ASTResultType.class).isVoid()) { return false; } @@ -158,7 +158,7 @@ public final class JavaOperationSignature extends JavaSignature fieldNames) { - if (node.getFirstDescendantOfType(ASTFormalParameters.class).getParameterCount() != 1 + if (node.getFirstDescendantOfType(ASTFormalParameters.class).size() != 1 || !node.getFirstDescendantOfType(ASTResultType.class).isVoid()) { return false; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AccessorClassGenerationRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AccessorClassGenerationRule.java index a44e32fed9..79a348e7a2 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AccessorClassGenerationRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/AccessorClassGenerationRule.java @@ -83,7 +83,7 @@ public class AccessorClassGenerationRule extends AbstractJavaRule { break; } - if (cd.getArity() == callArguments.getArgumentCount()) { + if (cd.getArity() == callArguments.size()) { // TODO : Check types addViolation(data, node); break; diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/JUnitAssertionsShouldIncludeMessageRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/JUnitAssertionsShouldIncludeMessageRule.java index 585100ab6b..6ae4943d11 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/JUnitAssertionsShouldIncludeMessageRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/JUnitAssertionsShouldIncludeMessageRule.java @@ -27,7 +27,7 @@ public class JUnitAssertionsShouldIncludeMessageRule extends AbstractJUnitRule { } public void check(Object ctx, ASTArguments node) { - if (node.getArgumentCount() == argumentsCount + if (node.size() == argumentsCount && node.getNthParent(2) instanceof ASTPrimaryExpression) { ASTPrimaryPrefix primaryPrefix = node.getNthParent(2).getFirstChildOfType(ASTPrimaryPrefix.class); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MissingOverrideRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MissingOverrideRule.java index bf0762a71d..9076e635de 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MissingOverrideRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/MissingOverrideRule.java @@ -337,7 +337,7 @@ public class MissingOverrideRule extends AbstractJavaRule { * @throws NoSuchMethodException if no method is registered with this name and paramcount, which is a bug */ boolean isOverridden(String name, ASTFormalParameters params) throws NoSuchMethodException { - List methods = getMethods(name, params.getParameterCount()); + List methods = getMethods(name, params.size()); if (methods.size() == 1) { // only one method with this name and parameter count, we can conclude return overridden.contains(methods.get(0)); @@ -358,7 +358,7 @@ public class MissingOverrideRule extends AbstractJavaRule { private static Class[] getParameterTypes(ASTFormalParameters params) { - Class[] paramTypes = new Class[params.getParameterCount()]; + Class[] paramTypes = new Class[params.size()]; int i = 0; for (ASTFormalParameter p : params) { Class pType = p.getType(); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ClassNamingConventionsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ClassNamingConventionsRule.java index 14767ca038..b90c1804aa 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ClassNamingConventionsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/codestyle/ClassNamingConventionsRule.java @@ -104,7 +104,7 @@ public class ClassNamingConventionsRule extends AbstractNamingConventionRule packagesAndClasses = new ArrayList<>(); String methodName = null; ASTArguments args = (ASTArguments) lastNode.getChild(0); - int numOfArguments = args.getArgumentCount(); + int numOfArguments = args.size(); List argumentTypes = ConstructorCallsOverridableMethodRule.getArgumentTypes(args); boolean superFirst = false; int thisIndex = -1; @@ -455,7 +455,7 @@ public final class ConstructorCallsOverridableMethodRule extends AbstractJavaRul List l = eci.findChildrenOfType(ASTArguments.class); if (!l.isEmpty()) { ASTArguments aa = l.get(0); - count = aa.getArgumentCount(); + count = aa.size(); argumentTypes = ConstructorCallsOverridableMethodRule.getArgumentTypes(aa); } name = eci.getImage(); diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/performance/BigIntegerInstantiationRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/performance/BigIntegerInstantiationRule.java index 065ea786fe..f0a4d7ddda 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/performance/BigIntegerInstantiationRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/performance/BigIntegerInstantiationRule.java @@ -40,7 +40,7 @@ public class BigIntegerInstantiationRule extends AbstractJavaRule { || jdk15 && TypeHelper.isA((ASTClassOrInterfaceType) type, BigDecimal.class)) && !node.hasDescendantOfType(ASTArrayDimsAndInits.class)) { ASTArguments args = node.getFirstChildOfType(ASTArguments.class); - if (args.getArgumentCount() == 1) { + if (args.size() == 1) { ASTLiteral literal = node.getFirstDescendantOfType(ASTLiteral.class); if (literal == null || literal.getParent().getParent().getParent().getParent().getParent() != args) { diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/performance/StringInstantiationRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/performance/StringInstantiationRule.java index ad5e7c9a6d..adf195b25d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/performance/StringInstantiationRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/performance/StringInstantiationRule.java @@ -72,7 +72,7 @@ public class StringInstantiationRule extends AbstractJavaRule { private boolean isArrayAccess(ASTAllocationExpression node) { ASTArguments arguments = node.getFirstChildOfType(ASTArguments.class); - if (arguments == null || arguments.getArgumentCount() != 1) { + if (arguments == null || arguments.size() != 1) { return false; } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/security/HardCodedCryptoKeyRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/security/HardCodedCryptoKeyRule.java index 71afea81a8..d1b001af89 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/security/HardCodedCryptoKeyRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/security/HardCodedCryptoKeyRule.java @@ -40,7 +40,7 @@ public class HardCodedCryptoKeyRule extends AbstractJavaRule { Node firstArgument = null; ASTArguments arguments = node.getFirstChildOfType(ASTArguments.class); - if (arguments.getArgumentCount() > 0) { + if (arguments.size() > 0) { firstArgument = arguments.getFirstChildOfType(ASTArgumentList.class).getChild(0); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/security/InsecureCryptoIvRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/security/InsecureCryptoIvRule.java index 6c5e10698a..0bffb60dec 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/security/InsecureCryptoIvRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/security/InsecureCryptoIvRule.java @@ -47,7 +47,7 @@ public class InsecureCryptoIvRule extends AbstractJavaRule { Node firstArgument = null; ASTArguments arguments = node.getFirstChildOfType(ASTArguments.class); - if (arguments.getArgumentCount() > 0) { + if (arguments.size() > 0) { firstArgument = arguments.getFirstChildOfType(ASTArgumentList.class).getChild(0); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/MethodNameDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/MethodNameDeclaration.java index 0473f78c76..024e1f0728 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/MethodNameDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/MethodNameDeclaration.java @@ -23,12 +23,12 @@ public class MethodNameDeclaration extends AbstractNameDeclaration { public boolean isVarargs() { ASTFormalParameters params = (ASTFormalParameters) node.getChild(0); - if (params.getParameterCount() == 0) { + if (params.size() == 0) { return false; } // If it's a varargs, it HAS to be the last parameter - ASTFormalParameter p = (ASTFormalParameter) params.getChild(params.getParameterCount() - 1); + ASTFormalParameter p = (ASTFormalParameter) params.getChild(params.size() - 1); return p.isVarargs(); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/NameFinder.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/NameFinder.java index b602f7ec06..0372c81ff8 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/NameFinder.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/symboltable/NameFinder.java @@ -59,7 +59,7 @@ public class NameFinder { JavaNameOccurrence occurrence = names.get(names.size() - 1); occurrence.setIsMethodOrConstructorInvocation(); ASTArguments args = (ASTArguments) ((ASTPrimarySuffix) node).getChild(0); - occurrence.setArgumentCount(args.getArgumentCount()); + occurrence.setArgumentCount(args.size()); } else if (suffix.getNumChildren() == 1 && suffix.getChild(0) instanceof ASTMemberSelector) { ASTMemberSelector member = (ASTMemberSelector) suffix.getChild(0); if (member.getNumChildren() == 1 && member.getChild(0) instanceof ASTMethodReference) {