@@ -88,11 +88,7 @@ class _Visitor extends SimpleAstVisitor<void> {
8888 void visitParenthesizedExpression (ParenthesizedExpression node) {
8989 var parent = node.parent;
9090 var expression = node.expression;
91- if (expression is SimpleIdentifier ||
92- (expression is CascadeExpression && expression.isNullAware) ||
93- (expression is PropertyAccess && expression.isNullAware) ||
94- (expression is MethodInvocation && expression.isNullAware) ||
95- (expression is IndexExpression && expression.isNullAware)) {
91+ if (expression is SimpleIdentifier || _isNullAware (expression)) {
9692 if (parent is PropertyAccess ) {
9793 var name = parent.propertyName.name;
9894 if (name == 'hashCode' || name == 'runtimeType' ) {
@@ -238,6 +234,25 @@ class _Visitor extends SimpleAstVisitor<void> {
238234 node.accept (containsFunctionExpressionVisitor);
239235 return containsFunctionExpressionVisitor.hasFunctionExpression;
240236 }
237+
238+ /// Return `true` if the expression is null aware, or if one of its recursive
239+ /// targets is null aware.
240+ bool _isNullAware (Expression ? expression) {
241+ if (expression is CascadeExpression ) {
242+ // No need to check the target.
243+ return expression.isNullAware;
244+ } else if (expression is PropertyAccess ) {
245+ if (expression.isNullAware) return true ;
246+ return _isNullAware (expression.target);
247+ } else if (expression is MethodInvocation ) {
248+ if (expression.isNullAware) return true ;
249+ return _isNullAware (expression.target);
250+ } else if (expression is IndexExpression ) {
251+ if (expression.isNullAware) return true ;
252+ return _isNullAware (expression.target);
253+ }
254+ return false ;
255+ }
241256}
242257
243258extension on ParenthesizedExpression {
0 commit comments