2a83a78213
The Flutter Widget Preview feature is currently implemented within Flutter Tools, which is responsible for detecting widget preview annotations in the user's project. When previews are detected, the Flutter Tool injects code generated based on the detected previews into an artificial widget_preview_scaffold project and performs a hot reload to render updates to the preview set in the scaffold application. `package:analyzer` is currently being used to detect previews, but this comes with a significant amount of memory overhead. Since widget previews are mostly being used from within IDEs which already have an active analysis server, moving widget preview detection into the DAS will remove the need for creating an additional analysis context in the Flutter Tool itself. This change includes the initial work to move widget preview detection into the DAS. It utilizes a pull-based mechanism, where the Flutter Tool listens for file system events and then queries the DAS using the `dart/textDocument/getFlutterWidgetPreviews` and `dart/workspace/getFlutterWidgetPreviews` LSP methods. Each reported preview contains some generated code based on the annotation used to define the preview. This code has all constants from the original annotation evaluated to either primitive values or constant expressions with namespaces applied to each symbol, allowing for the Flutter Tool to inject this code directly when updating the generated code in the scaffold project. Towards https://github.com/flutter/flutter/issues/179584 Change-Id: I043cb3235a66b25dda3f852ca7f147bff0e1e537 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/478100 Auto-Submit: Ben Konyi <bkonyi@google.com> Commit-Queue: Ben Konyi <bkonyi@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com>