addMethods method

void addMethods()

Implementation

void addMethods() {
  for (MethodElement m in element.methods) {
    if (m.name[0] == '_') {
      continue;
    }
    final args = m.parameters
        .map((e) => e.isNamed ? '${e.name}: ${e.name}' : e.name)
        .toList()
        .join(', ');
    final typedArgs = _getTypedArguments(m.parameters);
    String static = m.isStatic ? 'static ' : '';
    final name = _getName(m);
    buffer.writeln('');
    buffer.writeln(
        '  $static${m.returnType} Function($typedArgs)? _${m.name};');
    buffer.writeln('  // ignore: non_constant_identifier_names');
    buffer.writeln(
        '  ${static}set $name(${m.returnType} Function($typedArgs) value) {');
    buffer.writeln('    _${m.name} = value;');
    buffer.writeln('  }');
    buffer.writeln('');
    if (singleton != null) {
      final stat = m.isStatic ? singleton : 'wrap$singleton!';
      buffer.writeln('  $static$m => _${m.name} != null ? '
          '_${m.name}!($args) : $stat.${m.name}($args);');
    } else {
      if (!m.isStatic) {
        buffer.writeln('  @override');
      }
      final parent = m.isStatic ? element.name : 'super';
      buffer.writeln(
          '  $static$m => (_${m.name} ?? $parent.${m.name})($args);');
    }
  }
}