/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.apex.rule.complexity;
import static apex.jorje.semantic.symbol.type.ModifierTypeInfos.PUBLIC;
import static apex.jorje.semantic.symbol.type.ModifierTypeInfos.STATIC;
import net.sourceforge.pmd.lang.apex.ast.ASTFieldDeclarationStatements;
import net.sourceforge.pmd.lang.apex.ast.ASTMethod;
import net.sourceforge.pmd.lang.apex.ast.ASTUserClass;
import net.sourceforge.pmd.util.NumericConstants;
/**
* Rule attempts to count all public methods and public attributes
* defined in a class.
*
* <p>If a class has a high number of public operations, it might be wise
* to consider whether it would be appropriate to divide it into
* subclasses.</p>
*
* <p>A large proportion of public members and operations means the class
* has high potential to be affected by external classes. Futhermore,
* increased effort will be required to thoroughly test the class.</p>
*
* @author ported from Java original of aglover
*/
public class ExcessivePublicCountRule extends ExcessiveNodeCountRule {
public ExcessivePublicCountRule() {
super(ASTUserClass.class);
setProperty(MINIMUM_DESCRIPTOR, 20d);
setProperty(CODECLIMATE_CATEGORIES, new String[] { "Complexity" });
setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 150);
setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false);
}
public Object visit(ASTMethod node, Object data) {
if (node.getNode().getModifiers().has(PUBLIC) && !node.getImage().matches("<clinit>|<init>|clone")) {
return NumericConstants.ONE;
}
return NumericConstants.ZERO;
}
public Object visit(ASTFieldDeclarationStatements node, Object data) {
if (node.getNode().getModifiers().has(PUBLIC) && !node.getNode().getModifiers().has(STATIC)) {
return NumericConstants.ONE;
}
return NumericConstants.ZERO;
}
}