/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.lang.apex.rule.style; import static apex.jorje.semantic.symbol.type.ModifierTypeInfos.OVERRIDE; import net.sourceforge.pmd.lang.apex.ast.ASTMethod; import net.sourceforge.pmd.lang.apex.ast.ASTProperty; import net.sourceforge.pmd.lang.apex.ast.ASTUserClass; import net.sourceforge.pmd.lang.apex.rule.AbstractApexRule; public class MethodNamingConventionsRule extends AbstractApexRule { public MethodNamingConventionsRule() { setProperty(CODECLIMATE_CATEGORIES, new String[] { "Style" }); // Note: x10 as Apex has not automatic refactoring setProperty(CODECLIMATE_REMEDIATION_MULTIPLIER, 1); setProperty(CODECLIMATE_BLOCK_HIGHLIGHTING, false); } public Object visit(ASTUserClass node, Object data) { return super.visit(node, data); } public Object visit(ASTMethod node, Object data) { if (isOverriddenMethod(node) || isPropertyAccessor(node) || isConstructor(node)) { return data; } String methodName = node.getImage(); if (Character.isUpperCase(methodName.charAt(0))) { addViolationWithMessage(data, node, "Method names should not start with capital letters"); } if (methodName.indexOf('_') >= 0) { addViolationWithMessage(data, node, "Method names should not contain underscores"); } return data; } private boolean isOverriddenMethod(ASTMethod node) { return node.getNode().getModifiers().has(OVERRIDE); } private boolean isPropertyAccessor(ASTMethod node) { return (node.getParentsOfType(ASTProperty.class).size() > 0); } private boolean isConstructor(ASTMethod node) { return (node.getNode().getMethodInfo().isConstructor()); } }