Skip to content

"Create missing overrides" generates invalid code on Windows #2766

Closed

Description

@Maverick-I0

I was creating a CustomShapeBorder by extending the ShapeBorder class, then when I used quickfix to create the 5 @overrides using the quickfix from VSCode. 3 of 5 overrides the getInnerPath, getOuterPath and paint had syntax errors in their parameters.

ezgif com-video-to-gif

the code is as follows with the errors:

class CustomCardShapeBorder extends ShapeBorder{
  @override
  // TODO: implement dimensions
  EdgeInsetsGeometry get dimensions => throw UnimplementedError();

  @override
 // error: parameter with ${3|
  Path getInnerPath(Rect rect${3|, {TextDirect,TextDirection,Object|}ion textDirection}) {
      // TODO: implement getInnerPath
      throw UnimplementedError();
    }
  
    @override
// error: parameter with closing }  in the end of text direction
    Path getOuterPath(Rect rectrection textDirection}) {
      // TODO: implement getOuterPath
      throw UnimplementedError();
    }
  
    @override
// error: parameter with speling errors and closing }  in the end of text direction
    void paint(Canvas canvas, Rect rectxtDirection textDirection}) {
      // TODO: implement paint
    }
  
    @override
    ShapeBorder scale(double t) {
    // TODO: implement scale
    throw UnimplementedError();
  }
 
}

Activity

  1. DanTup commented on Sep 3, 2020

    @DanTup
    Member

    Can you confirm which version of the Flutter SDK you're using? And also whether you have the LSP Preview enabled (the dart.previewLsp setting)? I'm unable to repro this on a recent build (with or without LSP) though I think it might be this that was recently fixed (and might not be in your version yet):

    dart-lang/sdk#41147

  2. added
    awaiting infoRequires more information from the customer to progress
    on Sep 3, 2020
  3. Maverick-I0 commented on Sep 3, 2020

    @Maverick-I0
    Author

    Flutter SDK version 1.20.2 and the LSP preview is not enabled.

     flutter doctor -v
    [√] Flutter (Channel stable, 1.20.2, on Microsoft Windows [Version 10.0.19041.450], locale en-IN)
        • Flutter version 1.20.2 at C:\code\flutter\flutter
        • Framework revision bbfbf1770c (3 weeks ago), 2020-08-13 08:33:09 -0700
        • Engine revision 9d5b21729f
        • Dart version 2.9.1
    
    
    [√] VS Code (version 1.48.2)
        • VS Code at C:\Users\wr\AppData\Local\Programs\Microsoft VS Code
        • Flutter extension version 3.13.2
    
  4. DanTup commented on Sep 7, 2020

    @DanTup
    Member

    I tried with the same Flutter version, but it still didn't happen:

    Screenshot 2020-09-07 at 14 29 10

    The weird thing about the ${3| appearing in the text is that we use VS Code's SnippetString to build edits, so it doesn't seem like we should be able to produce this text.

    Can you try disabling any other extensions (leaving just Dart + Flutter) to see if this makes a difference? If not, I'll make a custom build that has more logging in it, so we can try to understand what's happening. Thanks!

  5. Maverick-I0 commented on Sep 7, 2020

    @Maverick-I0
    Author

    Okk, I will do as told and then report back

  6. Maverick-I0 commented on Sep 8, 2020

    @Maverick-I0
    Author

    @DanTup disabled all other extensions leaving Flutter and Dart but the problem still persists.

    If any other extension is causing the problem then should I send all the extension that I have Installed so that you can replicate my environment and then you could run logging.

  7. DanTup commented on Sep 8, 2020

    @DanTup
    Member

    If it happens with other extensions disabled, it seems unlikely they're causing it. I'll make a build with some additional logging and provide instructions on how to install it shortly, then if you can reproduce with that build, it might be clearer from the logs what's going wrong. Thanks!

  8. DanTup commented on Sep 8, 2020

    @DanTup
    Member

    Ok, please try this:

    • Go to https://github.com/Dart-Code/Dart-Code/releases/tag/v3.15.0-dev.1
    • Download the vsix file from that release to your computer
    • Run the Extensions: Install from VSIX command in the VS Code command palette
    • Select the vsix file you downloaded
    • When prompted, click the Reload button to finish installing the extension
    • Open a simple Flutter project (eg. the sample counter app) and create (and save) a new Dart file for testing, containing just
      class CustomCardShapeBorder extends ShapeBorder{}
    • Wait for a minute or so, for all initial analysis to complete
    • Run the Dart: Capture Logs command from the VS Code command palette (leave everything ticked and click OK)
    • Invoke the quick-fix to create the missing overrides
    • Click Cancel on the logging notification to stop logging and open the log file
    • Attach the log here

    Hopefully the log will help understand where things are becoming messed up.

  9. Maverick-I0 commented on Sep 14, 2020

    @Maverick-I0
    Author

    The Log file is as follows: @DanTup

    !! PLEASE REVIEW THIS LOG FOR SENSITIVE INFORMATION BEFORE SHARING !!
    
    Dart Code extension: 3.15.0-dev.1
    Flutter extension: 3.14.1 (activated)
    
    App: Visual Studio Code
    Version: 1.49.0
    Platform: win
    
    Workspace type: Flutter
    Analyzer type: DAS
    Multi-root?: false
    
    Dart SDK:
        Loc: C:\code\flutter\flutter\bin\cache\dart-sdk
        Ver: 2.9.2
    Flutter SDK:
        Loc: C:\code\flutter\flutter
        Ver: 1.20.3
    
    HTTP_PROXY: undefined
    NO_PROXY: undefined
    
    Mon Sep 14 2020 [12:52:13 GMT+0530 (India Standard Time)] Log file started
    [12:52:19 pm] [Analyzer] [Info] ==> {"id":"327","method":"analysis.getHover","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":78},"clientRequestTime":1600068139595}
    [12:52:19 pm] [Analyzer] [Info] <== {"id":"327","result":{"hovers":[{"offset":75,"length":11,"containingLibraryPath":"C:\\code\\flutter\\flutter\\packages\\flutter\\lib\\src\\painting\\borders.dart","containingLibraryName":"package:flutter/src/painting/borders.dart","containingClassDescription":"ShapeBorder","dartdoc":"Base class for shape outlines.\n\nThis class handles how to add multiple borders together. Subclasses define\nvarious shapes, like circles ([CircleBorder]), rounded rectangles\n([RoundedRectangleBorder]), continuous rectangles\n([ContinuousRectangleBorder]), or beveled rectangles\n([BeveledRectangleBorder]).\n\nSee also:\n\n * [ShapeDecoration], which can be used with [DecoratedBox] to show a shape.\n * [Material] (and many other widgets in the Material library), which takes\n   a [ShapeBorder] to define its shape.\n * [NotchedShape], which describes a shape with a hole in it.","elementDescription":"abstract class ShapeBorder","elementKind":"class","isDeprecated":false}]}}
    [12:52:20 pm] [Analyzer] [Info] ==> {"id":"328","method":"analysis.getHover","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":65},"clientRequestTime":1600068140199}
    [12:52:20 pm] [Analyzer] [Info] <== {"id":"328","result":{"hovers":[{"offset":49,"length":17,"containingLibraryPath":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","containingLibraryName":"package:vs_code_issue/shapeBorderTest.dart","containingClassDescription":"CustomShapeBorder","elementDescription":"class CustomShapeBorder extends ShapeBorder","elementKind":"class","isDeprecated":false}]}}
    [12:52:20 pm] [Analyzer] [Info] ==> {"id":"329","method":"analysis.getHover","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":63},"clientRequestTime":1600068140580}
    [12:52:20 pm] [Analyzer] [Info] <== {"id":"329","result":{"hovers":[{"offset":49,"length":17,"containingLibraryPath":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","containingLibraryName":"package:vs_code_issue/shapeBorderTest.dart","containingClassDescription":"CustomShapeBorder","elementDescription":"class CustomShapeBorder extends ShapeBorder","elementKind":"class","isDeprecated":false}]}}
    [12:52:20 pm] [Analyzer] [Info] ==> {"id":"330","method":"edit.getFixes","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":63},"clientRequestTime":1600068140837}
    [12:52:20 pm] [Analyzer] [Info] ==> {"id":"331","method":"edit.getAssists","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","length":0,"offset":63},"clientRequestTime":1600068140837}
    [12:52:20 pm] [Analyzer] [Info] ==> {"id":"332","method":"edit.getAvailableRefactorings","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","length":0,"offset":63},"clientRequestTime":1600068140838}
    [12:52:20 pm] [Analyzer] [Info] <== {"id":"330","result":{"fixes":[{"error":{"severity":"ERROR","type":"STATIC_WARNING","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"message":"Missing concrete implementations of 'ShapeBorder.getInnerPath', 'ShapeBorder.getOuterPath', 'ShapeBorder.paint', 'ShapeBorder.scale', and 1 more.","correction":"Try implementing the missing methods, or make the class abstract.","code":"non_abstract_class_inherits_abstract_member","url":"https://dart.dev/tools/diagnostic-messages#non_abstract_class_inherits_abstract_member","hasFix":true},"fixes":[{"message":"Create 5 missing override(s)","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":87,"length":0,"replacement":"\r\n  @override\n  // TODO: implement dimensions\n  EdgeInsetsGeometry get dimensions => throw UnimplementedError();\r\n\r\n  @override\n  Path getInnerPath(Rect rect, {TextDirection textDirection}) {\n    // TODO: implement getInnerPath\n    throw UnimplementedError();\n  }\r\n\r\n  @override\n  Path getOuterPath(Rect rect, {TextDirection textDirection}) {\n    // TODO: implement getOuterPath\n    throw UnimplementedError();\n  }\r\n\r\n  @override\n  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {\n    // TODO: implement paint\n  }\r\n\r\n  @override\n  ShapeBorder scale(double t) {\n    // TODO: implement scale\n    throw UnimplementedError();\n  }"}]}],"linkedEditGroups":[{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":235}],"length":4,"suggestions":[{"value":"Rect","kind":"TYPE"},{"value":"Object","kind":"TYPE"}]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":240}],"length":4,"suggestions":[]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTes…
    [12:52:20 pm] [Analyzer] [Info] <== {"id":"332","result":{"kinds":["RENAME"]}}
    [12:52:20 pm] [Analyzer] [Info] <== {"id":"331","result":{"assists":[{"message":"Convert class to a mixin","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":43,"length":43,"replacement":"mixin CustomShapeBorder implements ShapeBorder "}]}],"linkedEditGroups":[],"id":"dart.assist.convert.classToMixin"}]}}
    [12:52:21 pm] [Analyzer] [Info] ==> {"id":"333","method":"analysis.getHover","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":59},"clientRequestTime":1600068141461}
    [12:52:21 pm] [Analyzer] [Info] <== {"id":"333","result":{"hovers":[{"offset":49,"length":17,"containingLibraryPath":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","containingLibraryName":"package:vs_code_issue/shapeBorderTest.dart","containingClassDescription":"CustomShapeBorder","elementDescription":"class CustomShapeBorder extends ShapeBorder","elementKind":"class","isDeprecated":false}]}}
    [12:52:21 pm] [Analyzer] [Info] ==> {"id":"334","method":"edit.getFixes","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49},"clientRequestTime":1600068141644}
    [12:52:21 pm] [Analyzer] [Info] <== {"id":"334","result":{"fixes":[{"error":{"severity":"ERROR","type":"STATIC_WARNING","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"message":"Missing concrete implementations of 'ShapeBorder.getInnerPath', 'ShapeBorder.getOuterPath', 'ShapeBorder.paint', 'ShapeBorder.scale', and 1 more.","correction":"Try implementing the missing methods, or make the class abstract.","code":"non_abstract_class_inherits_abstract_member","url":"https://dart.dev/tools/diagnostic-messages#non_abstract_class_inherits_abstract_member","hasFix":true},"fixes":[{"message":"Create 5 missing override(s)","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":87,"length":0,"replacement":"\r\n  @override\n  // TODO: implement dimensions\n  EdgeInsetsGeometry get dimensions => throw UnimplementedError();\r\n\r\n  @override\n  Path getInnerPath(Rect rect, {TextDirection textDirection}) {\n    // TODO: implement getInnerPath\n    throw UnimplementedError();\n  }\r\n\r\n  @override\n  Path getOuterPath(Rect rect, {TextDirection textDirection}) {\n    // TODO: implement getOuterPath\n    throw UnimplementedError();\n  }\r\n\r\n  @override\n  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {\n    // TODO: implement paint\n  }\r\n\r\n  @override\n  ShapeBorder scale(double t) {\n    // TODO: implement scale\n    throw UnimplementedError();\n  }"}]}],"linkedEditGroups":[{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":235}],"length":4,"suggestions":[{"value":"Rect","kind":"TYPE"},{"value":"Object","kind":"TYPE"}]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":240}],"length":4,"suggestions":[]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTes…
    [12:52:25 pm] [General] [Info] Applying edits with sbippets for file:///d%3A/work_src/vscode%20github%20issue/vs_code_issue/lib/shapeBorderTest.dart
    [12:52:25 pm] [General] [Info] {"message":"Create 5 missing override(s)","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":87,"length":0,"replacement":"\r\n  @override\n  // TODO: implement dimensions\n  EdgeInsetsGeometry get dimensions => throw UnimplementedError();\r\n\r\n  @override\n  Path getInnerPath(Rect rect, {TextDirection textDirection}) {\n    // TODO: implement getInnerPath\n    throw UnimplementedError();\n  }\r\n\r\n  @override\n  Path getOuterPath(Rect rect, {TextDirection textDirection}) {\n    // TODO: implement getOuterPath\n    throw UnimplementedError();\n  }\r\n\r\n  @override\n  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {\n    // TODO: implement paint\n  }\r\n\r\n  @override\n  ShapeBorder scale(double t) {\n    // TODO: implement scale\n    throw UnimplementedError();\n  }"}]}],"linkedEditGroups":[{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":235}],"length":4,"suggestions":[{"value":"Rect","kind":"TYPE"},{"value":"Object","kind":"TYPE"}]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":240}],"length":4,"suggestions":[]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":247}],"length":13,"suggestions":[{"value":"TextDirection","kind":"TYPE"},{"value":"Object","kind":"TYPE"}]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":386}],"length":4,"suggestions":[{"value":"Rect","kind":"TYPE"},{"value":"Object","kind":"TYPE"}]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":391}],"length":4,"suggestions":[]},{"positions":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":398}],"length":13,"suggestions":[{"value":"TextDirection","kind":"…
    [12:52:25 pm] [Analyzer] [Info] ==> {"id":"335","method":"analysis.updateContent","params":{"files":{"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart":{"edits":[{"id":"","length":0,"offset":87,"replacement":"\r\n  @override\r\n  // TODO: implement dimensions\r\n  EdgeInsetsGeometry get dimensions => throw UnimplementedError();\r\n\r\n  @override\r\n  Path getInnerPath(Rect rect, {TextDirection textDirection}) {\r\n    // TODO: implement getInnerPath\r\n    throw UnimplementedError();\r\n  }\r\n\r\n  @override\r\n  Path getOuterPath(Rect rect, {TextDirection textDirection}) {\r\n    // TODO: implement getOuterPath\r\n    throw UnimplementedError();\r\n  }\r\n\r\n  @override\r\n  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {\r\n    // TODO: implement paint\r\n  }\r\n\r\n  @override\r\n  ShapeBorder scale(double t) {\r\n    // TODO: implement scale\r\n    throw UnimplementedError();\r\n  }"}],"type":"change"}}},"clientRequestTime":1600068145089}
    [12:52:25 pm] [Analyzer] [Info] <== {"id":"335","result":{}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"server.status","params":{"analysis":{"isAnalyzing":true}}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.errors","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","errors":[{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":608,"length":21,"startLine":22,"startColumn":8},"message":"TODO: implement paint","code":"todo","hasFix":false},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":445,"length":28,"startLine":16,"startColumn":8},"message":"TODO: implement getOuterPath","code":"todo","hasFix":false},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":290,"length":28,"startLine":10,"startColumn":8},"message":"TODO: implement getInnerPath","code":"todo","hasFix":false},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":107,"length":26,"startLine":5,"startColumn":6},"message":"TODO: implement dimensions","code":"todo","hasFix":false},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":691,"length":21,"startLine":27,"startColumn":8},"message":"TODO: implement scale","code":"todo","hasFix":false}]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.occurrences","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","occurrences":[{"element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"offsets":[49],"length":17},{"element":{"kind":"CLASS","name":"ShapeBorder","location":{"file":"C:\\code\\flutter\\flutter\\packages\\flutter\\lib\\src\\painting\\borders.dart","offset":9668,"length":11,"startLine":290,"startColumn":16},"flags":1},"offsets":[75,653],"length":11},{"element":{"kind":"TOP_LEVEL_VARIABLE","name":"override","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\core\\annotations.dart","offset":4627,"length":8,"startLine":114,"startColumn":14},"flags":10,"returnType":"Object"},"offsets":[92,208,363,518,641],"length":8},{"element":{"kind":"CLASS","name":"EdgeInsetsGeometry","location":{"file":"C:\\code\\flutter\\flutter\\packages\\flutter\\lib\\src\\painting\\edge_insets.dart","offset":866,"length":18,"startLine":27,"startColumn":16},"flags":1},"offsets":[137],"length":18},{"element":{"kind":"FIELD","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":-1,"length":10,"startLine":1,"startColumn":0},"flags":4,"returnType":"EdgeInsetsGeometry"},"offsets":[160],"length":10},{"element":{"kind":"CLASS","name":"UnimplementedError","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\core\\errors.dart","offset":18272,"length":18,"startLine":548,"startColumn":7},"flags":0},"offsets":[180,330,485,724],"length":18},{"element":{"kind":"CLASS","name":"Path","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\ui\\painting.dart","offset":75851,"length":4,"startLine":1938,"startColumn":7},"flags":0},"offsets":[220,375],"length":4},{"element":{"…
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.closingLabels","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","labels":[]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.folding","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","regions":[{"kind":"CLASS_BODY","offset":87,"length":669},{"kind":"FUNCTION_BODY","offset":281,"length":74},{"kind":"FUNCTION_BODY","offset":436,"length":74},{"kind":"FUNCTION_BODY","offset":599,"length":34},{"kind":"FUNCTION_BODY","offset":682,"length":67}]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.outline","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","kind":"LIBRARY","outline":{"element":{"kind":"COMPILATION_UNIT","name":"<unit>","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":0,"length":757,"startLine":1,"startColumn":1},"flags":0},"offset":0,"length":757,"codeOffset":0,"codeLength":757,"children":[{"element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"offset":43,"length":714,"codeOffset":43,"codeLength":714,"children":[{"element":{"kind":"GETTER","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":160,"length":10,"startLine":6,"startColumn":26},"flags":0,"returnType":"EdgeInsetsGeometry"},"offset":91,"length":110,"codeOffset":137,"codeLength":64},{"element":{"kind":"METHOD","name":"getInnerPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":225,"length":12,"startLine":9,"startColumn":8},"flags":0,"parameters":"(Rect rect, {TextDirection textDirection})","returnType":"Path"},"offset":207,"length":149,"codeOffset":220,"codeLength":136},{"element":{"kind":"METHOD","name":"getOuterPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":380,"length":12,"startLine":15,"startColumn":8},"flags":0,"parameters":"(Rect rect, {TextDirection textDirection})","returnType":"Path"},"offset":362,"length":149,"codeOffset":375,"codeLength":136},{"element":{"kind":"METHOD","name":"paint","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":535,"length":5,"startLine":21,"startColumn":8},"flags":0,"parameters":"(Canvas canvas, Rect rect, {TextDirection…
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"flutter.outline","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","outline":{"kind":"DART_ELEMENT","offset":0,"length":757,"codeOffset":0,"codeLength":757,"dartElement":{"kind":"COMPILATION_UNIT","name":"<unit>","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":0,"length":757,"startLine":1,"startColumn":1},"flags":0},"children":[{"kind":"DART_ELEMENT","offset":43,"length":714,"codeOffset":43,"codeLength":714,"dartElement":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"children":[{"kind":"DART_ELEMENT","offset":91,"length":110,"codeOffset":137,"codeLength":64,"dartElement":{"kind":"GETTER","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":160,"length":10,"startLine":6,"startColumn":26},"flags":0,"returnType":"EdgeInsetsGeometry"}},{"kind":"DART_ELEMENT","offset":207,"length":149,"codeOffset":220,"codeLength":136,"dartElement":{"kind":"METHOD","name":"getInnerPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":225,"length":12,"startLine":9,"startColumn":8},"flags":0,"parameters":"(Rect rect, {TextDirection textDirection})","returnType":"Path"}},{"kind":"DART_ELEMENT","offset":362,"length":149,"codeOffset":375,"codeLength":136,"dartElement":{"kind":"METHOD","name":"getOuterPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":380,"length":12,"startLine":15,"startColumn":8},"flags":0,"parameters":"(Rect rect, {TextDirection textDirection})","returnType":"Path"}},{"kind":"DART_ELEMENT","offset":517,"length":117,"codeOffset":530,"codeLength":104,"dartElement":{"kind":"METHOD","name":"paint","location":{"file":"…
    [12:52:25 pm] [General] [Info] "import 'package:flutter/material.dart';\r\n\r\nclass CustomShapeBorder extends ShapeBorder{\r\n  @override\r\n  // TODO: implement dimensions\r\n  EdgeInsetsGeometry get dimensions => throw UnimplementedError();\r\n\r\n  @override\r\n  Path getInnerPath(Rect rect, {TextDirection textDirection}) {\r\n    // TODO: implement getInnerPath\r\n    throw UnimplementedError();\r\n  }\r\n\r\n  @override\r\n  Path getOuterPath(Rect rect, {TextDirection textDirection}) {\r\n    // TODO: implement getOuterPath\r\n    throw UnimplementedError();\r\n  }\r\n\r\n  @override\r\n  void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {\r\n    // TODO: implement paint\r\n  }\r\n\r\n  @override\r\n  ShapeBorder scale(double t) {\r\n    // TODO: implement scale\r\n    throw UnimplementedError();\r\n  }\r\n  \r\n}"
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is th(R
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is ct r
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is , {TextDirect
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is erPa
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is h(Re
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is rect, {TextDi
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is void p
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is int(Ca
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is as c
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is nvas
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is ect rect, {Te
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is eBorde
    [12:52:25 pm] [General] [Info] Default value for linkedEditGroup is
    [12:52:25 pm] [General] [Info] Will replace whole document! Got 13 placeholders
    [12:52:25 pm] [General] [Info] Appending th(R,Rect,Object choices with number 1
    [12:52:25 pm] [General] [Info] Appending 1 of characters from original document
    [12:52:25 pm] [General] [Info] Appending placeholder ct r with number 2
    [12:52:25 pm] [General] [Info] Appending 3 of characters from original document
    [12:52:25 pm] [General] [Info] Appending , {TextDirect,TextDirection,Object choices with number 3
    [12:52:25 pm] [General] [Info] Appending 126 of characters from original document
    [12:52:25 pm] [General] [Info] Appending erPa,Rect,Object choices with number 4
    [12:52:25 pm] [General] [Info] Appending 1 of characters from original document
    [12:52:25 pm] [General] [Info] Appending placeholder h(Re with number 5
    [12:52:25 pm] [General] [Info] Appending 3 of characters from original document
    [12:52:25 pm] [General] [Info] Appending rect, {TextDi,TextDirection,Object choices with number 6
    [12:52:25 pm] [General] [Info] Appending 119 of characters from original document
    [12:52:25 pm] [General] [Info] Appending void p,Canvas,Object choices with number 7
    [12:52:25 pm] [General] [Info] Appending 1 of characters from original document
    [12:52:25 pm] [General] [Info] Appending placeholder int(Ca with number 8
    [12:52:25 pm] [General] [Info] Appending 2 of characters from original document
    [12:52:25 pm] [General] [Info] Appending as c,Rect,Object choices with number 9
    [12:52:25 pm] [General] [Info] Appending 1 of characters from original document
    [12:52:25 pm] [General] [Info] Appending placeholder nvas with number 10
    [12:52:25 pm] [General] [Info] Appending 3 of characters from original document
    [12:52:25 pm] [General] [Info] Appending ect rect, {Te,TextDirection,Object choices with number 11
    [12:52:25 pm] [General] [Info] Appending 87 of characters from original document
    [12:52:25 pm] [General] [Info] Appending eBorde,double,num,Object,Comparable<num> choices with number 12
    [12:52:25 pm] [General] [Info] Appending 1 of characters from original document
    [12:52:25 pm] [General] [Info] Appending placeholder   with number 13
    [12:52:25 pm] [General] [Info] Calling insertSnippet with:
    ${1|th(R,Rect,Object|}e${2:ct r}ect${3|, {TextDirect,TextDirection,Object|}ion textDirection\}) {
        // TODO: implement getInnerPath
        throw UnimplementedError();
      \}
    
      @override
      Path getOut${4|erPa,Rect,Object|}t${5:h(Re}ct ${6|rect, {TextDi,TextDirection,Object|}rection textDirection\}) {
        // TODO: implement getOuterPath
        throw UnimplementedError();
      \}
    
      @override
      ${7|void p,Canvas,Object|}a${8:int(Ca}nv${9|as c,Rect,Object|}a${10:nvas}, R${11|ect rect, {Te,TextDirection,Object|}xtDirection textDirection\}) {
        // TODO: implement paint
      \}
    
      @override
      Shap${12|eBorde,double,num,Object,Comparable<num>|}r${13: }
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"completion.availableSuggestions","params":{"changedLibraries":[{"id":977,"uri":"package:vs_code_issue/shapeBorderTest.dart","items":[{"label":"CustomShapeBorder","declaringLibraryUri":"package:vs_code_issue/shapeBorderTest.dart","element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":0,"startLine":3,"startColumn":7},"flags":0},"relevanceTags":["package:vs_code_issue/shapeBorderTest.dart::CustomShapeBorder","CustomShapeBorder"]},{"label":"CustomShapeBorder","declaringLibraryUri":"package:vs_code_issue/shapeBorderTest.dart","element":{"kind":"CONSTRUCTOR","name":"","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":-1,"length":0,"startLine":0,"startColumn":0},"flags":0,"parameters":"()","returnType":"CustomShapeBorder"},"parameterNames":[],"parameterTypes":[],"relevanceTags":["package:vs_code_issue/shapeBorderTest.dart::CustomShapeBorder",""],"requiredParameterCount":0}]}],"removedLibraries":[]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"server.status","params":{"analysis":{"isAnalyzing":false}}}
    [12:52:25 pm] [Analyzer] [Info] ==> {"id":"336","method":"analysis.updateContent","params":{"files":{"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart":{"edits":[{"id":"","length":430,"offset":235,"replacement":"th(Rect rect${3|, {TextDirect,TextDirection,Object|}ion textDirection}) {\r\n      // TODO: implement getInnerPath\r\n      throw UnimplementedError();\r\n    }\r\n  \r\n    @override\r\n    Path getOuterPath(Rect rectrection textDirection}) {\r\n      // TODO: implement getOuterPath\r\n      throw UnimplementedError();\r\n    }\r\n  \r\n    @override\r\n    void paint(Canvas canvas, Rect rectxtDirection textDirection}) {\r\n      // TODO: implement paint\r\n    }\r\n  \r\n    @override\r\n    ShapeBorder "}],"type":"change"}}},"clientRequestTime":1600068145202}
    [12:52:25 pm] [Analyzer] [Info] <== {"id":"336","result":{}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"server.status","params":{"analysis":{"isAnalyzing":true}}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.errors","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","errors":[{"severity":"ERROR","type":"STATIC_WARNING","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"message":"Missing concrete implementations of 'ShapeBorder.paint' and 'ShapeBorder.scale'.","correction":"Try implementing the missing methods, or make the class abstract.","code":"non_abstract_class_inherits_abstract_member","url":"https://dart.dev/tools/diagnostic-messages#non_abstract_class_inherits_abstract_member","hasFix":true},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":319,"length":28,"startLine":10,"startColumn":10},"message":"TODO: implement getInnerPath","code":"todo","hasFix":false},{"severity":"ERROR","type":"SYNTACTIC_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":465,"length":1,"startLine":15,"startColumn":56},"message":"Expected a method, getter, setter or operator declaration.","correction":"This appears to be incomplete code. Try removing it or completing it.","code":"expected_executable","hasFix":false},{"severity":"ERROR","type":"SYNTACTIC_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":248,"length":1,"startLine":9,"startColumn":31},"message":"Expected to find ')'.","code":"expected_token","hasFix":true},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":647,"length":21,"startLine":22,"startColumn":10},"message":"TODO: implement paint","code":"todo","hasFix":false},{"severity":"ERROR","type":"SYNTACTIC_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset…
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.occurrences","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","occurrences":[{"element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"offsets":[49],"length":17},{"element":{"kind":"CLASS","name":"ShapeBorder","location":{"file":"C:\\code\\flutter\\flutter\\packages\\flutter\\lib\\src\\painting\\borders.dart","offset":9668,"length":11,"startLine":290,"startColumn":16},"flags":1},"offsets":[75,700],"length":11},{"element":{"kind":"TOP_LEVEL_VARIABLE","name":"override","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\core\\annotations.dart","offset":4627,"length":8,"startLine":114,"startColumn":14},"flags":10,"returnType":"Object"},"offsets":[92,208,400,558,686],"length":8},{"element":{"kind":"CLASS","name":"EdgeInsetsGeometry","location":{"file":"C:\\code\\flutter\\flutter\\packages\\flutter\\lib\\src\\painting\\edge_insets.dart","offset":866,"length":18,"startLine":27,"startColumn":16},"flags":1},"offsets":[137],"length":18},{"element":{"kind":"FIELD","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":-1,"length":10,"startLine":1,"startColumn":0},"flags":4,"returnType":"EdgeInsetsGeometry"},"offsets":[160],"length":10},{"element":{"kind":"CLASS","name":"UnimplementedError","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\core\\errors.dart","offset":18272,"length":18,"startLine":548,"startColumn":7},"flags":0},"offsets":[180,361,771],"length":18},{"element":{"kind":"CLASS","name":"Path","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\ui\\painting.dart","offset":75851,"length":4,"startLine":1938,"startColumn":7},"flags":0},"offsets":[220,414],"length":4},{"element":{"kind…
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.closingLabels","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","labels":[]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.folding","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","regions":[{"kind":"CLASS_BODY","offset":87,"length":375},{"kind":"FUNCTION_BODY","offset":308,"length":80},{"kind":"FUNCTION_BODY","offset":636,"length":38},{"kind":"FUNCTION_BODY","offset":729,"length":67}]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"analysis.outline","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","kind":"LIBRARY","outline":{"element":{"kind":"COMPILATION_UNIT","name":"<unit>","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":0,"length":804,"startLine":1,"startColumn":1},"flags":0},"offset":0,"length":804,"codeOffset":0,"codeLength":804,"children":[{"element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"offset":43,"length":420,"codeOffset":43,"codeLength":420,"children":[{"element":{"kind":"GETTER","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":160,"length":10,"startLine":6,"startColumn":26},"flags":0,"returnType":"EdgeInsetsGeometry"},"offset":91,"length":110,"codeOffset":137,"codeLength":64},{"element":{"kind":"METHOD","name":"getInnerPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":225,"length":12,"startLine":9,"startColumn":8},"flags":0,"parameters":"(Rect rect$)","returnType":"Path"},"offset":207,"length":182,"codeOffset":220,"codeLength":169},{"element":{"kind":"METHOD","name":"getOuterPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":419,"length":12,"startLine":15,"startColumn":10},"flags":0,"parameters":"(Rect rectrection)","returnType":"Path"},"offset":399,"length":50,"codeOffset":414,"codeLength":35},{"element":{"kind":"FIELD","name":"textDirection","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":449,"length":13,"startLine":15,"startColumn":40},"flags":0,"returnType":""},"offset":449,"length":13,"codeOffset":449,"codeLength":13}]},{"element":{"kind":"FUN…
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"flutter.outline","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","outline":{"kind":"DART_ELEMENT","offset":0,"length":804,"codeOffset":0,"codeLength":804,"dartElement":{"kind":"COMPILATION_UNIT","name":"<unit>","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":0,"length":804,"startLine":1,"startColumn":1},"flags":0},"children":[{"kind":"DART_ELEMENT","offset":43,"length":420,"codeOffset":43,"codeLength":420,"dartElement":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"children":[{"kind":"DART_ELEMENT","offset":91,"length":110,"codeOffset":137,"codeLength":64,"dartElement":{"kind":"GETTER","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":160,"length":10,"startLine":6,"startColumn":26},"flags":0,"returnType":"EdgeInsetsGeometry"}},{"kind":"DART_ELEMENT","offset":207,"length":182,"codeOffset":220,"codeLength":169,"dartElement":{"kind":"METHOD","name":"getInnerPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":225,"length":12,"startLine":9,"startColumn":8},"flags":0,"parameters":"(Rect rect$)","returnType":"Path"}},{"kind":"DART_ELEMENT","offset":399,"length":50,"codeOffset":414,"codeLength":35,"dartElement":{"kind":"METHOD","name":"getOuterPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":419,"length":12,"startLine":15,"startColumn":10},"flags":0,"parameters":"(Rect rectrection)","returnType":"Path"}},{"kind":"DART_ELEMENT","offset":449,"length":13,"codeOffset":449,"codeLength":13,"dartElement":{"kind":"FIELD","name":"textDirection","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\…
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"completion.availableSuggestions","params":{"changedLibraries":[{"id":977,"uri":"package:vs_code_issue/shapeBorderTest.dart","items":[{"label":"paint","declaringLibraryUri":"package:vs_code_issue/shapeBorderTest.dart","element":{"kind":"FUNCTION","name":"paint","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":577,"length":0,"startLine":21,"startColumn":10},"flags":0,"parameters":"(Canvas canvas, Rect rectxtDirection)","returnType":"void"},"defaultArgumentListString":"canvas, rectxtDirection","defaultArgumentListTextRanges":[0,6,8,15],"parameterNames":["canvas","rectxtDirection"],"parameterTypes":["Canvas","Rect"],"requiredParameterCount":2},{"label":"scale","declaringLibraryUri":"package:vs_code_issue/shapeBorderTest.dart","element":{"kind":"FUNCTION","name":"scale","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":712,"length":0,"startLine":26,"startColumn":17},"flags":0,"parameters":"(double t)","returnType":"ShapeBorder"},"defaultArgumentListString":"t","defaultArgumentListTextRanges":[0,1],"parameterNames":["t"],"parameterTypes":["double"],"requiredParameterCount":1},{"label":"CustomShapeBorder","declaringLibraryUri":"package:vs_code_issue/shapeBorderTest.dart","element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":0,"startLine":3,"startColumn":7},"flags":0},"relevanceTags":["package:vs_code_issue/shapeBorderTest.dart::CustomShapeBorder","CustomShapeBorder"]},{"label":"CustomShapeBorder","declaringLibraryUri":"package:vs_code_issue/shapeBorderTest.dart","element":{"kind":"CONSTRUCTOR","name":"","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":-1,"length":0,"startLine":0,"startColumn":0},"flags":0,"parameters":"()","returnType":"CustomShapeBorder"},"parameterNames":[],"…
    [12:52:25 pm] [Analyzer] [Info] <== {"event":"server.status","params":{"analysis":{"isAnalyzing":false}}}
    [12:52:25 pm] [Analyzer] [Info] ==> {"id":"337","method":"edit.getFixes","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":235},"clientRequestTime":1600068145321}
    [12:52:25 pm] [Analyzer] [Info] ==> {"id":"338","method":"edit.getAssists","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","length":0,"offset":235},"clientRequestTime":1600068145322}
    [12:52:25 pm] [Analyzer] [Info] ==> {"id":"339","method":"edit.getAvailableRefactorings","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","length":0,"offset":235},"clientRequestTime":1600068145322}
    [12:52:25 pm] [Analyzer] [Info] <== {"id":"337","result":{"fixes":[]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"id":"339","result":{"kinds":["RENAME"]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"id":"338","result":{"assists":[{"message":"Convert to async function body","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":307,"length":0,"replacement":"async "},{"offset":220,"length":4,"replacement":"Future<Path>"}]}],"linkedEditGroups":[],"id":"dart.assist.convert.bodyToAsync"},{"message":"Convert to expression body","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":307,"length":82,"replacement":"=> throw UnimplementedError();"}]}],"linkedEditGroups":[],"id":"dart.assist.convert.bodyToExpression"}]}}
    [12:52:25 pm] [Analyzer] [Info] ==> {"id":"340","method":"edit.getFixes","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":235},"clientRequestTime":1600068145584}
    [12:52:25 pm] [Analyzer] [Info] ==> {"id":"341","method":"edit.getAssists","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","length":0,"offset":235},"clientRequestTime":1600068145584}
    [12:52:25 pm] [Analyzer] [Info] ==> {"id":"342","method":"edit.getAvailableRefactorings","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","length":0,"offset":235},"clientRequestTime":1600068145585}
    [12:52:25 pm] [Analyzer] [Info] <== {"id":"340","result":{"fixes":[]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"id":"342","result":{"kinds":["RENAME"]}}
    [12:52:25 pm] [Analyzer] [Info] <== {"id":"341","result":{"assists":[{"message":"Convert to async function body","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":307,"length":0,"replacement":"async "},{"offset":220,"length":4,"replacement":"Future<Path>"}]}],"linkedEditGroups":[],"id":"dart.assist.convert.bodyToAsync"},{"message":"Convert to expression body","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":307,"length":82,"replacement":"=> throw UnimplementedError();"}]}],"linkedEditGroups":[],"id":"dart.assist.convert.bodyToExpression"}]}}
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"server.status","params":{"analysis":{"isAnalyzing":true}}}
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"completion.availableSuggestions","params":{"changedLibraries":[{"id":978,"uri":"package:vs_code_issue/ShapeBorderTest.dart","items":[{"label":"paint","declaringLibraryUri":"package:vs_code_issue/ShapeBorderTest.dart","element":{"kind":"FUNCTION","name":"paint","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":577,"length":0,"startLine":21,"startColumn":10},"flags":0,"parameters":"(Canvas canvas, Rect rectxtDirection)","returnType":"void"},"defaultArgumentListString":"canvas, rectxtDirection","defaultArgumentListTextRanges":[0,6,8,15],"parameterNames":["canvas","rectxtDirection"],"parameterTypes":["Canvas","Rect"],"requiredParameterCount":2},{"label":"scale","declaringLibraryUri":"package:vs_code_issue/ShapeBorderTest.dart","element":{"kind":"FUNCTION","name":"scale","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":712,"length":0,"startLine":26,"startColumn":17},"flags":0,"parameters":"(double t)","returnType":"ShapeBorder"},"defaultArgumentListString":"t","defaultArgumentListTextRanges":[0,1],"parameterNames":["t"],"parameterTypes":["double"],"requiredParameterCount":1},{"label":"CustomShapeBorder","declaringLibraryUri":"package:vs_code_issue/ShapeBorderTest.dart","element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":49,"length":0,"startLine":3,"startColumn":7},"flags":0},"relevanceTags":["package:vs_code_issue/ShapeBorderTest.dart::CustomShapeBorder","CustomShapeBorder"]},{"label":"CustomShapeBorder","declaringLibraryUri":"package:vs_code_issue/ShapeBorderTest.dart","element":{"kind":"CONSTRUCTOR","name":"","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":4294967295,"length":0,"startLine":0,"startColumn":0},"flags":0,"parameters":"()","returnType":"CustomShapeBorder"},"parameterNam…
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"analysis.errors","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","errors":[{"severity":"ERROR","type":"STATIC_WARNING","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"message":"Missing concrete implementations of 'ShapeBorder.paint' and 'ShapeBorder.scale'.","correction":"Try implementing the missing methods, or make the class abstract.","code":"non_abstract_class_inherits_abstract_member","url":"https://dart.dev/tools/diagnostic-messages#non_abstract_class_inherits_abstract_member","hasFix":true},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":319,"length":28,"startLine":10,"startColumn":10},"message":"TODO: implement getInnerPath","code":"todo","hasFix":false},{"severity":"ERROR","type":"SYNTACTIC_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":465,"length":1,"startLine":15,"startColumn":56},"message":"Expected a method, getter, setter or operator declaration.","correction":"This appears to be incomplete code. Try removing it or completing it.","code":"expected_executable","hasFix":false},{"severity":"ERROR","type":"SYNTACTIC_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":248,"length":1,"startLine":9,"startColumn":31},"message":"Expected to find ')'.","code":"expected_token","hasFix":true},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":647,"length":21,"startLine":22,"startColumn":10},"message":"TODO: implement paint","code":"todo","hasFix":false},{"severity":"ERROR","type":"SYNTACTIC_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset…
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"analysis.occurrences","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","occurrences":[{"element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"offsets":[49],"length":17},{"element":{"kind":"CLASS","name":"ShapeBorder","location":{"file":"C:\\code\\flutter\\flutter\\packages\\flutter\\lib\\src\\painting\\borders.dart","offset":9668,"length":11,"startLine":290,"startColumn":16},"flags":1},"offsets":[75,700],"length":11},{"element":{"kind":"TOP_LEVEL_VARIABLE","name":"override","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\core\\annotations.dart","offset":4627,"length":8,"startLine":114,"startColumn":14},"flags":10,"returnType":"Object"},"offsets":[92,208,400,558,686],"length":8},{"element":{"kind":"CLASS","name":"EdgeInsetsGeometry","location":{"file":"C:\\code\\flutter\\flutter\\packages\\flutter\\lib\\src\\painting\\edge_insets.dart","offset":866,"length":18,"startLine":27,"startColumn":16},"flags":1},"offsets":[137],"length":18},{"element":{"kind":"FIELD","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":-1,"length":10,"startLine":1,"startColumn":0},"flags":4,"returnType":"EdgeInsetsGeometry"},"offsets":[160],"length":10},{"element":{"kind":"CLASS","name":"UnimplementedError","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\core\\errors.dart","offset":18272,"length":18,"startLine":548,"startColumn":7},"flags":0},"offsets":[180,361,771],"length":18},{"element":{"kind":"CLASS","name":"Path","location":{"file":"C:\\code\\flutter\\flutter\\bin\\cache\\pkg\\sky_engine\\lib\\ui\\painting.dart","offset":75851,"length":4,"startLine":1938,"startColumn":7},"flags":0},"offsets":[220,414],"length":4},{"element":{"kind…
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"analysis.closingLabels","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","labels":[]}}
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"analysis.folding","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","regions":[{"kind":"CLASS_BODY","offset":87,"length":375},{"kind":"FUNCTION_BODY","offset":308,"length":80},{"kind":"FUNCTION_BODY","offset":636,"length":38},{"kind":"FUNCTION_BODY","offset":729,"length":67}]}}
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"analysis.outline","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","kind":"LIBRARY","outline":{"element":{"kind":"COMPILATION_UNIT","name":"<unit>","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":0,"length":804,"startLine":1,"startColumn":1},"flags":0},"offset":0,"length":804,"codeOffset":0,"codeLength":804,"children":[{"element":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"offset":43,"length":420,"codeOffset":43,"codeLength":420,"children":[{"element":{"kind":"GETTER","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":160,"length":10,"startLine":6,"startColumn":26},"flags":0,"returnType":"EdgeInsetsGeometry"},"offset":91,"length":110,"codeOffset":137,"codeLength":64},{"element":{"kind":"METHOD","name":"getInnerPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":225,"length":12,"startLine":9,"startColumn":8},"flags":0,"parameters":"(Rect rect$)","returnType":"Path"},"offset":207,"length":182,"codeOffset":220,"codeLength":169},{"element":{"kind":"METHOD","name":"getOuterPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":419,"length":12,"startLine":15,"startColumn":10},"flags":0,"parameters":"(Rect rectrection)","returnType":"Path"},"offset":399,"length":50,"codeOffset":414,"codeLength":35},{"element":{"kind":"FIELD","name":"textDirection","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":449,"length":13,"startLine":15,"startColumn":40},"flags":0,"returnType":""},"offset":449,"length":13,"codeOffset":449,"codeLength":13}]},{"element":{"kind":"FUN…
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"flutter.outline","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","outline":{"kind":"DART_ELEMENT","offset":0,"length":804,"codeOffset":0,"codeLength":804,"dartElement":{"kind":"COMPILATION_UNIT","name":"<unit>","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":0,"length":804,"startLine":1,"startColumn":1},"flags":0},"children":[{"kind":"DART_ELEMENT","offset":43,"length":420,"codeOffset":43,"codeLength":420,"dartElement":{"kind":"CLASS","name":"CustomShapeBorder","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":49,"length":17,"startLine":3,"startColumn":7},"flags":0},"children":[{"kind":"DART_ELEMENT","offset":91,"length":110,"codeOffset":137,"codeLength":64,"dartElement":{"kind":"GETTER","name":"dimensions","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":160,"length":10,"startLine":6,"startColumn":26},"flags":0,"returnType":"EdgeInsetsGeometry"}},{"kind":"DART_ELEMENT","offset":207,"length":182,"codeOffset":220,"codeLength":169,"dartElement":{"kind":"METHOD","name":"getInnerPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":225,"length":12,"startLine":9,"startColumn":8},"flags":0,"parameters":"(Rect rect$)","returnType":"Path"}},{"kind":"DART_ELEMENT","offset":399,"length":50,"codeOffset":414,"codeLength":35,"dartElement":{"kind":"METHOD","name":"getOuterPath","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":419,"length":12,"startLine":15,"startColumn":10},"flags":0,"parameters":"(Rect rectrection)","returnType":"Path"}},{"kind":"DART_ELEMENT","offset":449,"length":13,"codeOffset":449,"codeLength":13,"dartElement":{"kind":"FIELD","name":"textDirection","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\…
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"analysis.errors","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","errors":[{"severity":"INFO","type":"HINT","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":419,"length":12,"startLine":15,"startColumn":10},"message":"This function has a return type of 'Path', but doesn't end with a return statement.","correction":"Try adding a return statement, or changing the return type to 'void'.","code":"missing_return","url":"https://dart.dev/tools/diagnostic-messages#missing_return","hasFix":false},{"severity":"ERROR","type":"SYNTACTIC_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":619,"length":13,"startLine":21,"startColumn":52},"message":"Expected to find ')'.","code":"expected_token","hasFix":true},{"severity":"ERROR","type":"COMPILE_TIME_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":419,"length":12,"startLine":15,"startColumn":10},"message":"'CustomShapeBorder.getOuterPath' ('Path Function(Rect)') isn't a valid override of 'ShapeBorder.getOuterPath' ('Path Function(Rect, {TextDirection textDirection})').","code":"invalid_override","url":"https://dart.dev/tools/diagnostic-messages#invalid_override","hasFix":false},{"severity":"ERROR","type":"SYNTACTIC_ERROR","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":803,"length":1,"startLine":31,"startColumn":1},"message":"Expected a method, getter, setter or operator declaration.","correction":"This appears to be incomplete code. Try removing it or completing it.","code":"expected_executable","hasFix":false},{"severity":"INFO","type":"TODO","location":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\ShapeBorderTest.dart","offset":477,"length":28,"startLine":16,"startColumn":10},"message":"TODO: implement getOuterPat…
    [12:52:26 pm] [Analyzer] [Info] <== {"event":"server.status","params":{"analysis":{"isAnalyzing":false}}}
    [12:52:26 pm] [Analyzer] [Info] ==> {"id":"343","method":"edit.getFixes","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","offset":235},"clientRequestTime":1600068146695}
    [12:52:26 pm] [Analyzer] [Info] ==> {"id":"344","method":"edit.getAssists","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","length":0,"offset":235},"clientRequestTime":1600068146696}
    [12:52:26 pm] [Analyzer] [Info] ==> {"id":"345","method":"edit.getAvailableRefactorings","params":{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","length":0,"offset":235},"clientRequestTime":1600068146696}
    [12:52:26 pm] [Analyzer] [Info] <== {"id":"343","result":{"fixes":[]}}
    [12:52:26 pm] [Analyzer] [Info] <== {"id":"345","result":{"kinds":["RENAME"]}}
    [12:52:26 pm] [Analyzer] [Info] <== {"id":"344","result":{"assists":[{"message":"Convert to async function body","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":307,"length":0,"replacement":"async "},{"offset":220,"length":4,"replacement":"Future<Path>"}]}],"linkedEditGroups":[],"id":"dart.assist.convert.bodyToAsync"},{"message":"Convert to expression body","edits":[{"file":"D:\\work_src\\vscode github issue\\vs_code_issue\\lib\\shapeBorderTest.dart","fileStamp":0,"edits":[{"offset":307,"length":82,"replacement":"=> throw UnimplementedError();"}]}],"linkedEditGroups":[],"id":"dart.assist.convert.bodyToExpression"}]}}
    Mon Sep 14 2020 [12:52:29 GMT+0530 (India Standard Time)] Log file ended
    
    
  10. DanTup commented on Sep 14, 2020

    @DanTup
    Member

    Thanks - I think I see what's going on. The edit we're appling has some \n's in it:

    "replacement":"\r\n  @override\n  // TODO: implement dimensions\n  EdgeInsetsGeometry
    

    However the edit being made by VS Code has these normalised to \r\n:

    "replacement":"\r\n  @override\r\n  // TODO: implement dimensions\r\n
    

    This means all of the offsets calculated for the snippets are now wrong. I'll see if I can repro on Windows and find a solution.

    In the meantime, if you're able to try enabling the dart.previewLsp setting (restart VS Code after changing the setting), that uses a different code path so it'd be interesting to know if the issue goes away (in the future, the LSP option will become the default).

    Thanks!

  11. added
    in editorRelates to code editing or language features
    and removed
    awaiting infoRequires more information from the customer to progress
    on Sep 14, 2020
  12. added this to the v3.15.0 milestone on Sep 14, 2020
  13. changed the title [-][ShapeBorder Class]-3of 5 Overrides created have errors when created using QuickFix of VsCode[/-] [+]"Create missing overrides" generates invalid code on Windows[/+] on Sep 14, 2020
  14. Maverick-I0 commented on Sep 14, 2020

    @Maverick-I0
    Author

    ohhh, I get it. I'll turn on the LSP and then report back

  15. Maverick-I0 commented on Sep 14, 2020

    @Maverick-I0
    Author

    @DanTup After turning on the previreLsp the problem doesn't appear. The problem did not appear even after rolling back to version 3.14.1 from 3.15.0-dev.1

    image

  16. Maverick-I0 commented on Sep 14, 2020

    @Maverick-I0
    Author

    So I guess the issue can be closed because according to you LSP option will become a default in future.

  17. DanTup commented on Sep 14, 2020

    @DanTup
    Member

    I'll have a look if there's an easy fix for non-LSP, since it'll still be around for at least a few months (how fast it rolls out depends on how quickly we find/fix any remaining issues).

    I'd recommend you stick on LSP to avoid this, and if you find any issues while using it, please open new issues here so I can get them fixed. Thanks!

  18. Maverick-I0 commented on Sep 14, 2020

    @Maverick-I0
    Author

    yep 👍🏻

  19. DanTup commented on Sep 23, 2020

    @DanTup
    Member

    Working around this for non-LSP in the VS Code extension is but I've landed some fixes in the server that will prevent generating the problematic edits:

    dart-lang/sdk@f820c1f

    So the issue is resolved either by:

    • Switching to LSP
    • Updating to a new SDK once that fix ships

    Long-term the buggy code here will be removed, once LS becomes the only option.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions