Commit Graph

936 Commits

Author SHA1 Message Date
Paul Berry a436c0621f Migration: fix DecoratedType.toString to support named function parameters.
Change-Id: Ia49e4b381de5928d26be16fe4a9ab45fe8a64678
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107515
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-30 16:39:17 +00:00
Paul Berry 9dee307bdb Migration: update nullability graph debug dump to support union edges.
Change-Id: Ic9b85656b1e0d81468c73c89a08bfac611060534
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107514
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-30 16:39:17 +00:00
Paul Berry b60dcdbf73 Migration: Remove the create parameter from Variables.decoratedElementType.
We can tell whether a decorated type needs to be created based on
whether the library is being migrated.

Change-Id: I440c9a310ad103c800de6409d717492bc539b838
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107660
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-06-30 10:43:45 +00:00
Paul Berry 18c21ee9d1 Migration: add support for generic instance creation.
Change-Id: I46d24159a58b7e889cdfa54a9dbb8a94b6c13410
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107645
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-30 10:43:45 +00:00
Paul Berry f7ddfdf6ca Migration: don't forget to visit variable initializers in NodeBuilder.
Also visit any annotations present in a variable declaration (we can't
yet test this part well but we might as well add the proper code now).

Change-Id: I1c8f19c9516d1e0f17f024fa136bd7d331ed8ae1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107643
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-30 10:43:45 +00:00
Paul Berry f91375405e Migration: remove defunct TODO comment about substitution.
Substitution is now handled by _handleInvocationArguments.

Change-Id: Ife85444c6f224a48b2989ca6efe3796deae1cf10
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107642
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-28 19:52:09 +00:00
Paul Berry 881ca948fd Migration: handle constructor redirections.
Change-Id: I1c74768f94956f830621e238780243c8d974a745
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107641
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
2019-06-28 17:45:29 +00:00
Paul Berry bf79e4604c Migration: Add support for synthetic constructors in generic class type aliases.
Change-Id: I8eee88e4dd607623fe109143d01438a5271b3230
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107521
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-06-27 19:34:05 +00:00
Paul Berry 014cca1abd Migration: add support for invocation of generic functions.
Change-Id: I56dbedad452e24aaf57ec1d622ce776089e28de7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107449
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-27 02:29:51 +00:00
Paul Berry c1c24c2e19 Migration: Enable support for factory constructors.
It turns out that we don't need any special support for factory
constructors; the migration engine already knows that their return
type should be non-nullable, and it propagates that non-nullability
properly backward from return statements.  So we just need to remove
the error handling logic that prevented factory constructors from
being used.

Change-Id: I7875750fd603ecb2fb65f3831a7883a2d4c9a11a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107380
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-26 18:18:46 +00:00
Paul Berry dde0c68dfb Migration: Add support for named constructors.
Change-Id: Ibb1b5daf8ae06a84f3eaf1e70ce703266de4b04c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107361
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-26 18:18:46 +00:00
Paul Berry 0db6f216ba Migration: add void type support to DecoratedType.forImplicitType.
Change-Id: Ifae57627d13a4913d86ab8a4789615a23ec66c1c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107441
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-06-26 18:04:46 +00:00
Paul Berry 74071981d7 Migration: Handle contravariant uses of already-migrated classes.
Change-Id: I1ce1adc1975461010ce993ba31ac74856033351e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107320
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-26 17:23:56 +00:00
Paul Berry 9ec7b3ebea Migration: add the ability to union decorated function types.
Change-Id: Ife92ab951ee0a60edea12c0d1fe4f242135a8ae3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107440
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-06-26 16:40:36 +00:00
Paul Berry 40609fc30e Migration: build decorated types for implicit constructors of class type aliases (with parameters).
Change-Id: I3ff55830e07cba115db7784998b013112d4d07b0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107304
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-06-25 22:13:44 +00:00
Brian Wilkerson 29c0341678 Skip library directives when building edges
Change-Id: I43602f5cfc7455e83b408ccb7ee8adfba0e26d64
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107194
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Auto-Submit: Brian Wilkerson <brianwilkerson@google.com>
2019-06-24 22:21:21 +00:00
Paul Berry fa5b04d718 Migration: build decorated types for implicit constructors of class type aliases (partial).
This CL addresses implicit constructors without parameters.  Implicit
constructors with parameters will take a bit more work to accomplish,
and will be handled in a follow-up CL.

Change-Id: Id12725712198eeeff8e4080e8fa0ca2a1eb46177
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107187
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-06-24 21:20:30 +00:00
Paul Berry 2ac79599b0 Migration: Created decorated types for synthetic default constructors of generic classes.
Fixes #37347.

Change-Id: I8eb7ca910f62aa7f10efbad3048096118cfcb4c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107185
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-24 21:20:30 +00:00
Paul Berry c4ad3c30e8 Migration: Created decorated types for synthetic default constructors of non-generic classes.
Partially addresses #37347.

I'll address generic classes in a follow-up CL.

Change-Id: I207465c897f9dfb84848d792cba15ae96c95e394
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107183
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-24 20:45:04 +00:00
Paul Berry dac4929e19 Migration: propagate nullability inference through override relationships: parameter types.
Change-Id: Ib41ffa388af9688efc59aea2c196d8fdcf713ad8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107101
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
2019-06-24 12:51:14 +00:00
Paul Berry 559e49aa5e Migration: propagate nullability inference through override relationships: return types.
Parameter types will be handled in a follow-up CL.

Change-Id: I71862fa6cf27aeede24bef60c096f631f6d8f60d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107100
Reviewed-by: Dan Rubel <danrubel@google.com>
2019-06-24 12:51:14 +00:00
Paul Berry 937bb61476 Migration: clean up parameters for _handleAssignment and _checkAssignment.
_checkAssignment now uses named parameters for source and destination
so that there's no danger of mixing them up.  _handleAssignment lists
the source first, consistent with connect and assertEdge.

Change-Id: I811e070500b075bbc1733640bc81182ecd837dce
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107040
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
2019-06-24 02:09:53 +00:00
Paul Berry 8b523e8efb Migration: rename GraphBuilder to EdgeBuilder.
Nomenclature is more consistent now; the graph is built by a
combination of NodeBuilder (which builds the nodes) and EdgeBuilder
(which builds the edges).

Change-Id: Id162467eab2b3b3cc17ea9f72a0f291665b1a7d9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107022
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-22 16:03:02 +00:00
Brian Wilkerson fa8f1f60de Stop visiting comments and convert NPEs to more meaningful errors
Change-Id: Idcebed220dbcd8fcb1613fce891387f88ee4d442
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107063
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-22 15:09:02 +00:00
Paul Berry 477ac2d58e Migration: start adding support for assignment of function types.
So far we only handle zero-parameter non-generic functions.  Support
for positional parameters, named parameters, and type parameters will
be added in future CLs.

Change-Id: I5a5907ba595da40352193e0193f908bca4d1bf1c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106040
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-21 22:59:41 +00:00
Brian Wilkerson 718ab662c0 Support postfix ++ and -- operators
Change-Id: Ib16f30a8b5d6e94b1a6ec0cddf5c88f58188ea83
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/107021
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-21 22:43:42 +00:00
Paul Berry e2bc5513f0 Migration: add a data structure for tracking class hierarchy information.
The new data structure, called `DecoratedClassHierarchy`, computes and
caches the variable substitutions necessary to relate a class to one
of its superclasses.  In future CLs, we'll use this information to
create the appropriate contraints for override relationships, and to
compute the correct types when a method dispatch resolves to a method
declared in a superclass.

Note that the analyzer uses `InhertanceManager2` both to determine
what a method call resolves to and to record the appropriate
substitutions.  We can take advantage of its determination of what a
method call resolves to (that information is stored in the resolved
AST), but we need to cmopute the substitutions separately because the
substitutions need to be decorated with nullability nodes.

Change-Id: Ifb334972e509b77151d41f7e0700cd590d7b5417
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106800
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
2019-06-21 22:42:01 +00:00
Brian Wilkerson 7a57e241a3 Support prefix ++ and -- operators
Change-Id: I2437469ad67721736a6b4800f0134e0f358a7dbf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106970
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-21 20:48:58 +00:00
Brian Wilkerson c01258a87d Fix handling of &&, || and ?? operators
Change-Id: Ibfe574f381af701932cf30f5fdd77fe50a7c8158
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106961
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-21 18:45:27 +00:00
Dan Rubel d0a22c747e add migration engine support for top level setters
Change-Id: I436e673370ed0094b0615d99796f117145c8fbaf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106923
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-21 16:50:17 +00:00
Dan Rubel 6089a943be add migration engine support for imported top level var references
In addition to adding imported top level var references support,
this revert GraphBuilder._checkAssignment changes so that the method
conforms to team expectations and addresses comments in
https://dart-review.googlesource.com/c/sdk/+/106562

Change-Id: I3e2b021ec51a1363706a7f6811807d0e6a680df5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106920
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-21 16:50:17 +00:00
Dan Rubel 9c62632f49 add migration engine sanity check
This adds a sanity check to ensure that DecorateType.forElement
is not called on elements in libraries that are being migrated.

Change-Id: I394004a70e9ca3c9ac22f30e63e8e48a0cd03204
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106922
Reviewed-by: Paul Berry <paulberry@google.com>
2019-06-21 16:50:17 +00:00
Brian Wilkerson 6847789eb8 Fix an NPE in Variables when there are no decorated types in a given file
Change-Id: I4258becb60509b3dd0facfb2731be532464f665c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106947
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-21 16:24:27 +00:00
Brian Wilkerson 735eb21529 Add support for &&, || and ?? operators
Change-Id: Ibb6269b349b3d0ffcf1068442c70ef46a6f521eb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106948
Reviewed-by: Dan Rubel <danrubel@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-21 14:16:57 +00:00
Brian Wilkerson d046448d00 Convert an NPE into an unimplemented notification
Change-Id: Ic032f26d54d1e85a54ca21068988d4dd226f3879
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106946
Reviewed-by: Dan Rubel <danrubel@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-20 21:18:07 +00:00
Dan Rubel 3707cf0c1b add migration engine support for top level var reference
Change-Id: I77039243bc098449e4af976d2500c4d28f9f4012
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106562
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-20 15:18:40 +00:00
Konstantin Shcheglov c5567c0031 Abstract FlowAnalysis from concrete types of nodes and elements.
R=paulberry@google.com

Change-Id: I8a42eb260d2c99c4ca24cb8b9059c1d22f9430e9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106683
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2019-06-19 22:51:11 +00:00
Dan Rubel cf78d5d7f0 add migration engine support for named parameters in imported packages
This adds support for decorating named parameters in packages
that are imported by the package being migrated.

Change-Id: I1f803b28ad8fedcedca14421b391dc7ab879d05f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106682
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-19 21:07:11 +00:00
Brian Wilkerson 84483cd9d7 Support the remaining user-defined binary operators
Change-Id: I796495489605a903330169ff964a3ed296b2783a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106722
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-19 20:08:20 +00:00
Brian Wilkerson 87460ad41a Decorate void and dynamic
Change-Id: I41cc3ad700c6d338295edbb7c78ef5d2ad92c05d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106721
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2019-06-19 18:51:06 +00:00
Brian Wilkerson 837d28b0cb Improve the feedback for unimplemented portions of the migration tooling
Change-Id: I1d4fd85f15c16e74e4dfdf5a618de2a7f4f3ec9a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106680
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-19 17:34:26 +00:00
Dan Rubel 0e9d971f85 skip directives during nnbd migration
Currently, the migration engine crashes when it visits the identifier
in the following directive:

   import "dart:core" as one;

This updates the migration engine to skip directives when looking
for expressions and type annotations to be migrated.

Change-Id: I079263b13e5f4c75fbfe22fa06993e7a5d4f9c16
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106660
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-06-19 16:22:25 +00:00
Paul Berry 310f50be72 Fix imports in graph_builder.dart
Change-Id: I00ec82a04f149ac7ce5d00da71eca6966bc84636
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106426
Auto-Submit: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2019-06-18 15:44:10 +00:00
Paul Berry 4aaa15edb2 Migration: fix detection of variable/parameter reference inside parentheses.
Change-Id: Ifebbb834de278a38c30f8e555175515220706a1b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106423
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-17 23:21:08 +00:00
Brian Wilkerson 29b346e020 Support set and map literals with type arguments
Change-Id: I2e5ab2b81a37b0ebcfab4c60d0ed04c7c6aeba5e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106424
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-17 22:15:48 +00:00
Paul Berry c533967a4c Migration: rework the ExpressionChecks data structure.
We no longer need to keep pointers to the nullability nodes directly
in the ExpressionChecks data structure; we merely need to record which
edges, if unsatisfied, would require a check.

This allowed the tests using assertNullCheck to be clarified--they now
simply verify that the appropriate edge exists, and then pass that
edge to assertNullCheck to verify that the ExpressionChecks object
points to the appropriate edge.

Change-Id: Iaaee51d1f23ca6f86a2fbf0a15ded6a844b2811b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106383
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-17 21:06:21 +00:00
Paul Berry ea4eaaa145 Migration: Allow edges to be queried to see if they're satisfied.
Change-Id: I9da0233dfbac0c7aee168622c554d003c2c5e16c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106382
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-17 21:06:21 +00:00
Paul Berry 5167499427 Migration: record the "origin" of each edge in the NullabilityEdge object.
This paves the way for being able to explain to the user exactly why
the migration tool made any given nullability decision.

Change-Id: I553e4881fdb37b238a066fcfba7c21ae919d7d6e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106381
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-06-17 21:06:21 +00:00
Paul Berry dc059d763b Migration: Pass ExpressionChecks to _checkAssignment instead of the raw expression.
This paves the way for a follow-up CL that will introduce a more
general notion of the "origin" of an edge (of which ExpressionChecks
will be just one kind of origin).

Change-Id: I76ee12679d881ef95a4ba17a224fe85ecf6b589f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106380
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-06-17 21:06:21 +00:00
Brian Wilkerson 8461cc6f5b Support for list literals with type arguments
Change-Id: I7a661d83335b7d4c4ef2221af3eb31c865e2f9dc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/106386
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-06-17 20:55:11 +00:00