check method

  1. @override
void check(
  1. DcqRegistry registry
)

Implementation

@override
void check(
  DcqRegistry registry,
) {
  registry.addFormalParameterList((node) {
    final params = node.parameters;
    if (params.length < 2) return;

    final firstParam = params.first;
    final effectiveFirst = firstParam is DefaultFormalParameter
        ? firstParam.parameter
        : firstParam;
    if (effectiveFirst is! SimpleFormalParameter) return;

    final firstType = effectiveFirst.type;
    if (firstType is! NamedType) return;
    if (firstType.name.lexeme != 'Ref') return;

    for (final param in params.skip(1)) {
      final effectiveParam = param is DefaultFormalParameter
          ? param.parameter
          : param;
      if (effectiveParam is! SimpleFormalParameter) continue;

      final typeAnnotation = effectiveParam.type;
      if (typeAnnotation is! NamedType) continue;

      final typeName = typeAnnotation.name.lexeme;
      if (_mutableCollectionTypes.contains(typeName)) {
        reportAtNode(param);
      }
    }
  });
}