Commit Graph

6070 Commits

Author SHA1 Message Date
Konstantin Shcheglov 232aa553fb Backport AnalysisSession.getResolvedLibrary()/ByElement().
Change-Id: I83c1dbe9d758be12212fcd892bb57ae69407d8be
Reviewed-on: https://dart-review.googlesource.com/c/85147
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2018-11-27 22:53:24 +00:00
Konstantin Shcheglov 2beed40848 Move Workspace and its implementations into src/workspace.
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I172d95e55ced9925e8f428b9b07f432251ef5248
Reviewed-on: https://dart-review.googlesource.com/c/85462
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-27 21:50:00 +00:00
Konstantin Shcheglov 561d892d29 Only consider known files in AnalysisDriver.changeFile().
So, when we internally listen for the whole repo changes, each instance
of AnalysisDriver can react only on what matters for it.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I0b70cfa662ff23adce7644d313ff9841c8170e0c
Reviewed-on: https://dart-review.googlesource.com/c/85461
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-27 21:48:10 +00:00
Brian Wilkerson 92a8d5c193 Make it easier for lint rules to define their own lint codes
Change-Id: Ia1672e13544a0c73acfc22173cca14e75ed026b3
Reviewed-on: https://dart-review.googlesource.com/c/85407
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-27 15:34:30 +00:00
Konstantin Shcheglov 61a1793574 Issue 35162. Include SDK version constraint into AnalysisOptions.
So, analysis result signatures depend on it and recomputed when it
is changed.

Also, change analysis server to update analysis options not only
when analysis_options.yaml is changed, but also when pubspec.yaml
is changed.

R=brianwilkerson@google.com, paulberry@google.com

Bug: https://github.com/dart-lang/sdk/issues/35162
Change-Id: If4b937c26212d3da74ac7125eb2c6f70dbcb1793
Reviewed-on: https://dart-review.googlesource.com/c/85405
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
2018-11-27 00:57:27 +00:00
danrubel f02e7bb374 Rework parseLiteralSetOrMapSuffix to remove expression lookahead
This reworks the set literal support to remove unnecessary lookahead
by removing the listener.beginLiteralMapEntry event
and renaming the listener.endLiteralMapEntry to handleLiteralMapEntry.

Change-Id: Ia71fe69359b0447a60d729db34ec35ad25a54750
Reviewed-on: https://dart-review.googlesource.com/c/84661
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-11-26 20:03:19 +00:00
Paul Berry d7ee7b9516 Merge commit '880dfa0bca19b024bea57a20434da6f3f0fe9c87' into analyzer 2018-11-26 08:35:57 -08:00
Brian Wilkerson d5ae2d573b Remove some unnecessary instance creations in ElementResolver
Change-Id: I1a8e825e0b90ccbd74bbce2d5a7e58df3ba71a51
Reviewed-on: https://dart-review.googlesource.com/c/85300
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-25 19:16:11 +00:00
Brian Wilkerson 67472e59fb Remove an unused error code and the fix associated with it
Change-Id: I5118cea64a9c687e7ebd102a09cbfbaf467d1e96
Reviewed-on: https://dart-review.googlesource.com/c/85320
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-25 19:11:46 +00:00
Konstantin Shcheglov 95d67393a8 Sort libraries to produce stable library cycle signatures.
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I0a418d9fa95facfd9f335610276a479271ac1127
Reviewed-on: https://dart-review.googlesource.com/c/85145
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-21 23:24:55 +00:00
Brian Wilkerson 198d4d135f Infer an empty set literal when appropriate
Change-Id: Ib46c35adbd3dd9e28073aeb5996d785b5e62e608
Reviewed-on: https://dart-review.googlesource.com/c/85142
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-11-21 22:27:53 +00:00
Paul Berry 94d1d74076 Improve the exception message when a library can't be found in a summary.
This would have made it easier to debug internal bug #119875658.

Change-Id: I71a5e61602187b44923ca6f9b0ec254efe376f87
Reviewed-on: https://dart-review.googlesource.com/c/85143
Commit-Queue: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Auto-Submit: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-11-21 21:18:42 +00:00
Konstantin Shcheglov c5601d7d47 Switch Parsed/ResolvedLibraryResultImpl to AnalysisSession.getParsed/ResolvedLibraryByElement().
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I4ad2fdea2abbbdafd38d5167ffa60ee79c28360f
Reviewed-on: https://dart-review.googlesource.com/c/85140
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-21 18:07:23 +00:00
Paul Berry e649ed1aa3 Merge commit 'c1daa3276566e48dac6f52742264578092c56a35' into analyzer 2018-11-21 08:47:55 -08:00
Brian Wilkerson ae6f534188 Add fixes for SDK violation hint
Change-Id: Icbb41c2e305b45c6abb9ade343d677c2e28895ce
Reviewed-on: https://dart-review.googlesource.com/c/84691
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-11-21 02:19:21 +00:00
Brian Wilkerson 758e690b8d Enable the use of set literals in the analyzer unit tests
Change-Id: Idbf0b807d59fd68436906f699fd4ab55db23ac62
Reviewed-on: https://dart-review.googlesource.com/c/84962
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-11-20 23:56:40 +00:00
Paul Berry c165ef8a37 Ensure that lists and maps built by ExprBuilder have their staticType set.
We can't rely on resolution to do this, because resolution only
operates in the compilation unit currently being analyzed, and
constant values may be needed from other compilation units.

Fixes #35230.

Change-Id: I11fa5597110bc13164ca5dc9846836848120cd08
Reviewed-on: https://dart-review.googlesource.com/c/84964
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-11-20 22:22:15 +00:00
Konstantin Shcheglov 5498e58e3c Remove unused GnWorkspace.findFile().
R=brianwilkerson@google.com

Change-Id: I1b2e4a413362d28c2d54f3e2f5955f3324d44c8d
Reviewed-on: https://dart-review.googlesource.com/c/84963
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-20 21:51:20 +00:00
pq eceafa2df8 new “deprecated” lint maturity
Change-Id: Idd5257b5d4707b7a141efec644370c2fff9b7b3d
Reviewed-on: https://dart-review.googlesource.com/c/84701
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
2018-11-20 19:05:43 +00:00
Brian Wilkerson d29633f080 Add support for accessing the errors produced during constant evaluation
Change-Id: Iabd13ff201b79a1ca45cf609a9f48ed7e7155b61
Reviewed-on: https://dart-review.googlesource.com/c/84922
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-20 17:47:57 +00:00
Brian Wilkerson fafb93ecbd Perform type analysis and inference for set literals
Change-Id: Iadf4b3cbfa90f593d7be29036104a9dfc8f2868f
Reviewed-on: https://dart-review.googlesource.com/c/84921
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-20 17:20:00 +00:00
Paul Berry 051643c0ed Hook up analyzer set literal logic to Fasta parser.
A few analyzer summary tests had minor bugs that weren't noticed until
we hooked up the parser; those are fixed now.

Note that more analyzer set literal logic still needs to be written.

Change-Id: I6ba22602887cda20984770f927743595cc7cf451
Reviewed-on: https://dart-review.googlesource.com/c/84828
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-11-19 23:25:27 +00:00
Konstantin Shcheglov 5c7f36e2f1 Add getParsed/ResolvedLibraryByUri() to AnalysisDriver and use in AnalysisSession.
This is how clients actually ask ParsedLibraryResult - by its element,
and correspondingly AnalysisDriver.getParsedLibraryByUri().

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Id295122a667ec57f11d05c2bef8fcb905c463d3a
Reviewed-on: https://dart-review.googlesource.com/c/84826
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-19 23:11:07 +00:00
Paul Berry a8b833750a Convert parser.dart to triple-slash comment style
Change-Id: I5eb340875736b536c253967242d14a7fde9037b7
Reviewed-on: https://dart-review.googlesource.com/c/84825
Commit-Queue: Paul Berry <paulberry@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
Auto-Submit: Paul Berry <paulberry@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
2018-11-19 22:23:48 +00:00
Konstantin Shcheglov 90b694b93d Keep resynthesized annotations, even if partially unresolved.
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Ie56808e53d2acdf94153658197813150b138431f
Reviewed-on: https://dart-review.googlesource.com/c/84823
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-19 21:33:25 +00:00
Brian Wilkerson cb88347087 Port the SDK violation hint to the master branch
Change-Id: Id795400473796f05e46c0ffdd0a8920f8ad5bcd3
Reviewed-on: https://dart-review.googlesource.com/c/84688
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-19 21:14:48 +00:00
Konstantin Shcheglov de2e6a5543 Return ResultState.NOT_A_FILE for external libraries from getParsed/ResolvedLibrary().
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Ia2604f7c5c675fe66dae430401d9fdc4b20a0860
Reviewed-on: https://dart-review.googlesource.com/c/84760
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-19 18:39:41 +00:00
Brian Wilkerson 032bfe0872 Use void rather than Object as a type argument when possible
Change-Id: I275a20e6f58a01adda3be64cf83930cc238beed3
Reviewed-on: https://dart-review.googlesource.com/c/84700
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-19 18:32:31 +00:00
Konstantin Shcheglov 3f03b07d53 Keep actual resynthesized constant expressions even when they are partially unresolved.
This is what Angular outliner (and another generator that I forgot)
expects. The alternative with resolving library seems less palatable.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I6e407c6034284043e169bc64076ec2c811b33bfe
Reviewed-on: https://dart-review.googlesource.com/c/84682
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-19 16:58:28 +00:00
danrubel 7f63fcfe1f Add AstBuilder set literals support
Change-Id: I8e126d31975bc3834b4091ba149c97b92dde9a10
Reviewed-on: https://dart-review.googlesource.com/c/84663
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-11-17 03:11:41 +00:00
Paul Berry 32a6032f03 Merge commit 'ddbe22190c41b1993a3c93b67f1bfa57287348f8' into analyzer 2018-11-16 12:01:38 -08:00
Paul Berry 920630acab Cherry-pick 19d9aa3337 to analyzer branch.
Original commit message:
    Add isLibraryByUri() to AnalysisDriver.

    The package:build develpers told us that they need it.

Change-Id: Ieb276b175f244a122d2e5d2f31ac852252d2c595
Reviewed-on: https://dart-review.googlesource.com/c/84642
Auto-Submit: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-11-16 19:40:30 +00:00
Brian Wilkerson 716c9dcde2 Add a hint when Future is imported from core in code targeted to run with an SDK prior to 2.1
Change-Id: I925412b9c7c3023836a0a2a7d3d00847adf0b0c7
Reviewed-on: https://dart-review.googlesource.com/c/84547
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-11-16 19:07:27 +00:00
Konstantin Shcheglov b27d6078c2 Update getLibraryByUri() to more directly use external summaries, and check for part instead of library.
We need at least the external summaries portion, the checks for isPart
is to be a bit more clean, I think, hopefully does not break anything
internally.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Ic2e47b45ffb057195d34e1c5c55bbb20541e423d
Reviewed-on: https://dart-review.googlesource.com/c/84551
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-16 18:11:59 +00:00
Brian Wilkerson 01e0df71a8 Stop unnecessarily extending Object
Change-Id: Ib557755916b09be4e1ad1b1c2e4bed052a280513
Reviewed-on: https://dart-review.googlesource.com/c/84640
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-16 16:43:24 +00:00
Konstantin Shcheglov 8414e2240c Don't report DEPRECATED_MEMBER_USE for deprecated mixins, top-level variables, and class fields.
R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Ied5fbe5f7427d286a43902719eb153964c8800e0
Reviewed-on: https://dart-review.googlesource.com/c/84545
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-15 20:35:57 +00:00
Paul Berry 338b123002 Change the order of enumerated values in UnlinkedExprOperation
This causes the change in 7d84c2e4b0 to
be backwards compatible with the previous summary format.

Change-Id: If7f05f64846b84496bab1ca4afa03cf5f380dade
Reviewed-on: https://dart-review.googlesource.com/c/84544
Commit-Queue: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-11-15 20:15:15 +00:00
Konstantin Shcheglov a6665c1aa1 Fix for computing constant values of annotations with named constructors.
We are given ConstructorElementHandle, not ConstructorElementImpl.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: I41f8029dddc293e45628d7ecca131b337cc9e286
Reviewed-on: https://dart-review.googlesource.com/c/84543
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-15 19:57:15 +00:00
Brian Wilkerson b12c125825 Export Future from dart:core in the mock sdk
Change-Id: I9b234e5834a6a6559b65b86140d60ea781ff8883
Reviewed-on: https://dart-review.googlesource.com/c/84501
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-11-15 19:32:30 +00:00
Konstantin Shcheglov 19d9aa3337 Add isLibraryByUri() to AnalysisDriver.
The package:build develpers told us that they need it.

R=brianwilkerson@google.com, paulberry@google.com

Change-Id: Ia48851faac353d5f83e7d6af7d579c2c1d8be1bd
Reviewed-on: https://dart-review.googlesource.com/c/84502
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-11-15 17:48:49 +00:00
Brian Wilkerson 7d84c2e4b0 Serialization of set literals
Change-Id: I6e0e2dd3cda72d24d36e9b2c5d2c00d81f73379b
Reviewed-on: https://dart-review.googlesource.com/c/84364
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-11-14 20:01:57 +00:00
Paul Berry 1b5996ae67 Merge commit '30c5b39d4e0e7672d05df6aebba73254dd7ee770' into analyzer 2018-11-14 09:37:06 -08:00
Johnni Winther 8546a3a448 Revert accidental change to analyzer
Revert the change accidentally included in https://dart-review.googlesource.com/c/sdk/+/84001

Change-Id: I207253eecbe4024b30a1331901db07b596d617c0
Reviewed-on: https://dart-review.googlesource.com/c/84411
Auto-Submit: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
2018-11-14 15:48:10 +00:00
Paul Berry fc2888982c Merge commit 'c92f9dce2357d0da7909c0c5f630ad59882ccf29' into analyzer 2018-11-13 12:35:13 -08:00
Brian Wilkerson 1d00a8a11f Add checking for errors related to set literals
Change-Id: Iad1442da6be318a709f5782fbda4a9055f55dfac
Reviewed-on: https://dart-review.googlesource.com/c/84302
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-13 20:08:23 +00:00
teresy c92f9dce23 Faster isNotEmpty on collections
Uses isNotEmpty instead of length (as recommended in Effective Dart docs)

Closes #34751
https://github.com/dart-lang/sdk/pull/34751

GitOrigin-RevId: aa3a3c0f8f620987525d85823aad3e04015c115a
Change-Id: I8db647382a8e161ce2e74c7a2ce69459dfd7edd3
Reviewed-on: https://dart-review.googlesource.com/c/79160
Reviewed-by: Sigmund Cherem <sigmund@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Alexander Thomas <athom@google.com>
2018-11-13 19:25:08 +00:00
Brian Wilkerson 3826a983b0 Add constant evaluation for lazy null-aware and lazy conditional expressions
Change-Id: Iea892bee3ad5c0bdbc0803ce665acfe38ccbd9a1
Reviewed-on: https://dart-review.googlesource.com/c/84182
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-12 23:21:34 +00:00
Konstantin Shcheglov 802db45879 Increment AnalysisDriver.DATA_VERSION to invalidate current analysis results in Flutter HHH bot.
R=brianwilkerson@google.com

Change-Id: Ib7bae28c0843b5ce9da87f7fd0a288bb34b12a72
Reviewed-on: https://dart-review.googlesource.com/c/84181
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-11-12 22:19:00 +00:00
Brian Wilkerson f6128b48b6 Add constant evaluation for operators that now apply to bool as well as int
Change-Id: I080386cddfece2d789fcee7d13bdda01260cc724
Reviewed-on: https://dart-review.googlesource.com/c/84160
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-11-12 21:26:08 +00:00
Konstantin Shcheglov 2079620a53 Issue 34733. Expand 'implicit-casts' controlled casts, and deprecate more of 'declaration-casts'.
R=brianwilkerson@google.com, paulberry@google.com

Bug: https://github.com/dart-lang/sdk/issues/34733
Change-Id: Ifda5cbd8cc8d81a7e3ad8133d68c056b869bb588
Reviewed-on: https://dart-review.googlesource.com/c/84122
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-11-12 21:04:59 +00:00