For T185709: Cache CheckResult serializations per-entity in ObjectCache, we cannot just store Message objects – the parameters which we pass to our messages contain entity labels, which are already language-specific. We need something more at the ConstraintParameterRenderer level: a message object with parameter types like “string”, “entity ID”, “list of item IDs”. Only when the message is finally rendered do we pass those parameters into, say, an $entityIdLabelFormatter.
This also means one less object to inject into all checkers: the checkers will instantiate such a message, which is a pure value object, and the task of rendering it is then delayed until the CheckConstraints API or SpecialConstraintReport, which means that the checkers no longer need a ConstraintParameterRenderer.
- [ViolationMessage](https://gerrit.wikimedia.org/r/406294)
- [ViolationMessageRenderer](https://gerrit.wikimedia.org/r/406295)
- [ViolationMessage in CheckResult](https://gerrit.wikimedia.org/r/406296)
- [default null](https://gerrit.wikimedia.org/r/406297)
- messages without arguments
- entity ID arguments
- entity ID list arguments
- minor test changes 1, 2, 3
- [ItemIdSnakValue arguments](https://gerrit.wikimedia.org/r/406994)
- minor: remove unused parameters
- [ItemIdSnakValue list arguments](https://gerrit.wikimedia.org/r/407008)
- data value type arguments
- me being stupid: 1, 2
- data value arguments
- extra test
- inline code arguments
- ViolationMessageRenderer refactorings 1, 2
- multilingual text arguments
- constraint scope arguments
- prior refactoring
- constraint scope list arguments
- language arguments
- [ViolationMessageRenderer improvements](https://gerrit.wikimedia.org/r/408544)
See the subtasks for everything else that’s left to do.