@@ -14,6 +14,7 @@ import '../elements/entities.dart';
14
14
import '../elements/types.dart' ;
15
15
import '../ir/scope.dart' ;
16
16
import '../kernel/element_map.dart' ;
17
+ import '../options.dart' ;
17
18
import '../serialization/serialization.dart' ;
18
19
import '../util/enumset.dart' ;
19
20
import 'constants.dart' ;
@@ -57,6 +58,8 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
57
58
String _typeToString (DartType type) =>
58
59
type.toStructuredText (_elementMap.types, _elementMap.options);
59
60
61
+ CompilerOptions get _options => _elementMap.options;
62
+
60
63
/// Return the named arguments names as a list of strings.
61
64
List <String > _getNamedArguments (ir.Arguments arguments) =>
62
65
arguments.named.map ((n) => n.name).toList ();
@@ -551,12 +554,23 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
551
554
return super .visitSwitchStatement (node);
552
555
}
553
556
554
- // TODO(johnniwinther): Change [node] `InstanceGet` when the old method
555
- // invocation encoding is no longer used.
556
557
@override
557
558
void handleRuntimeTypeUse (ir.Expression node, RuntimeTypeUseKind kind,
558
559
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);
560
574
}
561
575
562
576
@override
@@ -952,14 +966,12 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
952
966
_data._intLiterals.add (value);
953
967
}
954
968
955
- // TODO(johnniwinther): Change [node] `InstanceGet` when the old method
956
- // invocation encoding is no longer used.
957
969
@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) {
960
972
_data._runtimeTypeUses ?? = [];
961
973
_data._runtimeTypeUses
962
- .add (_RuntimeTypeUse (node, kind, receiverType, argumentType));
974
+ .add (_RuntimeTypeUse (kind, receiverType, argumentType));
963
975
}
964
976
965
977
@override
@@ -1520,7 +1532,7 @@ class ImpactData {
1520
1532
if (_runtimeTypeUses != null ) {
1521
1533
for (_RuntimeTypeUse data in _runtimeTypeUses) {
1522
1534
registry.registerRuntimeTypeUse (
1523
- data.node, data. kind, data.receiverType, data.argumentType);
1535
+ data.kind, data.receiverType, data.argumentType);
1524
1536
}
1525
1537
}
1526
1538
if (_forInData != null ) {
@@ -2094,28 +2106,23 @@ class _ContainerLiteral {
2094
2106
class _RuntimeTypeUse {
2095
2107
static const String tag = '_RuntimeTypeUse' ;
2096
2108
2097
- // TODO(johnniwinther): Change [node] `InstanceGet` when the old method
2098
- // invocation encoding is no longer used.
2099
- final ir.Expression node;
2100
2109
final RuntimeTypeUseKind kind;
2101
2110
final ir.DartType receiverType;
2102
2111
final ir.DartType argumentType;
2103
2112
2104
- _RuntimeTypeUse (this .node, this . kind, this .receiverType, this .argumentType);
2113
+ _RuntimeTypeUse (this .kind, this .receiverType, this .argumentType);
2105
2114
2106
2115
factory _RuntimeTypeUse .fromDataSource (DataSourceReader source) {
2107
2116
source.begin (tag);
2108
- ir.TreeNode node = source.readTreeNode ();
2109
2117
RuntimeTypeUseKind kind = source.readEnum (RuntimeTypeUseKind .values);
2110
2118
ir.DartType receiverType = source.readDartTypeNode ();
2111
2119
ir.DartType argumentType = source.readDartTypeNode (allowNull: true );
2112
2120
source.end (tag);
2113
- return _RuntimeTypeUse (node, kind, receiverType, argumentType);
2121
+ return _RuntimeTypeUse (kind, receiverType, argumentType);
2114
2122
}
2115
2123
2116
2124
void toDataSink (DataSinkWriter sink) {
2117
2125
sink.begin (tag);
2118
- sink.writeTreeNode (node);
2119
2126
sink.writeEnum (kind);
2120
2127
sink.writeDartTypeNode (receiverType);
2121
2128
sink.writeDartTypeNode (argumentType, allowNull: true );
0 commit comments