| // Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| import 'package:_fe_analyzer_shared/src/experiments/flags.dart' as shared; | |
| import 'package:_fe_analyzer_shared/src/parser/experimental_features.dart' | |
| as parser; | |
| import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' | |
| show LanguageVersionToken, Scanner; | |
| import 'package:front_end/src/api_prototype/experimental_flags.dart' as cfe; | |
| import 'package:kernel/ast.dart'; | |
| class ExperimentalFeaturesFromFlags implements parser.ExperimentalFeatures { | |
| Version? _version; | |
| Map<cfe.ExperimentalFlag, bool> _explicitExperimentalFlags; | |
| new(this._explicitExperimentalFlags); | |
| @override | |
| bool isExperimentEnabled(shared.ExperimentalFlag flag) { | |
| cfe.ExperimentalFlag experimentalFlag = cfe.fromSharedExperimentalFlag( | |
| flag, | |
| ); | |
| if (_version != null) { | |
| return cfe.isExperimentEnabledInLibraryByVersion( | |
| experimentalFlag, | |
| dummyUri, | |
| _version!, | |
| explicitExperimentalFlags: _explicitExperimentalFlags, | |
| ); | |
| } else { | |
| return cfe.isExperimentEnabled( | |
| experimentalFlag, | |
| explicitExperimentalFlags: _explicitExperimentalFlags, | |
| ); | |
| } | |
| } | |
| /// Updates the experimental flags and scanner configuration according to the | |
| /// [languageVersion]. | |
| void onLanguageVersionChanged( | |
| Scanner scanner, | |
| LanguageVersionToken languageVersion, | |
| ) { | |
| _version = new Version(languageVersion.major, languageVersion.minor); | |
| scanner.configuration = buildScannerConfiguration(); | |
| } | |
| } |