| // Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'package:analyzer/dart/ast/ast.dart'; |
| import 'package:analyzer/src/generated/source.dart'; |
| import 'package:nnbd_migration/fix_reason_target.dart'; |
| import 'package:nnbd_migration/instrumentation.dart'; |
| import 'package:nnbd_migration/src/edge_origin.dart'; |
| import 'package:nnbd_migration/src/nullability_node.dart'; |
| |
| /// Container for information gathered during nullability migration about the |
| /// set of runtime checks that might need to be performed on the value of an |
| /// expression. |
| /// |
| /// TODO(paulberry): we don't currently have any way of distinguishing checks |
| /// based on the nullability of the type itself (which can be checked by adding |
| /// a trailing `!`) from checks based on type parameters (which will have to be |
| /// checked using an `as` expression). |
| class ExpressionChecks { |
| /// All nullability edges that are related to this potential check. |
| final Map<FixReasonTarget?, NullabilityEdge> edges = {}; |
| |
| ExpressionChecks(); |
| } |
| |
| /// [EdgeOrigin] object associated with [ExpressionChecks]. This is a separate |
| /// object so that it can safely store a pointer to an AST node. (We don't want |
| /// to store pointers to AST nodes in [ExpressionChecks] objects because they |
| /// are persisted for the duration of the migration calculation). |
| class ExpressionChecksOrigin extends EdgeOrigin { |
| final ExpressionChecks checks; |
| |
| /// Whether the origin of the edge is due to the assignment of a variable |
| /// from within function literal argument to the `setUp` function of the test |
| /// package. |
| final bool isSetupAssignment; |
| |
| ExpressionChecksOrigin(Source? source, Expression? node, this.checks, |
| {this.isSetupAssignment = false}) |
| : super(source, node); |
| |
| @override |
| String get description => 'data flow'; |
| |
| @override |
| EdgeOriginKind get kind => EdgeOriginKind.expressionChecks; |
| } |