anchor.diff:      InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element);
       interfaceType.typeArguments = typeArguments;
       element.type = interfaceType;
  -    List<ConstructorElement> constructors = holder.constructors;
  -    if (constructors.length == 0) {
  -      //
  -      // Create the default constructor.
  -      //
  -      constructors = _createDefaultConstructors(interfaceType);
  -    }
  +    element.typeParameters = typeParameters;
       _setDocRange(element, node);
       element.abstract = node.isAbstract;
       element.accessors = holder.accessors;
  +    List<ConstructorElement> constructors = holder.constructors;
  +    if (constructors.isEmpty) {
  +      constructors = _createDefaultConstructors(element);
  +    }
       element.constructors = constructors;
       element.fields = holder.fields;
       element.methods = holder.methods;
  -    element.typeParameters = typeParameters;
       element.validMixin = _isValidMixin;
  +    // Function types must be initialized after the enclosing element has been
  +    // set, for them to pick up the type parameters.
  +    for (ExecutableElementImpl e in _functionTypesToFix) {
  +      e.type = new FunctionTypeImpl(e);
  +    }
  +    _functionTypesToFix = null;
       _currentHolder.addType(element);
       className.staticElement = element;
       _fieldMap = null;
  
positive.code:         element.setVisibleRange(functionEnd, blockEnd - functionEnd - 1);
        }
      }
      element.type = new FunctionTypeImpl(element);
      element.hasImplicitReturnType = true;
      _currentHolder.addFunction(element);
      node.element = element;
  
negative.code:   Object visitClassDeclaration(ClassDeclaration node) {
      ElementHolder holder = new ElementHolder();
      _isValidMixin = true;
      _functionTypesToFix = new List<ExecutableElementImpl>();
      //
      // Process field declarations before constructors and methods so that field
      // formal parameters can be correctly resolved to their fields.
  