Call computeTypeVar rather than parseTypeArguments when parsing expressions

Change-Id: I4423d1fc4941d7e7fc93c02d89ab81ade46ecf1d
Reviewed-on: https://dart-review.googlesource.com/52720
Commit-Queue: Dan Rubel <danrubel@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index e74907f..2ef4384 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -86,10 +86,13 @@
 import 'type_info.dart'
     show
         TypeInfo,
+        TypeParamOrArgInfo,
         computeType,
+        computeTypeParamOrArg,
         isGeneralizedFunctionType,
         isValidTypeReference,
-        noType;
+        noType,
+        noTypeParamOrArg;
 
 import 'type_info_impl.dart' show skipTypeVariables;
 
@@ -4112,10 +4115,12 @@
     TokenType type = next.type;
     int tokenLevel = type.precedence;
     Token typeArguments;
-    if (isValidMethodTypeArguments(next)) {
-      // For example a(b)<T>(c), where token is '<'.
+    TypeParamOrArgInfo typeArg = computeTypeParamOrArg(token);
+    if (typeArg != noTypeParamOrArg &&
+        optional('(', typeArg.skip(token).next)) {
+      // For example a(b)<T>(c), where token is before '<'.
       typeArguments = next;
-      token = parseTypeArgumentsOpt(token);
+      token = typeArg.parseArguments(token, this);
       next = token.next;
       assert(optional('(', next));
       type = next.type;