@@ -14,6 +14,7 @@ import '../elements/entities.dart';
1414import '../elements/types.dart' ;
1515import '../ir/scope.dart' ;
1616import '../kernel/element_map.dart' ;
17+ import '../options.dart' ;
1718import '../serialization/serialization.dart' ;
1819import '../util/enumset.dart' ;
1920import 'constants.dart' ;
@@ -57,6 +58,8 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
5758 String _typeToString (DartType type) =>
5859 type.toStructuredText (_elementMap.types, _elementMap.options);
5960
61+ CompilerOptions get _options => _elementMap.options;
62+
6063 /// Return the named arguments names as a list of strings.
6164 List <String > _getNamedArguments (ir.Arguments arguments) =>
6265 arguments.named.map ((n) => n.name).toList ();
@@ -551,12 +554,23 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
551554 return super .visitSwitchStatement (node);
552555 }
553556
554- // TODO(johnniwinther): Change [node] `InstanceGet` when the old method
555- // invocation encoding is no longer used.
556557 @override
557558 void handleRuntimeTypeUse (ir.Expression node, RuntimeTypeUseKind kind,
558559 ir.DartType receiverType, ir.DartType argumentType) {
559- registerRuntimeTypeUse (node, kind, receiverType, argumentType);
560+ if (_options.omitImplicitChecks) {
561+ switch (kind) {
562+ case RuntimeTypeUseKind .string:
563+ if (! _options.laxRuntimeTypeToString) {
564+ _reporter.reportHintMessage (computeSourceSpanFromTreeNode (node),
565+ MessageKind .RUNTIME_TYPE_TO_STRING );
566+ }
567+ break ;
568+ case RuntimeTypeUseKind .equals:
569+ case RuntimeTypeUseKind .unknown:
570+ break ;
571+ }
572+ }
573+ registerRuntimeTypeUse (kind, receiverType, argumentType);
560574 }
561575
562576 @override
@@ -952,14 +966,12 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
952966 _data._intLiterals.add (value);
953967 }
954968
955- // TODO(johnniwinther): Change [node] `InstanceGet` when the old method
956- // invocation encoding is no longer used.
957969 @override
958- void registerRuntimeTypeUse (ir. Expression node, RuntimeTypeUseKind kind ,
959- ir.DartType receiverType, ir. DartType argumentType) {
970+ void registerRuntimeTypeUse (RuntimeTypeUseKind kind, ir. DartType receiverType ,
971+ ir.DartType argumentType) {
960972 _data._runtimeTypeUses ?? = [];
961973 _data._runtimeTypeUses
962- .add (_RuntimeTypeUse (node, kind, receiverType, argumentType));
974+ .add (_RuntimeTypeUse (kind, receiverType, argumentType));
963975 }
964976
965977 @override
@@ -1520,7 +1532,7 @@ class ImpactData {
15201532 if (_runtimeTypeUses != null ) {
15211533 for (_RuntimeTypeUse data in _runtimeTypeUses) {
15221534 registry.registerRuntimeTypeUse (
1523- data.node, data. kind, data.receiverType, data.argumentType);
1535+ data.kind, data.receiverType, data.argumentType);
15241536 }
15251537 }
15261538 if (_forInData != null ) {
@@ -2094,28 +2106,23 @@ class _ContainerLiteral {
20942106class _RuntimeTypeUse {
20952107 static const String tag = '_RuntimeTypeUse' ;
20962108
2097- // TODO(johnniwinther): Change [node] `InstanceGet` when the old method
2098- // invocation encoding is no longer used.
2099- final ir.Expression node;
21002109 final RuntimeTypeUseKind kind;
21012110 final ir.DartType receiverType;
21022111 final ir.DartType argumentType;
21032112
2104- _RuntimeTypeUse (this .node, this . kind, this .receiverType, this .argumentType);
2113+ _RuntimeTypeUse (this .kind, this .receiverType, this .argumentType);
21052114
21062115 factory _RuntimeTypeUse .fromDataSource (DataSourceReader source) {
21072116 source.begin (tag);
2108- ir.TreeNode node = source.readTreeNode ();
21092117 RuntimeTypeUseKind kind = source.readEnum (RuntimeTypeUseKind .values);
21102118 ir.DartType receiverType = source.readDartTypeNode ();
21112119 ir.DartType argumentType = source.readDartTypeNode (allowNull: true );
21122120 source.end (tag);
2113- return _RuntimeTypeUse (node, kind, receiverType, argumentType);
2121+ return _RuntimeTypeUse (kind, receiverType, argumentType);
21142122 }
21152123
21162124 void toDataSink (DataSinkWriter sink) {
21172125 sink.begin (tag);
2118- sink.writeTreeNode (node);
21192126 sink.writeEnum (kind);
21202127 sink.writeDartTypeNode (receiverType);
21212128 sink.writeDartTypeNode (argumentType, allowNull: true );
0 commit comments