check method
void
check(
- DcqRegistry registry
)
Implementation
@override
void check(
DcqRegistry registry,
) {
registry.addMethodDeclaration((node) {
if (node.name.lexeme != 'copyWith') return;
final bodyNode = node.parent;
if (bodyNode is! BlockClassBody) return;
final enclosingClass = bodyNode.parent;
if (enclosingClass is! ClassDeclaration) return;
final classBody = enclosingClass.body;
if (classBody is! BlockClassBody) return;
final fieldNames = <String>{};
for (final member in classBody.members) {
if (member is! FieldDeclaration) continue;
if (member.isStatic) continue;
if (!member.fields.isFinal) continue;
for (final variable in member.fields.variables) {
fieldNames.add(variable.name.lexeme);
}
}
if (fieldNames.isEmpty) return;
final paramNames = <String>{};
final params = node.parameters?.parameters;
if (params != null) {
for (final param in params) {
final name = param.name?.lexeme;
if (name != null) paramNames.add(name);
}
}
final missingFields = fieldNames.where(
(name) => !paramNames.contains(name),
);
if (missingFields.isNotEmpty) {
reportAtToken(node.name);
}
});
}