check method
void
check(
- DcqRegistry registry
)
Implementation
@override
void check(
DcqRegistry registry,
) {
registry.addInstanceCreationExpression((node) {
final name = node.constructorName.type.name.lexeme;
if (!_builderWidgets.contains(name)) return;
final builderArg = node.argumentList.arguments
.whereType<NamedExpression>()
.where((arg) => arg.name.label.name == 'builder')
.firstOrNull;
if (builderArg == null) return;
final callback = builderArg.expression;
if (callback is! FunctionExpression) return;
final params = callback.parameters?.parameters;
if (params == null || params.isEmpty) return;
final innerParam = params.first;
final innerContextName = innerParam.name?.lexeme;
if (innerContextName == null) return;
final outerContextName = _findOuterBuildContextName(node);
if (outerContextName == null) return;
if (innerContextName == outerContextName) return;
final body = callback.body;
final finder = _OuterContextUsageFinder(
outerContextName: outerContextName,
innerContextName: innerContextName,
);
body.accept(finder);
for (final usage in finder.usages) {
reportAtNode(usage);
}
});
}