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);
}