Test that e2e constant is check works, pass experiments around more

Change-Id: I6252d9215ab322c75a5b83ac0a3047a9dc90a360
Reviewed-on: https://dart-review.googlesource.com/c/87420
Commit-Queue: Mike Fairhurst <mfairhurst@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index c11275c..7060086 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -8,6 +8,7 @@
 import 'package:analyzer/dart/element/element.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/analysis/file_state.dart';
 import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/utilities.dart';
@@ -179,11 +180,12 @@
    */
   void _computeConstants() {
     computeConstants(
-      _typeProvider,
-      _context.typeSystem,
-      _declaredVariables,
-      _constants.toList(),
-    );
+        _typeProvider,
+        _context.typeSystem,
+        _declaredVariables,
+        _constants.toList(),
+        ExperimentStatus.fromStrings(
+            _context.analysisOptions.enabledExperiments));
   }
 
   void _computeHints(FileState file, CompilationUnit unit) {
diff --git a/pkg/analyzer/lib/src/dart/constant/compute.dart b/pkg/analyzer/lib/src/dart/constant/compute.dart
index 707d34a..4031e2f 100644
--- a/pkg/analyzer/lib/src/dart/constant/compute.dart
+++ b/pkg/analyzer/lib/src/dart/constant/compute.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/dart/analysis/declared_variables.dart';
+import 'package:analyzer/src/dart/analysis/experiments.dart';
 import 'package:analyzer/src/dart/constant/evaluation.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/generated/resolver.dart'
@@ -16,10 +17,13 @@
     TypeProvider typeProvider,
     TypeSystem typeSystem,
     DeclaredVariables declaredVariables,
-    List<ConstantEvaluationTarget> constants) {
+    List<ConstantEvaluationTarget> constants,
+    ExperimentStatus experimentStatus) {
   var evaluationEngine = ConstantEvaluationEngine(
       typeProvider, declaredVariables,
-      forAnalysisDriver: true, typeSystem: typeSystem);
+      forAnalysisDriver: true,
+      typeSystem: typeSystem,
+      experimentStatus: experimentStatus);
 
   var nodes = <_ConstantNode>[];
   var nodeMap = <ConstantEvaluationTarget, _ConstantNode>{};
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index b271890..0780184 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -12,6 +12,7 @@
 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';
@@ -67,7 +68,10 @@
     this._stringType = _typeProvider.stringType;
     this._evaluationEngine = new ConstantEvaluationEngine(
         _typeProvider, declaredVariables,
-        forAnalysisDriver: forAnalysisDriver, typeSystem: _typeSystem);
+        forAnalysisDriver: forAnalysisDriver,
+        typeSystem: _typeSystem,
+        experimentStatus: ExperimentStatus.fromStrings(
+            currentLibrary.context.analysisOptions.enabledExperiments));
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 27fc635..688fecc 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -12,6 +12,7 @@
 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';
@@ -2336,11 +2337,12 @@
   DartObject computeConstantValue() {
     if (evaluationResult == null) {
       computeConstants(
-        context.typeProvider,
-        context.typeSystem,
-        context.declaredVariables,
-        [this],
-      );
+          context.typeProvider,
+          context.typeSystem,
+          context.declaredVariables,
+          [this],
+          ExperimentStatus.fromStrings(
+              context.analysisOptions.enabledExperiments));
     }
     return evaluationResult?.value;
   }
@@ -2639,11 +2641,12 @@
   DartObject computeConstantValue() {
     if (evaluationResult == null) {
       computeConstants(
-        context.typeProvider,
-        context.typeSystem,
-        context.declaredVariables,
-        [this],
-      );
+          context.typeProvider,
+          context.typeSystem,
+          context.declaredVariables,
+          [this],
+          ExperimentStatus.fromStrings(
+              context.analysisOptions.enabledExperiments));
     }
     return constantValue;
   }
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 2b881c0..7b654ad 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -56,6 +56,12 @@
   }
 
   @override
+  @failingTest // Does not work with old task model
+  test_isCheckInConstAssert() {
+    return super.test_isCheckInConstAssert();
+  }
+
+  @override
   @failingTest // Fails with the old task model
   test_issue_32394() {
     return super.test_issue_32394();
@@ -3228,6 +3234,21 @@
     verify([source]);
   }
 
+  test_isCheckInConstAssert() async {
+    Source source = addSource(r'''
+class C {
+  const C() : assert(1 is int);
+}
+
+void main() {
+  const C();
+}
+''');
+    await computeAnalysisResult(source);
+    assertNoErrors(source);
+    verify([source]);
+  }
+
   Future test_issue32114() async {
     addNamedSource('/a.dart', '''
 class O {}