mirror of
https://github.com/dart-lang/sdk
synced 2024-09-30 04:48:37 +00:00
[null-aware-elements] Add experiment flag 'null-aware-elements'.
Part of https://github.com/dart-lang/sdk/issues/55949 Closes https://github.com/dart-lang/sdk/issues/55926 Change-Id: Ic8c6a9226bcad54daf99e01746044045937376b1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/369960 Commit-Queue: Chloe Stefantsova <cstefantsova@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com> Reviewed-by: Slava Egorov <vegorov@google.com> Reviewed-by: Keerti Parthasarathy <keertip@google.com>
This commit is contained in:
parent
06a7c30b9d
commit
957106e29d
|
@ -129,6 +129,13 @@ enum ExperimentalFlag {
|
|||
experimentEnabledVersion: const Version(2, 13),
|
||||
experimentReleasedVersion: const Version(2, 13)),
|
||||
|
||||
nullAwareElements(
|
||||
name: 'null-aware-elements',
|
||||
isEnabledByDefault: false,
|
||||
isExpired: false,
|
||||
experimentEnabledVersion: defaultLanguageVersion,
|
||||
experimentReleasedVersion: defaultLanguageVersion),
|
||||
|
||||
patterns(
|
||||
name: 'patterns',
|
||||
isEnabledByDefault: true,
|
||||
|
|
|
@ -49,6 +49,9 @@ abstract class Feature {
|
|||
/// Feature information for macros.
|
||||
static final macros = ExperimentalFeatures.macros;
|
||||
|
||||
/// Feature information for null-aware elements.
|
||||
static final null_aware_elements = ExperimentalFeatures.null_aware_elements;
|
||||
|
||||
/// Feature information for patterns.
|
||||
static final patterns = ExperimentalFeatures.patterns;
|
||||
|
||||
|
|
|
@ -95,7 +95,7 @@ import 'package:meta/meta.dart';
|
|||
// TODO(scheglov): Clean up the list of implicitly analyzed files.
|
||||
class AnalysisDriver {
|
||||
/// The version of data format, should be incremented on every format change.
|
||||
static const int DATA_VERSION = 368;
|
||||
static const int DATA_VERSION = 369;
|
||||
|
||||
/// The number of exception contexts allowed to write. Once this field is
|
||||
/// zero, we stop writing any new exception contexts in this process.
|
||||
|
|
|
@ -36,6 +36,7 @@ final _knownFeatures = <String, ExperimentalFeature>{
|
|||
EnableString.non_nullable: ExperimentalFeatures.non_nullable,
|
||||
EnableString.nonfunction_type_aliases:
|
||||
ExperimentalFeatures.nonfunction_type_aliases,
|
||||
EnableString.null_aware_elements: ExperimentalFeatures.null_aware_elements,
|
||||
EnableString.patterns: ExperimentalFeatures.patterns,
|
||||
EnableString.records: ExperimentalFeatures.records,
|
||||
EnableString.resource_identifiers: ExperimentalFeatures.resource_identifiers,
|
||||
|
@ -104,6 +105,9 @@ class EnableString {
|
|||
/// String to enable the experiment "nonfunction-type-aliases"
|
||||
static const String nonfunction_type_aliases = 'nonfunction-type-aliases';
|
||||
|
||||
/// String to enable the experiment "null-aware-elements"
|
||||
static const String null_aware_elements = 'null-aware-elements';
|
||||
|
||||
/// String to enable the experiment "patterns"
|
||||
static const String patterns = 'patterns';
|
||||
|
||||
|
@ -317,8 +321,18 @@ class ExperimentalFeatures {
|
|||
releaseVersion: Version.parse('2.13.0'),
|
||||
);
|
||||
|
||||
static final patterns = ExperimentalFeature(
|
||||
static final null_aware_elements = ExperimentalFeature(
|
||||
index: 17,
|
||||
enableString: EnableString.null_aware_elements,
|
||||
isEnabledByDefault: IsEnabledByDefault.null_aware_elements,
|
||||
isExpired: IsExpired.null_aware_elements,
|
||||
documentation: 'Null-aware elements and map entries in collections.',
|
||||
experimentalReleaseVersion: null,
|
||||
releaseVersion: null,
|
||||
);
|
||||
|
||||
static final patterns = ExperimentalFeature(
|
||||
index: 18,
|
||||
enableString: EnableString.patterns,
|
||||
isEnabledByDefault: IsEnabledByDefault.patterns,
|
||||
isExpired: IsExpired.patterns,
|
||||
|
@ -328,7 +342,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final records = ExperimentalFeature(
|
||||
index: 18,
|
||||
index: 19,
|
||||
enableString: EnableString.records,
|
||||
isEnabledByDefault: IsEnabledByDefault.records,
|
||||
isExpired: IsExpired.records,
|
||||
|
@ -338,7 +352,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final resource_identifiers = ExperimentalFeature(
|
||||
index: 19,
|
||||
index: 20,
|
||||
enableString: EnableString.resource_identifiers,
|
||||
isEnabledByDefault: IsEnabledByDefault.resource_identifiers,
|
||||
isExpired: IsExpired.resource_identifiers,
|
||||
|
@ -348,7 +362,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final sealed_class = ExperimentalFeature(
|
||||
index: 20,
|
||||
index: 21,
|
||||
enableString: EnableString.sealed_class,
|
||||
isEnabledByDefault: IsEnabledByDefault.sealed_class,
|
||||
isExpired: IsExpired.sealed_class,
|
||||
|
@ -358,7 +372,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final set_literals = ExperimentalFeature(
|
||||
index: 21,
|
||||
index: 22,
|
||||
enableString: EnableString.set_literals,
|
||||
isEnabledByDefault: IsEnabledByDefault.set_literals,
|
||||
isExpired: IsExpired.set_literals,
|
||||
|
@ -368,7 +382,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final spread_collections = ExperimentalFeature(
|
||||
index: 22,
|
||||
index: 23,
|
||||
enableString: EnableString.spread_collections,
|
||||
isEnabledByDefault: IsEnabledByDefault.spread_collections,
|
||||
isExpired: IsExpired.spread_collections,
|
||||
|
@ -378,7 +392,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final super_parameters = ExperimentalFeature(
|
||||
index: 23,
|
||||
index: 24,
|
||||
enableString: EnableString.super_parameters,
|
||||
isEnabledByDefault: IsEnabledByDefault.super_parameters,
|
||||
isExpired: IsExpired.super_parameters,
|
||||
|
@ -388,7 +402,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final test_experiment = ExperimentalFeature(
|
||||
index: 24,
|
||||
index: 25,
|
||||
enableString: EnableString.test_experiment,
|
||||
isEnabledByDefault: IsEnabledByDefault.test_experiment,
|
||||
isExpired: IsExpired.test_experiment,
|
||||
|
@ -399,7 +413,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final triple_shift = ExperimentalFeature(
|
||||
index: 25,
|
||||
index: 26,
|
||||
enableString: EnableString.triple_shift,
|
||||
isEnabledByDefault: IsEnabledByDefault.triple_shift,
|
||||
isExpired: IsExpired.triple_shift,
|
||||
|
@ -409,7 +423,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final unnamed_libraries = ExperimentalFeature(
|
||||
index: 26,
|
||||
index: 27,
|
||||
enableString: EnableString.unnamed_libraries,
|
||||
isEnabledByDefault: IsEnabledByDefault.unnamed_libraries,
|
||||
isExpired: IsExpired.unnamed_libraries,
|
||||
|
@ -419,7 +433,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final variance = ExperimentalFeature(
|
||||
index: 27,
|
||||
index: 28,
|
||||
enableString: EnableString.variance,
|
||||
isEnabledByDefault: IsEnabledByDefault.variance,
|
||||
isExpired: IsExpired.variance,
|
||||
|
@ -429,7 +443,7 @@ class ExperimentalFeatures {
|
|||
);
|
||||
|
||||
static final wildcard_variables = ExperimentalFeature(
|
||||
index: 28,
|
||||
index: 29,
|
||||
enableString: EnableString.wildcard_variables,
|
||||
isEnabledByDefault: IsEnabledByDefault.wildcard_variables,
|
||||
isExpired: IsExpired.wildcard_variables,
|
||||
|
@ -494,6 +508,9 @@ class IsEnabledByDefault {
|
|||
/// Default state of the experiment "nonfunction-type-aliases"
|
||||
static const bool nonfunction_type_aliases = true;
|
||||
|
||||
/// Default state of the experiment "null-aware-elements"
|
||||
static const bool null_aware_elements = false;
|
||||
|
||||
/// Default state of the experiment "patterns"
|
||||
static const bool patterns = true;
|
||||
|
||||
|
@ -586,6 +603,9 @@ class IsExpired {
|
|||
/// Expiration status of the experiment "nonfunction-type-aliases"
|
||||
static const bool nonfunction_type_aliases = true;
|
||||
|
||||
/// Expiration status of the experiment "null-aware-elements"
|
||||
static const bool null_aware_elements = false;
|
||||
|
||||
/// Expiration status of the experiment "patterns"
|
||||
static const bool patterns = true;
|
||||
|
||||
|
@ -684,6 +704,10 @@ mixin _CurrentState {
|
|||
bool get nonfunction_type_aliases =>
|
||||
isEnabled(ExperimentalFeatures.nonfunction_type_aliases);
|
||||
|
||||
/// Current state for the flag "null-aware-elements"
|
||||
bool get null_aware_elements =>
|
||||
isEnabled(ExperimentalFeatures.null_aware_elements);
|
||||
|
||||
/// Current state for the flag "patterns"
|
||||
bool get patterns => isEnabled(ExperimentalFeatures.patterns);
|
||||
|
||||
|
|
|
@ -195,6 +195,14 @@ class ExperimentalFlag {
|
|||
experimentEnabledVersion: const Version(2, 13),
|
||||
experimentReleasedVersion: const Version(2, 13));
|
||||
|
||||
static const ExperimentalFlag nullAwareElements = const ExperimentalFlag(
|
||||
name: 'null-aware-elements',
|
||||
isEnabledByDefault: false,
|
||||
isExpired: false,
|
||||
enabledVersion: defaultLanguageVersion,
|
||||
experimentEnabledVersion: defaultLanguageVersion,
|
||||
experimentReleasedVersion: defaultLanguageVersion);
|
||||
|
||||
static const ExperimentalFlag patterns = const ExperimentalFlag(
|
||||
name: 'patterns',
|
||||
isEnabledByDefault: true,
|
||||
|
@ -410,6 +418,10 @@ class GlobalFeatures {
|
|||
GlobalFeature get nonfunctionTypeAliases => _nonfunctionTypeAliases ??=
|
||||
_computeGlobalFeature(ExperimentalFlag.nonfunctionTypeAliases);
|
||||
|
||||
GlobalFeature? _nullAwareElements;
|
||||
GlobalFeature get nullAwareElements => _nullAwareElements ??=
|
||||
_computeGlobalFeature(ExperimentalFlag.nullAwareElements);
|
||||
|
||||
GlobalFeature? _patterns;
|
||||
GlobalFeature get patterns =>
|
||||
_patterns ??= _computeGlobalFeature(ExperimentalFlag.patterns);
|
||||
|
@ -567,6 +579,11 @@ class LibraryFeatures {
|
|||
canonicalUri,
|
||||
libraryVersion);
|
||||
|
||||
LibraryFeature? _nullAwareElements;
|
||||
LibraryFeature get nullAwareElements =>
|
||||
_nullAwareElements ??= globalFeatures._computeLibraryFeature(
|
||||
ExperimentalFlag.nullAwareElements, canonicalUri, libraryVersion);
|
||||
|
||||
LibraryFeature? _patterns;
|
||||
LibraryFeature get patterns =>
|
||||
_patterns ??= globalFeatures._computeLibraryFeature(
|
||||
|
@ -665,6 +682,8 @@ class LibraryFeatures {
|
|||
return nonNullable;
|
||||
case shared.ExperimentalFlag.nonfunctionTypeAliases:
|
||||
return nonfunctionTypeAliases;
|
||||
case shared.ExperimentalFlag.nullAwareElements:
|
||||
return nullAwareElements;
|
||||
case shared.ExperimentalFlag.patterns:
|
||||
return patterns;
|
||||
case shared.ExperimentalFlag.records:
|
||||
|
@ -731,6 +750,8 @@ ExperimentalFlag? parseExperimentalFlag(String flag) {
|
|||
return ExperimentalFlag.nonNullable;
|
||||
case "nonfunction-type-aliases":
|
||||
return ExperimentalFlag.nonfunctionTypeAliases;
|
||||
case "null-aware-elements":
|
||||
return ExperimentalFlag.nullAwareElements;
|
||||
case "patterns":
|
||||
return ExperimentalFlag.patterns;
|
||||
case "records":
|
||||
|
@ -793,6 +814,8 @@ final Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
|
|||
ExperimentalFlag.nonNullable: ExperimentalFlag.nonNullable.isEnabledByDefault,
|
||||
ExperimentalFlag.nonfunctionTypeAliases:
|
||||
ExperimentalFlag.nonfunctionTypeAliases.isEnabledByDefault,
|
||||
ExperimentalFlag.nullAwareElements:
|
||||
ExperimentalFlag.nullAwareElements.isEnabledByDefault,
|
||||
ExperimentalFlag.patterns: ExperimentalFlag.patterns.isEnabledByDefault,
|
||||
ExperimentalFlag.records: ExperimentalFlag.records.isEnabledByDefault,
|
||||
ExperimentalFlag.resourceIdentifiers:
|
||||
|
@ -844,6 +867,7 @@ const Map<shared.ExperimentalFlag, ExperimentalFlag> sharedExperimentalFlags = {
|
|||
shared.ExperimentalFlag.nonNullable: ExperimentalFlag.nonNullable,
|
||||
shared.ExperimentalFlag.nonfunctionTypeAliases:
|
||||
ExperimentalFlag.nonfunctionTypeAliases,
|
||||
shared.ExperimentalFlag.nullAwareElements: ExperimentalFlag.nullAwareElements,
|
||||
shared.ExperimentalFlag.patterns: ExperimentalFlag.patterns,
|
||||
shared.ExperimentalFlag.records: ExperimentalFlag.records,
|
||||
shared.ExperimentalFlag.resourceIdentifiers:
|
||||
|
|
|
@ -18,10 +18,10 @@ const Map<String, ({int hitCount, int missCount})> _expect = {
|
|||
hitCount: 66,
|
||||
missCount: 8,
|
||||
),
|
||||
// 55.28846153846154%.
|
||||
// 54.07925407925408%.
|
||||
"package:front_end/src/api_prototype/experimental_flags_generated.dart": (
|
||||
hitCount: 230,
|
||||
missCount: 186,
|
||||
hitCount: 232,
|
||||
missCount: 197,
|
||||
),
|
||||
// 33.33333333333333%.
|
||||
"package:front_end/src/api_prototype/file_system.dart": (
|
||||
|
@ -753,10 +753,10 @@ const Map<String, ({int hitCount, int missCount})> _expect = {
|
|||
hitCount: 118,
|
||||
missCount: 6,
|
||||
),
|
||||
// 93.60488798370672%.
|
||||
// 93.47120843471208%.
|
||||
"package:front_end/src/source/outline_builder.dart": (
|
||||
hitCount: 2298,
|
||||
missCount: 157,
|
||||
hitCount: 2305,
|
||||
missCount: 161,
|
||||
),
|
||||
// 94.44444444444444%.
|
||||
"package:front_end/src/source/redirecting_factory_body.dart": (
|
||||
|
@ -809,9 +809,9 @@ const Map<String, ({int hitCount, int missCount})> _expect = {
|
|||
hitCount: 295,
|
||||
missCount: 35,
|
||||
),
|
||||
// 85.36585365853658%.
|
||||
// 85.3836784409257%.
|
||||
"package:front_end/src/source/source_library_builder.dart": (
|
||||
hitCount: 3500,
|
||||
hitCount: 3505,
|
||||
missCount: 600,
|
||||
),
|
||||
// 81.8988464951198%.
|
||||
|
|
|
@ -358,6 +358,9 @@ features:
|
|||
}
|
||||
expired: true
|
||||
|
||||
null-aware-elements:
|
||||
help: "Null-aware elements and map entries in collections."
|
||||
|
||||
extension-methods:
|
||||
help: "Extension Methods"
|
||||
enabledIn: '2.6.0'
|
||||
|
|
Loading…
Reference in a new issue