Commit Graph

1123 Commits

Author SHA1 Message Date
Paul Berry 47293f3030 Prepare to publish analyzer 0.39.5
Change-Id: Ib5c8319fab68d52bdf06d72678647e9212597c8a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142323
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-04-03 17:28:47 +00:00
Paul Berry 3edfab164f Migration: remove redundancy from NullabilityFixKind enum.
The values discardCondition, discardElse, discardIf, discardThen, and
removeNullAwareness are all variants of dead code removal and there's
no reason to distinguish them.

Change-Id: Id55035486e07f52e6ef7b5a2485dcb0cadb153e1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142060
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-04-03 16:18:51 +00:00
Paul Berry 40dacf82b9 Migration: add support for a late hint with spaces
Change-Id: If3a95283e4a70d41cfaee72a97525e69ec54be2b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141917
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-04-03 16:18:51 +00:00
Paul Berry 847718195d Migration: handle /*!*/ hint after more expression types.
Change-Id: I5f5b659ce6b07b547ebe3509ce923da02dff584b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141916
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-04-03 16:18:51 +00:00
Paul Berry f04053d767 Migration: do not union inferred types in overrides.
Previously, when handling an override such as:

  abstract class A {
    int/*?*/ f();
  }
  class C implements A {
    f() => 0;
  }

we would create a union edge between the implicit return type of C.f
and the explicit return type of A.f.  This was a problem because
nullability information can propagate bidirectionally through union
edges, so it could result in types unnecessarily becoming nullable,
e.g.:

  abstract class A {
    int/*?*/ f();
  }
  abstract class B {
    int f(); // Should not need to be made nullable
  }
  class C implements A, B {
    f() => 0;
  }

This CL fixes the problem by just making ordinary unidirectional edges
for overrides involving inferred types.

Change-Id: I63a5f1f640b5543fcf39304087592e984aa66694
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141853
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-04-01 12:07:44 +00:00
Paul Berry 4ffb95d631 Migration: add support for /*late*/ hints.
Fixes #41230.

Change-Id: I99b6ad67ebccbc972f72099818a8168003537fa5
Bug: https://github.com/dart-lang/sdk/issues/41230
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141842
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-31 22:04:46 +00:00
Paul Berry 1f794f000e Migration: do not propagate exact nullability in violation of a /*!*/ hint.
Fixes #41228.

Bug: https://github.com/dart-lang/sdk/issues/41228
Change-Id: I9c7e7554cee08d9f8f2241ff627bab7cbb16f4da
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141801
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-31 22:04:46 +00:00
Paul Berry b7130b0bf7 Migration: improve preview tool display when ! is added due to an explicit hint.
Change-Id: Ie9b2a6cabaf02c46da2e8b8ac1bffa0e699acc64
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141741
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-31 22:04:46 +00:00
Paul Berry 8df442e414 Migration: don't use union edges for field formal parameters
Fixes #41182.

Bug: https://github.com/dart-lang/sdk/issues/41182
Change-Id: I485c1a502e34de758fdd0bc831bc18a665005bd1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140911
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-27 21:13:47 +00:00
Mike Fairhurst 2eaa5bcec6 [nnbd_migration] Handle removing language comments after other comments
Change-Id: Iecee603fbef5ff2d0f822728b9ae0d83967afc21
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140770
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Janice Collins <jcollins@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-03-26 03:47:57 +00:00
Mike Fairhurst 3095a082cd [analyzer] Add an API to get a language comment token off a unit.
Change-Id: I377fdc44d5e514d6d9a601b3947c3908e5a4497a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140768
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2020-03-26 03:47:57 +00:00
Mike Fairhurst f10e1ed253 [nnbd_migration] Fix #38462, remove @ for @required nullable params
Change-Id: I755cd261a812a714f03cc09b1858d4925e98f88f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140907
Commit-Queue: Paul Berry <paulberry@google.com>
Auto-Submit: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-03-25 19:40:24 +00:00
Paul Berry bdf8e7b27e Migration: handle introduction of both ! and as on a single expression.
Fixes #40016.

Bug: https://github.com/dart-lang/sdk/issues/40016
Change-Id: I54047d843d5d1670876a5827276899b1a56dcc65
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140905
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-25 19:38:34 +00:00
Paul Berry 9007eb4ce4 Sort declarations in fix_aggregator.dart
Change-Id: Ie3a3ba432531a920c7227193d60de32cd0347d57
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140941
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-25 19:38:34 +00:00
Paul Berry 08c6dd6164 Migration: add FixBuilder support for expression null check hints.
Previously, null check hints were only affecting the behavior of
EdgeBuilder, which meant that we handled simple cases like:

  int f(int/*?*/ x) => x/*!*/;

(because the EdgeBuilder wouldn't build an edge from the type of `x`
to the return type of `f`, so the return type of `f` would be
non-nullable int, and hence the FixBuilder would insert a `!` in order
to prevent an error).

But if there were some *other* reason for the destination type to be
nullable, then no `!` would get inserted.

This CL adds explicit logic to the FixBuilder to ensure that a `/*!*/`
hint causes a `!` to be inserted whether it's necessary or not.

Change-Id: I283bb9793d8d01408333f5b56562286bf19d8773
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140904
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-25 19:38:34 +00:00
Paul Berry e0e83793af Sort declarations in fix_builder.dart
Change-Id: I85934963e8d87e26c4fcb436651062b2adfbdc58
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140900
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2020-03-25 19:38:34 +00:00
Paul Berry 2b74e6bca6 Migration: get rid of interfaces VariableRepository and VariableRecorder.
The only purpose of these interfaces was to enforce an artificial
separation of concerns between the methods of Variables used by
NodeBuilder and EdgeBuilder; this separation was never really very
useful, and it's getting in the way of adding features to FixBuilder.
It seems better to just use the Variables class directly everywhere.

Change-Id: I7b9c6c08c09a466bbcc1e3f72f9aa05db0d1a7b1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140884
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-25 19:38:34 +00:00
Paul Berry 244b4247e9 Migration: better description text for edges.
Change-Id: I58651c927a741721283c3c4c951673a86aa7a1b3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140883
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-25 19:38:34 +00:00
Paul Berry 94dadae052 Migration: add support for expression bang hints
Change-Id: I6199c02b16249aade611e316b3b845ea1386ff8a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140440
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-24 20:35:15 +00:00
Mike Fairhurst 799560bff7 [nnbd_migration] Remove language version comments during migrate
Bug: 41095
Change-Id: I3262d6da485d78fee1e2dfe4ac22692c5e4b6daf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140369
Reviewed-by: Janice Collins <jcollins@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-03-24 16:44:05 +00:00
Paul Berry fbd0c8a468 Migration: mark for-each loop variables as initialized
Change-Id: I3e6be77a5a67af0ef722f6e37802980d63aeb650
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140368
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-20 23:50:50 +00:00
Paul Berry f1e98b84f9 Migration: use prefixes when introducing "as" expressions
Change-Id: I0f90dc4707cae35b04df7388a687895b80996fa2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140364
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2020-03-20 23:50:50 +00:00
Janice Collins 8acc0a8deb Update the README based on meeting notes
Change-Id: Icfc21a79e0f4224568bf10e508fa8867a1b251eb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140365
Commit-Queue: Janice Collins <jcollins@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-03-20 23:08:36 +00:00
Paul Berry 529f52a05a Migration: handle field overrides
Change-Id: I21db786afa80a0e4811341ad605bf2657377810b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140255
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-20 20:23:23 +00:00
Devon Carew 52cb5917cc [nnbd migration] initial mogration workflow docs
Change-Id: Iac99a852f15a9d7cdb25f6233dec6a52b64a55c7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140320
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
2020-03-20 18:13:28 +00:00
Devon Carew 3f8366363b [nnbd migration] move the docs for the NNBD migration tool
Change-Id: I932da23be10839b5bde6034f120763c54f63889f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/140102
Reviewed-by: Janice Collins <jcollins@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
2020-03-19 23:12:24 +00:00
Paul Berry 051d51f6be Migration: fix the descriptions of nullability nodes associated with parameters.
Previously, parameters with explicit types just got a description of
"explicit type"; now they get a description like "parameter 0 of
Foo.bar".

Change-Id: Ia6134fff48bc7d7e628304333f1c6ba406e8bdc8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139957
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-19 14:45:39 +00:00
Paul Berry f2dd2e28f3 Migration: preserve code references for nullability nodes with explicit types.
Previously, when analyzing code like:

  int f() {}

We assigned a NullabilityNodeTarget for `int` that simply said it was
the return type of the element for `f`; the location of `int` in the
source code was lost.  With this CL, we produce the same target, but
we preserve the location information.

Change-Id: Ibfe11485aedf208a39947e5a4903b4fa738e86a7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139954
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-19 09:03:17 +00:00
Paul Berry 41b67a9b52 Migration: add grayed-out spaces to indicate types not being made nullable.
Change-Id: I4fa076693c25cf9466d33332030df3983043ffd1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139940
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2020-03-18 21:18:22 +00:00
Paul Berry 4b9b46ef01 Migration: improve specificity of FixBuilderTest.isMakeNullable
Change-Id: Ibef1db9d1426cc4e8a5e7286f26887504352a767
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139751
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2020-03-17 17:19:41 +00:00
Janice Collins 34fee361b6 Add sanity checks for NNBD state in migration.
Also adds some ability for the migration tool to abort itself on
a few known-fatal errors and armor-plates dartdev tests against
CWD problems.

Bug: https://github.com/dart-lang/sdk/issues/40329
Change-Id: I1cfa2c9dcc7815eed075ecb38c63a74c75889002
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139282
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Janice Collins <jcollins@google.com>
2020-03-16 18:27:58 +00:00
Paul Berry c3a0bb086a Migration: Add "why not nullable" traces where "!"s are inserted.
Change-Id: I0367f869d59da0397589df7df43170f1ecbcb69c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139401
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-13 16:31:11 +00:00
Paul Berry fcefb8258e Migration: switch graph propagation to breadth first rather than depth first.
Breadth first is theoretically slightly slower due to less locality of
reference, however it has the benefit of ensuring that the user sees
the shortest possible trace when investigating the cause of a change.
Without this change, it's possible to get some really confusing
traces, e.g. a trace suggesting that a type in some
previously-migrated library is nullable due to a cause within the
library currently being migrated.

This CL also adds tracking of why a node was determined to have
non-null intent, which I plan to expose to the user in follow-up CLs.

Change-Id: I43025ca0ab825d178a28555f85ad9eea43eadfe9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139140
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-12 19:32:36 +00:00
Sam Rawlins 43a5d7d80d Migrator: improve descriptions of return types in stack traces
Change-Id: Iaba43c4a3bf27ffb7913df6122eb9c0908795937
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139180
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2020-03-12 16:56:36 +00:00
Paul Berry 93448a47c6 Migration: change trace view to alternate between edges and nodes.
Previously, we only included edges in the trace view, which resulted
in a lot of missing information.  Generally the reasoning process
looks like "type at A is nullable because of an expression at B, which
propagates nullability from a type at C, which is nullable because of
an expression at D, etc."  This change makes the trace reflect that
reasoning process better.

Change-Id: I27d1b7aac736529b6f1fa2f7be8dea0d3eca9a6c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/139064
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-11 21:30:40 +00:00
Paul Berry 2ec127a305 Migration: give nullability nodes human-readable names.
Change-Id: I86b510c6cc9afacb7d720af214c8f4e5a311c9ff
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138885
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2020-03-11 15:20:59 +00:00
Paul Berry fb496ee160 Fix "unknown" in CodeReference.toString
Change-Id: I90ac36e9ef2d1488802b48cdfa5aebf9f876520a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138840
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
2020-03-10 22:03:21 +00:00
Sam Rawlins 654a31c9bc Improve trial_migration stats
Change-Id: Iff65ac375e15dc9077fea81fbc86bee264ccc4d0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138904
Reviewed-by: Janice Collins <jcollins@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2020-03-10 17:04:30 +00:00
Sam Rawlins b22d3d6294 Add a P2 migration script for null safety migrator
Change-Id: I2cf73ab09d13e205293f8445fd8f858eba125356
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138884
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
2020-03-09 22:45:45 +00:00
Paul Berry 043af430c1 Migraiton: Add function names to trace output.
This makes them look a lot more like real stacktraces.

Change-Id: I0c060f72f8676ab6d5c0272532b90931b815fddf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138607
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-09 22:00:59 +00:00
Konstantin Shcheglov 24c8021f03 Replace initialize() with declare().
Fixes https://github.com/dart-lang/sdk/issues/38791

Change-Id: I954059160c75de91e1e32fe2f82ebfdc5569d947
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138666
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2020-03-09 18:24:51 +00:00
Paul Berry a74253987b Migration: add trace functionality to the preview tool.
This establishes the base functionality.  A lot of follow-up work is
needed from here:

- Each trace should have an entry at the top of it pointing to the
  thing that was made nullable.

- The source code links in traces don't include lengths, so we can't
  highlight whole identifiers when the user clicks on a link.

- Description strings are currently generated by running toString() on
  the individual nullability nodes and edges, resulting in long-winded
  and useless descriptions.

Change-Id: Ibb370bae6bedc7a8c86092462785023002a48ac3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138481
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-05 17:21:54 +00:00
Devon Carew fc1d2a82f4 [dartfix] remove the 'dartfix upgrade sdk' command (prefer 'dartdev migrate')
Change-Id: I981e2b1805a81210cfb0ed7af809a07eb3eabb5f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137221
Commit-Queue: Devon Carew <devoncarew@google.com>
Reviewed-by: Janice Collins <jcollins@google.com>
2020-03-04 17:55:06 +00:00
Paul Berry 57462f9ca5 Add a repro for #40871
Change-Id: I11e65b49f3c234e9204c503d20d9980048a96a32
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/138265
Auto-Submit: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
2020-03-04 04:18:53 +00:00
Paul Berry eec7876eb2 Migration: prototype a "stacktrace-like" display of the principal cause of a nullability decision.
The principal cause may be displayed by invoking the "postmortem" tool
using the "trace" subcommand, followed by the id of the node for which
a trace is desired.

Change-Id: I5868b4bc979320bb46698b02c7b43b317205c487
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137429
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-03 01:24:17 +00:00
Mike Fairhurst ca3ad264a6 [nnbd_migration] Report info building exceptions to server adapter
Change-Id: I4e3eef0d3e404bd090f36f8b2516abb97cc6c311
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137520
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-03-02 23:33:06 +00:00
Paul Berry 696faba804 Migration: add components display to postmortem tool.
Change-Id: If5c983a85c65600906f62dda7bf0aa9e3b89e470
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137287
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2020-03-02 22:05:16 +00:00
Mike Fairhurst dc366a5ad5 [nnbd_migration] Assert an edge origin exists in _checkAssignment
Change-Id: If2b9d9c4cfdf35b67df478cc20ed16fe6b868b44
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137823
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2020-02-28 23:26:22 +00:00
Mike Fairhurst 3ae91fc8c5 [nnbd_migration] Add an edge origin for return;
Change-Id: I94e56933c4fb8d8c8b80ca0c427fc34c56674d04
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137841
Reviewed-by: Paul Berry <paulberry@google.com>
2020-02-28 23:26:22 +00:00
Mike Fairhurst 1d1f3a5049 [nnbd_migration] Origin for inferred instance creation bounds
Change-Id: Ice51e241833e4eb70f7b41accc3908717ca8bd72
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/137659
Reviewed-by: Paul Berry <paulberry@google.com>
2020-02-28 23:26:22 +00:00