Convert two uses of the old type algebra API to the new

Change-Id: I93b91622915aa96b0f1791096b76ca084725428d
Reviewed-on: https://dart-review.googlesource.com/c/87600
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 0ebfca1..b7771d5 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -1068,7 +1068,7 @@
       {Map<String, DartObjectImpl> lexicalEnvironment})
       : _lexicalEnvironment = lexicalEnvironment {
     this._dartObjectComputer =
-        new DartObjectComputer(_errorReporter, evaluationEngine.typeProvider);
+        new DartObjectComputer(_errorReporter, evaluationEngine);
   }
 
   /**
@@ -1681,12 +1681,22 @@
   final ErrorReporter _errorReporter;
 
   /**
-   * The type provider used to create objects of the appropriate types, and to
-   * identify when an object is of a built-in type.
+   * The type provider used to access the known types.
    */
-  final TypeProvider _typeProvider;
+  final ConstantEvaluationEngine _evaluationEngine;
 
-  DartObjectComputer(this._errorReporter, this._typeProvider);
+  DartObjectComputer(this._errorReporter, this._evaluationEngine);
+
+  /**
+   * Convenience getter to gain access to the [evaluationEngine]'s type
+   * provider.
+   */
+  TypeProvider get _typeProvider => _evaluationEngine.typeProvider;
+
+  /**
+   * Convenience getter to gain access to the [evaluationEngine]'s type system.
+   */
+  TypeSystem get _typeSystem => _evaluationEngine.typeSystem;
 
   DartObjectImpl add(BinaryExpression node, DartObjectImpl leftOperand,
       DartObjectImpl rightOperand) {
@@ -1732,7 +1742,7 @@
       AsExpression node, DartObjectImpl expression, DartObjectImpl type) {
     if (expression != null && type != null) {
       try {
-        return expression.castToType(_typeProvider, type);
+        return expression.castToType(_typeProvider, _typeSystem, type);
       } on EvaluationException catch (exception) {
         _errorReporter.reportErrorForNode(exception.errorCode, node);
       }
@@ -2070,7 +2080,8 @@
       IsExpression node, DartObjectImpl expression, DartObjectImpl type) {
     if (expression != null && type != null) {
       try {
-        DartObjectImpl result = expression.hasType(_typeProvider, type);
+        DartObjectImpl result =
+            expression.hasType(_typeProvider, _typeSystem, type);
         if (node.notOperator != null) {
           return result.logicalNot(_typeProvider);
         }
diff --git a/pkg/analyzer/lib/src/dart/constant/value.dart b/pkg/analyzer/lib/src/dart/constant/value.dart
index ad817c2..189a436 100644
--- a/pkg/analyzer/lib/src/dart/constant/value.dart
+++ b/pkg/analyzer/lib/src/dart/constant/value.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
+import 'package:analyzer/src/generated/type_system.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
 
 /**
@@ -290,13 +291,13 @@
   /**
    * Return the result of casting this object to the given [castType].
    */
-  DartObjectImpl castToType(
-      TypeProvider typeProvider, DartObjectImpl castType) {
+  DartObjectImpl castToType(TypeProvider typeProvider, TypeSystem typeSystem,
+      DartObjectImpl castType) {
     _assertType(castType);
     if (isNull) {
       return this;
     }
-    if (!type.isSubtypeOf((castType._state as TypeState)._type)) {
+    if (!typeSystem.isSubtypeOf(type, (castType._state as TypeState)._type)) {
       throw new EvaluationException(
           CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION);
     }
@@ -489,7 +490,8 @@
   /**
    * Return the result of testing whether this object has the given [testedType].
    */
-  DartObjectImpl hasType(TypeProvider typeProvider, DartObjectImpl testedType) {
+  DartObjectImpl hasType(TypeProvider typeProvider, TypeSystem typeSystem,
+      DartObjectImpl testedType) {
     _assertType(testedType);
     DartType typeType = (testedType._state as TypeState)._type;
     BoolState state;
@@ -502,7 +504,7 @@
         state = BoolState.FALSE_STATE;
       }
     } else {
-      state = BoolState.from(type.isSubtypeOf(typeType));
+      state = BoolState.from(typeSystem.isSubtypeOf(type, typeType));
     }
     return new DartObjectImpl(typeProvider.boolType, state);
   }