1
0
mirror of https://github.com/dart-lang/sdk synced 2024-07-08 12:06:26 +00:00

Add experiment flag inference-update-3.

I plan to use this to guard my work on
https://github.com/dart-lang/language/issues/3471.

Bug: https://github.com/dart-lang/language/issues/3471
Change-Id: I49afae7260c14b8c6b646ccc0ee39efae3891c34
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/338649
Reviewed-by: Michael Thomsen <mit@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Paul Berry 2023-12-05 17:50:30 +00:00 committed by Commit Queue
parent 9c0b1e06db
commit d79b9d8cd2
6 changed files with 80 additions and 18 deletions

View File

@ -80,6 +80,13 @@ enum ExperimentalFlag {
experimentEnabledVersion: const Version(3, 2), experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2)), experimentReleasedVersion: const Version(3, 2)),
inferenceUpdate3(
name: 'inference-update-3',
isEnabledByDefault: false,
isExpired: false,
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion),
inlineClass( inlineClass(
name: 'inline-class', name: 'inline-class',
isEnabledByDefault: true, isEnabledByDefault: true,

View File

@ -40,6 +40,9 @@ abstract class Feature {
/// Feature information for inference-update-2. /// Feature information for inference-update-2.
static final inference_update_2 = ExperimentalFeatures.inference_update_2; static final inference_update_2 = ExperimentalFeatures.inference_update_2;
/// Feature information for inference-update-3.
static final inference_update_3 = ExperimentalFeatures.inference_update_3;
/// Feature information for inline classes. /// Feature information for inline classes.
static final inline_class = ExperimentalFeatures.inline_class; static final inline_class = ExperimentalFeatures.inline_class;

View File

@ -88,7 +88,7 @@ import 'package:analyzer/src/utilities/uri_cache.dart';
// TODO(scheglov): Clean up the list of implicitly analyzed files. // TODO(scheglov): Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric { class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change. /// The version of data format, should be incremented on every format change.
static const int DATA_VERSION = 322; static const int DATA_VERSION = 323;
/// The number of exception contexts allowed to write. Once this field is /// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process. /// zero, we stop writing any new exception contexts in this process.

View File

@ -27,6 +27,7 @@ final _knownFeatures = <String, ExperimentalFeature>{
EnableString.generic_metadata: ExperimentalFeatures.generic_metadata, EnableString.generic_metadata: ExperimentalFeatures.generic_metadata,
EnableString.inference_update_1: ExperimentalFeatures.inference_update_1, EnableString.inference_update_1: ExperimentalFeatures.inference_update_1,
EnableString.inference_update_2: ExperimentalFeatures.inference_update_2, EnableString.inference_update_2: ExperimentalFeatures.inference_update_2,
EnableString.inference_update_3: ExperimentalFeatures.inference_update_3,
EnableString.inline_class: ExperimentalFeatures.inline_class, EnableString.inline_class: ExperimentalFeatures.inline_class,
EnableString.macros: ExperimentalFeatures.macros, EnableString.macros: ExperimentalFeatures.macros,
EnableString.named_arguments_anywhere: EnableString.named_arguments_anywhere:
@ -81,6 +82,9 @@ class EnableString {
/// String to enable the experiment "inference-update-2" /// String to enable the experiment "inference-update-2"
static const String inference_update_2 = 'inference-update-2'; static const String inference_update_2 = 'inference-update-2';
/// String to enable the experiment "inference-update-3"
static const String inference_update_3 = 'inference-update-3';
/// String to enable the experiment "inline-class" /// String to enable the experiment "inline-class"
static const String inline_class = 'inline-class'; static const String inline_class = 'inline-class';
@ -238,8 +242,19 @@ class ExperimentalFeatures {
releaseVersion: Version.parse('3.2.0'), releaseVersion: Version.parse('3.2.0'),
); );
static final inline_class = ExperimentalFeature( static final inference_update_3 = ExperimentalFeature(
index: 10, index: 10,
enableString: EnableString.inference_update_3,
isEnabledByDefault: IsEnabledByDefault.inference_update_3,
isExpired: IsExpired.inference_update_3,
documentation:
'Better handling of coercions, conditional expressions, and switch expressions.',
experimentalReleaseVersion: null,
releaseVersion: null,
);
static final inline_class = ExperimentalFeature(
index: 11,
enableString: EnableString.inline_class, enableString: EnableString.inline_class,
isEnabledByDefault: IsEnabledByDefault.inline_class, isEnabledByDefault: IsEnabledByDefault.inline_class,
isExpired: IsExpired.inline_class, isExpired: IsExpired.inline_class,
@ -249,7 +264,7 @@ class ExperimentalFeatures {
); );
static final macros = ExperimentalFeature( static final macros = ExperimentalFeature(
index: 11, index: 12,
enableString: EnableString.macros, enableString: EnableString.macros,
isEnabledByDefault: IsEnabledByDefault.macros, isEnabledByDefault: IsEnabledByDefault.macros,
isExpired: IsExpired.macros, isExpired: IsExpired.macros,
@ -259,7 +274,7 @@ class ExperimentalFeatures {
); );
static final named_arguments_anywhere = ExperimentalFeature( static final named_arguments_anywhere = ExperimentalFeature(
index: 12, index: 13,
enableString: EnableString.named_arguments_anywhere, enableString: EnableString.named_arguments_anywhere,
isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere, isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere,
isExpired: IsExpired.named_arguments_anywhere, isExpired: IsExpired.named_arguments_anywhere,
@ -269,7 +284,7 @@ class ExperimentalFeatures {
); );
static final native_assets = ExperimentalFeature( static final native_assets = ExperimentalFeature(
index: 13, index: 14,
enableString: EnableString.native_assets, enableString: EnableString.native_assets,
isEnabledByDefault: IsEnabledByDefault.native_assets, isEnabledByDefault: IsEnabledByDefault.native_assets,
isExpired: IsExpired.native_assets, isExpired: IsExpired.native_assets,
@ -279,7 +294,7 @@ class ExperimentalFeatures {
); );
static final non_nullable = ExperimentalFeature( static final non_nullable = ExperimentalFeature(
index: 14, index: 15,
enableString: EnableString.non_nullable, enableString: EnableString.non_nullable,
isEnabledByDefault: IsEnabledByDefault.non_nullable, isEnabledByDefault: IsEnabledByDefault.non_nullable,
isExpired: IsExpired.non_nullable, isExpired: IsExpired.non_nullable,
@ -289,7 +304,7 @@ class ExperimentalFeatures {
); );
static final nonfunction_type_aliases = ExperimentalFeature( static final nonfunction_type_aliases = ExperimentalFeature(
index: 15, index: 16,
enableString: EnableString.nonfunction_type_aliases, enableString: EnableString.nonfunction_type_aliases,
isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases, isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases,
isExpired: IsExpired.nonfunction_type_aliases, isExpired: IsExpired.nonfunction_type_aliases,
@ -299,7 +314,7 @@ class ExperimentalFeatures {
); );
static final patterns = ExperimentalFeature( static final patterns = ExperimentalFeature(
index: 16, index: 17,
enableString: EnableString.patterns, enableString: EnableString.patterns,
isEnabledByDefault: IsEnabledByDefault.patterns, isEnabledByDefault: IsEnabledByDefault.patterns,
isExpired: IsExpired.patterns, isExpired: IsExpired.patterns,
@ -309,7 +324,7 @@ class ExperimentalFeatures {
); );
static final records = ExperimentalFeature( static final records = ExperimentalFeature(
index: 17, index: 18,
enableString: EnableString.records, enableString: EnableString.records,
isEnabledByDefault: IsEnabledByDefault.records, isEnabledByDefault: IsEnabledByDefault.records,
isExpired: IsExpired.records, isExpired: IsExpired.records,
@ -319,7 +334,7 @@ class ExperimentalFeatures {
); );
static final resource_identifiers = ExperimentalFeature( static final resource_identifiers = ExperimentalFeature(
index: 18, index: 19,
enableString: EnableString.resource_identifiers, enableString: EnableString.resource_identifiers,
isEnabledByDefault: IsEnabledByDefault.resource_identifiers, isEnabledByDefault: IsEnabledByDefault.resource_identifiers,
isExpired: IsExpired.resource_identifiers, isExpired: IsExpired.resource_identifiers,
@ -329,7 +344,7 @@ class ExperimentalFeatures {
); );
static final sealed_class = ExperimentalFeature( static final sealed_class = ExperimentalFeature(
index: 19, index: 20,
enableString: EnableString.sealed_class, enableString: EnableString.sealed_class,
isEnabledByDefault: IsEnabledByDefault.sealed_class, isEnabledByDefault: IsEnabledByDefault.sealed_class,
isExpired: IsExpired.sealed_class, isExpired: IsExpired.sealed_class,
@ -339,7 +354,7 @@ class ExperimentalFeatures {
); );
static final set_literals = ExperimentalFeature( static final set_literals = ExperimentalFeature(
index: 20, index: 21,
enableString: EnableString.set_literals, enableString: EnableString.set_literals,
isEnabledByDefault: IsEnabledByDefault.set_literals, isEnabledByDefault: IsEnabledByDefault.set_literals,
isExpired: IsExpired.set_literals, isExpired: IsExpired.set_literals,
@ -349,7 +364,7 @@ class ExperimentalFeatures {
); );
static final spread_collections = ExperimentalFeature( static final spread_collections = ExperimentalFeature(
index: 21, index: 22,
enableString: EnableString.spread_collections, enableString: EnableString.spread_collections,
isEnabledByDefault: IsEnabledByDefault.spread_collections, isEnabledByDefault: IsEnabledByDefault.spread_collections,
isExpired: IsExpired.spread_collections, isExpired: IsExpired.spread_collections,
@ -359,7 +374,7 @@ class ExperimentalFeatures {
); );
static final super_parameters = ExperimentalFeature( static final super_parameters = ExperimentalFeature(
index: 22, index: 23,
enableString: EnableString.super_parameters, enableString: EnableString.super_parameters,
isEnabledByDefault: IsEnabledByDefault.super_parameters, isEnabledByDefault: IsEnabledByDefault.super_parameters,
isExpired: IsExpired.super_parameters, isExpired: IsExpired.super_parameters,
@ -369,7 +384,7 @@ class ExperimentalFeatures {
); );
static final test_experiment = ExperimentalFeature( static final test_experiment = ExperimentalFeature(
index: 23, index: 24,
enableString: EnableString.test_experiment, enableString: EnableString.test_experiment,
isEnabledByDefault: IsEnabledByDefault.test_experiment, isEnabledByDefault: IsEnabledByDefault.test_experiment,
isExpired: IsExpired.test_experiment, isExpired: IsExpired.test_experiment,
@ -380,7 +395,7 @@ class ExperimentalFeatures {
); );
static final triple_shift = ExperimentalFeature( static final triple_shift = ExperimentalFeature(
index: 24, index: 25,
enableString: EnableString.triple_shift, enableString: EnableString.triple_shift,
isEnabledByDefault: IsEnabledByDefault.triple_shift, isEnabledByDefault: IsEnabledByDefault.triple_shift,
isExpired: IsExpired.triple_shift, isExpired: IsExpired.triple_shift,
@ -390,7 +405,7 @@ class ExperimentalFeatures {
); );
static final unnamed_libraries = ExperimentalFeature( static final unnamed_libraries = ExperimentalFeature(
index: 25, index: 26,
enableString: EnableString.unnamed_libraries, enableString: EnableString.unnamed_libraries,
isEnabledByDefault: IsEnabledByDefault.unnamed_libraries, isEnabledByDefault: IsEnabledByDefault.unnamed_libraries,
isExpired: IsExpired.unnamed_libraries, isExpired: IsExpired.unnamed_libraries,
@ -400,7 +415,7 @@ class ExperimentalFeatures {
); );
static final variance = ExperimentalFeature( static final variance = ExperimentalFeature(
index: 26, index: 27,
enableString: EnableString.variance, enableString: EnableString.variance,
isEnabledByDefault: IsEnabledByDefault.variance, isEnabledByDefault: IsEnabledByDefault.variance,
isExpired: IsExpired.variance, isExpired: IsExpired.variance,
@ -443,6 +458,9 @@ class IsEnabledByDefault {
/// Default state of the experiment "inference-update-2" /// Default state of the experiment "inference-update-2"
static const bool inference_update_2 = true; static const bool inference_update_2 = true;
/// Default state of the experiment "inference-update-3"
static const bool inference_update_3 = false;
/// Default state of the experiment "inline-class" /// Default state of the experiment "inline-class"
static const bool inline_class = true; static const bool inline_class = true;
@ -529,6 +547,9 @@ class IsExpired {
/// Expiration status of the experiment "inference-update-2" /// Expiration status of the experiment "inference-update-2"
static const bool inference_update_2 = false; static const bool inference_update_2 = false;
/// Expiration status of the experiment "inference-update-3"
static const bool inference_update_3 = false;
/// Expiration status of the experiment "inline-class" /// Expiration status of the experiment "inline-class"
static const bool inline_class = false; static const bool inline_class = false;
@ -618,6 +639,10 @@ mixin _CurrentState {
bool get inference_update_2 => bool get inference_update_2 =>
isEnabled(ExperimentalFeatures.inference_update_2); isEnabled(ExperimentalFeatures.inference_update_2);
/// Current state for the flag "inference-update-3"
bool get inference_update_3 =>
isEnabled(ExperimentalFeatures.inference_update_3);
/// Current state for the flag "inline-class" /// Current state for the flag "inline-class"
bool get inline_class => isEnabled(ExperimentalFeatures.inline_class); bool get inline_class => isEnabled(ExperimentalFeatures.inline_class);

View File

@ -139,6 +139,14 @@ class ExperimentalFlag {
experimentEnabledVersion: const Version(3, 2), experimentEnabledVersion: const Version(3, 2),
experimentReleasedVersion: const Version(3, 2)); experimentReleasedVersion: const Version(3, 2));
static const ExperimentalFlag inferenceUpdate3 = const ExperimentalFlag(
name: 'inference-update-3',
isEnabledByDefault: false,
isExpired: false,
enabledVersion: defaultLanguageVersion,
experimentEnabledVersion: defaultLanguageVersion,
experimentReleasedVersion: defaultLanguageVersion);
static const ExperimentalFlag inlineClass = const ExperimentalFlag( static const ExperimentalFlag inlineClass = const ExperimentalFlag(
name: 'inline-class', name: 'inline-class',
isEnabledByDefault: true, isEnabledByDefault: true,
@ -366,6 +374,10 @@ class GlobalFeatures {
GlobalFeature get inferenceUpdate2 => _inferenceUpdate2 ??= GlobalFeature get inferenceUpdate2 => _inferenceUpdate2 ??=
_computeGlobalFeature(ExperimentalFlag.inferenceUpdate2); _computeGlobalFeature(ExperimentalFlag.inferenceUpdate2);
GlobalFeature? _inferenceUpdate3;
GlobalFeature get inferenceUpdate3 => _inferenceUpdate3 ??=
_computeGlobalFeature(ExperimentalFlag.inferenceUpdate3);
GlobalFeature? _inlineClass; GlobalFeature? _inlineClass;
GlobalFeature get inlineClass => GlobalFeature get inlineClass =>
_inlineClass ??= _computeGlobalFeature(ExperimentalFlag.inlineClass); _inlineClass ??= _computeGlobalFeature(ExperimentalFlag.inlineClass);
@ -504,6 +516,11 @@ class LibraryFeatures {
_inferenceUpdate2 ??= globalFeatures._computeLibraryFeature( _inferenceUpdate2 ??= globalFeatures._computeLibraryFeature(
ExperimentalFlag.inferenceUpdate2, canonicalUri, libraryVersion); ExperimentalFlag.inferenceUpdate2, canonicalUri, libraryVersion);
LibraryFeature? _inferenceUpdate3;
LibraryFeature get inferenceUpdate3 =>
_inferenceUpdate3 ??= globalFeatures._computeLibraryFeature(
ExperimentalFlag.inferenceUpdate3, canonicalUri, libraryVersion);
LibraryFeature? _inlineClass; LibraryFeature? _inlineClass;
LibraryFeature get inlineClass => LibraryFeature get inlineClass =>
_inlineClass ??= globalFeatures._computeLibraryFeature( _inlineClass ??= globalFeatures._computeLibraryFeature(
@ -617,6 +634,8 @@ class LibraryFeatures {
return inferenceUpdate1; return inferenceUpdate1;
case shared.ExperimentalFlag.inferenceUpdate2: case shared.ExperimentalFlag.inferenceUpdate2:
return inferenceUpdate2; return inferenceUpdate2;
case shared.ExperimentalFlag.inferenceUpdate3:
return inferenceUpdate3;
case shared.ExperimentalFlag.inlineClass: case shared.ExperimentalFlag.inlineClass:
return inlineClass; return inlineClass;
case shared.ExperimentalFlag.macros: case shared.ExperimentalFlag.macros:
@ -682,6 +701,8 @@ ExperimentalFlag? parseExperimentalFlag(String flag) {
return ExperimentalFlag.inferenceUpdate1; return ExperimentalFlag.inferenceUpdate1;
case "inference-update-2": case "inference-update-2":
return ExperimentalFlag.inferenceUpdate2; return ExperimentalFlag.inferenceUpdate2;
case "inference-update-3":
return ExperimentalFlag.inferenceUpdate3;
case "inline-class": case "inline-class":
return ExperimentalFlag.inlineClass; return ExperimentalFlag.inlineClass;
case "macros": case "macros":
@ -743,6 +764,8 @@ final Map<ExperimentalFlag, bool> defaultExperimentalFlags = {
ExperimentalFlag.inferenceUpdate1.isEnabledByDefault, ExperimentalFlag.inferenceUpdate1.isEnabledByDefault,
ExperimentalFlag.inferenceUpdate2: ExperimentalFlag.inferenceUpdate2:
ExperimentalFlag.inferenceUpdate2.isEnabledByDefault, ExperimentalFlag.inferenceUpdate2.isEnabledByDefault,
ExperimentalFlag.inferenceUpdate3:
ExperimentalFlag.inferenceUpdate3.isEnabledByDefault,
ExperimentalFlag.inlineClass: ExperimentalFlag.inlineClass.isEnabledByDefault, ExperimentalFlag.inlineClass: ExperimentalFlag.inlineClass.isEnabledByDefault,
ExperimentalFlag.macros: ExperimentalFlag.macros.isEnabledByDefault, ExperimentalFlag.macros: ExperimentalFlag.macros.isEnabledByDefault,
ExperimentalFlag.namedArgumentsAnywhere: ExperimentalFlag.namedArgumentsAnywhere:
@ -796,6 +819,7 @@ const Map<shared.ExperimentalFlag, ExperimentalFlag> sharedExperimentalFlags = {
shared.ExperimentalFlag.genericMetadata: ExperimentalFlag.genericMetadata, shared.ExperimentalFlag.genericMetadata: ExperimentalFlag.genericMetadata,
shared.ExperimentalFlag.inferenceUpdate1: ExperimentalFlag.inferenceUpdate1, shared.ExperimentalFlag.inferenceUpdate1: ExperimentalFlag.inferenceUpdate1,
shared.ExperimentalFlag.inferenceUpdate2: ExperimentalFlag.inferenceUpdate2, shared.ExperimentalFlag.inferenceUpdate2: ExperimentalFlag.inferenceUpdate2,
shared.ExperimentalFlag.inferenceUpdate3: ExperimentalFlag.inferenceUpdate3,
shared.ExperimentalFlag.inlineClass: ExperimentalFlag.inlineClass, shared.ExperimentalFlag.inlineClass: ExperimentalFlag.inlineClass,
shared.ExperimentalFlag.macros: ExperimentalFlag.macros, shared.ExperimentalFlag.macros: ExperimentalFlag.macros,
shared.ExperimentalFlag.namedArgumentsAnywhere: shared.ExperimentalFlag.namedArgumentsAnywhere:

View File

@ -128,6 +128,9 @@ features:
resource-identifiers: resource-identifiers:
help: "Output arguments used by static functions." help: "Output arguments used by static functions."
inference-update-3:
help: "Better handling of coercions, conditional expressions, and switch expressions."
# Experiment flag only used for testing. # Experiment flag only used for testing.
test-experiment: test-experiment:
help: >- help: >-