Commit Graph

1123 Commits

Author SHA1 Message Date
Konstantin Shcheglov b74c9f073b Don't use '.type' in EdgeBuilder.
Change-Id: I737b90d07d7894a691fca65aca00924b392c3adb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121662
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-10-14 19:43:00 +00:00
Paul Berry 1e3cbd4344 Migration: Add IndexExpression support to FixBuilder.
Change-Id: I870047d12304c70cfe89e64d4864cc1809b7e4ac
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121408
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 5594981c2a Migration: add isCompound parameter to FixBuilder.visitAssignmentTarget.
When visiting an assignment target that is an index expression
(`x[y]`) we'll need to know whether we are doing a compound assignment
or not, because this will influence whether the type context for the
index expression (`y`) should come from `operator[]` or `operator[]=`.

So before adding index expression support to FixBuilder, let's add an
`isCompound` boolean to indicate whether the assignment context is a
compound assignment or not.

Change-Id: I26a41544e10ef9c9ba042c1d7862563bd9d18b68
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121407
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 13f6d8213b Migration: add FixBuilder support for prefix/postfix expressions.
Change-Id: I62a705af1c8d9944a417d074373aca4c93e99b6d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121402
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 0121a1fce1 Migration: finish EdgeBuilder support for prefix/postfix expressions.
A few changes here:

- Prefix expressions didn't support dynamic invocations.

- Prefix expressions didn't support generic types.

- Postfix expressions were handled incorrectly (we used the return
  type of operator+ for `x++`, whereas the type should have been the
  same as the type of `x`).

Change-Id: I35077b82a6e9c4e4f6ad8bb1264f5d725ec0d9a9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121401
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry d2f9e83861 Migration: integrate flow analysis of ?? into FixBuilder
Change-Id: I3d576c704ffd0b3b44fff0ceb442e355790ecb84
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121342
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 04d800af49 Migration: add fixBuilder support for throw and conditional expressions
Change-Id: Iea9bc71cb7f173340b7eb56f241985bd2c90f609
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121341
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 4f4d1bdf10 Migration: Add if-statement and block-statement support to FixBuilder.
Change-Id: I3e3f0b3824a9a51b63f9ee8ffbe414415fc2b2e1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121340
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 27967490f6 Migration: add FixBuilder support for typed lists of expressions.
Change-Id: I30a36e9925fdd5a409b87a98962709de1ed3168b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121263
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 14d4b93349 Migration: update FixBuilder to handle simple statements.
We now handle expression statements and variable declaration
statements where the variable type is an interface type.

Change-Id: I00f53a326495bcbeeba785b25c46abf1f3e9ab49
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121260
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 61790a17b6 Flow analysis: add support for non-null assertion operator.
Change-Id: I7a60944a4389b6f7c8e182d5c9b402fcbb05b624
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121100
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry 4e9220efdb Flow analysis: change the way parenthesized expressions are handled.
Instead of forcing the client to provide a way to de-parenthesize an
expression, the client informs flow analysis when a parenthesized
expression is encountered.  This reduces the runtime overhead to zero
for non-parenthesized expressions, and it saves the front end from
having to worry about support for parenthesized expressions (since its
internal representation doesn't care about parentheses).

Change-Id: I0bb6e91c87acaa05591e1b075da18700b11e4aae
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121080
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2019-10-12 03:11:03 +00:00
Paul Berry fd60a3eeba Flow analysis: generalize handling of ==.
This moves the logic for detecting the patterns `variable == null` and
`null == variable` into flow analysis, so that they don't need to be
replicated in each client.  It also opens the door to potential future
improvements (e.g. allowing `x == expr` to promote `x` to non-nullable
if expr has a non-nullable type).

Change-Id: I51fd9df822e3df1eb8bad5884f767c8b61c496ef
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120934
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-10-10 19:55:22 +00:00
Paul Berry 88b76997c4 Flow analysis: rework handling of closures.
Rather than suppress all promotions for variables written to in
closures, we track whether a closure might exist that captures a write
to a variable, and only suppress promotions once such a closure
exists.  This is consistent with what is proposed in
https://github.com/dart-lang/language/pull/473.

Contains a repro of #38791.

Change-Id: I4683581908703b510a3231b8fa8ed697121b09da
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120680
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-10-09 18:24:08 +00:00
Paul Berry 144b8eda81 Flow analysis: track variables captured in closures more accurately.
Previously, we considered a variable to be captured by a closure if a
write to that variable occurred anywhere inside a local function.  But
that was overly broad; it meant that we incorrectly classified all
written-to local variables of a local function to be captured.

This CL makes the AssignedVariables logic aware of variable
declaration sites, so that it only considers a variable to be captured
if it is written to at a lower level of local function nesting than
its declaration.  As a side bonus, it means that it can now exclude
out-of-scope variables from all sets of closed-upon and written-to
variables, which should make flow analysis faster by preventing it
from spending a lot of time accounting for variables that aren't
visible.

It also adds tracking of the set of all variables written to and
captured within each top level function.

This partially reverts commit 55466fd3cc.

Change-Id: Ibcd6476445addebed13cfc5ecc470d644e519148
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120800
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-10-09 17:34:51 +00:00
Paul Berry 63b93685e9 Migration: change EdgeBuilder to create flow analysis for each variable declaration.
There's no good reason to unify the flow analysis for several
variables declared together, and it would break some assertions I'm
going to add to flow analysis in future CLs.

Change-Id: I4dafb7b5e9b078cb741d506cd0bbfab1bcab5ebb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120840
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-10-09 17:34:51 +00:00
Paul Berry 2f1e430646 Flow analysis: track assigned variables separately for each top level declaration.
In a follow-up CL, I'm going to add logic to track the complete set of
assigned and captured variables seen so far.  We will need these sets
in order to properly cancel promotions on entry to a closure or nested
function.  But for performance reasons we don't want these sets to
include all variables seen in the entire file; just the local function
is sufficient.

Change-Id: I32a42075916be791f2fb7798814cec4c020e8b3b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120751
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-10-09 17:34:51 +00:00
Mike Fairhurst ee42196636 [nnbd_migration] Support async function expression bodies.
This fixes 10 "side casts" (from T to Future<T>).

FutureOr logic no longer needs to be specialized as _handleAssignment
now supports that.

Change-Id: Ie01b13797a49ec29b4eb723f580720f1caffffab
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120420
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2019-10-08 20:37:58 +00:00
Brian Wilkerson 1f6c93aed5 Add support for querying the kind of edge origins
Change-Id: I9dc8ff9aa98bab2461f670adf15df899080f3885
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120741
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-10-08 19:30:29 +00:00
Konstantin Shcheglov 3260bb29e0 Remove references to ElementHandle in analyzer and DDC.
Change-Id: I890d263552d3d08a00ff6f9fdf7291a03e8760db
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120630
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-10-08 15:25:14 +00:00
Sam Rawlins 7115687beb NNBD i13n: Add a description for discarding just the condition
Change-Id: Ia12f9e350c8a9ace456591db6c48553111e3c533
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120624
Auto-Submit: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2019-10-07 21:10:09 +00:00
Paul Berry 8ba6f7e2eb Migration: add support for assignment expressions to FixBuilder.
Change-Id: I8e9a76cd3a0952341bd7b354ca4deddee6496b7d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119525
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-10-07 13:45:59 +00:00
Paul Berry 6364c599b6 Migration: substitute properly when handling compound assignments.
Change-Id: Ib8f26959688df3b2fc6aa2db66331ef0ec357794
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120500
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-10-07 13:45:59 +00:00
Brian Wilkerson a8cce358d9 Add an edge origin for edges resulting from default values of optional parameters
Change-Id: I252e2e003dc46b4ddf702bf0c7d16a7611c2476a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120280
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-10-04 20:22:57 +00:00
Mike Fairhurst a447dbc498 [nnbd_migration] fix hard edges on ??= assignments
Change-Id: Ie2731e723147189591302e411d1dcb7540e09b23
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119762
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2019-10-04 19:34:26 +00:00
Mike Fairhurst c3053f0eb2 [nnbd_migration] Restrict downcasts; make all type parameters nullable.
This makes trial_migration.dart report two new exceptions:

_EdgeBuilder&GeneralizingAstVisitor&_AssignmentChecker._checkAssignment (package:nnbd_migration/src/edge_builder.dart:2169:14) (x30)
_EdgeBuilder&GeneralizingAstVisitor&_AssignmentChecker._checkDowncast (package:nnbd_migration/src/edge_builder.dart:2351:14) (x7)

30 & 7 is not great but not terrible. These also do not break path, logging, or
charcode.

Failing tests show why we cannot correctly cover remaining cases without
a larger CL.

Change-Id: I6e510db147f60cc8ee047d45e4ce2d95d26cccc4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119533
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2019-10-04 18:31:48 +00:00
Paul Berry 9f8caeaf4c Migration: begin creating a third visitor class.
This visitor, once completed, will visit code after migration is
complete, determining the post-migration type of each expression, and
deciding where null checks are needed.

See #38472 for more information about why this is necessary.

Change-Id: I8c7dece643cf5417dbb66d5290fcdbad68d3e690
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119400
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-30 20:21:44 +00:00
Brian Wilkerson 5236285432 Expose the getter EdgeInfo.isTriggered and make use of it
Change-Id: I2177ffb65485f3a9fd73f76a420b4c2aa5007ea8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119422
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-09-30 17:45:22 +00:00
Paul Berry 200e5b668d Migration: extract decoratedClassHierarchy from EdgeBuilder.
This will allow it to be re-used when we traverse input files for a
third time to generate modifications.

Change-Id: I0984484a90eb2ecb87f848ee70c03280ec69cecf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119124
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-29 12:36:47 +00:00
Paul Berry caaa577b0c Migration: add support for user-definable operators on generic classes
Change-Id: I2153c5ac3000c0617dfbe5654d57c3c21c74431d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119122
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-28 14:21:56 +00:00
Paul Berry 21ee71c3e5 Migration: favor explicit /*?*/ comments over hard edges.
Change-Id: I9bc6dcb7a21af24e1a6ce6918f098c9686ab40c9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119121
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-28 12:51:15 +00:00
Paul Berry e4d8ad5866 Flow analysis: remove add method.
It is no longer necessary to explicitly "add" variables that are
subject to flow analysis.  Unrecognized variables are now treated
simply as uninitialized.  This simplifies analyzer error recovery by
ensuring that an attempt to use a variable before its declaration
doesn't lead to a crash.

Change-Id: I11e8afc3ffb93c864db4638a224ff782d11f5a6c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119200
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-28 01:55:45 +00:00
Paul Berry 34899a8a56 Flow analysis: remove TypeOperations.isLocalVariable.
The last use of it was removed in c73df64c94.

Change-Id: Iececde3309246bfb6f6106e6e6d62ac2b08f9376
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119163
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-09-27 22:09:01 +00:00
Paul Berry ec2823d052 Make an interface type to represent promotable variables.
And updade flow analysis clients to use this interface, so that we
have no risk of accidentally trying to promote things that shouldn't
be promotable.  (Previously we used VariableElement, which would have
allowed fields).

Fixes https://github.com/dart-lang/sdk/issues/38572.

Change-Id: I225d3adabea503ca7eb9042516cf95d5a257fec6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119162
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-27 20:54:00 +00:00
Paul Berry 2cbaaba7ad Migration: add logic for converting a decorated type to its final post-migration form.
Change-Id: I392736634ccc87696068611f671e08238de9122e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119063
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-09-27 16:35:24 +00:00
Brian Wilkerson 61b4c0f770 Cleanup hints and lints in analyzer packages
Change-Id: I7f1a6ad1ed3610da9616683576ebfb5efd543fd9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119164
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-09-27 16:12:44 +00:00
Paul Berry 5b33baded9 Migration: fix trial_migration.dart's handling of required
Now that the migration tool inserts `required` rather than `@required`
for required parameters, we need the trial_migration tool to
understand the new behavior.

Change-Id: I401310930120cf6e57af7ab633983b44415d404f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119081
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-26 19:00:19 +00:00
Brian Wilkerson 07db94d454 Add support for details and implement some initial details for regions
Details provide a way for clients to provide navigation support. I'm
imagining that the description could be used as link text.

The deatils are currently more of a data dump than information. I need
to see more migration results in order to figure out when and how to
pare down the data into actionable information.

We might want to capture all of the navigation targets as we build the
info so that we can create anchors in the HTML.

Change-Id: Ie48622ce7d935d3c028ea42e51cfc8da590db149
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118908
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2019-09-26 18:03:40 +00:00
Paul Berry f7b6169e18 Migration: add required keyword instead of @required annotation.
Fixes #38461.

Bug: https://github.com/dart-lang/sdk/issues/38461
Change-Id: Ibe3ba234fce9d1293ef862fad6f785e9abed964e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118300
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-25 19:14:53 +00:00
Konstantin Shcheglov 9da8472e2d Don't use ClassElement.type in nnbd_migration.
R=paulberry@google.com

Change-Id: I656b913e809c0174eab93226e62e2392a7142cf3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117981
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-19 16:15:40 +00:00
Paul Berry 605384dbe7 Migration: Add nullability_migration_impl_test.dart to test_all
Change-Id: I8fb3d642744bf3a7c7889e2cfa71733db6c489ba
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118060
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-19 16:02:16 +00:00
Paul Berry 23def0da02 Migration: add support for assert initializers.
Change-Id: I581550e4359a256f846c05d4c4cec60082b4ab01
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117880
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-19 13:16:06 +00:00
Paul Berry 8ffe04bcf7 Migration: integrate flow analysis for "is" checks.
Fixes #38340.

Change-Id: I881f71f4dbbdc75b33433bca15445b0677ef04d2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117775
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-09-19 13:16:06 +00:00
Paul Berry a85b7cef95 Migration: Add support for for-each loop variables.
Change-Id: If5536394a99e4706c3916d360e7ac051e18a97f6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117772
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-09-19 13:16:06 +00:00
Paul Berry 430ff6d649 Migration: fix "matching" functionality of edge testing infrastructure.
Change-Id: I6318f89ba962329a1d3f4b0af2b0352981d6c9fb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117840
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-19 00:26:14 +00:00
Paul Berry 93793a4ee8 Migration: add tests to document missing required keyword functionality.
See #38461 and #38462.

Change-Id: I94da796e0d21578c9838ae0eb9c477f4a21e054e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117771
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-18 20:46:25 +00:00
Paul Berry 4d9792668c Flow anaylsis: fix definite assignment tracking for for-each loop vars
Change-Id: Ia0dfd94070e28832c5ffc6fb892626d9036042a4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117820
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-18 19:21:39 +00:00
Konstantin Shcheglov 4102e63f37 Deprecate TypeProvider.listType/mapType
R=brianwilkerson@google.com

Change-Id: I7cef0b752be4ef6a7e4bc5394e14cd64ecb67ab5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117765
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-18 17:55:03 +00:00
Konstantin Shcheglov 4fcef04d61 Deprecate TypeProvider.iterableType/streamType
R=paulberry@google.com

Change-Id: Iab8038cf0ed413de7c05da4f69015c1d1309aa35
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117684
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-09-18 17:29:58 +00:00
Paul Berry 998a421128 Migration: expose fix reasons through the instrumentation interface.
Change-Id: I0f8ba9aa58d098b431fad338d46a2f14d87e43b4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117686
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-09-18 15:52:50 +00:00