Probable bugs
- '@Deferred' result is unused
Reports function calls with the Deferred result type if the return value is not used.
- 'catch' block may ignore exception
Reports catch blocks that are empty or may ignore an exception.
- 'equals()' and 'hashCode()' not paired
Reports classes that override equals() but do not override hashCode(), or vice versa.
- 'equals()' between objects of inconvertible types
Reports calls to equals() where the receiver and the argument are of incompatible primitive, enum, or string types.
- 'lateinit var' property overrides 'lateinit var' property
Reports lateinit var properties that override other lateinit var properties.
- Ambiguous coroutineContext due to CoroutineScope receiver of suspend function
Reports calls and accesses of CoroutineScope extensions or members inside suspend functions with CoroutineScope receiver.
- Ambiguous non-local 'break' or 'continue'
Reports break or continue usages inside of lambdas of loop-like functions.
- Ambiguous unary operator use with number constant
Reports an unary operator followed by a dot qualifier such as -1.inc().
- Array property in data class
Reports properties with an Array type in a data class without overridden equals() or hashCode().
- Arrays comparison via '==' and '!='
Reports usages of == or != operator for arrays that should be replaced with contentEquals().
- Augmented assignment creates a new collection under the hood
Reports augmented assignment (+=) expressions on a read-only Collection.
- Constant conditions
Reports non-trivial conditions and values that are statically known to be always true, false, null or zero.
- Constructor can never be complete
Reports constructors with a non-null self-reference parameter.
- Control flow with empty body
Reports if, while, do or for statements with empty bodies.
- Convert 'object' to 'data object'
Reports object that can be converted to data object.
- Convert equality check with 'NaN' to 'isNaN' call
Reports an equality check with Float.NaN or Double.NaN that should be replaced with an isNaN() check.
- Covariant 'equals()'
Reports equals() that takes an argument type other than Any? if the class does not have another equals() that takes Any? as its argument type.
- Delegating to 'var' property
Reports interface delegation to a var property.
- Existing backing field without assignment
Reports property setters that don't update the backing field.
- Extension property conflicting with synthetic one
Reports extension properties that conflict with synthetic ones that have been automatically produced from Java get or set methods.
- External interface contains non-nullable boolean property
Reports non-nullable boolean properties in external interface.
- External interface contains val property
Reports not var properties in external interface.
- Implicit 'Nothing?' type
Reports variables and functions with the implicit Nothing? type.
- Implicit (unsafe) cast from dynamic type
Reports expressions with a dynamic type in the specified inspection scope that are implicitly cast to another type.
- Incomplete destructuring declaration
Reports incomplete destructuring declaration.
- Iterated elements are not used in forEach
Reports forEach loops that do not use iterable values.
- Leaking 'this' in constructor
Reports unsafe operations with this during object construction including: Accessing a non-final property during class initialization: from a constructor or property initialization Calling a non-final function during class initialization Using this as a function argument in a constructor of a non-final class If other classes inherit from the given class, they may not be fully initialized at the moment when an unsafe operation is carried out.
- Main function should return 'Unit'
Reports when a main function does not have a return type of Unit.
- Private data class constructor is exposed via the 'copy' method
Reports the private primary constructor in data classes.
- Range with start greater than endInclusive is empty
Reports ranges that are empty because the start value is greater than the endInclusive value.
- Recursive equals call
Reports recursive equals(==) calls.
- Recursive property accessor
Reports recursive property accessor calls which can end up with a StackOverflowError.
- Redundant assignment
Reports assignments of a variable to itself.
- Sealed subclass without state and overridden equals
Reports direct inheritors of sealed classes that have no state and overridden equals() method.
- Serializable object must implement 'readResolve'
Reports objects (data object including) that implement java.io.Serializable but don't implement readResolve.
- Suspicious 'var' property: its setter does not influence its getter result
Reports var properties with default setter and getter that do not reference backing field.
- Suspicious callable reference used as lambda result
Reports lambda expressions with one callable reference.
- Suspicious combination of == and ===
Reports == and === comparisons that are both used on the same variable within a single expression.
- Throwable not thrown
Reports instantiations of Throwable or its subclasses, when the created Throwable is never actually thrown.
- Unresolved reference in KDoc
Reports unresolved references in KDoc comments.
- Unused equals expression
Reports unused equals(==) expressions.
- Unused result of data class copy
Reports calls to data class copy function without using its result.
- Unused return value of a function with lambda expression body
Reports calls with an unused return value when the called function returns a lambda from an expression body.
- Unused unary operator
Reports unary operators for number types on unused expressions.
- Useless call on collection type
Reports filter… calls from the standard library on already filtered collections.
- Useless call on not-null type
Reports calls on not-null receiver that make sense only for nullable receiver.
- Variable in destructuring declaration uses name of a wrong data class property
Reports entries of destructuring declarations that match the name of a different property of the destructured data class.