Class AbstractRule
java.lang.Object
org.codenarc.rule.AbstractRule
- All Implemented Interfaces:
Rule
- Direct Known Subclasses:
AbstractAstVisitorRule, AbstractImportRule, BlankLineBeforePackageRule, BracesForClassRule, ClassJavadocRule, ClassNameSameAsFilenameRule, ConsecutiveBlankLinesRule, FileEndsWithoutNewlineRule, IllegalRegexRule, IllegalStringRule, ImportFromSamePackageRule, JavadocEmptyFirstLineRule, MissingBlankLineAfterImportsRule, MissingBlankLineAfterPackageRule, NoTabCharacterRule, PackageNameMatchesFilePathRule, RequiredRegexRule, RequiredStringRule, StubRule, TrailingWhitespaceRule, UnnecessaryGroovyImportRule, UnusedImportRule
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate StringThis rule is only applied to source code (file) names matching this value.private StringThis rule is only applied to source code (file) pathnames matching this regular expression.private StringIf not null, this is used as the description text for this rule, overriding any description text found in the i18n resource bundles.private StringThis rule is NOT applied to source code (file) names matching this value.private StringThis rule is NOT applied to source code (file) pathnames matching this regular expression.private booleanFlag indicating whether this rule should be enabled (applied).private static final org.slf4j.Loggerprivate StringIf not null, this is used as the message for all violations of this rule, overriding any message generated by the concrete rule subclass. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionapplyTo(SourceCode sourceCode) Apply this rule to the specified source and return a list of violations (or an empty List).abstract voidapplyTo(SourceCode sourceCode, List<Violation> violations) Apply this rule to the specified source and return a list of violations (or an empty List)protected ViolationcreateViolation(Integer lineNumber, String sourceLine, String message) Create and return a new Violation for this rule and the specified valuesprotected ViolationcreateViolation(SourceCode sourceCode, org.codehaus.groovy.ast.ASTNode node, String message) Create a new Violation for the AST node.protected ViolationcreateViolationForImport(SourceCode sourceCode, String className, String alias, String violationMessage) Create and return a new Violation for this rule and the specified import className and aliasprotected ViolationcreateViolationForImport(SourceCode sourceCode, org.codehaus.groovy.ast.ImportNode importNode, String message) Create and return a new Violation for this rule and the specified importprivate Stringintabstract StringgetName()abstract intbooleanbooleanisReady()Allows rules to check whether preconditions are satisfied and short-circuit execution (i.e., do nothing) if those preconditions are not satisfied.private voidoverrideViolationMessageIfNecessary(List<Violation> violations) If the violationMessage property of this rule has been set, then use it to set the message within each violation, overriding the original message(s), if any.voidsetApplyToFileNames(String applyToFileNames) voidsetApplyToFilesMatching(String applyToFilesMatching) voidsetDescription(String description) voidsetDoNotApplyToFileNames(String doNotApplyToFileNames) voidsetDoNotApplyToFilesMatching(String doNotApplyToFilesMatching) voidsetEnabled(boolean enabled) abstract voidSet the unique name for this ruleabstract voidsetPriority(int priority) Set the priority for this rulevoidsetViolationMessage(String violationMessage) private booleanshouldApplyThisRuleTo(SourceCode sourceCode) toString()voidvalidate()Allows rules to perform validation.private voidvalidateAstCompilerPhase(SourceCode sourceCode) private voidvalidateRegularExpression(String regex)
-
Field Details
-
LOG
private static final org.slf4j.Logger LOG -
enabled
private boolean enabledFlag indicating whether this rule should be enabled (applied). Defaults to true. If set to false, this rule will not produce any violations. -
applyToFilesMatching
This rule is only applied to source code (file) pathnames matching this regular expression. -
doNotApplyToFilesMatching
This rule is NOT applied to source code (file) pathnames matching this regular expression. -
applyToFileNames
This rule is only applied to source code (file) names matching this value. The name may optionally contain a path. If a path is specified, then the source code path must match it. If no path is specified, then only the source code (file) name is compared (i.e., its path is ignored). The value may optionally be a comma-separated list of names, in which case one of the names must match. The name(s) may optionally include wildcard characters ('*' or '?'). -
doNotApplyToFileNames
This rule is NOT applied to source code (file) names matching this value. The name may optionally contain a path. If a path is specified, then the source code path must match it. If no path is specified, then only the source code (file) name is compared (i.e., its path is ignored). The value may optionally be a comma-separated list of names, in which case any one of the names can match. The name(s) may optionally include wildcard characters ('*' or '?'). -
violationMessage
If not null, this is used as the message for all violations of this rule, overriding any message generated by the concrete rule subclass. Defaults to null. Note that setting this to an empty string "hides" the message, if any, generated by the actual rule. -
description
If not null, this is used as the description text for this rule, overriding any description text found in the i18n resource bundles. Defaults to null.
-
-
Constructor Details
-
AbstractRule
public AbstractRule()
-
-
Method Details
-
getName
-
setName
Set the unique name for this rule- Parameters:
name- - the name for this rule; this should be unique
-
getPriority
public abstract int getPriority()- Specified by:
getPriorityin interfaceRule- Returns:
- the priority of this rule, between 1 (highest priority) and 3 (lowest priority), inclusive.
-
setPriority
public abstract void setPriority(int priority) Set the priority for this rule- Parameters:
priority- - the priority of this rule, between 1 (highest priority) and 3 (lowest priority), inclusive.
-
getCompilerPhase
public int getCompilerPhase()- Specified by:
getCompilerPhasein interfaceRule- Returns:
- the required compiler phase (as in
Phases) of the AST of theSourceCodehanded to the rule viaapplyTo(SourceCode sourceCode)
-
applyTo
Apply this rule to the specified source and return a list of violations (or an empty List)- Parameters:
sourceCode- - the source to apply this rule toviolations- - the List of violations to which new violations from this rule are to be added
-
applyTo
Apply this rule to the specified source and return a list of violations (or an empty List). This implementation delegates to the abstract applyCode(SourceCode,List), provided by concrete subclasses. This template method simplifies subclass implementations and also enables common handling of enablement logic. -
validateAstCompilerPhase
-
isReady
public boolean isReady()Allows rules to check whether preconditions are satisfied and short-circuit execution (i.e., do nothing) if those preconditions are not satisfied. Return true by default. This method is provided as a placeholder so subclasses can optionally override.- Returns:
- true if all preconditions for this rule are satisfied
-
validate
public void validate()Allows rules to perform validation. Do nothing by default. This method is provided as a placeholder so subclasses can optionally override. Subclasses will typically useassertcalls to verify required preconditions. -
toString
-
createViolation
Create and return a new Violation for this rule and the specified values- Parameters:
lineNumber- - the line number for the violation; may be nullsourceLine- - the source line for the violation; may be nullmessage- - the message for the violation; may be null- Returns:
- a new Violation object
-
createViolation
protected Violation createViolation(SourceCode sourceCode, org.codehaus.groovy.ast.ASTNode node, String message) Create a new Violation for the AST node.- Parameters:
sourceCode- - the SourceCodenode- - the Groovy AST Nodemessage- - the message for the violation; defaults to null
-
createViolationForImport
protected Violation createViolationForImport(SourceCode sourceCode, org.codehaus.groovy.ast.ImportNode importNode, String message) Create and return a new Violation for this rule and the specified import- Parameters:
sourceCode- - the SourceCodeimportNode- - the ImportNode for the import triggering the violation- Returns:
- a new Violation object
-
createViolationForImport
protected Violation createViolationForImport(SourceCode sourceCode, String className, String alias, String violationMessage) Create and return a new Violation for this rule and the specified import className and alias- Parameters:
sourceCode- - the SourceCodeclassName- - the class name (as specified within the import statement)alias- - the alias for the import statementviolationMessage- - the violation message; may be null- Returns:
- a new Violation object
-
shouldApplyThisRuleTo
-
getClassNameNoPackage
-
overrideViolationMessageIfNecessary
-
isEnabled
public boolean isEnabled() -
setEnabled
public void setEnabled(boolean enabled) -
getApplyToFilesMatching
-
setApplyToFilesMatching
-
getDoNotApplyToFilesMatching
-
setDoNotApplyToFilesMatching
-
getApplyToFileNames
-
setApplyToFileNames
-
getDoNotApplyToFileNames
-
setDoNotApplyToFileNames
-
getViolationMessage
-
setViolationMessage
-
getDescription
-
setDescription
-
validateRegularExpression
-