anchor.diff:  import 'package:analysis_server/src/protocol_server.dart'
       show CompletionSuggestion, CompletionSuggestionKind;
   import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
  -import 'package:analysis_server/src/services/completion/dart/completion_manager.dart'
  -    show DartCompletionRequestImpl;
   import 'package:analysis_server/src/services/correction/name_suggestion.dart';
   import 'package:analyzer/dart/ast/ast.dart';
   import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
  -import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
   
  -/// Given some [String] name "foo", return a [CompletionSuggestion] with the
  -/// [String].
  -///
  -/// If the passed [String] is null or empty, null is returned.
  -CompletionSuggestion _createNameSuggestion(String name) {
  -  if (name == null || name.isEmpty) {
  -    return null;
  -  }
  -  return CompletionSuggestion(CompletionSuggestionKind.IDENTIFIER,
  -      DART_RELEVANCE_DEFAULT, name, name.length, 0, false, false);
  -}
  -
  -/// Convert some [Identifier] to its [String] name.
  -String _getStringName(Identifier id) {
  -  if (id == null) {
  -    return null;
  -  }
  -  if (id is SimpleIdentifier) {
  -    return id.name;
  -  } else if (id is PrefixedIdentifier) {
  -    return id.identifier.name;
  -  }
  -  return id.name;
  -}
  -
  -/// A contributor for calculating suggestions for variable names.
  +/// A contributor that produces suggestions for variable names based on the
  +/// static type of the variable.
   class VariableNameContributor extends DartCompletionContributor {
     @override
     Future<List<CompletionSuggestion>> computeSuggestions(
         DartCompletionRequest request) async {
  -    // TODO(brianwilkerson) Determine whether this await is necessary.
  -    await null;
  -    OpType optype = (request as DartCompletionRequestImpl).opType;
  +    var opType = request.opType;
   
       // Collect suggestions from the specific child [AstNode] that contains
       // the completion offset and all of its parents recursively.
  -    if (optype.includeVarNameSuggestions) {
  -      // Resolution not needed for this completion
  +    if (opType.includeVarNameSuggestions) {
  +      // Resolution not needed for this completion.
   
  -      AstNode node = request.target.containingNode;
  -      int offset = request.target.offset;
  +      var node = request.target.containingNode;
  +      var offset = request.target.offset;
   
         // Use the refined node.
         if (node is FormalParameterList) {
  
positive.code:       }
  
        var doIncludePrivateVersion =
            optype.inFieldDeclaration || optype.inTopLevelVariableDeclaration;
  
        List<String> variableNameSuggestions = getCamelWordCombinations(strName);
        variableNameSuggestions.remove(strName);
        List<CompletionSuggestion> suggestions = <CompletionSuggestion>[];
        for (String varName in variableNameSuggestions) {
          CompletionSuggestion suggestion = _createNameSuggestion(varName);
          if (suggestion != null) {
            suggestions.add(suggestion);
          }
          if (doIncludePrivateVersion) {
            CompletionSuggestion privateSuggestion =
                _createNameSuggestion('_' + varName);
            if (privateSuggestion != null) {
              suggestions.add(privateSuggestion);
            }
  
negative.code:       return suggestions;
      }
      return const <CompletionSuggestion>[];
    }
  
    /// Given some [name], return a [CompletionSuggestion] with the name.
    ///
    /// If the passed name is `null` or empty, `null` is returned.
    CompletionSuggestion _createNameSuggestion(
        DartCompletionRequest request, String name) {
      if (name == null || name.isEmpty) {
        return null;
      }
      // TODO(brianwilkerson) Explore whether there are any features of the name
      //  that can be used to provide better relevance scores.
      return CompletionSuggestion(
          CompletionSuggestionKind.IDENTIFIER,
          request.useNewRelevance ? 500 : DART_RELEVANCE_DEFAULT,
          name,
          name.length,
          0,
          false,
          false);
    }
  
    /// Convert some [Identifier] to its [String] name.
    String _getStringName(Identifier id) {
      if (id == null) {
        return null;
      }
      if (id is SimpleIdentifier) {
        return id.name;
      } else if (id is PrefixedIdentifier) {
        return id.identifier.name;
      }
      return id.name;
    }
  
    static Identifier _formalParameterTypeIdentifier(FormalParameter node) {
  