Class UnnecessaryPermitsClauseCheck
java.lang.Object
com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
com.puppycrawl.tools.checkstyle.api.AbstractCheck
com.puppycrawl.tools.checkstyle.checks.coding.UnnecessaryPermitsClauseCheck
- All Implemented Interfaces:
Configurable,Contextualizable
Checks that a
permits clause of a sealed class or interface is not
unnecessary, i.e. that it is not possible to omit the clause and have the
compiler infer the exact same set of permitted subtypes.
See the Java Language Specification for more information about sealed classes.
This Check does not perform full type resolution. It determines whether a
permitted type is local to the file by comparing simple names against every
type declaration (class, interface, enum, or record) found
anywhere in the compilation unit, including nested and sibling top-level
types. As a result, a permitted type whose simple name coincidentally
matches an unrelated local type declaration could, in theory, be
misidentified as local. In practice this situation cannot occur in code
that compiles, since the Java compiler would not be able to resolve such an
ambiguous reference in the permits clause.
- Since:
- 14.2.0
-
Nested Class Summary
Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
AbstractAutomaticBean.OutputStreamOptions -
Field Summary
FieldsModifier and TypeFieldDescriptionA set of simple names of every type declared in the current compilation unit, including nested types.static final StringA key is pointing to the warning message text in "messages.properties" file.A list ofTokenTypes.PERMITS_CLAUSEnodes found in the current compilation unit. -
Constructor Summary
ConstructorsConstructorDescriptionCreates a newUnnecessaryPermitsClauseCheckinstance. -
Method Summary
Modifier and TypeMethodDescriptionvoidCalled before the starting to process a tree.voidfinishTree(DetailAST rootAST) Called after finished processing a tree.int[]The configurable token set.int[]Returns the default token a check is interested in.int[]The tokens that this check must be registered for.private static StringgetSimpleName(DetailAST typeName) Extracts the simple (unqualified) name from a type name node, which is either a singleTokenTypes.IDENTor aTokenTypes.DOTchain representing a qualified name.private static booleanisTypeName(DetailAST ast) Checks whether the given direct child of apermitsclause represents a permitted type name, as opposed to a separating comma.private booleanisUnnecessary(DetailAST permitsClause) Determines whether every type named in the givenpermitsclause is declared somewhere within the same compilation unit, and is therefore redundant.voidvisitToken(DetailAST ast) Called to process a token.Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractCheck
clearViolations, destroy, getFileContents, getFilePath, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, leaveToken, log, log, log, setFileContents, setTabWidth, setTokensMethods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractViolationReporter
finishLocalSetup, getCustomMessages, getId, getMessageBundle, getSeverity, getSeverityLevel, setId, setSeverityMethods inherited from class com.puppycrawl.tools.checkstyle.AbstractAutomaticBean
configure, contextualize, getConfiguration, setupChild
-
Field Details
-
MSG_KEY
A key is pointing to the warning message text in "messages.properties" file.- See Also:
-
localTypeNames
A set of simple names of every type declared in the current compilation unit, including nested types. -
permitsClauseAstList
A list ofTokenTypes.PERMITS_CLAUSEnodes found in the current compilation unit.
-
-
Constructor Details
-
UnnecessaryPermitsClauseCheck
public UnnecessaryPermitsClauseCheck()Creates a newUnnecessaryPermitsClauseCheckinstance.
-
-
Method Details
-
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:
-
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:
-
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:
-
beginTree
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
-
visitToken
Description copied from class:AbstractCheckCalled to process a token.- Overrides:
visitTokenin classAbstractCheck- Parameters:
ast- the token to process
-
finishTree
Description copied from class:AbstractCheckCalled after finished processing a tree. Ideal place to report on information collected whilst processing a tree.- Overrides:
finishTreein classAbstractCheck- Parameters:
rootAST- the root of the tree
-
isUnnecessary
Determines whether every type named in the givenpermitsclause is declared somewhere within the same compilation unit, and is therefore redundant.- Parameters:
permitsClause- theTokenTypes.PERMITS_CLAUSEnode to inspect- Returns:
trueif the clause is unnecessary
-
isTypeName
Checks whether the given direct child of apermitsclause represents a permitted type name, as opposed to a separating comma.- Parameters:
ast- the node to check- Returns:
trueif the node is a (possibly qualified) type name
-
getSimpleName
Extracts the simple (unqualified) name from a type name node, which is either a singleTokenTypes.IDENTor aTokenTypes.DOTchain representing a qualified name.- Parameters:
typeName- the type name node- Returns:
- the simple name of the type
-