📄 variablenamingconventionsrule.java
字号:
/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html*/package net.sourceforge.pmd.rules;import net.sourceforge.pmd.AbstractRule;import net.sourceforge.pmd.RuleContext;import net.sourceforge.pmd.ast.ASTFieldDeclaration;import net.sourceforge.pmd.ast.ASTInterfaceMemberDeclaration;import net.sourceforge.pmd.ast.ASTLocalVariableDeclaration;import net.sourceforge.pmd.ast.ASTName;import net.sourceforge.pmd.ast.ASTPrimitiveType;import net.sourceforge.pmd.ast.ASTType;import net.sourceforge.pmd.ast.ASTVariableDeclarator;import net.sourceforge.pmd.ast.ASTVariableDeclaratorId;import net.sourceforge.pmd.ast.AccessNode;public class VariableNamingConventionsRule extends AbstractRule { public Object visit(ASTLocalVariableDeclaration node, Object data) { return checkNames(node, data); } public Object visit(ASTFieldDeclaration node, Object data) { return checkNames(node, data); } public Object checkNames(AccessNode node, Object data) { ASTType childNodeType = (ASTType)node.jjtGetChild(0); String varType = ""; if (childNodeType.jjtGetChild(0)instanceof ASTName ) { varType = ((ASTName)childNodeType.jjtGetChild(0)).getImage(); } else if (childNodeType.jjtGetChild(0) instanceof ASTPrimitiveType) { varType = ((ASTPrimitiveType)childNodeType.jjtGetChild(0)).getImage(); } if (varType != null && varType.length() > 0) { //Get the variable name ASTVariableDeclarator childNodeName = (ASTVariableDeclarator)node.jjtGetChild(1); ASTVariableDeclaratorId childNodeId = (ASTVariableDeclaratorId)childNodeName.jjtGetChild(0); String varName = childNodeId.getImage(); if (varName.equals("serialVersionUID")) { return data; } // non static final class fields are OK if (node.isFinal() && !node.isStatic() && !(node.jjtGetParent() instanceof ASTInterfaceMemberDeclaration)) { return data; } // final, non static, class, fields are OK if (node.isFinal() && !node.isStatic() && !(node.jjtGetParent() instanceof ASTInterfaceMemberDeclaration)) { return data; } // static finals (and interface fields, which are implicitly static and final) are checked for uppercase if ((node.isStatic() && node.isFinal()) || node.jjtGetParent() instanceof ASTInterfaceMemberDeclaration) { if (!varName.equals(varName.toUpperCase())) { RuleContext ctx = (RuleContext)data; ctx.getReport().addRuleViolation(createRuleViolation(ctx, childNodeName.getBeginLine(), "Variables that are final and static should be in all caps.")); } return data; } // if if (varName.indexOf("_") >= 0) { RuleContext ctx = (RuleContext)data; ctx.getReport().addRuleViolation(createRuleViolation(ctx, childNodeName.getBeginLine(), "Variables that are not final should not contain underscores.")); } if (Character.isUpperCase(varName.charAt(0))) { RuleContext ctx = (RuleContext)data; ctx.getReport().addRuleViolation(createRuleViolation(ctx, childNodeName.getBeginLine(), "Variables should start with a lowercase character")); } } return data; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -