visitPatternVariableDeclaration method
void
visitPatternVariableDeclaration(
- PatternVariableDeclaration node
)
override
Implementation
@override
void visitPatternVariableDeclaration(PatternVariableDeclaration node) {
final literal = node.expression;
if (literal is! RecordLiteral) return;
final pattern = switch (node.pattern) {
final RecordPattern e => e,
_ => null,
};
if (pattern == null) return;
final patternFieldsLength = pattern.fields.length;
final literalFieldsLength = literal.fields.length;
if (patternFieldsLength != literalFieldsLength) return;
for (var i = 0; i < patternFieldsLength; i++) {
final patternField = pattern.fields[i];
final literalField = literal.fields[i];
final declaredType = switch (patternField.pattern) {
WildcardPattern(type: final type?) => type.type,
DeclaredVariablePattern(type: final type?) => type.type,
_ => null,
};
if (declaredType == null) continue;
final expression = switch (literalField) {
NamedExpression(:final expression) => expression,
_ => literalField,
};
if (!expression.isDotShorthand) {
_checkAndReport(expression: expression, declaredType: declaredType);
}
}
}