Commit Graph

788 Commits

Author SHA1 Message Date
Paul Berry 9b6394c484 Migration: Fix toFinalType for top bounds.
To avoid inserting unnecessarily complex casts, we want to normalize a
type like `void Function<T extends Object?>()` to the equivalent `void
Function<T>()`.

Change-Id: Ied10e7735511b732eaeca027e621b4ef6997df59
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133820
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-30 04:06:10 +00:00
Mike Fairhurst 124f9b3fe0 [nnbd_migration] Handle downcast from FutureOr<T> to T.
fixes https://github.com/dart-lang/sdk/issues/40364

Bug: https://github.com/dart-lang/sdk/issues/40364
Change-Id: I5e4b70e63daecfe9470127bcae4c5481c6e747f3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133763
Reviewed-by: Janice Collins <jcollins@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-01-29 20:02:10 +00:00
Mike Fairhurst 6e53629f3b [nnbd_migration] Handle LUB(Never, C<T>).
Fixes https://github.com/dart-lang/sdk/issues/40363

Bug: https://github.com/dart-lang/sdk/issues/40363
Change-Id: I047a5ef9c58c22e6cf4603551015097049f1ac83
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133662
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Janice Collins <jcollins@google.com>
2020-01-29 19:50:50 +00:00
Janice Collins 4ee5fd243f Move the parallelization restriction into SubprocessLauncher.
This eliminates a lot of really noisy boilerplate in the upcoming
FantasyRepo implementation.  The test only verifies that the pathway
works, we rely on MultiFutureTracker working to actually restrict
properly.

Change-Id: Ia88d0b24dd739ab1cd4a661325214395bf37eef3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133742
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Janice Collins <jcollins@google.com>
2020-01-29 18:32:36 +00:00
Paul Berry 0ca9e8522e Migration: add explicit types to variable declarations when needed.
Partly addresses https://github.com/dart-lang/sdk/issues/39404.

Change-Id: Id8139b18bf8339df0eead48cc8648cb5f030acf0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133741
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-29 18:30:46 +00:00
Paul Berry 208d8c2e52 Migration: Rework FixAggregator to reduce order dependencies.
Previously, FixAggregator provided one NodeChange-derived class for
each possible kind of fix; if multiple fixes had to be made to a
single AST node, its client (FixBuilder) was required to nest them in
the appropriate order.  FixBuilder accomplished this by carefully
controlling the order in which it decided on fixes.  Unfortunately,
this careful control of order is becoming burdensome for FixBuilder to
maintain.

With this change, the class hierarchy of NodeChange mirrors the class
hierarchy of AstNode, with different fields for each possible kind of
fix.  This means that FixBuilder can decide on fixes in whatever order
is convenient.

Change-Id: I1c79cfc37b6289051b3927c67867b77a1dbb5ebf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133541
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-29 18:30:46 +00:00
Paul Berry 7467988bbc Migration: simplify edit plans for changing ?. into ..
I realized that I can use the same "pass through" infrastructure for
these kinds of edits.  This should help prepare for a future CL in
which we can aggregate together more complex changes, such as
introducing an "as" cast at the same time as changing `?.` into `.`.

Change-Id: Ie3af07a3563c44d62d4ed34d2a477eef6fae358f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133540
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-29 18:30:46 +00:00
Paul Berry 62fe052908 Migration: Make sure that /*!*/ hints and already-migrated nullabilities can't be overridden.
Since https://dart-review.googlesource.com/c/sdk/+/133422 has
introduced the possibility that a node previously marked as
non-nullable would later be marked as nullable, we need to make sure
that doesn't happen for types that have been explicitly marked as
non-nullable using a "/*!*/" hint, or types that are non-nullable in
an already-migrated library.

This required refactoring the state of nullability nodes slightly.
Nodes can now be in six states:

1. Non-nullable (previously called "undetermined")

2. Non-nullable, with non-nullable intent (previously called
   "nonNullable")

3. Nullable

4. Nullable, with non-nullable intent (previously indistinguishable
   from 3)

5. Exact nullable

6. Exact nullable, with non-nullable intent (previously
   indistinguishable from 5)

To allow all these states to be distinguished, we separate the state
into two orthogonal parts: a "nullability" part and a "non-null
intent" part.

Change-Id: I588a2e63eaa76e3992fdfbaaa2e8b212cc1f60d1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133440
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-29 18:30:46 +00:00
Paul Berry a49dce0631 Migration: remove the "propagation step" part of the instrumentation interface.
It didn't wind up being used, and its presence limits our ability to
modify the graph propagation algorithm (which I plan to do in a
follow-up CL).

Change-Id: I48a9b879f25295075e8d95eb3fb0185839303957
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133425
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-29 18:30:46 +00:00
Mike Fairhurst 3182edb74e [nnbd_migration] Fix usages of migrated typedefs
Change-Id: If92f5c6f78f4f68e9ef7a05674be42b5ac3d3cfc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133600
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-01-29 18:13:40 +00:00
Janice Collins fe59e25492 Add ports of the tables in steamroll_ecosystem.sh.
Shifted some minor things around in the design as well -- particularly
the symlink is moved to being owned by the workspace as not all
workspace implementation will create symlinks in the original directory.

I've also dropped most of the public interface to FantasyWorkspace.
Will add that back in when I'm more sure what it will be.

Change-Id: I19d1b1c8ad4063868ff7c10869c4561d4db64bf2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133435
Commit-Queue: Janice Collins <jcollins@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-28 18:29:28 +00:00
Paul Berry 49c813a41e Migration: consider edges introduced by contravariant assignment to be uncheckable.
This prevents a non-null assertion in a callback function from marking
the parameter type as non-nullable, if that would make the callback
function fail to meet the requirements of its use site.  For example,
when migrating:

  f(List<int/*?*/> myList) => myList.map((int x) => x + 1);

We previously would produce:

  f(List<int?> myList) => myList.map((int x) => x + 1);

(Which would fail immediately due to the callback `(int x) => x + 1`
not accepting `int?`).  We now produce:

  f(List<int?> myList) => myList.map((int? x) => x! + 1);

(Which only fails if there is actually a null value in the list,
matching the behavior of the code prior to migration).

Addresses another manifestation of
https://github.com/dart-lang/sdk/issues/38699.

Change-Id: Iffe9fbdace00ff1edea0f6d125c86b06fad7bbcb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133423
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-28 13:26:47 +00:00
Paul Berry e2e1993b94 Migartion: consider edges introduced by parameter overrides to be uncheckable.
This prevents a non-null assertion in an override from marking a base
class parameter as non-nullable.

Addresses one manifestation of https://github.com/dart-lang/sdk/issues/38699.

Change-Id: I8abc6829bb8de7a34a7e2c117a0c45a74e417771
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133422
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-28 13:26:47 +00:00
Paul Berry da5ab8ce00 Separate graph propagation state and results out to their own class.
This serves two purposes:

1. It makes it easier to be confident that we're resetting the
   necessary state when re-running graph computation in
   `NullabilityGraph.update`.

2. I'm planning some changes to the graph propagation algorithm (in an
   upcoming CL).  Having the propagation state separate from the rest
   of the graph state will make it easier to reason about these
   changes.

Change-Id: I5e101bbce6e5ad382dd754bfbb9b72e20df23fd1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133337
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-28 13:26:47 +00:00
Paul Berry 2084137a7f Migration: fix warning in edge_builder.dart.
The visitSimpleIdentifier method was failing to return a DecoratedType
for the case where the identifier was `void`.

In practice this didn't matter, since the only time the type returned
from visitSimpleIdentifier is used is when the the identifier is used
as an expression, and `void` can't be used an expression (i.e. `var
voidType = void;` is illegal).

Nonetheless, it's nice to silence the warning, and it seems like it
increases safety to return a value from visitSimpleIdentifier in all
cases.

Change-Id: I239b98b9e5932195e6884738728d26d86c6ab519
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133336
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-28 13:26:47 +00:00
Paul Berry 1e01274bdf Sort methods in edge_builder_test.dart and migration_visitor_test_base.dart.
Change-Id: I14f9be6fabdd8df07d98f0e15edeebc07b625e30
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133335
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-28 13:26:47 +00:00
Mike Fairhurst 3e453e5adf [nnbd_migration] union resolved typedef nodes with inferred ones
Change-Id: Iaccdc9e2f61219c876957377f15c8b43555661b4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133430
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-27 22:08:09 +00:00
Janice Collins f0038ad8aa Move MultiFutureTracker and SubprocessLauncher into utilities.
Also adds some basic tests for both, centering on the functionality
that is most important to use in SubprocessLauncher's case.

Change-Id: I90a79cd12f7b2222bae366907a6dc200591bb59c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133433
Commit-Queue: Janice Collins <jcollins@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-27 21:34:19 +00:00
Mike Fairhurst 3ab0defd92 [nnbd_migration] visit type names in type arguments
Change-Id: I89846cf30517b1d9def947e80724a16de85abe52
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133320
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 482ea3c619 [nnbd_migration] fix typo in instrumentation test
Change-Id: I042d9ace734bb003898ab391922df56d6f5d562e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133248
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 11fa5a5322 [nnbd_migration] visit type names in factory constructors
Change-Id: Ia63a7031ee228a609d13b90ebad67177b38ee57b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133247
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 1d96bfcbe9 [nnbd_migration] visit type names in method type parameter bounds
Change-Id: I24ee455b58644734c38e783014e7e38b5650334d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133181
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 955e64bd6b [nnbd_migration] visit types in typed field formal parameters
Change-Id: Idb3d122b1fc4e4c0468152988bba3e4e9254c564
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133200
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 1c7ac2dce3 [nnbd_migration] visit type names in class aliases
Change-Id: I1c59119b9614d8fa5b14b618428771765bbb25d1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133172
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst dd6829de6e [nnbd_migration] visit type names in mixin type parameter bounds
Change-Id: I214ce1a6c1e2de042eb091c0059633f8f2220542
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133157
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 5e23a103e9 [nnbd_migration] visit type names in extension extended type
Change-Id: Ib81bc5b2429fd4eeed87e4bc1527bda4c95cd3cf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133155
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 36451c85a2 [nnbd_migration] visit type names in for-in loops (&test regular for)
Change-Id: I5b8b7b6a271e8dfa24e4c4cc0929f2c85939c663
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133152
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 1ae7b6655e [nnbd_migration] visit type names in explicit invocation arguments
Change-Id: Ie73edb11e6b0247eb312c7450811248f1f21d314
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133165
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 989fd9a628 [nnbd_migration] visit type names in instance creation parameters
Change-Id: I4ec3f1bd4984a731d7758ab6e000429351811f9c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133147
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst ea14c4dee0 [nnbd_migration] visit type names in list, set, map literals
Change-Id: I19e20460154e0c05f0e115cae6cd79c36b8fb4b6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133163
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 428fd51e19 [nnbd_migration] visit type names in method type parameter bounds
Change-Id: I4b0690f2d792430467f93be2aade6cd627b90016
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133162
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst e9c26045c3 [nnbd_migration] Visit types names in local variables
Change-Id: Idcc84dfc630781e621e9adc356efd5e5d704bda2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133146
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst e6249d3667 [nnbd_migration] visit type names in type parameter bounds
Change-Id: I89a1d35d6f8e4746adbb64316f69a5bb74efe381
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133145
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst d528bf9e13 [nnbd_migration] visit type names in extends/implements
Change-Id: I3e410861702c8f865c61942bc5d2d568b486035d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133144
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 5dafbe741b [nnbd_migration] visit type names in as casts
Change-Id: Ic38b274e09da497230473601a966950c478f3624
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133143
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Mike Fairhurst 08a0e830e1 [nnbd_migration] visit TypeNames for function return types
Change-Id: I04414338a4072f4e2b45318df387313cdb979e6c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133161
Auto-Submit: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-24 20:37:24 +00:00
Paul Berry 2edd8d17c0 Migration: replace ?. with . where appropriate.
Change-Id: Id32f60caec0c25099704652c03fafc8b184bf4d8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133241
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-24 19:58:43 +00:00
Paul Berry 8714a7fa1d Abstract resolution calls to .isNullAware.
When migrating, we'll need to change some null-aware property accesses
and method calls to non-null-aware (due to the fact that the receiver
is non-nullable, or due to the new `?.` shortcut rules), so when
migration re-resolves, it will need to be able to override
resolution's determination of whether a given property access or
method call is null-aware.

Change-Id: I411f43fb937431e757d4dd9b968874db84158e47
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133240
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2020-01-24 19:58:43 +00:00
Paul Berry 811ae9eb8d Sort declarations in api_test.dart
Change-Id: I7385a614b8d757f533602b9a5b4310fe2a87987d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133170
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-24 14:35:59 +00:00
Paul Berry 2a8ea8900b Migration: as a temporary measure, remove code via commenting it out.
The new FixBuilder infrastructure has the ability to remove dead code
either by commenting it out or by deleting it entirely.  Previous to
FixBuilder all we could do is comment it out.  My intention when
landing FixBuilder was to keep this behavior so that we could make a
deliberate switch at a later time (when everything was well tested).
But I accidentally set the flag wrong for some code paths, and so
currently we delete code.

This has caused some bugs in the preview tool (which I will file in
the issue tracker shortly).  In order to avoid causing problems for
members of the language team who intend to try out the tool this week,
I'm switching back to "comment code out" as a temporary measure.

Change-Id: I0ca8674b6a8d9ab23cf6726a15fa3dc1919085b4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133081
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-23 19:36:19 +00:00
Mike Fairhurst 8e337e34b1 [nnbd_migration] Don't union implicit types to bounds
Fixes https://github.com/dart-lang/sdk/issues/40181

As long as its possible to union a bound to a node involved in a
substitution, its possible to make a bound "exact nullable." This
implies that all instantiations of that type must be with a nullable
version of that parameter, which is not desirable for any program.

This marks new failing tests due to
https://github.com/dart-lang/sdk/issues/39404. However, re-running this
on package:collection resulted in a better migration result (no issues
from the non-nullable inferred types being made explicit or not). So my
personal feeling is this is worth landing now, however, we could land it
later.

Change-Id: I63479c5e4edecf301c27e21b5ba57508d625e8ab
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132748
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-01-23 18:49:49 +00:00
Paul Berry e0f97cda30 Migration: switch to using the FixBuilder.
Change-Id: I41e978439d36a26e55be71071a931390eb3dbf57
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133020
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-23 16:06:57 +00:00
Mike Fairhurst 835eb766fa [nnbd_migration] Support LUB(T extends num, num)
Change-Id: Ibac663aaafc3ace6acb2522aa609fc3ac2892153
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132980
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-01-22 23:26:19 +00:00
Paul Berry 0673525175 Migration: add permissive mode support to FixBuilder
Change-Id: If9a82fc274ea89089df0c3b17bae02ba564a74ec
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132943
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-01-22 22:59:39 +00:00
Brian Wilkerson 500822341e First steps to allow migration to be incrementally rerun
Change-Id: Ib4e682739a732ad9b8863ecb780ad88e5cbd9c6d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132921
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-22 20:23:38 +00:00
Paul Berry ce5a0f5e32 Migration: fix instrumentation when dropping the condition and else parts of an "if"
When migrating an unnecessary "if" test like this one:

  if (x != null) {
    Do something;
  } else {
    Do something else;
  }

We make two modifications to the user's file:
- Drop "if (x != null) {"
- Drop "} else { Do something else; }"

With this change, the first modification has a description of
NullabilityFixDescription.discardCondition and the second has a
description of NullabilityFixDescription.discardElse.  Previously,
both modifications had a description of
NullabilityFixDescription.discardElse, which was confusing.

Change-Id: I6407d7616b7a2d2c8af853ab48c3480959c4fdb9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132682
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-22 15:29:37 +00:00
Paul Berry 2196965729 Migration: fix unused import
Change-Id: Ifa357fa2b396a483b3193878e70b3a75d2eb5429
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132809
Auto-Submit: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-22 15:25:37 +00:00
Paul Berry 47950b5153 Migration: add logic to remove unnecessary "as" expressions.
Only works when the FixBuilder is enabled.

Change-Id: I9f2ee95603f9b6b247eae1ba00e817a71fc299d3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132681
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-01-22 00:05:34 +00:00
Paul Berry be46dad0a7 Migration: verify that "as" expressions are allowed to be null
Change-Id: I19a8b3f3f4d9c2597b5dfbe2aaae1823c2c9cde2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132680
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-01-22 00:05:34 +00:00
Paul Berry f679efb946 Migration: make an inverse function for Variables.uniqueIdentifierForSpan.
Change-Id: Id4c9f5683b147f5f47df889b95477f6770e9c57e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132760
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-01-21 22:50:29 +00:00