anchor.diff:    C<String> cOfString;
   }
   ''');
  -    SimpleIdentifier f = _findIdentifier('f');
  -    MethodElementImpl e = f.staticElement;
  -    expect(e.typeParameters.toString(), '[T]');
  -    expect(e.type.typeFormals.toString(), '[T]');
  -    expect(e.type.typeParameters.toString(), '[E]');
  -    expect(e.type.typeArguments.toString(), '[E]');
  -    expect(e.type.toString(), '<T>((E) → T) → List<T>');
  +    _expectFunctionType('f', '<T>((E) → T) → List<T>',
  +        elementTypeParams: '[T]',
  +        typeParams: '[E]',
  +        typeArgs: '[E]',
  +        typeFormals: '[T]');
   
       SimpleIdentifier c = _findIdentifier('cOfString');
       FunctionType ft = (c.staticType as InterfaceType).getMethod('f').type;
  
positive.code:   C<String> cOfString;
  }
  ''');
      SimpleIdentifier f = _findIdentifier('f');
      MethodElementImpl e = f.staticElement;
      expect(e.typeParameters.toString(), '[T]');
      expect(e.type.typeFormals.toString(), '[T]');
      expect(e.type.typeParameters.toString(), '[E]');
      expect(e.type.typeArguments.toString(), '[E]');
      expect(e.type.toString(), '<T>(E) → List<T>');
  
      SimpleIdentifier c = _findIdentifier('cOfString');
      FunctionType ft = (c.staticType as InterfaceType).getMethod('f').type;
      expect(ft.toString(), '<T>(String) → List<T>');
  
negative.code:   list.map((e) => e);
    list.map((e) => 3);
  }''');
      _expectIdentifierType('map((e) => e);', '<T>((dynamic) → T) → T', isNull);
      _expectIdentifierType('map((e) => 3);', '<T>((dynamic) → T) → T', isNull);
  
      MethodInvocation m1 = _findIdentifier('map((e) => e);').parent;
      expect(m1.staticInvokeType.toString(), '((dynamic) → dynamic) → dynamic');
      MethodInvocation m2 = _findIdentifier('map((e) => 3);').parent;
      expect(m2.staticInvokeType.toString(), '((dynamic) → int) → int');
    }
  
    void test_genericMethod_max_doubleDouble() {
  