Commit Graph

936 Commits

Author SHA1 Message Date
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 3517d7a859 Migration: allow a node to become nullable after being marked non-nullable.
Previously, graph propagation occurred in three steps:

1. Mark any nodes connected to `always` by union edges as nullable.

2. Mark any nodes connected to `never` by hard or union edges as
   non-nullable, but do not change any nodes marked by #1.

3. Mark any nodes connected to `always` as nullable, but do not change
   any nodes marked by #1 or #2 (with additional processing for
   substitution nodes).

This approach had the advantage that once a node is marked as nullable
or non-nullable, it is never changed, which made reasoning about the
algorithm a bit easier.  But in an upcoming CL I'll need to modify the
algorithm in a way that's incompatible with this approach.

This CL introduces the notion that some edges are "checkable" and some
aren't (an edge is "checkable" if it's ok for graph propagation to
leave it unsatisfied, because the fix builder can insert a null
check).  At the moment all edges are considered checkable except for
union edges, but that will change in future CLs in order to address
https://github.com/dart-lang/sdk/issues/38699.

The algorithm is now:

1. Mark any nodes connected to `never` by hard or union edges as
   non-nullable.

2. Mark any nodes connected to `always` as nullable, but only change
   nodes marked by #1 if necessary to satisfy uncheckable edges (with
   additional processing for substitution nodes).

An alternative way of thinking of this algorithm is that hard edges
reflect user intentions that we should try to satisfy if we can, but
which shouldn't take priority over creating output that is free of
static errors.  During phase 1, we propagate hard edges to find all
the nodes the user *intends* to make non-nullable.  During phase 2, we
propagate nullability, respecting user intention where we can, and
overriding it where we can't.

Change-Id: Ie3f9d9ee66f407f9d4916f7259e7f50a82ebb2bb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133402
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 6a6c000046 Migration: change NullabilityGraph._debugDump output to graphviz format.
The console output of running NullabilityGraph._debugDump can now be
sent straight into graphviz (e.g. using
https://dreampuf.github.io/GraphvizOnline).

Change-Id: Icfb0fb51945735b756e8def2c55437e81422399c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133421
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-01-28 13:26:47 +00:00
Paul Berry 1298313e83 Migration: improve toString representation of some inferred type nodes.
Change-Id: I053dbb0500124dbd3e86d0e172836c0fcf99f385
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133420
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
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
Janice Collins a1a888ec92 Boilerplate and basic flow for buildFantasyLand.
Does not actually implement much of anything, just enough connecting
tissue so that it's possible to review the overall design.

Change-Id: I991f9a4f65d1d23494cefd80ba8c3b4efdb3e572
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133324
Commit-Queue: Janice Collins <jcollins@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-27 20:29:49 +00:00
Brian Wilkerson 4cc45ec612 Cleanup some analyzer hints
Change-Id: Iba36b028895c56ef1f9831ef00650fde6527fbfe
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133361
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-01-24 23:00:13 +00:00
Mike Fairhurst fb36ed007d [nnbd_migration] CompletenessTracker to ensure EdgeBuilder visits all types.
Moved AnnotationTracker to CompletenessTracker which defers work to
AnnotationTracker and new class TypeNameTracker.

This passes on flutter and p1/g1 packages.

Change-Id: I5c92ed287d4d35b2b2f0d21846db197e24584dc5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133227
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-01-24 20:46:04 +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 9bd7eb62c2 [nnbd_migration] Don't visit spread elements twice
This will be tested once TypeNameChecker is landed; visiting the
a TypeName in a spread twice triggers that assertion.

Change-Id: Ibd9ca8269a88205051c2fd6746d7e5d648dbd139
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133249
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 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 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 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
Mike Fairhurst fd7bcca521 [nnbd_migration] Assign instance creation parameters to bounds
Change-Id: Ifa0d0574978f7e3e5946724f7c34a7dfa35a15b7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132448
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-01-21 18:00:57 +00:00
Mike Fairhurst cafa0dce7d [nnbd_migration] Assign implicit call type parameters to bounds
Change-Id: I777da4b32f6226eb94b96b00167925343bb1d987
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132447
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-21 18:00:57 +00:00
Mike Fairhurst 873777245a [nnbd_migration] assign explicit call() type-parameters to their bounds
Change-Id: I399e5d5240808ed8cf9fa0687c32e7b8e121d9bb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132446
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-01-21 18:00:57 +00:00
Paul Berry 850b89ff94 Migration: create wrapper methods for EditPlanner.surround
Addresses a concern from code review
https://dart-review.googlesource.com/c/sdk/+/129302 that
EditPlanner.surround is difficult to use correctly, by adding wrapper
methods for several common use cases that are easier to use correctly.
Also adapts fix_aggregator.dart to make use of the new methods.

EditPlanner.surround remains in the public API for EditPlanner because
there are still use cases for it that aren't supported by the wrapper
methods.  My hope is that the remaining use cases are either rare
enough or trivial enough that we don't need wrappers for them; if that
proves to be incorrect we can always add more wrapper methods.

Change-Id: Ia1d6cc8b10ffaedcf8803ff7c8f9460ada1d7c4e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132462
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-01-21 15:58:02 +00:00
Paul Berry 48aa6470ca Migration: plumb more fix reasons through FixBuilder to instrumentation.
Now there are only two circumstances in which an AtomicEdit won't have
information about the reason for the change:

- The AtomicEdit object was associated with adding or removing parens,
  in which case we don't compute information about the reason for the
  change because it's not straightforward to compute, and it should be
  clear to the user anyway.

- Information about the reason for the change hasn't been plumbed
  through properly (this should be addressed in follow-up CLs).

Since we are rapidly approaching a situation where nearly all
AtomicEdits will have reason information, the separation between
AtomicEdit and AtomicEditWithInfo now seems silly, so I just moved the
`info` object into AtomicEdit and removed AtomicEditWithInfo entirely.

Change-Id: I61afd9cd58b71d4695685e65d0142a2693b8e6b2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132451
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-01-21 15:58:02 +00:00