check method

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

Implementation

@override
void check(
  DcqRegistry registry,
) {
  registry.addClassDeclaration((node) {
    final superclass = node.extendsClause?.superclass;
    if (superclass == null) return;
    if (superclass.name.lexeme != 'State') return;
    if (!isFromExpectedPackage(superclass, 'flutter')) return;

    final body = node.body;
    if (body is! BlockClassBody) return;

    var hasMutableField = false;
    var hasLifecycleOverride = false;

    for (final member in body.members) {
      if (member is FieldDeclaration && !member.isStatic) {
        final fields = member.fields;
        if (!fields.isFinal && !fields.isConst) {
          hasMutableField = true;
          break;
        }
        if (fields.isLate && fields.isFinal) {
          hasMutableField = true;
          break;
        }
      }
      if (member is MethodDeclaration &&
          _lifecycleMethods.contains(member.name.lexeme)) {
        hasLifecycleOverride = true;
      }
    }

    if (!hasMutableField && !hasLifecycleOverride) {
      reportAtToken(node.namePart.typeName);
    }
  });
}