Brian Wilkerson
69dd787ff0
Cleanup invalid declarations of main, part 1
...
The purpose of this CL is to clean up test code that references `main`
in a way that will be invalid when the tests are converted to analyze
the test code under null safety by default. This is the first of three
such CLs.
In all three I only touched test files that contained an invalid use of
`main`, but in any file I touched I removed any use of `main` where the
name of the function/method was not critical to the test.
Change-Id: Ib753302a4c3ffc7eb5f248e9c6000e80dc77fca9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/205062
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2021-06-28 18:13:24 +00:00
Brian Wilkerson
0e4c640451
Suggest void as a return type in existing generic function types
...
Change-Id: I88c37e5ce273de2e9598b182fc5fb61066c11740
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/204600
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2021-06-23 14:04:21 +00:00
Brian Wilkerson
75c9f63da0
Fix completion for redirecting constructors
...
Change-Id: Ia082b04ab90a9541b1eeec12c6c5f7f8379d3af9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/202541
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2021-06-04 20:16:47 +00:00
Konstantin Shcheglov
82ea8416ed
Fix failing test/completion_test.dart
...
Change-Id: I12676b8d1422d9d521f8c1ac84a28b30237b1ee6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196242
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2021-04-21 03:25:48 +00:00
Brian Wilkerson
54fc28ec25
Migrate remaining unblocked tests
...
Change-Id: I30e3c22db7df6e78be88125f20eea2dce054f446
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/195860
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2021-04-19 15:57:38 +00:00
Konstantin Shcheglov
e97f1bdbf0
Switch analysis_server to language 2.12, so null safety, but opt-out files.
...
This should allow doing partial migration, specifically protocol files,
which are imported by other libraries, but are a small library cycle
that does not import much outside of it.
Change-Id: I904c05d6d5b444ee9a9dbd1f7ada12aabdcc5165
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/193583
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2021-03-30 23:39:37 +00:00
Brian Wilkerson
d043b1428e
Resolve type parameters to their bounds when suggesting instance members
...
Change-Id: I19fe690216ba0c0dd7d0444d7bda4a58aaa3e8a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/190723
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2021-03-11 19:14:30 +00:00
Danny Tuppeny
d901213061
[Analyzer] suggest type names in field declarations where fields may have been parsed as field names
...
Change-Id: Ie31cc3bae86538ea5580627851a7b7d95571a5d5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/179771
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2021-01-19 22:26:14 +00:00
Lasse R.H. Nielsen
6e29700e16
Update List constructor documentation, deprecate constructor.
...
Emphasize that the operation is going away,
and mark constructor as deprecated.
TEST= Refactoring+deprecation only, covered by existing tests.
Change-Id: I82aa044cd2cf7bf347b624371399f44bda8f4a07
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/173261
Commit-Queue: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Nate Bosch <nbosch@google.com>
2020-12-07 16:20:28 +00:00
Brian Wilkerson
c6126c34e9
Suggest previously missed type parameters
...
Change-Id: I09361984b7a58a281769e5feb04aeb1656620237
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/173880
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jaime Wren <jwren@google.com>
2020-11-25 00:13:49 +00:00
Mike Fairhurst
1134a0f17c
[analysis_server] Remove unused dart:async imports
...
Change-Id: I764ee78cb9e31bdb3abaa36ca4754e1fed180311
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/161447
Auto-Submit: Mike Fairhurst <mfairhurst@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2020-09-02 17:29:52 +00:00
Brian Wilkerson
ab73158758
Fix the windows bot and update MockSdk
...
Fixing the test that's causing the Windows bot to fail required updating
the MockSdk, which cause a lot of other changes. I would have done this
in two separate CLs if I'd known how big this was going to get, but I'm
hoping it isn't too big.
Change-Id: Idee56bab5e73a78ab7857e81177090493aa08b40
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151874
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-06-22 14:34:25 +00:00
Jaime Wren
1e0611cfac
Refactor the LocalConstructorContributor into the LocalReferenceContributor.
...
local_declaration_visitor.dart was updated to better implement ConstructorDeclarations
This adds the API of _recordCompletionElement() and _elementAlreadyInCompletionSet() to local_reference_contributor.dart, if this API looks good and lands, I will use it in the rest of the contributor to fix other known shadowing bugs.
local_constructor_contributor_test.dart was removed (a large copied & pasted body of tests not providing value) and tests were added at the beginning of local_reference_contributor_test.dart. Tests in this file were also updated accordingly.
The change of the testCommentSnippets025 test in completion_test.dart is due to the framework not supporting (in a more robust way) the allowance of both a class and an implicit constructor
The addition of the testCommentSnippets045 test in completion_test.dart is to show that constructor invocations don't need the new keyword.
Change-Id: Ic4a52e3cb94320a92f24b1c743dd61e18c6c7b16
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150165
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Jaime Wren <jwren@google.com>
2020-06-05 16:15:04 +00:00
Parker Lougheed
492875cf35
Fix code completion after typedef reference
...
Has to make some changes to testing and elsewhere due to the call()
function lacking some information.
Fixes #38687
Bug: https://github.com/dart-lang/sdk/issues/38687
Change-Id: Ib00b3a9a15efa393f97130448091b42d5d569924
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148700
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-05-20 21:33:14 +00:00
Jaime Wren
f0f3199daa
Improve the completion of return types on FunctionTypedFormalParameters in FormalParameterLists
...
Change-Id: I7c7446f5077844daadf935f5ec0af5b12da739fc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/142600
Commit-Queue: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2020-04-07 17:51:16 +00:00
Brian Wilkerson
8969b1839c
Enable omit_local_variable_types in analysis_server
...
Change-Id: I7e5c13d40fd276854601681fc84be321e6031b10
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/141583
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-03-30 03:58:44 +00:00
Brian Wilkerson
b03ef5b3fe
Convert more doc comments in analysis_server
...
Change-Id: I333d0af4444226a8152e840c4d9015fb4c30bd32
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/135700
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-02-13 19:29:28 +00:00
Konstantin Shcheglov
5c332bea91
Stop using 'factory something() => null;' in most cases.
...
I did not change MockSdk, to avoid conflict with
https://dart-review.googlesource.com/c/sdk/+/135241
R=brianwilkerson@google.com
Bug: https://github.com/dart-lang/sdk/issues/40603
Change-Id: I9f0af20f5914b5ac1aefee02aa8052db269529b5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/135532
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2020-02-12 22:58:57 +00:00
Brian Wilkerson
8efdee06d6
Begin adding return types in analysis_server
...
Change-Id: Id0daa52236bdc90cba6bfd7cf81d1b4cf47603c0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/133544
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-01-28 21:18:30 +00:00
Brian Wilkerson
5584c96fde
Enable prefer_single_quotes in analysis_server
...
All of the changes except in the analysis options file are from dartfix.
Change-Id: Icd9bf02ad07f71d1fc365979c7dfe18a792dc595
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132624
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2020-01-21 17:52:52 +00:00
Brian Wilkerson
4043a6fce3
Remove unnecessary uses of new in analysis_server
...
Other than analysis_options.yaml, all of the changes were from running
dartfix.
Change-Id: I92411642f12a00fc6bd0bfd24dd60fe67f0fed16
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128845
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-12-18 19:01:51 +00:00
Devon Carew
3e3406d20e
[sdk] remove the dart:_chrome package
...
Change-Id: I5b62984fb7d4cd5dd9ed6f4a02ed91e08ed71e8e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120005
Reviewed-by: Vijay Menon <vsm@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
2019-10-06 23:50:09 +00:00
pq
52abcd3dd2
apply prefer_equal_for_default_values
...
Change-Id: I9b6fd3ee18ec834a5db3d0d25455b6db9ea4fbe2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108664
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
2019-07-10 19:31:40 +00:00
Konstantin Shcheglov
8c891ec25e
Include type parameters into suggested code completions.
...
R=brianwilkerson@google.com
Bug: https://buganizer.corp.google.com/issues/120659839
Change-Id: I51ec6142b97b079c4db55ef1f2081354ee16dda5
Reviewed-on: https://dart-review.googlesource.com/c/91858
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2019-02-04 05:37:37 +00:00
Brian Wilkerson
47e988b781
Clean up the remaining copyright notices in analysis_server
...
Change-Id: Iee3110f92ab0f24312ddd1eff407d2229f895321
Reviewed-on: https://dart-review.googlesource.com/c/89101
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2019-01-11 15:38:56 +00:00
Konstantin Shcheglov
b71948faee
Consolidate MockSdk(s) into one, living in analyzer/lib/src/test_utilities.
...
R=brianwilkerson@google.com , paulberry@google.com
Change-Id: I70946b8e6f790608ad52c8f27cd6f506673f7b0d
Reviewed-on: https://dart-review.googlesource.com/c/82710
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-02 21:52:44 +00:00
Konstantin Shcheglov
1f52372bfa
Remove CFE integration from analyzer, analysis_server, and analyzer_cli.
...
AnalysisDriverResolutionTest is partially updated, about 30 failing
tests added. I will get back to it in a following CL, it is not
directly CFE integration, but updated understanding how we want to
resolve. For example we don't need types for non-expression identifiers.
Change-Id: I3daddbb6c66ffad7a726f3313a1199fd7387aa04
Reviewed-on: https://dart-review.googlesource.com/71883
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-08-29 13:46:45 +00:00
Janice Collins
f40ff153a9
Enable --use-fasta-parser with the analyzer by default.
...
Based on Devon's change at:
https://dart-review.googlesource.com/c/sdk/+/67090
Change-Id: I80b7943826e248bf37d9bbbb769330d24b0dd6ae
Reviewed-on: https://dart-review.googlesource.com/70160
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Devon Carew <devoncarew@google.com>
Commit-Queue: Janice Collins <jcollins@google.com>
2018-08-28 19:29:17 +00:00
Brian Wilkerson
83aa463fac
Enable a few more server tests under CFE
...
Change-Id: I5f0bd750d3da7658f836e45f02da5ef157e752ff
Reviewed-on: https://dart-review.googlesource.com/68960
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-08-08 17:13:28 +00:00
Brian Wilkerson
92ae73b6d8
Fork the remaining subclasses of AbstractAnalysisClass
...
Change-Id: Ie3e561a6b6f4d29510f543d616998c795fd85191
Reviewed-on: https://dart-review.googlesource.com/68120
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-08-02 17:43:58 +00:00
Konstantin Shcheglov
757ef3979c
Revert "Revert "Revert "Don't do implicit new/const code generation with --preview-dart-2 enabled."""
...
This reverts commit 4089111540
.
R=brianwilkerson@google.com
Change-Id: I66297466f8baafe6e070acbcb1776b41f3d9fedc
Reviewed-on: https://dart-review.googlesource.com/55506
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-05-16 19:43:22 +00:00
Konstantin Shcheglov
8515d74332
Add ImportElement.namespace and use it in completion.
...
R=brianwilkerson@google.com
Change-Id: I58cadf0e3239ad4ae8584d79485f4d9ebda10eba
Reviewed-on: https://dart-review.googlesource.com/54064
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-05-07 21:23:48 +00:00
Konstantin Shcheglov
4089111540
Revert "Revert "Don't do implicit new/const code generation with --preview-dart-2 enabled.""
...
This reverts commit e5ed23fdb5
.
R=brianwilkerson@google.com
Change-Id: Ida33856e965f06f773025f3c625d6ab3bace80a8
Reviewed-on: https://dart-review.googlesource.com/49280
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-04-03 22:29:09 +00:00
Konstantin Shcheglov
e5ed23fdb5
Revert "Don't do implicit new/const code generation with --preview-dart-2 enabled."
...
This reverts commit a1e4d8e0bf
.
Reason for revert: <INSERT REASONING HERE>
Original change's description:
> Don't do implicit new/const code generation with --preview-dart-2 enabled.
>
> R=brianwilkerson@google.com, devoncarew@google.com
>
> Change-Id: I8a96a5ccceae57c3ed5c1f2e0fd4897a7e99df03
> Reviewed-on: https://dart-review.googlesource.com/48883
> Reviewed-by: Devon Carew <devoncarew@google.com>
> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
TBR=devoncarew@google.com ,scheglov@google.com,brianwilkerson@google.com
Change-Id: Ie3acf0794ed7b8264682e29aaa4bc1516fce6981
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/48900
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-03-30 19:24:46 +00:00
Konstantin Shcheglov
a1e4d8e0bf
Don't do implicit new/const code generation with --preview-dart-2 enabled.
...
R=brianwilkerson@google.com , devoncarew@google.com
Change-Id: I8a96a5ccceae57c3ed5c1f2e0fd4897a7e99df03
Reviewed-on: https://dart-review.googlesource.com/48883
Reviewed-by: Devon Carew <devoncarew@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-03-30 18:07:25 +00:00
Brian Wilkerson
ea94e65b43
Make preview-dart-2 imply strong-mode
...
Change-Id: Ifa230f9e64a538e222557ea471dc728ad3dd01d7
Reviewed-on: https://dart-review.googlesource.com/46300
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Devon Carew <devoncarew@google.com>
2018-03-13 17:15:39 +00:00
Konstantin Shcheglov
0ce1a92d98
Suggest constructors for implicit creation in previewDart2.
...
R=brianwilkerson@google.com
Bug: https://github.com/flutter/flutter-intellij/issues/998
Change-Id: I43270f47fb43402d1a9e0f7d9814494ffd83bb5e
Reviewed-on: https://dart-review.googlesource.com/43080
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-02-22 18:03:12 +00:00
Dan Rubel
a459bc8b7c
Add fasta parser constructor reference recovery
...
This CL fixes/improves 2 keyword contributor situations
when analyzer is using the fasta parser:
* Recover gracefully given a constructor reference
followed by a dot without an identifier
* Include a colon whenever suggesting the 'default' keyword
Change-Id: I393ef16130c7d1288ac4c18e6fdc17dbbe1421ea
Reviewed-on: https://dart-review.googlesource.com/32145
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-01-03 20:42:24 +00:00
Devon Carew
f383c17bc2
Redo our benchmarks; add a benchmark/benchmarks.dart tool.
...
BUG=
R=brianwilkerson@google.com , scheglov@google.com
Review-Url: https://codereview.chromium.org/2986293002 .
2017-08-02 08:07:38 -07:00
Konstantin Shcheglov
00d5012906
Format analyzer, analysis_server, analyzer_plugin, front_end and kernel with the latest dartfmt.
...
...instead of mixing formatting with actual changes in many CLs.
R=ahe@google.com , paulberry@google.com , sigmund@google.com
BUG=
Review-Url: https://codereview.chromium.org/2975253002 .
2017-07-13 16:28:18 -07:00
Brian Wilkerson
7d26ff6d4f
Remove some more library directives
...
R=scheglov@google.com
Review-Url: https://codereview.chromium.org/2884233004 .
2017-05-17 08:02:08 -07:00
danrubel
02adcc9614
suggest catch and finally keywords
...
After a try block that does not have a "catch" block,
suggest the "catch" keyword and nothing else.
After a "catch" block, suggest the "finally" keyword.
Fix https://github.com/dart-lang/sdk/issues/27560
R=brianwilkerson@google.com
Review-Url: https://codereview.chromium.org/2662973007 .
2017-02-06 12:57:57 -05:00
Konstantin Shcheglov
75fff1fdb6
Implement completion in WithDirective.
...
R=brianwilkerson@google.com
BUG=
Review-Url: https://codereview.chromium.org/2665053004 .
2017-01-31 15:06:54 -08:00
Konstantin Shcheglov
0160332713
Issue 28027. Move Null to the bottom in the Analyzer.
...
R=brianwilkerson@google.com , paulberry@google.com
BUG= https://github.com/dart-lang/sdk/issues/28027
Review-Url: https://codereview.chromium.org/2638183002 .
2017-01-18 11:15:11 -08:00
Brian Wilkerson
e7577172d1
Add preliminary parser support for generic function types
...
R=scheglov@google.com
Review-Url: https://codereview.chromium.org/2628973003 .
2017-01-12 07:00:24 -08:00
Konstantin Shcheglov
05a86a7495
Remove 'initializeTestEnvironment' from 'analysis_server'.
...
Also fixes the server_options_test.dart:22 test broken in https://codereview.chromium.org/2394683006/
R=paulberry@google.com , brianwilkerson@google.com
BUG=
Review URL: https://codereview.chromium.org/2402483002 .
2016-10-06 10:26:17 -07:00
Konstantin Shcheglov
de4d8b3a78
Switch analysis_server to use 'package:test'.
...
I'm changing DEPS in the corresponding analyzer CL.
R=brianwilkerson@google.com , paulberry@google.com
BUG=
Review URL: https://codereview.chromium.org/2394683006 .
2016-10-06 08:47:15 -07:00
Dan Rubel
023295912a
improve import URI completions at EOF
...
fixes https://github.com/dart-lang/sdk/issues/27020
R=scheglov@google.com
Review URL: https://codereview.chromium.org/2342473002 .
2016-09-14 11:22:25 -04:00
Konstantin Shcheglov
09b851c97f
Don't perform final fields and top-level variables type propagation.
...
A similar feature is now implemented in strong mode, and users who
need it, should switch to strong mode.
When we are ready to drop propagated types altogethoer, we could
deprecate or remove UnlinkedVariable.propagatedTypeSlot in IDL.
R=brianwilkerson@google.com , paulberry@google.com
BUG= https://github.com/dart-lang/sdk/issues/26794
Review URL: https://codereview.chromium.org/2288223003 .
2016-08-29 15:18:12 -07:00
Brian Wilkerson
6ccbef94fc
Convert analysis server over to use ContextBuilder
...
R=scheglov@google.com
Review URL: https://codereview.chromium.org/2286923002 .
2016-08-29 08:11:53 -07:00