From eb9b73e3590b435f95e93f315c4459b49c6b5bba Mon Sep 17 00:00:00 2001 From: oowekyala Date: Sun, 18 Jun 2017 23:10:37 +0200 Subject: [PATCH] Added getParameterMap --- .../java/ast/ASTConstructorDeclaration.java | 17 +++++++++++++++++ .../pmd/lang/java/ast/ASTMethodDeclaration.java | 17 +++++++++++++++++ .../ast/ASTMethodOrConstructorDeclaration.java | 12 ++++++++++++ 3 files changed, 46 insertions(+) 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 c5eb67b645..e2c83e50c3 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 @@ -5,6 +5,9 @@ package net.sourceforge.pmd.lang.java.ast; +import java.util.LinkedHashMap; +import java.util.Map; + public class ASTConstructorDeclaration extends AbstractJavaAccessNode implements ASTMethodOrConstructorDeclaration { private boolean containsComment; @@ -49,4 +52,18 @@ public class ASTConstructorDeclaration extends AbstractJavaAccessNode implements } return qualifiedName; } + + @Override + public Map getParameterMap() { + Map result = new LinkedHashMap<>(); + ASTFormalParameters params = getFirstDescendantOfType(ASTFormalParameters.class); + + for (int i = 0; i < params.getParameterCount(); i++) { + // append type image of param + String typeImage = params.jjtGetChild(i).getFirstChildOfType(ASTType.class).getTypeImage(); + String paramName = params.jjtGetChild(i).jjtGetChild(1).getImage(); + result.put(paramName, typeImage); + } + return result; + } } 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 b98fbb5848..18ea616cf2 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 @@ -5,6 +5,9 @@ package net.sourceforge.pmd.lang.java.ast; +import java.util.LinkedHashMap; +import java.util.Map; + import net.sourceforge.pmd.lang.ast.Node; import net.sourceforge.pmd.lang.dfa.DFAGraphMethod; @@ -41,6 +44,20 @@ public class ASTMethodDeclaration extends AbstractJavaAccessNode implements DFAG return null; } + @Override + public Map getParameterMap() { + Map result = new LinkedHashMap<>(); + ASTFormalParameters params = getFirstDescendantOfType(ASTFormalParameters.class); + + for (int i = 0; i < params.getParameterCount(); i++) { + // append type image of param + String typeImage = params.jjtGetChild(i).getFirstChildOfType(ASTType.class).getTypeImage(); + String paramName = params.jjtGetChild(i).jjtGetChild(1).getImage(); + result.put(paramName, typeImage); + } + return result; + } + public String getName() { return getMethodName(); } diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodOrConstructorDeclaration.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodOrConstructorDeclaration.java index 649d89f225..e1b9a6ee9d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodOrConstructorDeclaration.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/ast/ASTMethodOrConstructorDeclaration.java @@ -4,6 +4,8 @@ package net.sourceforge.pmd.lang.java.ast; +import java.util.Map; + import net.sourceforge.pmd.lang.ast.Node; /** @@ -11,4 +13,14 @@ import net.sourceforge.pmd.lang.ast.Node; */ public interface ASTMethodOrConstructorDeclaration extends QualifiableNode, Node, AccessNode, JavaNode { + /** + * Returns a map of parameter names to their type image. Iterating over its keys yields the parameters in the + * right order. + * + * @return A map of parameter names to their type image. + */ + Map getParameterMap(); + + // TODO could use a default implementation when we change the compiler version to 1.8 + }