PatternVariableAssignment

Since Checkstyle 10.26.0

Description

Checks for assignment of pattern variables.

Pattern variable assignment is considered bad programming practice. The pattern variable is meant to be a direct reference to the object being matched. Reassigning it can break this connection and mislead readers.

Examples

To configure the check:


<module name="Checker">
  <module name="TreeWalker">
    <module name="PatternVariableAssignment"/>
  </module>
</module>

Example of violations:


public class Example1 {
  public void testAssignment(Object obj) {
    record Rectangle(Object test1, Object test2) {}
    record ColoredPoint(Object test1, Object test2, Object test3) {}

    if (obj instanceof Integer) {
      Integer z = 5; // ok, 'z' is not a pattern variable
    }
    if (obj instanceof String s) {
      s = "hello"; // violation, "Assignment of pattern variable 's' is not allowed."
      System.out.println(s);
    }
    if (obj instanceof Rectangle(ColoredPoint x, ColoredPoint y)) {
      x = new ColoredPoint(1, 2, "red");
      // violation above, "Assignment of pattern variable 'x' is not allowed."
    }
    if (obj instanceof Rectangle(ColoredPoint(Integer x1,Integer x2,String c),
                                 Integer _)) {
      c = "red"; // violation, "Assignment of pattern variable 'c' is not allowed."
    }
  }
}

Example of Usage

Violation Messages

All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.

Package

com.puppycrawl.tools.checkstyle.checks.coding

Parent Module

TreeWalker