Chromium Code Reviews| Index: utils/pub/package.dart |
| diff --git a/utils/pub/package.dart b/utils/pub/package.dart |
| index 70f469c0ea6eb69b897cdf1dff427625bafd7fa4..8e0d39e4aeaa011507acbba3df41d246e58763cd 100644 |
| --- a/utils/pub/package.dart |
| +++ b/utils/pub/package.dart |
| @@ -82,7 +82,8 @@ class PackageId implements Comparable { |
| /// The name of the package being identified. |
| final String name; |
| - /// The [Source] used to look up this package given its [description]. |
| + /// The [Source] used to look up this package given its [description]. If |
| + /// this is a root package ID, this will be `null`. |
|
Jennifer Messerly
2013/01/24 23:24:37
fwiw, I think Kathy suggested not using code font
Bob Nystrom
2013/01/25 18:22:50
I think you're remembering right, though I persona
|
| final Source source; |
| /// The package's version. |
| @@ -96,8 +97,11 @@ class PackageId implements Comparable { |
| PackageId(this.name, this.source, this.version, this.description); |
| + /// Whether this ID identifies the root package. |
| + bool get isRoot => source == null; |
| + |
| int get hashCode => name.hashCode ^ |
| - source.name.hashCode ^ |
| + (source != null ? source.name.hashCode : 0) ^ |
|
Jennifer Messerly
2013/01/24 23:24:37
Another idea here: you could make Source.hashCode
Bob Nystrom
2013/01/25 18:22:50
Great idea! Done.
|
| version.hashCode; |
| bool operator ==(other) { |
| @@ -106,11 +110,12 @@ class PackageId implements Comparable { |
| // enough to uniquely identify the package and that we don't need to delve |
| // into the description. |
| return other.name == name && |
| - other.source.name == source.name && |
| + other.source == source && |
|
Jennifer Messerly
2013/01/24 23:24:37
just checking, source already implements reasonabl
Bob Nystrom
2013/01/25 18:22:50
I'm relying on identity here. Sources are effectiv
|
| other.version == version; |
| } |
| String toString() { |
| + if (isRoot) return "$name $version (root)"; |
| if (source.isDefault) return "$name $version"; |
| return "$name $version from $source"; |
| } |
| @@ -141,7 +146,8 @@ class PackageRef { |
| /// The name of the package being identified. |
| final String name; |
| - /// The [Source] used to look up the package. |
| + /// The [Source] used to look up the package. If this refers to a root |
| + /// package, this will be `null`. |
| final Source source; |
| /// The allowed package versions. |
| @@ -153,7 +159,20 @@ class PackageRef { |
| PackageRef(this.name, this.source, this.constraint, this.description); |
| - String toString() => "$name $constraint from $source ($description)"; |
| + /// Creates a reference to the given root package. |
| + PackageRef.root(Package package) |
| + : name = package.name, |
| + source = null, |
| + constraint = package.version, |
| + description = package.name; |
| + |
| + /// Whether this refers to the root package. |
| + bool get isRoot => source == null; |
| + |
| + String toString() { |
| + if (isRoot) return "$name $constraint (root)"; |
| + return "$name $constraint from $source ($description)"; |
| + } |
| /// Returns a [PackageId] generated from this [PackageRef] with the given |
| /// concrete version. |