| Index: pkg/analysis_server/test/services/completion/dart/optype_test.dart | 
| diff --git a/pkg/analysis_server/test/services/completion/dart/optype_test.dart b/pkg/analysis_server/test/services/completion/dart/optype_test.dart | 
| index 5bfcefa097e720271a71bd731a83086629544f05..15fcb8725782552a4462fc3e6df298168fc56208 100644 | 
| --- a/pkg/analysis_server/test/services/completion/dart/optype_test.dart | 
| +++ b/pkg/analysis_server/test/services/completion/dart/optype_test.dart | 
| @@ -375,6 +375,122 @@ class OpTypeTest { | 
| assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| } | 
|  | 
| +  test_Block_catch_1a() async { | 
| +    // '}'  Block  BlockFunctionBody  FunctionExpression | 
| +    addTestSource('main() {try {} ^}'); | 
| +    // Only return 'on', 'catch', and 'finally' keywords | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_Block_catch_1b() async { | 
| +    // [ExpressionStatement 'c']  Block  BlockFunctionBody | 
| +    addTestSource('main() {try {} c^}'); | 
| +    // Only return 'on', 'catch', and 'finally' keywords | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_Block_catch_1c() async { | 
| +    // [EmptyStatement]  Block  BlockFunctionBody  FunctionExpression | 
| +    addTestSource('main() {try {} ^;}'); | 
| +    // Only return 'on', 'catch', and 'finally' keywords | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_Block_catch_1d() async { | 
| +    // [VariableDeclarationStatement 'Foo foo']  Block  BlockFunctionBody | 
| +    addTestSource('main() {try {} ^ Foo foo;}'); | 
| +    // Only return 'on', 'catch', and 'finally' keywords | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_Block_catch_2a() async { | 
| +    // '}'  Block  BlockFunctionBody  FunctionExpression | 
| +    addTestSource('main() {try {} catch () {} ^}'); | 
| +    assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| +  } | 
| + | 
| +  test_Block_catch_2b() async { | 
| +    // [ExpressionStatement 'c']  Block  BlockFunctionBody | 
| +    addTestSource('main() {try {} catch () {} c^}'); | 
| +    assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| +  } | 
| + | 
| +  test_Block_catch_2c() async { | 
| +    // [EmptyStatement]  Block  BlockFunctionBody  FunctionExpression | 
| +    addTestSource('main() {try {} catch () {} ^;}'); | 
| +    assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| +  } | 
| + | 
| +  test_Block_catch_2d() async { | 
| +    // [VariableDeclarationStatement 'Foo foo']  Block  BlockFunctionBody | 
| +    addTestSource('main() {try {} catch () {} ^ Foo foo;}'); | 
| +    assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| +  } | 
| + | 
| +  test_Block_catch_3a() async { | 
| +    // '}'  Block  BlockFunctionBody  FunctionExpression | 
| +    addTestSource('main() {try {} finally {} ^}'); | 
| +    assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| +  } | 
| + | 
| +  test_Block_catch_3b() async { | 
| +    // [ExpressionStatement 'c']  Block  BlockFunctionBody | 
| +    addTestSource('main() {try {} finally {} c^}'); | 
| +    assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| +  } | 
| + | 
| +  test_Block_catch_3c() async { | 
| +    // [EmptyStatement]  Block  BlockFunctionBody  FunctionExpression | 
| +    addTestSource('main() {try {} finally {} ^;}'); | 
| +    assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| +  } | 
| + | 
| +  test_Block_catch_3d() async { | 
| +    // [VariableDeclarationStatement 'Foo foo']  Block  BlockFunctionBody | 
| +    addTestSource('main() {try {} finally {} ^ Foo foo;}'); | 
| +    assertOpType(returnValue: true, typeNames: true, voidReturn: true); | 
| +  } | 
| + | 
| +  test_catch_4a1() async { | 
| +    addTestSource('main() {try {} ^ on SomeException {}}'); | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_catch_4a2() async { | 
| +    addTestSource('main() {try {} c^ on SomeException {}}'); | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_catch_4b1() async { | 
| +    addTestSource('main() {try {} ^ catch (e) {}}'); | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_catch_4b2() async { | 
| +    addTestSource('main() {try {} c^ catch (e) {}}'); | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_catch_4c1() async { | 
| +    addTestSource('main() {try {} ^ finally {}}'); | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_catch_4c2() async { | 
| +    addTestSource('main() {try {} c^ finally {}}'); | 
| +    assertOpType(); | 
| +  } | 
| + | 
| +  test_catch_5a() async { | 
| +    addTestSource('main() {try {} on ^ finally {}}'); | 
| +    assertOpType(typeNames: true); | 
| +  } | 
| + | 
| +  test_catch_5b() async { | 
| +    addTestSource('main() {try {} on E^ finally {}}'); | 
| +    assertOpType(typeNames: true); | 
| +  } | 
| + | 
| test_Block_empty() { | 
| // Block  BlockFunctionBody  MethodDeclaration  ClassDeclaration | 
| addTestSource('class A extends E implements I with M {a() {^}}'); | 
|  |