Parse AnalysisOptionsImpl.enabledExperiments into experimentStatus.
So, we don't need to parse everywhere we need to check the status.
R=brianwilkerson@google.com, paulberry@google.com
Change-Id: I4c120d0d8baf46fc9cd981c6a1f10ffe27a2f2de
Reviewed-on: https://dart-review.googlesource.com/c/88753
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/file_state.dart b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
index 35f1df0..3e156bf 100644
--- a/pkg/analyzer/lib/src/dart/analysis/file_state.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/file_state.dart
@@ -670,9 +670,8 @@
return _createEmptyCompilationUnit();
}
- AnalysisOptions analysisOptions = _fsState._analysisOptions;
- ExperimentStatus experimentStatus =
- new ExperimentStatus.fromStrings(analysisOptions.enabledExperiments);
+ AnalysisOptionsImpl analysisOptions = _fsState._analysisOptions;
+ ExperimentStatus experimentStatus = analysisOptions.experimentStatus;
CharSequenceReader reader = new CharSequenceReader(content);
Scanner scanner = new Scanner(source, reader, errorListener);
scanner.enableGtGtGt = experimentStatus.constant_update_2018;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index a3813f6..5269b56 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -9,7 +9,6 @@
import 'package:analyzer/error/error.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/dart/analysis/file_state.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
@@ -182,13 +181,8 @@
* Compute [_constants] in all units.
*/
void _computeConstants() {
- computeConstants(
- _typeProvider,
- _context.typeSystem,
- _declaredVariables,
- _constants.toList(),
- ExperimentStatus.fromStrings(
- _context.analysisOptions.enabledExperiments));
+ computeConstants(_typeProvider, _context.typeSystem, _declaredVariables,
+ _constants.toList(), _analysisOptions.experimentStatus);
}
void _computeHints(FileState file, CompilationUnit unit) {
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 30e9486..453c439 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -12,12 +12,12 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/error/listener.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
import 'package:analyzer/src/dart/constant/evaluation.dart';
import 'package:analyzer/src/dart/constant/value.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/error/codes.dart';
+import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/resolver.dart';
/// Instances of the class `ConstantVerifier` traverse an AST structure looking
@@ -70,8 +70,9 @@
_typeProvider, declaredVariables,
forAnalysisDriver: forAnalysisDriver,
typeSystem: _typeSystem,
- experimentStatus: ExperimentStatus.fromStrings(
- currentLibrary.context.analysisOptions.enabledExperiments));
+ experimentStatus:
+ (currentLibrary.context.analysisOptions as AnalysisOptionsImpl)
+ .experimentStatus);
}
@override
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 77eabab..65a6d01 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -12,7 +12,6 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
import 'package:analyzer/src/dart/constant/compute.dart';
import 'package:analyzer/src/dart/constant/value.dart';
@@ -20,7 +19,7 @@
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/generated/constant.dart' show EvaluationResultImpl;
import 'package:analyzer/src/generated/engine.dart'
- show AnalysisContext, AnalysisEngine;
+ show AnalysisContext, AnalysisEngine, AnalysisOptionsImpl;
import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
@@ -2336,13 +2335,9 @@
/// of this variable could not be computed because of errors.
DartObject computeConstantValue() {
if (evaluationResult == null) {
- computeConstants(
- context.typeProvider,
- context.typeSystem,
- context.declaredVariables,
- [this],
- ExperimentStatus.fromStrings(
- context.analysisOptions.enabledExperiments));
+ AnalysisOptionsImpl analysisOptions = context.analysisOptions;
+ computeConstants(context.typeProvider, context.typeSystem,
+ context.declaredVariables, [this], analysisOptions.experimentStatus);
}
return evaluationResult?.value;
}
@@ -2556,12 +2551,6 @@
element.library?.name == _META_LIB_NAME;
@override
- bool get isLiteral =>
- element is PropertyAccessorElement &&
- element.name == _LITERAL_VARIABLE_NAME &&
- element.library?.name == _META_LIB_NAME;
-
- @override
bool get isIsTest =>
element is PropertyAccessorElement &&
element.name == _IS_TEST_VARIABLE_NAME &&
@@ -2580,6 +2569,12 @@
element.library?.name == _JS_LIB_NAME;
@override
+ bool get isLiteral =>
+ element is PropertyAccessorElement &&
+ element.name == _LITERAL_VARIABLE_NAME &&
+ element.library?.name == _META_LIB_NAME;
+
+ @override
bool get isMustCallSuper =>
element is PropertyAccessorElement &&
element.name == _MUST_CALL_SUPER_VARIABLE_NAME &&
@@ -2639,13 +2634,9 @@
@override
DartObject computeConstantValue() {
if (evaluationResult == null) {
- computeConstants(
- context.typeProvider,
- context.typeSystem,
- context.declaredVariables,
- [this],
- ExperimentStatus.fromStrings(
- context.analysisOptions.enabledExperiments));
+ AnalysisOptionsImpl analysisOptions = context.analysisOptions;
+ computeConstants(context.typeProvider, context.typeSystem,
+ context.declaredVariables, [this], analysisOptions.experimentStatus);
}
return constantValue;
}
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart
index 10894cd..527f2ed 100644
--- a/pkg/analyzer/lib/src/generated/engine.dart
+++ b/pkg/analyzer/lib/src/generated/engine.dart
@@ -17,6 +17,7 @@
import 'package:analyzer/src/context/builder.dart' show EmbedderYamlLocator;
import 'package:analyzer/src/context/cache.dart';
import 'package:analyzer/src/context/context.dart';
+import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/generated/constant.dart';
import 'package:analyzer/src/generated/java_engine.dart';
@@ -1422,8 +1423,12 @@
@override
bool dart2jsHint = false;
- @override
- List<String> enabledExperiments = const <String>[];
+ List<String> _enabledExperiments = const <String>[];
+
+ /**
+ * Parsed [enabledExperiments].
+ */
+ ExperimentStatus _experimentStatus = ExperimentStatus();
@override
List<String> enabledPluginNames = const <String>[];
@@ -1602,6 +1607,14 @@
void set enableConditionalDirectives(_) {}
@override
+ List<String> get enabledExperiments => _enabledExperiments;
+
+ set enabledExperiments(List<String> enabledExperiments) {
+ _enabledExperiments = enabledExperiments;
+ _experimentStatus = ExperimentStatus.fromStrings(enabledExperiments);
+ }
+
+ @override
@deprecated
bool get enableGenericMethods => true;
@@ -1655,6 +1668,11 @@
}
/**
+ * The set of enabled experiments.
+ */
+ ExperimentStatus get experimentStatus => _experimentStatus;
+
+ /**
* Return `true` to enable mixin declarations.
* https://github.com/dart-lang/language/issues/12
*/
diff --git a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
index b144d20..94176f6 100644
--- a/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
+++ b/pkg/analyzer/test/src/dart/constant/evaluation_test.dart
@@ -817,9 +817,7 @@
DartObjectImpl result = expression.accept(new ConstantVisitor(
new ConstantEvaluationEngine(typeProvider, new DeclaredVariables(),
- experimentStatus:
- ExperimentStatus.fromStrings(options.enabledExperiments),
- typeSystem: typeSystem),
+ experimentStatus: options.experimentStatus, typeSystem: typeSystem),
errorReporter,
lexicalEnvironment: lexicalEnvironment));
if (errorCodes == null) {