anchor.diff:      context.exitMethod();
     }
   
  +  void _visitTypeArguments(
  +    List<o.OutputType> typeArguments,
  +    EmitterVisitorContext context,
  +  ) {
  +    if (typeArguments == null || typeArguments.isEmpty) {
  +      return;
  +    }
  +    context.print('<');
  +    visitAllObjects((o.OutputType typeArgument) {
  +      typeArgument.visitType(this, context);
  +    }, typeArguments, context, ',');
  +    context.print('>');
  +  }
  +
     void _visitTypeParameters(
       List<o.TypeParameter> typeParameters,
       EmitterVisitorContext context,
  
positive.code:       context.print(identifier.isEmpty ? prefix : '$prefix.');
      }
      context.print(identifier);
      if (typeParams?.isNotEmpty == true) {
        context.print('<');
        visitAllObjects(
          (o.OutputType t) => t.visitType(this, context),
          typeParams,
          context,
          ',',
        );
        context.print('>');
      }
    }
  }
  
  
negative.code:       _inConstContext = true;
      }
      ast.classExpr.visitExpression(this, context);
      _visitTypeArguments(ast.typeArguments, context);
      context.print('(');
      visitAllExpressions(ast.args, context, ',');
      context.print(')');
  