Index: lib/src/pubspec.dart |
diff --git a/lib/src/pubspec.dart b/lib/src/pubspec.dart |
index 20fea2aa8b24c40e3cec829ac4d0f7bce6409bec..254c18844e680ca932ccbc6f8b65b5d8a8d0cd24 100644 |
--- a/lib/src/pubspec.dart |
+++ b/lib/src/pubspec.dart |
@@ -222,14 +222,30 @@ class Pubspec { |
}); |
} |
- /// The environment-related metadata. |
- PubspecEnvironment get environment { |
- if (_environment != null) return _environment; |
+ /// The constraint on the Dart SDK, or [VersionConstraint.any] if none is |
+ /// specified. |
+ VersionConstraint get dartSdkConstraint { |
+ _parseEnvironment(); |
+ return _dartSdkConstraint; |
+ } |
+ VersionConstraint _dartSdkConstraint; |
+ |
+ /// The constraint on the Flutter SDK, or `null` if none is specified. |
+ VersionConstraint get flutterSdkConstraint { |
+ _parseEnvironment(); |
+ return _flutterSdkConstraint; |
+ } |
+ VersionConstraint _flutterSdkConstraint; |
+ |
+ /// Parses the "environment" field and sets [_dartSdkConstraint] and |
+ /// [_flutterSdkConstraint] accordingly. |
+ void _parseEnvironment() { |
+ if (_dartSdkConstraint != null) return; |
var yaml = fields['environment']; |
if (yaml == null) { |
- _environment = new PubspecEnvironment(VersionConstraint.any); |
- return _environment; |
+ _dartSdkConstraint = VersionConstraint.any; |
+ return; |
} |
if (yaml is! Map) { |
@@ -237,11 +253,11 @@ class Pubspec { |
fields.nodes['environment'].span); |
} |
- _environment = new PubspecEnvironment( |
- _parseVersionConstraint(yaml.nodes['sdk'])); |
- return _environment; |
+ _dartSdkConstraint = _parseVersionConstraint(yaml.nodes['sdk']); |
+ _flutterSdkConstraint = yaml.containsKey('flutter') |
+ ? _parseVersionConstraint(yaml.nodes['flutter']) |
+ : null; |
} |
- PubspecEnvironment _environment; |
/// The URL of the server that the package should default to being published |
/// to, "none" if the package should not be published, or `null` if it should |
@@ -357,7 +373,8 @@ class Pubspec { |
Pubspec(this._name, {Version version, Iterable<PackageDep> dependencies, |
Iterable<PackageDep> devDependencies, |
Iterable<PackageDep> dependencyOverrides, |
- VersionConstraint sdkConstraint, |
+ VersionConstraint dartSdkConstraint, |
+ VersionConstraint flutterSdkConstraint, |
Iterable<Iterable<TransformerConfig>> transformers, |
Map fields, SourceRegistry sources}) |
: _version = version, |
@@ -366,7 +383,8 @@ class Pubspec { |
devDependencies.toList(), |
_dependencyOverrides = dependencyOverrides == null ? null : |
dependencyOverrides.toList(), |
- _environment = new PubspecEnvironment(sdkConstraint), |
+ _dartSdkConstraint = dartSdkConstraint ?? VersionConstraint.any, |
+ _flutterSdkConstraint = flutterSdkConstraint, |
_transformers = transformers == null ? [] : |
transformers.map((phase) => phase.toSet()).toList(), |
fields = fields == null ? new YamlMap() : new YamlMap.wrap(fields), |
@@ -378,7 +396,8 @@ class Pubspec { |
_version = Version.none, |
_dependencies = <PackageDep>[], |
_devDependencies = <PackageDep>[], |
- _environment = new PubspecEnvironment(), |
+ _dartSdkConstraint = VersionConstraint.any, |
+ _flutterSdkConstraint = null, |
_transformers = <Set<TransformerConfig>>[], |
fields = new YamlMap(); |
@@ -438,8 +457,8 @@ class Pubspec { |
_getError(() => this.dependencies); |
_getError(() => this.devDependencies); |
_getError(() => this.transformers); |
- _getError(() => this.environment); |
_getError(() => this.publishTo); |
+ _getError(() => this._parseEnvironment()); |
return errors; |
} |
@@ -529,7 +548,7 @@ class Pubspec { |
/// Parses [node] to a [VersionConstraint]. |
VersionConstraint _parseVersionConstraint(YamlNode node) { |
- if (node.value == null) return VersionConstraint.any; |
+ if (node?.value == null) return VersionConstraint.any; |
if (node.value is! String) { |
_error('A version constraint must be a string.', node.span); |
} |
@@ -589,18 +608,6 @@ class Pubspec { |
} |
} |
-/// The environment-related metadata in the pubspec. |
-/// |
-/// Corresponds to the data under the "environment:" key in the pubspec. |
-class PubspecEnvironment { |
- /// The version constraint specifying which SDK versions this package works |
- /// with. |
- final VersionConstraint sdkVersion; |
- |
- PubspecEnvironment([VersionConstraint sdk]) |
- : sdkVersion = sdk != null ? sdk : VersionConstraint.any; |
-} |
- |
/// An exception thrown when parsing a pubspec. |
/// |
/// These exceptions are often thrown lazily while accessing pubspec properties. |