21ab9e1ac5
Adds the constructor parameter `uniqueNameCheck` to `DiagnosticCode` and derived classes. If a non-null value is supplied for this parameter, an assertion checks that it's equal to `uniqueName`. (Passing a `null` value disables the assertion; this is necessary to preserve analyzer API compatibility). The reason for this change is that the value supplied for `uniqueName` when calling constructors in the `DiagnosticCode` class hierarchy is not necessarily the same as the value that is eventually stored in the `uniqueName` field; it goes through a sequence of manipulations while being passed up the superclass chain that make its actual behavior difficult to follow. The `uniqueNameCheck` field allows me to test the theory that the actual values that wind up in `uniqueName` are simply the analyzer codes, with the exception that `LinterLintCode.` is replaced with `LintCode.`. In a follow-up CL, I plan to eliminate nearly all the manipulations of `uniqueName` that occur while being passed up the superclass chain, which will simplify the code generation logic for computing `uniqueName` values. Adding `uniqueNameCheck` now allows me to test out the new, simpler logic, and verify that it will produce the same result as today's more complex logic. The `uniqueNameCheck` parameter is marked as `@deprecated` to prevent clients from trying to use it; this ensures that when I remove it in a follow-up CL, it won't be necessary to bump the analyzer major version. Change-Id: I6a6a696440bce62a31b988d12064244e54e37b6b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/458820 Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Paul Berry <paulberry@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com>