e29aa0cf3f
Previously, the fields in an AnalysisOptionsImpl were primarily arranged by an extension method, declared externally, called `applyOptions`. It seemed very odd that this wasn't just a method on AnalysisOptionsImpl; the "Impl" class is already private. But it turns out that an AnalysisOptionsImpl is _mostly_ not mutated in practice; the class wants to be immutable, with final fields. In this change, I make AnalysisOptionsImpl mostly immutable, and convert the `applyOptions` extension method, and all of its helper code, into a builder class, AnalysisOptionsBuilder. While we don't use a lot of builders in analyzer packages, this is a much more common and idiomatic pattern for setting up complicated data, multiple values, and then finalizing it all into an object that will not be changed again during it's lifetime. One big benefit of this refactoring is that most fields in AnalysisOptionsImpl are now final: * sourceLanguageConstraint * errorProcessors * excludePatterns * file * strictCasts * strictInference * strictRawTypes * chromeOsManifestChecks * codeStyleOptions * formatterOptions * unignorableNames Whereas before, they _all_ had to be mutable, as `applyOptions`, the primary mechanism for setting up an AnalysisOptionsImpl, had to able to write any field. Other changes: * Flip the instantiation of AnalysisOptionsImpl and CodeStyleOptions; now CodeStyleOptions is instatiated first, and AnalysisOptionsImpl sets itself as `codeStyleOptions.options`. * Remove the private, deprecated, `applyToAnalysisOptions` function. Change-Id: I6595d88aa5721e4f9a8b2b987482f9f43d27efd1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/390660 Commit-Queue: Samuel Rawlins <srawlins@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>