Commit Graph

2642 Commits

Author SHA1 Message Date
Konstantin Shcheglov c138b505be Update TypeSystem tests to reuse AbstractTypeSystemTest.
R=brianwilkerson@google.com

Change-Id: Ic6e446cf124a52c8663140a995d4a58c3e4c92a1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117015
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-12 23:18:07 +00:00
Konstantin Shcheglov fc2f744d9e Deprecate 'Source.encoding'.
R=brianwilkerson@google.com

Change-Id: I1a97c9b5a1401a16044df4e37117b2ec7e4e5db2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117002
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-12 16:48:16 +00:00
danrubel 3b1d3de988 update parser to report out of order "?.." operator
Change-Id: I2d90e458d5721d16142752e8ac6a522cc41c2051
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116920
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-09-12 14:38:31 +00:00
Konstantin Shcheglov d39b67dbfe Remove more unused classes from engine.dart
R=brianwilkerson@google.com

Change-Id: I8d660025e201ef8a79d377c1923fe9a87bbc80ae
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116750
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-11 20:12:49 +00:00
Konstantin Shcheglov dd3d6547de Rewrite property resolution, fix reporting errors when compound assignment without a getter.
Change-Id: Id737ea776866c3d9a52033181759f27e26dc34b0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116559
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-09-11 17:28:53 +00:00
Konstantin Shcheglov 76e6325ae0 Remove unused methods of AnalysisContext.
Change-Id: Ie7f81ac09b51f7a4e70a32f962e6e15c81245820
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116724
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-11 17:09:47 +00:00
Brian Wilkerson 9113fb3ce0 Move the remaining StaticWarningCode tests to their own files
Change-Id: I764c9cbd961bc377d1b158aa0e16b2fb0e77b8cf
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116722
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-09-11 13:34:57 +00:00
danrubel 30ea777c65 fix parsing of "?.." cascade operator
Fix https://github.com/dart-lang/sdk/issues/37859

Change-Id: Ie29f4fd000199f0099137308603335e36af6ae26
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116089
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-09-10 20:36:04 +00:00
Konstantin Shcheglov 6f38a73618 Remove most of the task model.
I run presubmit, and it does not look to me that any failin tests
are caused by this CL.
https://test.corp.google.com/ui#id=OCL:267824456:BASE:267824473:1567923135217:2380181a

R=brianwilkerson@google.com

Change-Id: I838f2174460e0d06c85bbb83de9037113c0b6393
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116252
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-09 18:26:50 +00:00
danrubel cb1efb8d27 update parser to allow "late var" in NNBD
Fix https://github.com/dart-lang/sdk/issues/38022
Fix https://github.com/dart-lang/sdk/issues/37857

Change-Id: I9ddfeddd424312e584b67bb1f42c73957ed7b05c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116243
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-09-09 05:26:16 +00:00
danrubel b6f6240013 fix extension factory declaration in AST
Constructor declarations within extensions are invalid and the parser
reports an error. This modifies AstBuilder to add the declaration
as a method declaration in order to get navigation, search, etc.

Fix https://github.com/dart-lang/sdk/issues/38202

Change-Id: I6071a8d5a742d6598f18a831688ddc97e411f76f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116100
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-09-09 05:26:16 +00:00
danrubel 618b56d24d fix conditional expression parsing with NNBD enabled
Fix https://github.com/dart-lang/sdk/issues/38113

Change-Id: I06ebb5ee6260dfa97969a7d11b8c66c48d2ae766
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116054
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-09-09 05:26:16 +00:00
Konstantin Shcheglov 3d3bbc2dbf Remove 'strongMode' flag in StaticTypeAnalyzerTest.
R=brianwilkerson@google.com

Change-Id: I85c0a0a5fd9ea2f0814906f44ce922c70f0c842e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116088
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-07 15:01:23 +00:00
Konstantin Shcheglov 2c219ddb07 Replace AnalysisContextFactory with TestAnalysisContext.
R=brianwilkerson@google.com

Change-Id: I45ac78530061478e4835bd78355ab9f089f80879
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116047
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-09-06 22:47:36 +00:00
Konstantin Shcheglov ffd50c0dc5 Report EXTENSION_AS_EXPRESSION, set type fo dynamic.
R=brianwilkerson@google.com

Bug: https://github.com/dart-lang/sdk/issues/38203
Change-Id: Iee270b7b3fecbeaba202c304f21ef703a8567674
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116055
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-06 22:14:34 +00:00
danrubel 152aa5a6ed fix calls following null-assertion operator
Fix https://github.com/dart-lang/sdk/issues/37708

Change-Id: I46ed01cef1eb426e7e28c481d98cb04ac0eed44c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116046
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-09-06 20:48:17 +00:00
Konstantin Shcheglov 0d63ce1d0c Clean up MockSdkElements.
R=brianwilkerson@google.com

Change-Id: I378bc57d08119d4a82315f1e181b934e3d7e17e4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/116045
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-06 19:14:39 +00:00
Konstantin Shcheglov 17c06c342e Unify to single TypeProviderImpl.
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I93b0f9956cd9a138cdaa94a95a9d3eea4c0a6b62
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115776
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-06 16:01:00 +00:00
Konstantin Shcheglov 0a49ddef73 Remove previewDart2 related code in some tests.
PreviewDart2Test in element_resolver_test.dart was replaced with
AstRewriteMethodInvocationTest recently.

R=brianwilkerson@google.com

Change-Id: I8d8d9a6889f13f3ae5deb8d062d520338a50b43e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115903
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-06 14:40:40 +00:00
Konstantin Shcheglov 836039e9b6 Add MockSdkElements for creating dart:core and dart:async mocks.
Switch AnalysisContextFactory to using it.

TestTypeProvider will also use it, via TypeProviderImpl from another CL.
https://dart-review.googlesource.com/c/sdk/+/115776

R=brianwilkerson@google.com

Change-Id: Ib6a26c84e08d024b64146c0631ece35d8a4d32cb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115960
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-06 14:25:59 +00:00
Konstantin Shcheglov ff8b43750a Move reporting INVALID_ASSIGNMENT for compound assignments into StaticTypeAnalyzer.
R=brianwilkerson@google.com

Change-Id: Ia5355023ff5873c7d10eb60b85c5fd8a41dea417
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115800
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-05 18:29:35 +00:00
Johnni Winther 06ae3402d7 [cfe] Support F-bounded extensions and type variable shadowing
Change-Id: I6fa5bf13ab8524e6262a67c6f9fe4d56c8ee5046
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115246
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
2019-09-05 11:19:53 +00:00
Konstantin Shcheglov 9df2b2d25f Resolution tests for IndexExpression.
Change-Id: I6e0b6a6503860f7eb232f7544afa4c0a408e3c18
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115422
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-09-04 19:22:31 +00:00
Brian Wilkerson 233b4a71ca Deprecate some unnecessarily duplicated error codes
Originally the spec made a distinction between when some of these
conditions were errors and when they were warnings. That distinction has
been removed, so this just cleans up our code to reflect that fact.

Change-Id: I3a6fdae2896eb93c6b9cacfea790cd9b553feec5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115261
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-09-03 16:01:25 +00:00
Jens Johansen 9f57cf71d7 Add a blacklist to spelling tests; spell-check all packages and sdk with blacklist
Change-Id: I5bf3d5784d2ba48568a2699bb09ae39a85be17c4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/115214
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
2019-09-03 12:39:24 +00:00
danrubel 6061906a77 split endMethod into 6 separate events
This updates the parser to detect constructors vs methods
in classes vs mixins vs extensions. Rather than generating a single
endMethod event and require listeners to determine the type of
declaration, the parser now generates different events for
different types of declarations so that listeners can process
each of these different types separately.

In addition, this lays the groundwork for fixing extension declaration
error messages and moving error generation that is duplicated
in the various listeners into the parser.

Change-Id: Ia86a4bf3e6f1442ca4926c754b66e7d6e86fb47d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114900
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-30 00:33:43 +00:00
Konstantin Shcheglov 7835190cc9 Revert: Read default values fully.
This reverts https://dart-review.googlesource.com/c/sdk/+/114780,
because it causes other stack overflow while reading elements.

R=brianwilkerson@google.com

Change-Id: Id9e398bba984f364d4a1a8fcb76f71d7f39379af
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114961
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-29 17:12:04 +00:00
Mike Fairhurst 402c3101a7 Remove unused imports
Change-Id: Ieceb2f150a8f579231bda40c92215e61adc69f7a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114922
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
2019-08-29 06:32:05 +00:00
Konstantin Shcheglov b565c8c20f Don't serialize not serializable constant variable initializers.
R=brianwilkerson@google.com

Change-Id: If5287b11293391d8620b9843880b95f725efc5fa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114800
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-28 22:28:56 +00:00
Dan Rubel 15a7b57d8e split endFields into endClass/Mixin/ExtensionFields events
Change-Id: I538d21a595f957ef6080bf3bfe6f0b7299b4bc8d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114881
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-28 21:26:31 +00:00
Konstantin Shcheglov cb934a0402 Build types for function type type parameter bounds.
R=brianwilkerson@google.com

Change-Id: Ied38fda4d1671a9e706bffe8bcf16d953c8c973e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114760
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-28 15:57:23 +00:00
Konstantin Shcheglov 0c06fbd88f Read default values fully.
R=brianwilkerson@google.com

Change-Id: I336fa6a9d92687ebcb67eb672dabab64f75fcb43
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114780
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-08-28 15:15:23 +00:00
danrubel 7b37cddbe8 rename ClassKind to DeclarationKind
... and add DeclarationKind.TopLevel

Change-Id: I631c0173a056e856845f02d4415c11336a796e3c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114629
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-28 00:57:42 +00:00
Konstantin Shcheglov 3604f75cd4 Gracefully degrade if annotation uses (non-serializable) FunctionExpression.
R=brianwilkerson@google.com

Change-Id: Id0e18d14252a4140f085e1c609e59ef9ae40fb5f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114624
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-08-27 20:47:57 +00:00
danrubel 0328e8a7b6 sort ForwardingListener and ForwardingTestListener
Change-Id: Ib94c0c57acb8e3e4271e51205511aee4f087f3fc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114641
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-08-27 17:54:52 +00:00
danrubel aeb5e732fd split endClass/Mixin/ExtensionFactoryMethod event
This separates an existing parser event into 3 separate events
based upon the enclosing declaration so that listeners
can process them differently in future CLs.

Also address comment in https://dart-review.googlesource.com/c/sdk/+/114564

Change-Id: I07b259d02bd16257edf47eb76cbdd0d022f808dd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114640
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-27 17:54:52 +00:00
Konstantin Shcheglov 35f8a8bf00 Gracefully degrade when FunctionTypeAlias uses FieldFormalParameter.
R=brianwilkerson@google.com

Change-Id: Ie2989000148b24f5c380043bbd7c034908f2846d
Bug: https://github.com/dart-lang/sdk/issues/37733
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114623
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-08-27 17:46:48 +00:00
Konstantin Shcheglov b6897ea094 Stop using resolutionMap in analyzer and analysis_server.
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Ie8f75e330e9efee67ded892929a3d78b7de1c586
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114565
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-26 23:18:54 +00:00
Konstantin Shcheglov e7f82cdb7c Support for FunctionTypedFormalParameter in GenericFunctionType.
R=brianwilkerson@google.com

Bug: https://github.com/dart-lang/sdk/issues/37733
Change-Id: If335fcabd354a4a33c6177ae149aebcb31b4a0b7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114120
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-22 21:19:00 +00:00
Brian Wilkerson 5935b916e3 Rename several error codes and improve some messages
Change-Id: I6e629719dee14c2af7c1358145fb25b21f5d5157
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/114160
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2019-08-22 20:08:53 +00:00
Konstantin Shcheglov 9aa48c2e91 Build local elements in initializers of typed constants.
R=brianwilkerson@google.com

Change-Id: I7e7c75841b50ca91132278244cb71a6f7aa3649c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113963
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-21 17:07:22 +00:00
Konstantin Shcheglov 64efe44e5e Formal parameters of FunctionTypeAlias should be created in @function reference.
R=brianwilkerson@google.com

Change-Id: I9f0a4f385d714644b07313752ba0d4643673fc0b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113961
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-08-21 16:15:31 +00:00
Konstantin Shcheglov f50a566476 Enclose local variables in default values of optional formal parameters.
R=brianwilkerson@google.com

Change-Id: I693759f24cab6a63d5a1ecbdb131324b29fc8d34
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113927
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-08-21 00:41:24 +00:00
Sam Rawlins 72923471c4 strict-inference failures for untyped parameters:
* Untyped function parameters are a strict-inference failure.
* Add tests for strict-inference failures on fields.

This finalizes the "untyped / uninferred variables" cases.

strict-inference spec: https://github.com/dart-lang/language/blob/master/resources/type-system/strict-inference.md

Bug: https://github.com/dart-lang/sdk/issues/33749
Change-Id: I1d01ad15418be1891c95588132a44d478c5905a7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/112142
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-20 20:06:48 +00:00
Dan Rubel bfc7f8c4b5 Fix crash parsing invalid constructor initializer
Fix https://github.com/dart-lang/sdk/issues/37414

Change-Id: I6ea202050e2278da50c92b26acd91bdc429d5341
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113861
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-08-20 20:04:19 +00:00
Dan Rubel 3e69627752 Fix type argument parsing crash
Fix https://github.com/dart-lang/sdk/issues/37706

Change-Id: Ifc54c3fa4f57c772f8059d59e0265c4677a400fb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113860
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-20 20:04:19 +00:00
Dan Rubel f5f942684b Fix invalid literal list element crash
Fix https://github.com/dart-lang/sdk/issues/37697

Change-Id: Icefae7ca0c0f6b0d317c6aa48039fa6e6967409d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113705
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-08-20 12:03:12 +00:00
Sam Rawlins 5087b99361 Report final re-assignment in for-in parts. Fixes #30486
Change-Id: I299db3e1e301d90a1a2260d5574f7b174fc29d00
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113580
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2019-08-19 23:24:22 +00:00
Dan Rubel bb076a20c5 Fix unsupported initializer exception
... and add a new ParserErrorCode.INVALID_INITIALIZER error code

Fix https://github.com/dart-lang/sdk/issues/37693

Change-Id: I0a30ad97f90aab35cd3af76d1546e1e78f1de2db
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113703
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-08-19 19:55:12 +00:00
Dan Rubel 3568f78fe7 ensure super constructor invocation param list not null during recovery
Fix https://github.com/dart-lang/sdk/issues/37735

Change-Id: I727cd7aeb141c5abb779b3c15f338f3d43f6541f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/113702
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2019-08-19 18:34:32 +00:00