e2immu is a static code analyser for Java.
Next to promoting the use of practical immutability, the e2immu project provides a static code analyser to help enforce the proper use of these immutability concepts.
The analyser is opinionated: it warns against a number of bad practices, such as:
Assigning to a field outside the type of that field, is not allowed. Why? We believe that modification belongs to the type itself, as per the concept of a container. This may be too strong for certain situations. However, we insist that assignments to fields cannot be made outside the field itself.
Non-private fields must be effectively final. Why? We make no distinction between the different forms of non-private-ness. This restriction is closely related to the previous one, but not quite the same.
Methods which do not refer to the instance, must be marked
static. This is a trivial one, just make sure your IDE does it for you.
Parameters should not be assigned to.
The analyser assumes that exceptions are used to detect illegal situations in the code: they should never be part of the normal program flow. It makes no distinction between static fields and instance fields for most concepts; the assumption being that non-immutable static fields are rarely used.
The analyser does not only study modification and immutability. It also
- does null-pointer analysis
- computes preconditions
- tracks instance state of collection objects (like when a set is empty, or not)
- checks for dead code, useless assignments, trivial conditions, etc.
- detects fluent methods, identity methods
- detects singleton classes, utility classes, and extension classes
- enforces finalizer methods
The Manual → is the right place to discover what the analyser can do.