Add experimental flag `inference-update-1`.
This is intended to be an umbrella for several features we plan to
implement during Q2:
- Improved type inference for methods like `Iterable.fold`
(https://github.com/dart-lang/language/issues/731).
- Promotion of final fields
(https://github.com/dart-lang/language/issues/2020).
- Other type inference and type promotion issues as time allows.
Change-Id: I31db3c15d3f6a2654650f056866c61f3d1023600
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/237924
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: William Hesse <whesse@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 45cd4ba..46404b1 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -83,7 +83,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 211;
+ static const int DATA_VERSION = 212;
static const bool _applyFileChangesSynchronously = true;
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index ca06838..ff42940 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -21,6 +21,7 @@
EnableString.extension_methods: ExperimentalFeatures.extension_methods,
EnableString.extension_types: ExperimentalFeatures.extension_types,
EnableString.generic_metadata: ExperimentalFeatures.generic_metadata,
+ EnableString.inference_update_1: ExperimentalFeatures.inference_update_1,
EnableString.macros: ExperimentalFeatures.macros,
EnableString.named_arguments_anywhere:
ExperimentalFeatures.named_arguments_anywhere,
@@ -63,6 +64,9 @@
/// String to enable the experiment "generic-metadata"
static const String generic_metadata = 'generic-metadata';
+ /// String to enable the experiment "inference-update-1"
+ static const String inference_update_1 = 'inference-update-1';
+
/// String to enable the experiment "macros"
static const String macros = 'macros';
@@ -181,8 +185,18 @@
releaseVersion: Version.parse('2.14.0'),
);
- static final macros = ExperimentalFeature(
+ static final inference_update_1 = ExperimentalFeature(
index: 8,
+ enableString: EnableString.inference_update_1,
+ isEnabledByDefault: IsEnabledByDefault.inference_update_1,
+ isExpired: IsExpired.inference_update_1,
+ documentation: 'Enhanced type inference',
+ experimentalReleaseVersion: null,
+ releaseVersion: null,
+ );
+
+ static final macros = ExperimentalFeature(
+ index: 9,
enableString: EnableString.macros,
isEnabledByDefault: IsEnabledByDefault.macros,
isExpired: IsExpired.macros,
@@ -192,7 +206,7 @@
);
static final named_arguments_anywhere = ExperimentalFeature(
- index: 9,
+ index: 10,
enableString: EnableString.named_arguments_anywhere,
isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere,
isExpired: IsExpired.named_arguments_anywhere,
@@ -202,7 +216,7 @@
);
static final non_nullable = ExperimentalFeature(
- index: 10,
+ index: 11,
enableString: EnableString.non_nullable,
isEnabledByDefault: IsEnabledByDefault.non_nullable,
isExpired: IsExpired.non_nullable,
@@ -212,7 +226,7 @@
);
static final nonfunction_type_aliases = ExperimentalFeature(
- index: 11,
+ index: 12,
enableString: EnableString.nonfunction_type_aliases,
isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases,
isExpired: IsExpired.nonfunction_type_aliases,
@@ -222,7 +236,7 @@
);
static final set_literals = ExperimentalFeature(
- index: 12,
+ index: 13,
enableString: EnableString.set_literals,
isEnabledByDefault: IsEnabledByDefault.set_literals,
isExpired: IsExpired.set_literals,
@@ -232,7 +246,7 @@
);
static final spread_collections = ExperimentalFeature(
- index: 13,
+ index: 14,
enableString: EnableString.spread_collections,
isEnabledByDefault: IsEnabledByDefault.spread_collections,
isExpired: IsExpired.spread_collections,
@@ -242,7 +256,7 @@
);
static final super_parameters = ExperimentalFeature(
- index: 14,
+ index: 15,
enableString: EnableString.super_parameters,
isEnabledByDefault: IsEnabledByDefault.super_parameters,
isExpired: IsExpired.super_parameters,
@@ -252,7 +266,7 @@
);
static final test_experiment = ExperimentalFeature(
- index: 15,
+ index: 16,
enableString: EnableString.test_experiment,
isEnabledByDefault: IsEnabledByDefault.test_experiment,
isExpired: IsExpired.test_experiment,
@@ -263,7 +277,7 @@
);
static final triple_shift = ExperimentalFeature(
- index: 16,
+ index: 17,
enableString: EnableString.triple_shift,
isEnabledByDefault: IsEnabledByDefault.triple_shift,
isExpired: IsExpired.triple_shift,
@@ -273,7 +287,7 @@
);
static final value_class = ExperimentalFeature(
- index: 17,
+ index: 18,
enableString: EnableString.value_class,
isEnabledByDefault: IsEnabledByDefault.value_class,
isExpired: IsExpired.value_class,
@@ -283,7 +297,7 @@
);
static final variance = ExperimentalFeature(
- index: 18,
+ index: 19,
enableString: EnableString.variance,
isEnabledByDefault: IsEnabledByDefault.variance,
isExpired: IsExpired.variance,
@@ -320,6 +334,9 @@
/// Default state of the experiment "generic-metadata"
static const bool generic_metadata = true;
+ /// Default state of the experiment "inference-update-1"
+ static const bool inference_update_1 = false;
+
/// Default state of the experiment "macros"
static const bool macros = false;
@@ -382,6 +399,9 @@
/// Expiration status of the experiment "generic-metadata"
static const bool generic_metadata = true;
+ /// Expiration status of the experiment "inference-update-1"
+ static const bool inference_update_1 = false;
+
/// Expiration status of the experiment "macros"
static const bool macros = false;
@@ -445,6 +465,10 @@
/// Current state for the flag "generic-metadata"
bool get generic_metadata => isEnabled(ExperimentalFeatures.generic_metadata);
+ /// Current state for the flag "inference-update-1"
+ bool get inference_update_1 =>
+ isEnabled(ExperimentalFeatures.inference_update_1);
+
/// Current state for the flag "macros"
bool get macros => isEnabled(ExperimentalFeatures.macros);
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index 953dfa4..e6a113c 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -19,6 +19,7 @@
extensionMethods,
extensionTypes,
genericMetadata,
+ inferenceUpdate1,
macros,
namedArgumentsAnywhere,
nonNullable,
@@ -42,6 +43,7 @@
const Version enableExtensionMethodsVersion = const Version(2, 6);
const Version enableExtensionTypesVersion = const Version(2, 17);
const Version enableGenericMetadataVersion = const Version(2, 14);
+const Version enableInferenceUpdate1Version = const Version(2, 17);
const Version enableMacrosVersion = const Version(2, 17);
const Version enableNamedArgumentsAnywhereVersion = const Version(2, 17);
const Version enableNonNullableVersion = const Version(2, 12);
@@ -74,6 +76,8 @@
return ExperimentalFlag.extensionTypes;
case "generic-metadata":
return ExperimentalFlag.genericMetadata;
+ case "inference-update-1":
+ return ExperimentalFlag.inferenceUpdate1;
case "macros":
return ExperimentalFlag.macros;
case "named-arguments-anywhere":
@@ -110,6 +114,7 @@
ExperimentalFlag.extensionMethods: true,
ExperimentalFlag.extensionTypes: false,
ExperimentalFlag.genericMetadata: true,
+ ExperimentalFlag.inferenceUpdate1: false,
ExperimentalFlag.macros: false,
ExperimentalFlag.namedArgumentsAnywhere: true,
ExperimentalFlag.nonNullable: true,
@@ -133,6 +138,7 @@
ExperimentalFlag.extensionMethods: true,
ExperimentalFlag.extensionTypes: false,
ExperimentalFlag.genericMetadata: true,
+ ExperimentalFlag.inferenceUpdate1: false,
ExperimentalFlag.macros: false,
ExperimentalFlag.namedArgumentsAnywhere: false,
ExperimentalFlag.nonNullable: true,
@@ -156,6 +162,7 @@
ExperimentalFlag.extensionMethods: const Version(2, 6),
ExperimentalFlag.extensionTypes: const Version(2, 17),
ExperimentalFlag.genericMetadata: const Version(2, 14),
+ ExperimentalFlag.inferenceUpdate1: const Version(2, 17),
ExperimentalFlag.macros: const Version(2, 17),
ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 17),
ExperimentalFlag.nonNullable: const Version(2, 12),
@@ -179,6 +186,7 @@
ExperimentalFlag.extensionMethods: const Version(2, 6),
ExperimentalFlag.extensionTypes: const Version(2, 17),
ExperimentalFlag.genericMetadata: const Version(2, 14),
+ ExperimentalFlag.inferenceUpdate1: const Version(2, 17),
ExperimentalFlag.macros: const Version(2, 17),
ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 17),
ExperimentalFlag.nonNullable: const Version(2, 10),
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 0fd686d..012b604 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -125,6 +125,9 @@
macros:
help: "Static meta-programming"
+ inference-update-1:
+ help: "Enhanced type inference"
+
# Experiment flag only used for testing.
test-experiment:
help: >-