Class AvoidConditionInversionCheck

  • All Implemented Interfaces:
    com.puppycrawl.tools.checkstyle.api.Configurable, com.puppycrawl.tools.checkstyle.api.Contextualizable

    public class AvoidConditionInversionCheck
    extends com.puppycrawl.tools.checkstyle.api.AbstractCheck
    This Check helps to catch condition inversion cases which could be rewritten in a more
    readable manner
    There're cases where it's justified to get rid of such inversion without changing
    the main logic. E.g.:

    if (!(( a >= 8) && ( b >= 5))) { ... }

    It can be rewritten as:

    if ((a < 8) && (b < 5)) { ... }

    if (!(a != b)) { ... }

    as

    if (a == b) { ... } Sure, there're cases where we can't get rid of inversion without changing the main logic, e.g.:

    return !(list.isEmpty());

    return !(obj instanceof SomeClass);

    That's why Check has following property:
    applyOnlyToRelationalOperands - if true Check will only put violation on
    condition inversions with relational operands.
    This option makes Check less strict, e.g.:
    Using with value true does not put violation on code below:

    if (! (obj instanceof SomeClass || obj1.isValid())) { ... }

    Since:
    1.13.0
    Author:
    Aleksey Nesterenko
    • Nested Class Summary

      • Nested classes/interfaces inherited from class com.puppycrawl.tools.checkstyle.api.AutomaticBean

        com.puppycrawl.tools.checkstyle.api.AutomaticBean.OutputStreamOptions
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static String MSG_KEY
      A key is pointing to the warning message text in "messages.properties" file.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int[] getAcceptableTokens()  
      int[] getDefaultTokens()  
      int[] getRequiredTokens()  
      void setApplyOnlyToRelationalOperands​(boolean applyOnlyToRelationalOperands)
      Setter for applyOnlyToRelationalOperands.
      void visitToken​(com.puppycrawl.tools.checkstyle.api.DetailAST ast)  
      • Methods inherited from class com.puppycrawl.tools.checkstyle.api.AbstractCheck

        beginTree, clearViolations, destroy, finishTree, getFileContents, getFilePath, getLine, getLineCodePoints, getLines, getTabWidth, getTokenNames, getViolations, init, isCommentNodesRequired, leaveToken, 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 String MSG_KEY
        A key is pointing to the warning message text in "messages.properties" file.
        See Also:
        Constant Field Values
    • Constructor Detail

      • AvoidConditionInversionCheck

        public AvoidConditionInversionCheck()
    • Method Detail

      • setApplyOnlyToRelationalOperands

        public void setApplyOnlyToRelationalOperands​(boolean applyOnlyToRelationalOperands)
        Setter for applyOnlyToRelationalOperands.
        Parameters:
        applyOnlyToRelationalOperands - The new value for the field.
      • getDefaultTokens

        public int[] getDefaultTokens()
        Specified by:
        getDefaultTokens in class com.puppycrawl.tools.checkstyle.api.AbstractCheck
      • getAcceptableTokens

        public int[] getAcceptableTokens()
        Specified by:
        getAcceptableTokens in class com.puppycrawl.tools.checkstyle.api.AbstractCheck
      • getRequiredTokens

        public int[] getRequiredTokens()
        Specified by:
        getRequiredTokens in class com.puppycrawl.tools.checkstyle.api.AbstractCheck
      • visitToken

        public void visitToken​(com.puppycrawl.tools.checkstyle.api.DetailAST ast)
        Overrides:
        visitToken in class com.puppycrawl.tools.checkstyle.api.AbstractCheck