Skip to content

Commit f6fe561

Browse files
chloestefantsovaCommit Queue
authored and
Commit Queue
committed
[analyzer][cfe] Generate constraints based on type variable bounds
In response to dart-lang/language#3009 Change-Id: I918d392e422f1997736bf2543c8107cb44d3d6f8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/364721 Reviewed-by: Erik Ernst <[email protected]> Reviewed-by: Johnni Winther <[email protected]> Reviewed-by: Michael Thomsen <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent 1bf0bc3 commit f6fe561

File tree

59 files changed

+1253
-80
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+1253
-80
lines changed

pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,13 @@ enum ExperimentalFlag {
108108
experimentEnabledVersion: const Version(3, 4),
109109
experimentReleasedVersion: const Version(3, 4)),
110110

111+
inferenceUsingBounds(
112+
name: 'inference-using-bounds',
113+
isEnabledByDefault: false,
114+
isExpired: false,
115+
experimentEnabledVersion: defaultLanguageVersion,
116+
experimentReleasedVersion: defaultLanguageVersion),
117+
111118
inlineClass(
112119
name: 'inline-class',
113120
isEnabledByDefault: true,

pkg/analyzer/lib/dart/analysis/features.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ abstract class Feature {
4343
/// Feature information for generic metadata.
4444
static final generic_metadata = ExperimentalFeatures.generic_metadata;
4545

46+
/// Feature information for inference using bounds.
47+
static final inference_using_bounds =
48+
ExperimentalFeatures.inference_using_bounds;
49+
4650
/// Feature information for inference-update-1.
4751
static final inference_update_1 = ExperimentalFeatures.inference_update_1;
4852

pkg/analyzer/lib/src/dart/analysis/experiments.g.dart

Lines changed: 46 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ final _knownFeatures = <String, ExperimentalFeature>{
3131
EnableString.inference_update_1: ExperimentalFeatures.inference_update_1,
3232
EnableString.inference_update_2: ExperimentalFeatures.inference_update_2,
3333
EnableString.inference_update_3: ExperimentalFeatures.inference_update_3,
34+
EnableString.inference_using_bounds:
35+
ExperimentalFeatures.inference_using_bounds,
3436
EnableString.inline_class: ExperimentalFeatures.inline_class,
3537
EnableString.macros: ExperimentalFeatures.macros,
3638
EnableString.named_arguments_anywhere:
@@ -100,6 +102,9 @@ class EnableString {
100102
/// String to enable the experiment "inference-update-3"
101103
static const String inference_update_3 = 'inference-update-3';
102104

105+
/// String to enable the experiment "inference-using-bounds"
106+
static const String inference_using_bounds = 'inference-using-bounds';
107+
103108
/// String to enable the experiment "inline-class"
104109
static const String inline_class = 'inline-class';
105110

@@ -307,8 +312,19 @@ class ExperimentalFeatures {
307312
releaseVersion: Version.parse('3.4.0'),
308313
);
309314

310-
static final inline_class = ExperimentalFeature(
315+
static final inference_using_bounds = ExperimentalFeature(
311316
index: 14,
317+
enableString: EnableString.inference_using_bounds,
318+
isEnabledByDefault: IsEnabledByDefault.inference_using_bounds,
319+
isExpired: IsExpired.inference_using_bounds,
320+
documentation:
321+
'Use type parameter bounds more extensively in type inference.',
322+
experimentalReleaseVersion: null,
323+
releaseVersion: null,
324+
);
325+
326+
static final inline_class = ExperimentalFeature(
327+
index: 15,
312328
enableString: EnableString.inline_class,
313329
isEnabledByDefault: IsEnabledByDefault.inline_class,
314330
isExpired: IsExpired.inline_class,
@@ -318,7 +334,7 @@ class ExperimentalFeatures {
318334
);
319335

320336
static final macros = ExperimentalFeature(
321-
index: 15,
337+
index: 16,
322338
enableString: EnableString.macros,
323339
isEnabledByDefault: IsEnabledByDefault.macros,
324340
isExpired: IsExpired.macros,
@@ -328,7 +344,7 @@ class ExperimentalFeatures {
328344
);
329345

330346
static final named_arguments_anywhere = ExperimentalFeature(
331-
index: 16,
347+
index: 17,
332348
enableString: EnableString.named_arguments_anywhere,
333349
isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere,
334350
isExpired: IsExpired.named_arguments_anywhere,
@@ -338,7 +354,7 @@ class ExperimentalFeatures {
338354
);
339355

340356
static final native_assets = ExperimentalFeature(
341-
index: 17,
357+
index: 18,
342358
enableString: EnableString.native_assets,
343359
isEnabledByDefault: IsEnabledByDefault.native_assets,
344360
isExpired: IsExpired.native_assets,
@@ -348,7 +364,7 @@ class ExperimentalFeatures {
348364
);
349365

350366
static final non_nullable = ExperimentalFeature(
351-
index: 18,
367+
index: 19,
352368
enableString: EnableString.non_nullable,
353369
isEnabledByDefault: IsEnabledByDefault.non_nullable,
354370
isExpired: IsExpired.non_nullable,
@@ -358,7 +374,7 @@ class ExperimentalFeatures {
358374
);
359375

360376
static final nonfunction_type_aliases = ExperimentalFeature(
361-
index: 19,
377+
index: 20,
362378
enableString: EnableString.nonfunction_type_aliases,
363379
isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases,
364380
isExpired: IsExpired.nonfunction_type_aliases,
@@ -368,7 +384,7 @@ class ExperimentalFeatures {
368384
);
369385

370386
static final null_aware_elements = ExperimentalFeature(
371-
index: 20,
387+
index: 21,
372388
enableString: EnableString.null_aware_elements,
373389
isEnabledByDefault: IsEnabledByDefault.null_aware_elements,
374390
isExpired: IsExpired.null_aware_elements,
@@ -378,7 +394,7 @@ class ExperimentalFeatures {
378394
);
379395

380396
static final patterns = ExperimentalFeature(
381-
index: 21,
397+
index: 22,
382398
enableString: EnableString.patterns,
383399
isEnabledByDefault: IsEnabledByDefault.patterns,
384400
isExpired: IsExpired.patterns,
@@ -388,7 +404,7 @@ class ExperimentalFeatures {
388404
);
389405

390406
static final record_use = ExperimentalFeature(
391-
index: 22,
407+
index: 23,
392408
enableString: EnableString.record_use,
393409
isEnabledByDefault: IsEnabledByDefault.record_use,
394410
isExpired: IsExpired.record_use,
@@ -398,7 +414,7 @@ class ExperimentalFeatures {
398414
);
399415

400416
static final records = ExperimentalFeature(
401-
index: 23,
417+
index: 24,
402418
enableString: EnableString.records,
403419
isEnabledByDefault: IsEnabledByDefault.records,
404420
isExpired: IsExpired.records,
@@ -408,7 +424,7 @@ class ExperimentalFeatures {
408424
);
409425

410426
static final sealed_class = ExperimentalFeature(
411-
index: 24,
427+
index: 25,
412428
enableString: EnableString.sealed_class,
413429
isEnabledByDefault: IsEnabledByDefault.sealed_class,
414430
isExpired: IsExpired.sealed_class,
@@ -418,7 +434,7 @@ class ExperimentalFeatures {
418434
);
419435

420436
static final set_literals = ExperimentalFeature(
421-
index: 25,
437+
index: 26,
422438
enableString: EnableString.set_literals,
423439
isEnabledByDefault: IsEnabledByDefault.set_literals,
424440
isExpired: IsExpired.set_literals,
@@ -428,7 +444,7 @@ class ExperimentalFeatures {
428444
);
429445

430446
static final spread_collections = ExperimentalFeature(
431-
index: 26,
447+
index: 27,
432448
enableString: EnableString.spread_collections,
433449
isEnabledByDefault: IsEnabledByDefault.spread_collections,
434450
isExpired: IsExpired.spread_collections,
@@ -438,7 +454,7 @@ class ExperimentalFeatures {
438454
);
439455

440456
static final super_parameters = ExperimentalFeature(
441-
index: 27,
457+
index: 28,
442458
enableString: EnableString.super_parameters,
443459
isEnabledByDefault: IsEnabledByDefault.super_parameters,
444460
isExpired: IsExpired.super_parameters,
@@ -448,7 +464,7 @@ class ExperimentalFeatures {
448464
);
449465

450466
static final test_experiment = ExperimentalFeature(
451-
index: 28,
467+
index: 29,
452468
enableString: EnableString.test_experiment,
453469
isEnabledByDefault: IsEnabledByDefault.test_experiment,
454470
isExpired: IsExpired.test_experiment,
@@ -459,7 +475,7 @@ class ExperimentalFeatures {
459475
);
460476

461477
static final triple_shift = ExperimentalFeature(
462-
index: 29,
478+
index: 30,
463479
enableString: EnableString.triple_shift,
464480
isEnabledByDefault: IsEnabledByDefault.triple_shift,
465481
isExpired: IsExpired.triple_shift,
@@ -469,7 +485,7 @@ class ExperimentalFeatures {
469485
);
470486

471487
static final unnamed_libraries = ExperimentalFeature(
472-
index: 30,
488+
index: 31,
473489
enableString: EnableString.unnamed_libraries,
474490
isEnabledByDefault: IsEnabledByDefault.unnamed_libraries,
475491
isExpired: IsExpired.unnamed_libraries,
@@ -479,7 +495,7 @@ class ExperimentalFeatures {
479495
);
480496

481497
static final unquoted_imports = ExperimentalFeature(
482-
index: 31,
498+
index: 32,
483499
enableString: EnableString.unquoted_imports,
484500
isEnabledByDefault: IsEnabledByDefault.unquoted_imports,
485501
isExpired: IsExpired.unquoted_imports,
@@ -489,7 +505,7 @@ class ExperimentalFeatures {
489505
);
490506

491507
static final variance = ExperimentalFeature(
492-
index: 32,
508+
index: 33,
493509
enableString: EnableString.variance,
494510
isEnabledByDefault: IsEnabledByDefault.variance,
495511
isExpired: IsExpired.variance,
@@ -499,7 +515,7 @@ class ExperimentalFeatures {
499515
);
500516

501517
static final wildcard_variables = ExperimentalFeature(
502-
index: 33,
518+
index: 34,
503519
enableString: EnableString.wildcard_variables,
504520
isEnabledByDefault: IsEnabledByDefault.wildcard_variables,
505521
isExpired: IsExpired.wildcard_variables,
@@ -555,6 +571,9 @@ class IsEnabledByDefault {
555571
/// Default state of the experiment "inference-update-3"
556572
static const bool inference_update_3 = true;
557573

574+
/// Default state of the experiment "inference-using-bounds"
575+
static const bool inference_using_bounds = false;
576+
558577
/// Default state of the experiment "inline-class"
559578
static const bool inline_class = true;
560579

@@ -662,6 +681,9 @@ class IsExpired {
662681
/// Expiration status of the experiment "inference-update-3"
663682
static const bool inference_update_3 = true;
664683

684+
/// Expiration status of the experiment "inference-using-bounds"
685+
static const bool inference_using_bounds = false;
686+
665687
/// Expiration status of the experiment "inline-class"
666688
static const bool inline_class = true;
667689

@@ -773,6 +795,10 @@ mixin _CurrentState {
773795
bool get inference_update_3 =>
774796
isEnabled(ExperimentalFeatures.inference_update_3);
775797

798+
/// Current state for the flag "inference-using-bounds"
799+
bool get inference_using_bounds =>
800+
isEnabled(ExperimentalFeatures.inference_using_bounds);
801+
776802
/// Current state for the flag "inline-class"
777803
bool get inline_class => isEnabled(ExperimentalFeatures.inline_class);
778804

0 commit comments

Comments
 (0)