anchor.diff:    void declaredFunction(FunctionDeclaration declaration) {
       if (optype.includeReturnValueSuggestions ||
           optype.includeVoidReturnSuggestions) {
  -      TypeName returnType = declaration.returnType;
  -      bool deprecated = isDeprecated(declaration);
  -      protocol.ElementKind kind;
  -      int defaultRelevance = DART_RELEVANCE_DEFAULT;
  +      TypeName typeName = declaration.returnType;
  +      protocol.ElementKind elemKind;
  +      int relevance = DART_RELEVANCE_DEFAULT;
         if (declaration.isGetter) {
  -        kind = protocol.ElementKind.GETTER;
  -        defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
  +        elemKind = protocol.ElementKind.GETTER;
  +        relevance = DART_RELEVANCE_LOCAL_ACCESSOR;
         } else if (declaration.isSetter) {
           if (!optype.includeVoidReturnSuggestions) {
             return;
           }
  -        kind = protocol.ElementKind.SETTER;
  -        returnType = NO_RETURN_TYPE;
  -        defaultRelevance = DART_RELEVANCE_LOCAL_ACCESSOR;
  +        elemKind = protocol.ElementKind.SETTER;
  +        typeName = NO_RETURN_TYPE;
  +        relevance = DART_RELEVANCE_LOCAL_ACCESSOR;
         } else {
  -        if (!optype.includeVoidReturnSuggestions && _isVoid(returnType)) {
  +        if (!optype.includeVoidReturnSuggestions && _isVoid(typeName)) {
             return;
           }
  -        kind = protocol.ElementKind.FUNCTION;
  -        defaultRelevance = DART_RELEVANCE_LOCAL_FUNCTION;
  -      }
  -      CompletionSuggestion suggestion = _addSuggestion(
  -          declaration.name, returnType, deprecated, defaultRelevance);
  -      if (suggestion != null) {
  -        FormalParameterList param = declaration.functionExpression.parameters;
  -        suggestion.element = createElement(kind, declaration.name,
  -            parameters: param != null ? param.toSource() : null,
  -            returnType: returnType,
  -            isDeprecated: deprecated);
  -        if (kind == protocol.ElementKind.FUNCTION) {
  -          _addParameterInfo(
  -              suggestion, declaration.functionExpression.parameters);
  -        }
  -      }
  +        elemKind = protocol.ElementKind.FUNCTION;
  +        relevance = DART_RELEVANCE_LOCAL_FUNCTION;
  +      }
  +      _addSuggestion(declaration.name, typeName, elemKind,
  +          isDeprecated: isDeprecated(declaration),
  +          param: declaration.functionExpression.parameters,
  +          relevance: relevance);
       }
     }
   
     @override
     void declaredFunctionTypeAlias(FunctionTypeAlias declaration) {
       if (optype.includeTypeNameSuggestions) {
  -      bool deprecated = isDeprecated(declaration);
  -      TypeName returnType = declaration.returnType;
  -      CompletionSuggestion suggestion = _addSuggestion(
  -          declaration.name, returnType, deprecated, DART_RELEVANCE_DEFAULT);
  -      if (suggestion != null) {
  -        // TODO (danrubel) determine parameters and return type
  -        suggestion.element = createElement(
  -            protocol.ElementKind.FUNCTION_TYPE_ALIAS, declaration.name,
  -            returnType: returnType, isAbstract: true, isDeprecated: deprecated);
  -      }
  +      // TODO (danrubel) determine parameters and return type
  +      _addSuggestion(declaration.name, declaration.returnType,
  +          protocol.ElementKind.FUNCTION_TYPE_ALIAS,
  +          isAbstract: true, isDeprecated: isDeprecated(declaration));
       }
     }
   
  
positive.code:   @override
    void declaredClass(ClassDeclaration declaration) {
      if (optype.includeTypeNameSuggestions) {
        bool deprecated = isDeprecated(declaration);
        CompletionSuggestion suggestion = _addSuggestion(
            declaration.name, NO_RETURN_TYPE, deprecated, DART_RELEVANCE_DEFAULT);
        if (suggestion != null) {
          suggestion.element = createElement(
              protocol.ElementKind.CLASS, declaration.name,
              returnType: NO_RETURN_TYPE,
              isAbstract: declaration.isAbstract,
              isDeprecated: deprecated);
        }
      }
    }
  
    @override
    void declaredClassTypeAlias(ClassTypeAlias declaration) {
      if (optype.includeTypeNameSuggestions) {
        bool deprecated = isDeprecated(declaration);
        CompletionSuggestion suggestion = _addSuggestion(
            declaration.name, NO_RETURN_TYPE, deprecated, DART_RELEVANCE_DEFAULT);
        if (suggestion != null) {
          suggestion.element = createElement(
              protocol.ElementKind.CLASS_TYPE_ALIAS, declaration.name,
              returnType: NO_RETURN_TYPE,
              isAbstract: true,
              isDeprecated: deprecated);
        }
      }
    }
  
    @override
    void declaredEnum(EnumDeclaration declaration) {
      SimpleIdentifier enumId = declaration.name;
      if (enumId != null) {
        bool deprecated = isDeprecated(declaration);
        if (optype.includeTypeNameSuggestions) {
          CompletionSuggestion suggestion = _addSuggestion(
              enumId, NO_RETURN_TYPE, deprecated, DART_RELEVANCE_DEFAULT);
          if (suggestion != null) {
            suggestion.element = createElement(protocol.ElementKind.ENUM, enumId,
                returnType: NO_RETURN_TYPE, isDeprecated: deprecated);
          }
        }
      }
    }
  
  
negative.code:   void declaredTopLevelVar(
        VariableDeclarationList varList, VariableDeclaration varDecl) {
      if (optype.includeReturnValueSuggestions) {
        _addSuggestion(
            varDecl.name, varList.type, protocol.ElementKind.TOP_LEVEL_VARIABLE,
            isDeprecated: isDeprecated(varList) || isDeprecated(varDecl),
            relevance: DART_RELEVANCE_LOCAL_TOP_LEVEL_VARIABLE);
      }
    }
  
  