Copying change builders in order to enable reverting changes from a single correction producer when there's an exception is expensive. This CL replaces that implementation with a transactional model. Clients are not required to start a transaction (that happens automatically), but are required to signal the end of a transaction by invoking either `commit` or `revert`. (Actually, `commit` is assumed if neither method is invoked before computing the `SourceChange`.) There is some information in the Dart file edit builder related to imports that isn't correctly handled. The reason for this is that too much of the import computation is done up-front. I don't think this will be a problem in practice (or at least not often), but we should come back at some point to change the implementation so that we retain abstract data longer and perform more processing at the very end (where we'll have complete information and probably be able to do a better job anyway). This CL improved the performance of the benchmark that adds and applies fixes for 10,000 lint violations. Before it took an average of 11216.0 ms. After it took an average of 4200.2 ms. Which is about a 62% improvement. Change-Id: I12710606455a04e34a82308ede5d9fba1c68b972 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/428060 Reviewed-by: Samuel Rawlins <srawlins@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
A framework for building plugins for the analysis server.
Usage
Note: The plugin support is not currently available for general use.
Plugins are written in Dart and are run in the same VM as the analysis server. The analysis server runs each plugin in a separate isolate and communicates with the plugin using a plugin API. This API is similar to the API used by the analysis server to communicate with clients.
Plugins are automatically discovered and run by the analysis server.
This package contains support code to make it easier to write a plugin. There is a tutorial describing how to use the support in this package.
Support
Post issues and feature requests on the issue tracker.
Questions and discussions are welcome at the Dart Analyzer Discussion Group.
License
See the LICENSE file.