/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.lang.apex.rule;
import java.util.List;
import net.sourceforge.pmd.RuleContext;
import net.sourceforge.pmd.lang.LanguageRegistry;
import net.sourceforge.pmd.lang.ParserOptions;
import net.sourceforge.pmd.lang.apex.ApexLanguageModule;
import net.sourceforge.pmd.lang.apex.ApexParserOptions;
import net.sourceforge.pmd.lang.apex.ast.ASTAnnotation;
import net.sourceforge.pmd.lang.apex.ast.ASTAnonymousClass;
import net.sourceforge.pmd.lang.apex.ast.ASTArrayLoadExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTArrayStoreExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTAssignmentExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTBinaryExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTBindExpressions;
import net.sourceforge.pmd.lang.apex.ast.ASTBlockStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTBooleanExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTBreakStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTBridgeMethodCreator;
import net.sourceforge.pmd.lang.apex.ast.ASTCatchBlockStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTClassRefExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTConstructorPreambleStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTContinueStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTDmlDeleteStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTDmlInsertStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTDmlMergeStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTDmlUndeleteStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTDmlUpdateStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTDmlUpsertStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTDoLoopStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTDottedExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTExpressionStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTField;
import net.sourceforge.pmd.lang.apex.ast.ASTFieldDeclaration;
import net.sourceforge.pmd.lang.apex.ast.ASTFieldDeclarationStatements;
import net.sourceforge.pmd.lang.apex.ast.ASTForEachStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTForLoopStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTIfBlockStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTIfElseBlockStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTInstanceOfExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTJavaMethodCallExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTJavaVariableExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTLiteralExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTMapEntryNode;
import net.sourceforge.pmd.lang.apex.ast.ASTMethod;
import net.sourceforge.pmd.lang.apex.ast.ASTMethodCallExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTModifierNode;
import net.sourceforge.pmd.lang.apex.ast.ASTModifierOrAnnotation;
import net.sourceforge.pmd.lang.apex.ast.ASTNewListInitExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTNewListLiteralExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTNewMapInitExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTNewMapLiteralExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTNewNameValueObjectExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTNewObjectExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTNewSetInitExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTNewSetLiteralExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTPackageVersionExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTParameter;
import net.sourceforge.pmd.lang.apex.ast.ASTPostfixExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTPrefixExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTProperty;
import net.sourceforge.pmd.lang.apex.ast.ASTReferenceExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTReturnStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTRunAsBlockStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTSoqlExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTSoslExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTStandardCondition;
import net.sourceforge.pmd.lang.apex.ast.ASTStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTSuperMethodCallExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTSuperVariableExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTTernaryExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTTestNode;
import net.sourceforge.pmd.lang.apex.ast.ASTThisMethodCallExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTThisVariableExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTThrowStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTTriggerVariableExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTTryCatchFinallyBlockStatement;
import net.sourceforge.pmd.lang.apex.ast.ASTUserClass;
import net.sourceforge.pmd.lang.apex.ast.ASTUserClassMethods;
import net.sourceforge.pmd.lang.apex.ast.ASTUserEnum;
import net.sourceforge.pmd.lang.apex.ast.ASTUserExceptionMethods;
import net.sourceforge.pmd.lang.apex.ast.ASTUserInterface;
import net.sourceforge.pmd.lang.apex.ast.ASTUserTrigger;
import net.sourceforge.pmd.lang.apex.ast.ASTVariableDeclaration;
import net.sourceforge.pmd.lang.apex.ast.ASTVariableDeclarationStatements;
import net.sourceforge.pmd.lang.apex.ast.ASTVariableExpression;
import net.sourceforge.pmd.lang.apex.ast.ASTWhileLoopStatement;
import net.sourceforge.pmd.lang.apex.ast.ApexNode;
import net.sourceforge.pmd.lang.apex.ast.ApexParserVisitor;
import net.sourceforge.pmd.lang.ast.Node;
import net.sourceforge.pmd.lang.rule.AbstractRule;
import net.sourceforge.pmd.lang.rule.ImmutableLanguage;
import net.sourceforge.pmd.renderers.CodeClimateRule;
public abstract class AbstractApexRule extends AbstractRule
implements ApexParserVisitor, ImmutableLanguage, CodeClimateRule {
public AbstractApexRule() {
super.setLanguage(LanguageRegistry.getLanguage(ApexLanguageModule.NAME));
definePropertyDescriptor(CODECLIMATE_CATEGORIES);
definePropertyDescriptor(CODECLIMATE_REMEDIATION_MULTIPLIER);
definePropertyDescriptor(CODECLIMATE_BLOCK_HIGHLIGHTING);
}
@Override
public ParserOptions getParserOptions() {
return new ApexParserOptions();
}
public void apply(List<? extends Node> nodes, RuleContext ctx) {
visitAll(nodes, ctx);
}
protected void visitAll(List<? extends Node> nodes, RuleContext ctx) {
for (Object element : nodes) {
if (element instanceof ASTUserClass) {
visit((ASTUserClass) element, ctx);
} else if (element instanceof ASTUserInterface) {
visit((ASTUserInterface) element, ctx);
} else if (element instanceof ASTUserTrigger) {
visit((ASTUserTrigger) element, ctx);
}
}
}
@Override
public Object visit(ApexNode<?> node, Object data) {
node.childrenAccept(this, data);
return null;
}
@Override
public Object visit(ASTMethod node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTUserClass node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTModifierNode node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTParameter node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTBlockStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTUserClassMethods node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTBridgeMethodCreator node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTReturnStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTLiteralExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTConstructorPreambleStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTUserInterface node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTUserEnum node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTFieldDeclaration node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTWhileLoopStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTTryCatchFinallyBlockStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTForLoopStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTIfElseBlockStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTIfBlockStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTForEachStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTField node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTBreakStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTThrowStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTDoLoopStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTTernaryExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTSoqlExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTBooleanExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTAnnotation node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTAnonymousClass node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTArrayLoadExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTArrayStoreExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTAssignmentExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTBinaryExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTBindExpressions node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTCatchBlockStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTClassRefExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTContinueStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTDmlDeleteStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTDmlInsertStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTDmlMergeStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTDmlUndeleteStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTDmlUpdateStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTDmlUpsertStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTDottedExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTExpressionStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTFieldDeclarationStatements node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTInstanceOfExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTJavaMethodCallExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTJavaVariableExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTMapEntryNode node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTMethodCallExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTModifierOrAnnotation node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTNewListInitExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTNewListLiteralExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTNewMapInitExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTNewMapLiteralExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTNewNameValueObjectExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTNewObjectExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTNewSetInitExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTNewSetLiteralExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTPackageVersionExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTPostfixExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTPrefixExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTProperty node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTReferenceExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTRunAsBlockStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTSoslExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTStandardCondition node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTStatement node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTSuperMethodCallExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTSuperVariableExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTTestNode node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTThisMethodCallExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTThisVariableExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTTriggerVariableExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTUserExceptionMethods node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTUserTrigger node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTVariableDeclaration node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTVariableDeclarationStatements node, Object data) {
return visit((ApexNode<?>) node, data);
}
@Override
public Object visit(ASTVariableExpression node, Object data) {
return visit((ApexNode<?>) node, data);
}
}