Handle folding for function expression invocations

Change-Id: Id93004c1ea218b1768d649a2a806ce58a9d7f0a5
Reviewed-on: https://dart-review.googlesource.com/59061
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Danny Tuppeny <dantup@google.com>
diff --git a/pkg/analysis_server/lib/src/computer/computer_folding.dart b/pkg/analysis_server/lib/src/computer/computer_folding.dart
index b05e670..1a5a5c3 100644
--- a/pkg/analysis_server/lib/src/computer/computer_folding.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_folding.dart
@@ -158,6 +158,13 @@
   }
 
   @override
+  Object visitFunctionExpressionInvocation(FunctionExpressionInvocation node) {
+    _computer._addRegion(node.argumentList.leftParenthesis.end,
+        node.argumentList.rightParenthesis.offset, FoldingKind.INVOCATION);
+    return super.visitFunctionExpressionInvocation(node);
+  }
+
+  @override
   visitImportDirective(ImportDirective node) {
     _computer._recordDirective(node);
     return super.visitImportDirective(node);
diff --git a/pkg/analysis_server/test/src/computer/folding_computer_test.dart b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
index 9372adc..c301f7f 100644
--- a/pkg/analysis_server/test/src/computer/folding_computer_test.dart
+++ b/pkg/analysis_server/test/src/computer/folding_computer_test.dart
@@ -123,6 +123,28 @@
     _compareRegions(regions, content);
   }
 
+  test_function_expression_invocation() async {
+    String content = """
+// Content before
+
+getFunc() => (String a, String b) {/*1:INC*/
+  print(a);
+/*1:INC:FUNCTION_BODY*/};
+
+main2() {/*2:INC*/
+  getFunc()(/*3:INC*/
+    "one",
+    "two"
+  /*3:INC:INVOCATION*/);
+/*2:INC:FUNCTION_BODY*/}
+
+// Content after
+""";
+
+    final regions = await _computeRegions(content);
+    _compareRegions(regions, content);
+  }
+
   test_constructor_invocations() async {
     String content = """
 // Content before