check method

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

Implementation

@override
void check(
  DcqRegistry registry,
) {
  registry.addMethodDeclaration((node) {
    final bodyNode = node.parent;
    if (bodyNode is! BlockClassBody) return;
    final parent = bodyNode.parent;
    if (parent is! ClassDeclaration) return;

    final superclass = parent.extendsClause?.superclass;
    if (superclass == null) return;

    final superName = superclass.name.lexeme;
    if (superName != 'State') return;
    if (!isFromExpectedPackage(superclass, 'flutter')) return;

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

    final statements = body.block.statements;
    if (statements.length != 1) return;

    final statement = statements.first;
    if (statement is! ExpressionStatement) return;

    final expression = statement.expression;
    if (expression is! MethodInvocation) return;

    final target = expression.target;
    if (target is! SuperExpression) return;

    if (expression.methodName.name != node.name.lexeme) return;

    reportAtToken(node.name);
  });
}