| // Copyright (c) 2017, 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_name.dart'; | |
| import 'incompatibility.dart'; | |
| import 'partial_solution.dart'; | |
| import 'term.dart'; | |
| /// A term in a [PartialSolution] that tracks some additional metadata. | |
| class Assignment extends Term { | |
| /// The number of decisions at or before this in the [PartialSolution] that | |
| /// contains it. | |
| final int decisionLevel; | |
| /// The index of this assignment in [PartialSolution._assignments]. | |
| final int index; | |
| /// The incompatibility that caused this assignment to be derived, or `null` | |
| /// if the assignment isn't a derivation. | |
| final Incompatibility? cause; | |
| /// Whether this assignment is a decision, as opposed to a derivation. | |
| bool get isDecision => cause == null; | |
| /// Creates a decision: a speculative assignment of a single package version. | |
| Assignment.decision(PackageId package, this.decisionLevel, this.index) | |
| : cause = null, | |
| super(package.toRange(), true); | |
| /// Creates a derivation: an assignment that's automatically propagated from | |
| /// incompatibilities. | |
| Assignment.derivation( | |
| super.package, | |
| super.isPositive, | |
| this.cause, | |
| this.decisionLevel, | |
| this.index, | |
| ); | |
| } |