Commit Graph

3383 Commits

Author SHA1 Message Date
Dan Rubel d95f63d752 Update dartfix to use new invalid type argument fix
... and also

* Do not show errors that will be automatically fixed
* Replace --dry-run with --overwrite
* Remove dartfix --dart-sdk option
* Address comments in https://dart-review.googlesource.com/c/sdk/+/78881

Change-Id: Iaac253719d84e02061f86fdca764e9dda17a9d27
Reviewed-on: https://dart-review.googlesource.com/c/79440
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-10-12 00:38:29 +00:00
Dan Rubel e4c3fa0a9c Improve recovery when parsing named constructor invocation with invalid type arguments
The parser now generates a ConstructorWithTypeArguments error and a new
handleInvalidTypeArguments event after a begin/endTypeArguments event pair
when those type arguments are in a syntatically invalid location.

For example: `new C.n<int>();` in
```
class C<T> { T f; C.n() {} }
main() { var x = new C.n<int>(); }

Most listeners handle this event by dropping the invalid type arguments,
but AstBuilder now preserves those invalid type arguments in the AST
to support better code quick-fixes/quick-assists/refactoring.

Change-Id: I5b22bd4903cd9ee3645936b9a108598b603cf9ca
Reviewed-on: https://dart-review.googlesource.com/c/79300
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-10-11 19:57:22 +00:00
Danny Tuppeny e4842a293b Remove extra spaces in headers
Change-Id: I401ad4537e7a8c3ea4bc3f693cf45b5f7ef31267
Reviewed-on: https://dart-review.googlesource.com/c/79340
Commit-Queue: Danny Tuppeny <dantup@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-10-11 18:05:37 +00:00
Danny Tuppeny 2989116219 Add some special cases for types we can't/don't need to parse
Includes a fabricated base type for file operations to avoid a List of a Union.

Change-Id: I0ddc7c6428cc8f1535c3a8d7d0b042b1725969f3
Reviewed-on: https://dart-review.googlesource.com/c/79323
Commit-Queue: Danny Tuppeny <dantup@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-10-11 17:51:10 +00:00
Danny Tuppeny 931202df27 Improve wrapping of lists and *notes* in LSP spec comments
Change-Id: I32d9056e56a76588f9f26e36ebe040b0457dcd4d
Reviewed-on: https://dart-review.googlesource.com/c/79320
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
2018-10-11 17:30:30 +00:00
Danny Tuppeny 23e7f9d1eb Handle references to other classes in comments
Change-Id: I0a29355e0bbcb2a441dff90bc2cfc3475e8c1cd3
Reviewed-on: https://dart-review.googlesource.com/c/79321
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
2018-10-11 17:27:53 +00:00
Danny Tuppeny 96737787e2 Add LSP spec code-gen output
Change-Id: Ib1f72b064172153bd677b3ac33ac12ed02b28f47
Reviewed-on: https://dart-review.googlesource.com/c/79207
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
2018-10-11 15:54:14 +00:00
Danny Tuppeny fc0decc262 Improvements to the Dart code generated from the LSP spec.
Working towards making it compile, free of lint errors, formatting correctly.

Change-Id: I61d5ed6e89fdf24c97079745a3816b1b303e2820
Reviewed-on: https://dart-review.googlesource.com/c/79201
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
2018-10-11 14:59:25 +00:00
G?nter Z?chbauer 2da0b9f4f1 fix some typos
Closes #34738
https://github.com/dart-lang/sdk/pull/34738

GitOrigin-RevId: d211bbacfe65355cf7304c990ffb6c79d7a229cf
Change-Id: If690e6d378e543b300e1f6a353ceae73e39c29db
Reviewed-on: https://dart-review.googlesource.com/c/78900
Reviewed-by: Alexander Thomas <athom@google.com>
2018-10-10 19:15:30 +00:00
Brian Wilkerson f11e746c2e Initial implementation of fixes for type arguments on named constructor invocations
Change-Id: I71fe90c53c5a15e7172bcc27abfbfffd8119d7ff
Reviewed-on: https://dart-review.googlesource.com/c/79061
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-10 17:11:36 +00:00
Dan Rubel ac4b8a7306 Hook up FixProcessor to fix errors in dartfix
Change-Id: I0f4b427ce1f6c89c7d146651b7daead05d7facaf
Reviewed-on: https://dart-review.googlesource.com/c/78881
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-10-10 16:52:16 +00:00
Danny Tuppeny 6d9cc6fa03 Add skeleton for parsing LSP spec from Markdown/TypeScript to generate Dart data classes
- Fixes to generation from spec
- Add basic code-gen with (very incomplete) tests
- Add some basic parsing of TypeScript interfaces in the LSP spec
- Add a group to the test
- Add code for extracting TypeScript codeblocks from Markdown

Change-Id: I733756d43744d89307b77527bd083cfacf670f56
Reviewed-on: https://dart-review.googlesource.com/c/79046
Commit-Queue: Danny Tuppeny <dantup@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-10-10 16:33:50 +00:00
Danny Tuppeny be39eacf00 Rename convertPathForImport -> convertAbsolutePathToUri
Also remove any calls that aren't required. The function still works if you pass it a relative path (for convenience, if you have a variable) but it's not required for relative paths.

Change-Id: I567e098f5956a7c2b5fe2d6d7d7fb16a263a72cc
Reviewed-on: https://dart-review.googlesource.com/c/79025
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
2018-10-10 16:03:58 +00:00
Danny Tuppeny 3d06427075 Fix MOVE_FILE test paths for Windows
- Wrap all paths with separators in convertPath() for Windows
- Ensure convertPathForImport does the right thing for relative paths
- Use the correct convertPath for imports/exports/parts

Change-Id: Ie95e41686479f175c9ba661180fdf5ad90b409e8
Reviewed-on: https://dart-review.googlesource.com/c/78740
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
2018-10-09 15:00:07 +00:00
Dan Rubel b6a8e31492 Improve error message when var is used as a type name
... and Address comments in
https://dart-review.googlesource.com/c/sdk/+/78101

Change-Id: I8b3bc9888185d9802a389baa3f197f9b29927b7f
Reviewed-on: https://dart-review.googlesource.com/c/78103
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-10-05 11:56:26 +00:00
Brian Wilkerson 0e1ddfb0f2 Disable completions for runtime expressions
Change-Id: I675c2c724e4b3ad987ef7d52c80786379e443781
Reviewed-on: https://dart-review.googlesource.com/c/78145
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-04 21:34:20 +00:00
Brian Wilkerson 0cc7993ee3 Clean up a couple of hints in analyzer code
Change-Id: Ifd87f31f1441016d043fb2741ccf9dcd61ce0f0f
Reviewed-on: https://dart-review.googlesource.com/c/77674
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-04 14:54:28 +00:00
Peter von der Ahé 2a6b566ca2 Move byte store to package:analyzer
Change-Id: I1fc41cc0b2e2848565a5411d0512a4ca086ab659
Reviewed-on: https://dart-review.googlesource.com/c/77761
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
2018-10-04 09:15:54 +00:00
Peter von der Ahé 45cb0815bc Move PerformanceLogger to package:analyzer
Change-Id: I89a60ae9ab639c7907a92976e1eb8007d0f4ee9b
Reviewed-on: https://dart-review.googlesource.com/c/77760
Commit-Queue: Peter von der Ahé <ahe@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
2018-10-04 08:44:43 +00:00
Danny Tuppeny 878779e1a2 Fix test and add TODO for others that need updating
Change-Id: I381f442ec7ac5f5c69901c70e6a33dfd196d56b4
Reviewed-on: https://dart-review.googlesource.com/c/77884
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
2018-10-03 19:44:40 +00:00
Danny Tuppeny 2dfe46fba2 Additional work on MOVE_FILE and associated tests
- Update outgoing part-of relative uris (may need changing)
- Add a helper for verifying failed refactor statuses
- Use the original file location for checking if in an analysis root
- Remove tests for functionality we're not yet supporting
- Remove forced failures and @failingTest for tests that work

Bug: https://github.com/dart-lang/sdk/issues/33605
Change-Id: I405bfcb92ce2ce66710caf934fc03e10eb66aea3
Reviewed-on: https://dart-review.googlesource.com/c/77541
Commit-Queue: Danny Tuppeny <dantup@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-10-03 14:22:11 +00:00
Peter von der Ahé ed42aab273 Move source.dart to package:analyzer
Change-Id: Ide66d4f69b8588f04967c510eae0a733b4b3f0c5
Reviewed-on: https://dart-review.googlesource.com/c/77860
Auto-Submit: Peter von der Ahé <ahe@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
2018-10-03 12:56:49 +00:00
Peter von der Ahé eb0ec965e3 Move codegen/tools.dart to package:analyzer
Change-Id: Iab61e0dfcdd0969d1bf35e27c13c336a944d14e6
Reviewed-on: https://dart-review.googlesource.com/c/77780
Commit-Queue: Peter von der Ahé <ahe@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
2018-10-03 07:41:43 +00:00
Brian Wilkerson bd7b776bb4 Fix more quick fix tests
Change-Id: I07c9900be8dc3510d729f77b98c95acd06159043
Reviewed-on: https://dart-review.googlesource.com/c/77671
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-03 00:16:15 +00:00
Brian Wilkerson edd86ef7a1 Generate quick fix for await in non-async (issue 34647)
Change-Id: Iabf8f11c8c477d1642e5122a5748b04bcdc5efa3
Reviewed-on: https://dart-review.googlesource.com/c/77669
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-02 20:46:36 +00:00
Brian Wilkerson 72d3798764 Improved completion support for mixins
Change-Id: I77aea1b03e00725c48458b0e6ee9b1936ea5685c
Reviewed-on: https://dart-review.googlesource.com/c/77661
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-02 18:27:33 +00:00
Konstantin Shcheglov 7ca2f56112 Stop using and deprecate InheritanceManager.getMembersInheritedFromInterfaces().
R=brianwilkerson@google.com

Change-Id: Ia24248cc0d80960d2a4aa40e0da519804c68abbc
Reviewed-on: https://dart-review.googlesource.com/77483
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-10-01 22:40:07 +00:00
Brian Wilkerson e90f1f21b8 Remove unused response codes and deprecate an unimplemented request
Change-Id: I7a07182ce8b7e7636f20bd4c661e94dd3dff985c
Reviewed-on: https://dart-review.googlesource.com/77480
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-01 20:19:59 +00:00
Brian Wilkerson f7f31efab0 Disable the reading of a UUID during training
Change-Id: Idb4d1d2ea4c7a862ff3d54718d2bf924492f3779
Reviewed-on: https://dart-review.googlesource.com/77422
Reviewed-by: Devon Carew <devoncarew@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-01 19:07:59 +00:00
Konstantin Shcheglov 64f02226b3 Stop using InheritanceManager.getMembersInheritedFromClasses().
R=brianwilkerson@google.com

Change-Id: I2f719f6c3c5383ac76608b9fd5b7251f3af0d6bb
Reviewed-on: https://dart-review.googlesource.com/77463
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-10-01 19:02:14 +00:00
Brian Wilkerson 2723fcfb82 Remove more dead code from server
Change-Id: Ib0af3295bc064fab0a271337a42f3925ccf205dc
Reviewed-on: https://dart-review.googlesource.com/77420
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-01 15:43:12 +00:00
Brian Wilkerson ce8a5ffab2 Remove remaining definitions of EMPTY_LIST in server
Change-Id: Ia7a9286f2fc7e151f99091169635b71fde88649a
Reviewed-on: https://dart-review.googlesource.com/77421
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-01 15:42:55 +00:00
Brian Wilkerson 10f05f45b9 Remove more dead code from server
Change-Id: I09d7c2e96d41f095cb456a5eccb04eaa447430cd
Reviewed-on: https://dart-review.googlesource.com/77263
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-10-01 01:21:38 +00:00
Konstantin Shcheglov 5cc9ab02a8 Switch all refactoring to using ResolveResult instead of raw unit.
R=brianwilkerson@google.com

Change-Id: I3fa7c5c22966dd5d464e438e9300587d80c180b2
Reviewed-on: https://dart-review.googlesource.com/77267
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-10-01 01:17:58 +00:00
Konstantin Shcheglov 215e80eb0a Fix Analysis Server tests on Windows bot.
R=brianwilkerson@google.com

Change-Id: I0afc4ee40d8b1030bbcfc35bfb43a13d2db3accd
Reviewed-on: https://dart-review.googlesource.com/77266
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-10-01 01:09:28 +00:00
Brian Wilkerson 5bcf91d973 Remove some dead code
Change-Id: Ida5c2ad29f943d676a6f16a51d66892b037ad099
Reviewed-on: https://dart-review.googlesource.com/77240
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-09-30 16:32:38 +00:00
Brian Wilkerson da3e844cac Fix potential cast exceptions
Change-Id: I38f5565495b30393e0e559fe7fcae4c8bc247162
Reviewed-on: https://dart-review.googlesource.com/77226
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2018-09-28 22:06:24 +00:00
Konstantin Shcheglov 1bceca91b0 Remove the 'name' constructor parameter from CompilationUnitElementImpl()
It costed us about 1.2% of total analysis time.
The whole information about a unit is available in its Source.

R=brianwilkerson@google.com

Change-Id: Iffa253d1eae1a466c10766f66c6c677e19be124a
Reviewed-on: https://dart-review.googlesource.com/77220
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-09-28 21:53:24 +00:00
Konstantin Shcheglov 9c585bf5df Document that ResourceProvider requires absolute, normalized paths, and enforce this.
This allows us to avoid performing normalization, and work with paths
as is. So, this speeds up SourceFactoryImpl.restoreUri() from 7.5% to 3.7%

R=brianwilkerson@google.com

Change-Id: I085f3db40af6543fbb524a82fad48aa051e87937
Reviewed-on: https://dart-review.googlesource.com/77017
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-09-28 17:18:49 +00:00
Dan Rubel 0518b334ba Address comments
Address comments in https://dart-review.googlesource.com/c/sdk/+/77021

Change-Id: I2a603d77002933692e6b14deba68b227cf4981e3
Reviewed-on: https://dart-review.googlesource.com/77023
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-09-27 21:24:53 +00:00
Dan Rubel 7c46a28505 Update convert class to mixin assist to remove "abstract"
Change-Id: I27ff36228b6c93d13a2f6d5f0a4c15414c130687
Reviewed-on: https://dart-review.googlesource.com/77022
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-09-27 21:07:03 +00:00
Dan Rubel 45c7e4365c Update dartfix to apply changes to file rather than displaying them
This CL updates dartfix to make the recommended changes after
prompting the user to confirm that these changes should be made.
If the source contains errors that might affect the correctness
of the automatically applied fixes, then a warning is issued
before prompting the user.

This CL also addresses comments in
https://dart-review.googlesource.com/c/sdk/+/77020

Change-Id: Ie609247616dd033aa16af8d7e6e38a9eb4cbf0d0
Reviewed-on: https://dart-review.googlesource.com/77021
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-09-27 20:59:02 +00:00
Dan Rubel edddc0ba58 Generate source changes for converting class to mixin
This uses the AssistProcessor to generate the source changes
and pass them to the client. In a subsequent CL, the client
will apply those changes instead of displaying them.

Additionally, this CL addresses comments in
* https://dart-review.googlesource.com/c/sdk/+/76760
* https://dart-review.googlesource.com/c/sdk/+/76520

Change-Id: I1e9cb4e079ec79a06db4c4d04a062c71107c0f21
Reviewed-on: https://dart-review.googlesource.com/77020
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-09-27 19:32:20 +00:00
danrubel 629d76eb46 Simple dartfix that suggests class to be converted to mixins
... and update protocol spec errors generated by edit.dartfix

Change-Id: I3708eb9ffa40f91ff9bf172d20d75346f481e4d8
Reviewed-on: https://dart-review.googlesource.com/76760
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-09-27 15:44:45 +00:00
Dan Rubel a0ff5f8b3f Add stub implementation for analysis server edit.dartfix
Change-Id: Iefaec93366c5a6910e3c2e7dfebc91e8905922c2
Reviewed-on: https://dart-review.googlesource.com/76520
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
2018-09-26 14:31:27 +00:00
Dan Rubel c624f8b0a9 First cut dartfix protocol
and address comments in https://dart-review.googlesource.com/c/sdk/+/76320

Change-Id: I5c7ab40810d4116b1d36de90b7234d0a932bae82
Reviewed-on: https://dart-review.googlesource.com/76400
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2018-09-25 16:56:48 +00:00
Brian Wilkerson a6b1a99f4c Make mixins abstract by default
Change-Id: I8ca672ac9d6acbb29ccea1bd41a617e0a870c74a
Reviewed-on: https://dart-review.googlesource.com/76303
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
2018-09-25 15:45:07 +00:00
Konstantin Shcheglov 699282b5d3 Rename State class when StatefulWidget is renamed.
R=brianwilkerson@google.com

Bug: https://github.com/flutter/flutter-intellij/issues/2545
Change-Id: I247db781e3b44910c823bb66d5f8773dc0d415cc
Reviewed-on: https://dart-review.googlesource.com/76080
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-09-24 15:02:52 +00:00
Konstantin Shcheglov 2d53894e3f Check that selection offset/length is valid in Extract Local refactoring.
R=brianwilkerson@google.com

Bug: https://github.com/dart-lang/sdk/issues/34475
Change-Id: Id2b44494a8464000180a8ca93cfcc770b256f59f
Reviewed-on: https://dart-review.googlesource.com/76063
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
2018-09-24 14:55:33 +00:00
Jaime Wren 0b5a7c847d Add support for intermittent filesystems to the analysis server, this PR is a synced version of Devons PR https://dart-review.googlesource.com/c/sdk/+/72980, without the DAS protocol change.
Change-Id: I6ad1d423c2616ae31fc3f5954782d05e3d8adbda
Reviewed-on: https://dart-review.googlesource.com/73689
Commit-Queue: Jaime Wren <jwren@google.com>
Reviewed-by: Jaime Wren <jwren@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Devon Carew <devoncarew@google.com>
2018-09-20 22:54:59 +00:00