...and various other minor cleanup:
* Moved "FLUTTER_STORAGE_BASE_URL" into a constant throughout the code. There are other strings that we should do that to but this one was relevant to the code I was changing.
* Fixed the logger's handling of slow warnings. Previously it deleted too much text. Fixed the test for that to actually verify it entirely, too.
* Made the logger delete the slow warning when it's finished.
* Fixed 'Please choose one (To quit, press "q/Q")' message to be the cleaner 'Please choose one (or "q" to quit)'.
* Added a debug toString to ValidationResult for debugging purposes (not used).
* In http_host_validator:
- Shortened constant names to be clearer (e.g. kPubDevHttpHost -> kPubDev).
- Added GitHub as a tested host since when you run `flutter` we hit that immediately.
- Renamed the check "Network resources".
- Updated the `slowWarning` of the check to say which hosts are pending.
- Removed all timeout logic. Timeouts violate our style guide.
- Removed `int.parse(... ?? '10')`; passing a constant to `int.parse` is inefficient.
- Replaced the `_HostValidationResult` class with `String?` for simplicity.
- Improved the error messages to be more detailed.
- Removed all checks that dependened on the stringification of exceptions. That's very brittle.
- Added a warning specifically for HandshakeException that talks about the implications (MITM attacks).
- Replaced exception-message-parsing logic with just calling `Uri.tryParse` and validating the result.
- Replaced a lot of list-filtering logic with just a single for loop to check the results.
- Replaced code that added a constant to a known-empty list with just returning a constant list.
- Revamped the logic for deciding which hosts to check to just use a single chain of if/else blocks instead of getters, lists literals with `if` expressions, `??`, functions, etc spread over multiple places in the code.
This changes the "Waiting for another flutter command to release the startup lock..." message output so that it appears on stderr instead of stdout. When it appears on stdout, it can mess up collection of the output. For instance, if you run flutter --version --machine and you're expecting JSON output, then you'll get non-JSON output even though the lock is released and you eventually would get what you're asking for.
Our current top crasher is an unclear error when ProcessManager fails to resolve an executable path. To fix this, we'd like to being adjusting the process resolution logic and adding more instrumentation to track failures. In order to begin the process, the ProcessManager has been folded back into the flutter tool
initialize the flutter root as early as possible. This allows all interfaces to be normally injected into commands, even if those objects might read from the flutter root.
Moves the flutter root initialization to a static method on the cache. This is a small step towards making this functionality non-static and instead injected like normal members - however, completely removing all of the static-ness at once was too large of a change.
Instead document and add unit tests and change existing code as little as possible.
#47161