Flow analysis: track detailed non-promotability reasons for getters. - When the shared logic in `field_promotability.dart` decides that a given field should be non-promotable based on attributes of the field itself (i.e. because it's public, non-final, or external), it returns information to the caller about the reason for non-promotability. - This information is recorded by the analyzer and CFE, and delivered back to flow analysis in response to a new callback method, `whyIsPropertyNotPromotable`. Flow analysis records this information in the `PropertyNotPromoted`, which is delivered to clients when a compile-time error occurs due to a property access not being promotable. This ensures that the appropriate `http://dart.dev/go/non-promo-...` link will be associated with the context message. In a future CL, the context messages themselves will be updated to match the link. - The shared logic in `field_promotability.dart` also collects, for each field name that isn't promotable, all the reasons why that particular field name is non-promotable, in a new data structure, `FieldNameNonPromotabilityInfo`. In a future CL, this data structure will be used to explain to the caller situations in which a field is non-promotable due to interference from other fields or getters with the same name. Change-Id: I89ad102a4bec071bf59374971a8d83b061d4ec1d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/327901 Reviewed-by: Phil Quitslund <pquitslund@google.com> Reviewed-by: Lasse Nielsen <lrn@google.com> Commit-Queue: Paul Berry <paulberry@google.com>
Dart is:
Optimized for UI: Develop with a programming language specialized around the needs of user interface creation.
Productive: Make changes iteratively: use hot reload to see the result instantly in your running app.
Fast on all platforms: Compile to ARM & x64 machine code for mobile, desktop, and backend. Or compile to JavaScript for the web.
Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:
Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.
Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).
Dart is free and open source.
See LICENSE and PATENT_GRANT.
Visit dart.dev to learn more about the language, tools, and to find codelabs.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.