Class UncommentedMainCheck
- java.lang.Object
-
- com.puppycrawl.tools.checkstyle.api.AutomaticBean
-
- com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
-
- com.puppycrawl.tools.checkstyle.api.AbstractCheck
-
- com.puppycrawl.tools.checkstyle.checks.UncommentedMainCheck
-
- All Implemented Interfaces:
Configurable,Contextualizable
public class UncommentedMainCheck extends AbstractCheck
Detects uncommented
mainmethods.Rationale: A
mainmethod is often used for debugging purposes. When debugging is finished, developers often forget to remove the method, which changes the API and increases the size of the resulting class or JAR file. With the exception of the real program entry points, allmainmethods should be removed or commented out of the sources.-
Property
excludedClasses- Specify pattern for qualified names of classes which are allowed to have amainmethod. Type isjava.util.regex.Pattern. Default value is"^$".
To configure the check:
<module name="UncommentedMain"/>
Example:
public class Game { public static void main(String... args){} // violation } public class Main { public static void main(String[] args){} // violation } public class Launch { //public static void main(String[] args){} // OK } public class Start { public void main(){} // OK } public record MyRecord1 { public void main(){} // violation } public record MyRecord2 { //public void main(){} // OK }To configure the check to allow the
mainmethod for all classes with "Main" name:<module name="UncommentedMain"> <property name="excludedClasses" value="\.Main$"/> </module>
Example:
public class Game { public static void main(String... args){} // violation } public class Main { public static void main(String[] args){} // OK } public class Launch { //public static void main(String[] args){} // OK } public class Start { public void main(){} // OK } public record MyRecord1 { public void main(){} // OK }Parent is
com.puppycrawl.tools.checkstyle.TreeWalkerViolation Message Keys:
-
uncommented.main
- Since:
- 3.2
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean
AutomaticBean.OutputStreamOptions
-
-
Field Summary
Fields Modifier and Type Field Description private intclassDepthClass definition depth.private java.lang.StringcurrentClassCurrent class name.private java.util.regex.PatternexcludedClassesSpecify pattern for qualified names of classes which are allowed to have amainmethod.static java.lang.StringMSG_KEYA key is pointing to the warning message text in "messages.properties" file.private FullIdentpackageNameCurrent package.private static java.util.Set<java.lang.String>STRING_PARAMETER_NAMESSet of possible String array types.
-
Constructor Summary
Constructors Constructor Description UncommentedMainCheck()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidbeginTree(DetailAST rootAST)Called before the starting to process a tree.private booleancheckClassName()Checks that current class is not excluded.private static booleancheckModifiers(DetailAST method)Checks that method has final and static modifiers.private static booleancheckName(DetailAST method)Checks that method name is @quot;main@quot;.private static booleancheckParams(DetailAST method)Checks that method has onlyString[]or onlyString...param.private static booleancheckType(DetailAST method)Checks that return type isvoid.int[]getAcceptableTokens()The configurable token set.int[]getDefaultTokens()Returns the default token a check is interested in.int[]getRequiredTokens()The tokens that this check must be registered for.private static booleanisStringType(DetailAST typeAst)Whether the type is java.lang.String.voidleaveToken(DetailAST ast)Called after all the child nodes have been process.voidsetExcludedClasses(java.util.regex.Pattern excludedClasses)Setter to specify pattern for qualified names of classes which are allowed to have amainmethod.private voidvisitClassOrRecordDef(DetailAST classOrRecordDef)If not inner class then change current class name.private voidvisitMethodDef(DetailAST method)Checks method definition if this ispublic static void main(String[]).private voidvisitPackageDef(DetailAST packageDef)Sets current package.voidvisitToken(DetailAST ast)Called to process a token.-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractCheck
clearViolations, destroy, finishTree, getFileContents, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, log, log, log, setFileContents, setTabWidth, setTokens
-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverity
-
Methods inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean
configure, contextualize, getConfiguration, setupChild
-
-
-
-
Field Detail
-
MSG_KEY
public static final java.lang.String MSG_KEY
A key is pointing to the warning message text in "messages.properties" file.- See Also:
- Constant Field Values
-
STRING_PARAMETER_NAMES
private static final java.util.Set<java.lang.String> STRING_PARAMETER_NAMES
Set of possible String array types.
-
excludedClasses
private java.util.regex.Pattern excludedClasses
Specify pattern for qualified names of classes which are allowed to have amainmethod.
-
currentClass
private java.lang.String currentClass
Current class name.
-
packageName
private FullIdent packageName
Current package.
-
classDepth
private int classDepth
Class definition depth.
-
-
Constructor Detail
-
UncommentedMainCheck
public UncommentedMainCheck()
-
-
Method Detail
-
setExcludedClasses
public void setExcludedClasses(java.util.regex.Pattern excludedClasses)
Setter to specify pattern for qualified names of classes which are allowed to have amainmethod.- Parameters:
excludedClasses- a pattern
-
getAcceptableTokens
public int[] getAcceptableTokens()
Description copied from class:AbstractCheckThe configurable token set. Used to protect Checks against malicious users who specify an unacceptable token set in the configuration file. The default implementation returns the check's default tokens.- Specified by:
getAcceptableTokensin classAbstractCheck- Returns:
- the token set this check is designed for.
- See Also:
TokenTypes
-
getDefaultTokens
public int[] getDefaultTokens()
Description copied from class:AbstractCheckReturns the default token a check is interested in. Only used if the configuration for a check does not define the tokens.- Specified by:
getDefaultTokensin classAbstractCheck- Returns:
- the default tokens
- See Also:
TokenTypes
-
getRequiredTokens
public int[] getRequiredTokens()
Description copied from class:AbstractCheckThe tokens that this check must be registered for.- Specified by:
getRequiredTokensin classAbstractCheck- Returns:
- the token set this must be registered for.
- See Also:
TokenTypes
-
beginTree
public void beginTree(DetailAST rootAST)
Description copied from class:AbstractCheckCalled before the starting to process a tree. Ideal place to initialize information that is to be collected whilst processing a tree.- Overrides:
beginTreein classAbstractCheck- Parameters:
rootAST- the root of the tree
-
leaveToken
public void leaveToken(DetailAST ast)
Description copied from class:AbstractCheckCalled after all the child nodes have been process.- Overrides:
leaveTokenin classAbstractCheck- Parameters:
ast- the token leaving
-
visitToken
public void visitToken(DetailAST ast)
Description copied from class:AbstractCheckCalled to process a token.- Overrides:
visitTokenin classAbstractCheck- Parameters:
ast- the token to process
-
visitPackageDef
private void visitPackageDef(DetailAST packageDef)
Sets current package.- Parameters:
packageDef- node for package definition
-
visitClassOrRecordDef
private void visitClassOrRecordDef(DetailAST classOrRecordDef)
If not inner class then change current class name.- Parameters:
classOrRecordDef- node for class or record definition
-
visitMethodDef
private void visitMethodDef(DetailAST method)
Checks method definition if this ispublic static void main(String[]).- Parameters:
method- method definition node
-
checkClassName
private boolean checkClassName()
Checks that current class is not excluded.- Returns:
- true if check passed, false otherwise
-
checkName
private static boolean checkName(DetailAST method)
Checks that method name is @quot;main@quot;.- Parameters:
method- the METHOD_DEF node- Returns:
- true if check passed, false otherwise
-
checkModifiers
private static boolean checkModifiers(DetailAST method)
Checks that method has final and static modifiers.- Parameters:
method- the METHOD_DEF node- Returns:
- true if check passed, false otherwise
-
checkType
private static boolean checkType(DetailAST method)
Checks that return type isvoid.- Parameters:
method- the METHOD_DEF node- Returns:
- true if check passed, false otherwise
-
checkParams
private static boolean checkParams(DetailAST method)
Checks that method has onlyString[]or onlyString...param.- Parameters:
method- the METHOD_DEF node- Returns:
- true if check passed, false otherwise
-
isStringType
private static boolean isStringType(DetailAST typeAst)
Whether the type is java.lang.String.- Parameters:
typeAst- the type to check.- Returns:
- true, if the type is java.lang.String.
-
-