anchor.diff:        throw new ArgumentError.notNull('fullname');
       }
       _parseParameters(method);
  +    passContext = false;
  +    contextInPositionalArguments = false;
  +    contextInNamedArguments = false;
  +    if (!hasOptionalArguments && !hasNamedArguments) {
  +      if (positionalParameterTypes.isNotEmpty &&
  +          (positionalParameterTypes.last == 'Context' ||
  +              positionalParameterTypes.last == 'ServiceContext')) {
  +        passContext = true;
  +        contextInPositionalArguments = true;
  +      }
  +    } else if (namedParameterTypes['context'] == 'Context' ||
  +        namedParameterTypes['context'] == 'ServiceContext') {
  +      passContext = true;
  +      contextInNamedArguments = true;
  +    }
     }
   
     String _getFunctionName(Function func) {
  
positive.code: 
  class Method {
    final Function method;
    String fullname;
    List<String> positionalParameterTypes;
    Map<String, String> namedParameterTypes;
    bool missing;
    Method(this.method, [this.fullname, this.missing]) {
      if (fullname == null || fullname.isEmpty) {
        fullname = _getFunctionName(method);
  
negative.code:         }
          name = str.substring(i + 1, p);
          p = i = p + 2;
          namedParameterTypes[name] = type;
        }
      }
      genericsArguments?.forEach((a) {
        for (var type in namedParameterTypes.entries) {
          if (a == type.value) {
            namedParameterTypes[type.key] = 'dynamic';
          } else {
            namedParameterTypes[type.key] = type.value
                .replaceAll('<$a>', '<dynamic>')
                .replaceAll('<$a,', '<dynamic,')
                .replaceAll(', $a>', ', dynamic>')
  