// 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: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(super.source, Expression? super.node, this.checks,
      {this.isSetupAssignment = false});

  @override
  String get description => 'data flow';

  @override
  EdgeOriginKind get kind => EdgeOriginKind.expressionChecks;
}
