2013-06-12 96 views
0

謝謝。構造函數RuleViolation(ParameterNameConvention,int,String,RuleContext)未定義

public class ParameterNameConvention extends AbstractJavaRule { 

private final static String PATTERN = "[p][a-zA-Z]+"; 

public Object visit(ASTMethodDeclaration node, Object data) { 
    RuleContext result = (RuleContext) data; 
    String rulePattern = (!getStringProperty("rulePattern") 
      .equalsIgnoreCase("")) ? getStringProperty("rulePattern") 
      : PATTERN; 
    if (node.containsChildOfType(ASTFormalParameter.class)) { 
     Iterator iterator = node.findChildrenOfType(
       ASTFormalParameter.class).iterator(); 
     while (iterator.hasNext()) { 
      ASTFormalParameter element = (ASTFormalParameter) iterator 
        .next(); 
      Iterator decIdIterator = element.findChildrenOfType(
        ASTVariableDeclaratorId.class).iterator(); 
      while (decIdIterator.hasNext()) { 
       ASTVariableDeclaratorId decElement = (ASTVariableDeclaratorId) decIdIterator 
         .next(); 
       if (!decElement.getImage().matches(rulePattern)) { 

        result.getReport() 
          .addRuleViolation(
            new RuleViolation(
              this, 
              node.getBeginLine(), 
              "Parameter '" 
                + decElement.getImage() 
                + "' should match regular expression pattern '" 
                + rulePattern + "'", 
              result)); 
       } 
      } 
     } 
    } 
    return result; 
} 

}

對於new RuleViolation有一個問題:

構造RuleViolation(ParameterNameConvention,INT,字符串,RuleContext)是未定義

爲什麼?

回答

0

您使用的是什麼版本的PMD?在PMD 4.2.5,爲RuleViolation構造函數是:

RuleViolation(Rule rule, RuleContext ctx, SimpleNode node) 

RuleViolation(Rule rule, RuleContext ctx, SimpleNode node, java.lang.String specificMsg) 

你的代碼不符合其中任一。

+0

謝謝。我完成了這部分工作。所有的問題都是版本問題。現在我要開始另一部分。非常感謝。 – Esct

+0

這只是版本的問題。謝謝。 – Esct

相關問題