[dart2js] Migrate kernel_impact.dart to null safety
Change-Id: I26e35b22035d22dcc8b46432af1dc8f45f185dc6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/252963
Reviewed-by: Mayank Patke <fishythefish@google.com>
Commit-Queue: Sigmund Cherem <sigmund@google.com>
diff --git a/pkg/compiler/lib/src/ir/impact.dart b/pkg/compiler/lib/src/ir/impact.dart
index e1e7473..abe548f 100644
--- a/pkg/compiler/lib/src/ir/impact.dart
+++ b/pkg/compiler/lib/src/ir/impact.dart
@@ -162,12 +162,12 @@
void registerInstanceSet(
ir.DartType receiverType, ClassRelation relation, ir.Member target);
- void registerSuperInvocation(ir.Member target, int positionalArguments,
+ void registerSuperInvocation(ir.Member? target, int positionalArguments,
List<String> namedArguments, List<ir.DartType> typeArguments);
- void registerSuperGet(ir.Member target);
+ void registerSuperGet(ir.Member? target);
- void registerSuperSet(ir.Member target);
+ void registerSuperSet(ir.Member? target);
void registerSuperInitializer(
ir.Constructor source,
diff --git a/pkg/compiler/lib/src/ir/impact_data.dart b/pkg/compiler/lib/src/ir/impact_data.dart
index 2a65114..5704733 100644
--- a/pkg/compiler/lib/src/ir/impact_data.dart
+++ b/pkg/compiler/lib/src/ir/impact_data.dart
@@ -606,19 +606,19 @@
}
@override
- void registerSuperSet(ir.Member target) {
- (_data._superSets ??= []).add(target);
+ void registerSuperSet(ir.Member? target) {
+ (_data._superSets ??= []).add(target!);
}
@override
- void registerSuperGet(ir.Member target) {
- (_data._superGets ??= []).add(target);
+ void registerSuperGet(ir.Member? target) {
+ (_data._superGets ??= []).add(target!);
}
@override
- void registerSuperInvocation(ir.Member target, int positionalArguments,
+ void registerSuperInvocation(ir.Member? target, int positionalArguments,
List<String> namedArguments, List<ir.DartType> typeArguments) {
- (_data._superInvocations ??= []).add(_SuperInvocation(target,
+ (_data._superInvocations ??= []).add(_SuperInvocation(target!,
_CallStructure(positionalArguments, namedArguments, typeArguments)));
}
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index dc09e06..eb27551 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -8,10 +8,4 @@
export 'element_map_impl.dart';
/// Kinds of foreign functions.
-enum ForeignKind {
- JS,
- JS_BUILTIN,
- JS_EMBEDDED_GLOBAL,
- JS_INTERCEPTOR_CONSTANT,
- NONE,
-}
+export 'element_map_interfaces.dart' show ForeignKind;
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index 45f3683..c0e7df0 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -61,6 +61,7 @@
KernelElementEnvironment,
KernelToElementMapForClassHierarchy,
KernelToElementMapForImpactData,
+ KernelToElementMapForKernelImpact,
KernelToElementMapForNativeData,
KernelToElementMapForDeferredLoading;
import 'env.dart';
@@ -75,6 +76,7 @@
interfaces.KernelToElementMapForImpactData,
interfaces.KernelToElementMapForNativeData,
interfaces.KernelToElementMapForDeferredLoading,
+ interfaces.KernelToElementMapForKernelImpact,
IrToElementMap {
@override
final CompilerOptions options;
@@ -502,6 +504,7 @@
/// Kernel will say that C()'s super initializer resolves to Object(), but
/// this function will return an entity representing the unnamed mixin
/// application "Object+M"'s constructor.
+ @override
ConstructorEntity getSuperConstructor(
ir.Constructor sourceNode, ir.Member targetNode) {
ConstructorEntity source = getConstructor(sourceNode);
@@ -548,6 +551,7 @@
}
/// Returns the [InterfaceType] corresponding to [type].
+ @override
InterfaceType getInterfaceType(ir.InterfaceType type) =>
_typeConverter.visitType(type).withoutNullability;
@@ -867,6 +871,7 @@
ir.CoreTypes get coreTypes => _coreTypes ??= ir.CoreTypes(env.mainComponent);
/// Returns the type environment for the underlying kernel model.
+ @override
ir.TypeEnvironment get typeEnvironment =>
_typeEnvironment ??= ir.TypeEnvironment(coreTypes, classHierarchy);
@@ -894,6 +899,7 @@
}
/// Returns the [Name] corresponding to [name].
+ @override
Name getName(ir.Name name) {
return Name(name.text, name.isPrivate ? getLibrary(name.library) : null);
}
@@ -934,6 +940,7 @@
/// Returns the [Selector] corresponding to the invocation of [name] with
/// [arguments].
+ @override
Selector getInvocationSelector(ir.Name irName, int positionalArguments,
List<String> namedArguments, int typeArguments) {
Name name = getName(irName);
@@ -1042,6 +1049,7 @@
/// Computes the [NativeBehavior] for a call to the [JS] function.
/// TODO(johnniwinther): Cache this for later use.
+ @override
NativeBehavior getNativeBehaviorForJsCall(ir.StaticInvocation node) {
if (node.arguments.positional.length < 2 ||
node.arguments.named.isNotEmpty) {
@@ -1075,6 +1083,7 @@
/// TODO(johnniwinther): Cache this for later use.
/// Computes the [NativeBehavior] for a call to the [JS_BUILTIN]
/// function.
+ @override
NativeBehavior getNativeBehaviorForJsBuiltinCall(ir.StaticInvocation node) {
if (node.arguments.positional.length < 1) {
reporter.internalError(
@@ -1103,6 +1112,7 @@
/// Computes the [NativeBehavior] for a call to the
/// [JS_EMBEDDED_GLOBAL] function.
/// TODO(johnniwinther): Cache this for later use.
+ @override
NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall(
ir.StaticInvocation node) {
if (node.arguments.positional.length < 1) {
@@ -1207,6 +1217,7 @@
/// Returns the `noSuchMethod` [FunctionEntity] call from a
/// `super.noSuchMethod` invocation within [cls].
+ @override
FunctionEntity getSuperNoSuchMethod(ClassEntity cls) {
while (cls != null) {
cls = elementEnvironment.getSuperClass(cls);
@@ -1471,6 +1482,7 @@
}
/// NativeBasicData is need for computation of the default super class.
+ @override
NativeBasicData get nativeBasicData {
var data = _nativeBasicData;
if (data == null) {
@@ -1557,6 +1569,7 @@
}
/// Returns the [Local] corresponding to the local function [node].
+ @override
Local getLocalFunction(ir.LocalFunction node) {
KLocalFunction localFunction = localFunctionMap[node];
if (localFunction == null) {
@@ -1622,6 +1635,7 @@
}
/// Compute the kind of foreign helper function called by [node], if any.
+ @override
ForeignKind getForeignKind(ir.StaticInvocation node) {
if (commonElements.isForeignHelper(getMember(node.target))) {
switch (node.target.name.text) {
@@ -1640,6 +1654,7 @@
/// Computes the [InterfaceType] referenced by a call to the
/// [JS_INTERCEPTOR_CONSTANT] function, if any.
+ @override
InterfaceType getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node) {
if (node.arguments.positional.length != 1 ||
node.arguments.named.isNotEmpty) {
diff --git a/pkg/compiler/lib/src/kernel/element_map_interfaces.dart b/pkg/compiler/lib/src/kernel/element_map_interfaces.dart
index ac78b1f..12453f5 100644
--- a/pkg/compiler/lib/src/kernel/element_map_interfaces.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_interfaces.dart
@@ -9,26 +9,53 @@
import 'package:kernel/ast.dart' as ir
show
Class,
+ Constructor,
DartType,
+ Expression,
Field,
+ InterfaceType,
+ LibraryDependency,
+ LocalFunction,
Member,
+ Name,
Procedure,
ProcedureStubKind,
- LibraryDependency,
- Expression;
-import 'package:kernel/type_environment.dart' as ir show StaticTypeContext;
+ StaticInvocation;
+import 'package:kernel/type_environment.dart' as ir
+ show TypeEnvironment, StaticTypeContext;
import '../common.dart' show DiagnosticReporter;
import '../common/elements.dart' show CommonElements, ElementEnvironment;
import '../elements/entities.dart'
- show ClassEntity, ConstructorEntity, MemberEntity, ImportEntity;
+ show
+ ClassEntity,
+ ConstructorEntity,
+ FieldEntity,
+ FunctionEntity,
+ Local,
+ MemberEntity,
+ ImportEntity;
import '../constants/values.dart';
import '../elements/indexed.dart' show IndexedClass;
+import '../elements/names.dart' show Name;
import '../elements/types.dart' show DartType, DartTypes, InterfaceType;
import '../ir/constants.dart' show Dart2jsConstantEvaluator;
import '../native/behavior.dart';
+import '../js_backend/native_data.dart' show NativeBasicData;
import '../options.dart';
+import '../universe/selector.dart';
-abstract class KernelElementEnvironment implements ElementEnvironment {}
+enum ForeignKind {
+ JS,
+ JS_BUILTIN,
+ JS_EMBEDDED_GLOBAL,
+ JS_INTERCEPTOR_CONSTANT,
+ NONE,
+}
+
+abstract class KernelElementEnvironment implements ElementEnvironment {
+ Iterable<ConstantValue> getMemberMetadata(MemberEntity member,
+ {bool includeParameterMetadata = false});
+}
abstract class KernelToElementMapForNativeData {
KernelElementEnvironment get elementEnvironment;
@@ -75,6 +102,48 @@
ir.StaticTypeContext getStaticTypeContext(MemberEntity member);
}
+abstract class KernelToElementMapForKernelImpact {
+ CommonElements get commonElements;
+ KernelElementEnvironment get elementEnvironment;
+ NativeBasicData get nativeBasicData;
+ ir.TypeEnvironment get typeEnvironment;
+ InterfaceType createInterfaceType(
+ ir.Class cls, List<ir.DartType> typeArguments);
+ ClassEntity getClass(ir.Class node);
+ ConstantValue? getConstantValue(
+ ir.StaticTypeContext staticTypeContext, ir.Expression node,
+ {bool requireConstant = true,
+ bool implicitNull = false,
+ bool checkCasts = true});
+ ConstructorEntity getConstructor(ir.Member node);
+ ConstructorEntity getSuperConstructor(
+ ir.Constructor sourceNode, ir.Member targetNode);
+ DartType getDartType(ir.DartType type);
+ FieldEntity getField(ir.Field node);
+ ForeignKind getForeignKind(ir.StaticInvocation node);
+ FunctionEntity getMethod(ir.Procedure node);
+ FunctionEntity getSuperNoSuchMethod(ClassEntity cls);
+ InterfaceType getInterfaceType(ir.InterfaceType type);
+ ImportEntity? getImport(ir.LibraryDependency? node);
+ InterfaceType? getInterfaceTypeForJsInterceptorCall(ir.StaticInvocation node);
+ Local getLocalFunction(ir.LocalFunction node);
+ MemberEntity getMember(ir.Member node);
+ Name getName(ir.Name name);
+ NativeBehavior getNativeBehaviorForFieldLoad(ir.Field field,
+ Iterable<String> createsAnnotations, Iterable<String> returnsAnnotations,
+ {required bool isJsInterop});
+ NativeBehavior getNativeBehaviorForFieldStore(ir.Field field);
+ NativeBehavior getNativeBehaviorForJsBuiltinCall(ir.StaticInvocation node);
+ NativeBehavior getNativeBehaviorForJsCall(ir.StaticInvocation node);
+ NativeBehavior getNativeBehaviorForJsEmbeddedGlobalCall(
+ ir.StaticInvocation node);
+ NativeBehavior getNativeBehaviorForMethod(ir.Member member,
+ Iterable<String> createsAnnotations, Iterable<String> returnsAnnotations,
+ {required bool isJsInterop});
+ Selector getInvocationSelector(ir.Name irName, int positionalArguments,
+ List<String> namedArguments, int typeArguments);
+}
+
// Members which dart2js ignores.
bool memberIsIgnorable(ir.Member node, {ir.Class? cls}) {
if (node is! ir.Procedure) return false;
diff --git a/pkg/compiler/lib/src/kernel/kernel_impact.dart b/pkg/compiler/lib/src/kernel/kernel_impact.dart
index 7f95d06..c4c4f4c 100644
--- a/pkg/compiler/lib/src/kernel/kernel_impact.dart
+++ b/pkg/compiler/lib/src/kernel/kernel_impact.dart
@@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// @dart = 2.10
-
import 'package:kernel/ast.dart' as ir;
import 'package:kernel/type_environment.dart' as ir;
@@ -35,7 +33,9 @@
import '../universe/use.dart';
import '../universe/world_builder.dart';
import '../universe/world_impact.dart';
-import 'element_map.dart';
+import 'element_map_interfaces.dart';
+
+typedef KernelToElementMap = KernelToElementMapForKernelImpact;
/// [ImpactRegistry] that converts kernel based impact data to world impact
/// object based on the K model.
@@ -82,7 +82,7 @@
String typeToString(DartType type) =>
type.toStructuredText(dartTypes, _options);
- Object _computeReceiverConstraint(
+ Object? _computeReceiverConstraint(
ir.DartType receiverType, ClassRelation relation) {
if (receiverType is ir.InterfaceType) {
return StrongModeConstraint(commonElements, _nativeBasicData,
@@ -142,7 +142,7 @@
}
}
- List<DartType> _getTypeArguments(List<ir.DartType> types) {
+ List<DartType>? _getTypeArguments(List<ir.DartType> types) {
if (types.isEmpty) return null;
return types.map(elementMap.getDartType).toList();
}
@@ -156,12 +156,12 @@
void registerFieldNode(ir.Field field) {
if (field.isInstanceMember &&
_nativeBasicData
- .isNativeClass(elementMap.getClass(field.enclosingClass))) {
+ .isNativeClass(elementMap.getClass(field.enclosingClass!))) {
MemberEntity member = elementMap.getMember(field);
// TODO(johnniwinther): NativeDataBuilder already has the native behavior
// at this point. Use that instead.
bool isJsInterop = _nativeBasicData.isJsInteropMember(member);
- List<ConstantValue> metadata =
+ Iterable<ConstantValue> metadata =
elementMap.elementEnvironment.getMemberMetadata(member);
Iterable<String> createsAnnotations =
getCreatesAnnotations(dartTypes, reporter, commonElements, metadata);
@@ -181,7 +181,7 @@
// TODO(johnniwinther): NativeDataBuilder already has the native behavior
// at this point. Use that instead.
bool isJsInterop = _nativeBasicData.isJsInteropMember(member);
- List<ConstantValue> metadata =
+ Iterable<ConstantValue> metadata =
elementMap.elementEnvironment.getMemberMetadata(member);
Iterable<String> createsAnnotations =
getCreatesAnnotations(dartTypes, reporter, commonElements, metadata);
@@ -227,7 +227,7 @@
// TODO(johnniwinther): NativeDataBuilder already has the native behavior
// at this point. Use that instead.
bool isJsInterop = _nativeBasicData.isJsInteropMember(member);
- List<ConstantValue> metadata =
+ Iterable<ConstantValue> metadata =
elementMap.elementEnvironment.getMemberMetadata(member);
Iterable<String> createsAnnotations =
getCreatesAnnotations(dartTypes, reporter, commonElements, metadata);
@@ -271,7 +271,7 @@
@override
void registerListLiteral(ir.DartType elementType,
- {bool isConst, bool isEmpty}) {
+ {required bool isConst, required bool isEmpty}) {
// TODO(johnniwinther): Use the [isConstant] and [isEmpty] property when
// factory constructors are registered directly.
impactBuilder.registerTypeUse(TypeUse.instantiation(
@@ -280,7 +280,7 @@
@override
void registerSetLiteral(ir.DartType elementType,
- {bool isConst, bool isEmpty}) {
+ {required bool isConst, required bool isEmpty}) {
// TODO(johnniwinther): Use the [isEmpty] property when factory
// constructors are registered directly.
if (isConst) {
@@ -293,7 +293,7 @@
@override
void registerMapLiteral(ir.DartType keyType, ir.DartType valueType,
- {bool isConst, bool isEmpty}) {
+ {required bool isConst, required bool isEmpty}) {
// TODO(johnniwinther): Use the [isEmpty] property when factory
// constructors are registered directly.
if (isConst) {
@@ -312,19 +312,19 @@
int positionalArguments,
List<String> namedArguments,
List<ir.DartType> typeArguments,
- ir.LibraryDependency import,
- {bool isConst}) {
+ ir.LibraryDependency? import,
+ {required bool isConst}) {
ConstructorEntity constructor = elementMap.getConstructor(target);
CallStructure callStructure = CallStructure(
positionalArguments + namedArguments.length,
namedArguments,
typeArguments.length);
- ImportEntity deferredImport = elementMap.getImport(import);
+ ImportEntity? deferredImport = elementMap.getImport(import);
impactBuilder.registerStaticUse(isConst
? StaticUse.constConstructorInvoke(constructor, callStructure,
- elementMap.getDartType(type).withoutNullability, deferredImport)
+ elementMap.getInterfaceType(type), deferredImport)
: StaticUse.typedConstructorInvoke(constructor, callStructure,
- elementMap.getDartType(type).withoutNullability, deferredImport));
+ elementMap.getInterfaceType(type), deferredImport));
if (type.typeArguments.any((ir.DartType type) => type is! ir.DynamicType)) {
registerBackendImpact(_impacts.typeVariableBoundCheck);
}
@@ -340,8 +340,8 @@
@override
void registerConstInstantiation(ir.Class cls, List<ir.DartType> typeArguments,
- ir.LibraryDependency import) {
- ImportEntity deferredImport = elementMap.getImport(import);
+ ir.LibraryDependency? import) {
+ ImportEntity? deferredImport = elementMap.getImport(import);
InterfaceType type = elementMap.createInterfaceType(cls, typeArguments);
impactBuilder
.registerTypeUse(TypeUse.constInstantiation(type, deferredImport));
@@ -377,18 +377,18 @@
int positionalArguments,
List<String> namedArguments,
List<ir.DartType> typeArguments,
- ir.LibraryDependency import) {
+ ir.LibraryDependency? import) {
FunctionEntity target = elementMap.getMethod(procedure);
CallStructure callStructure = CallStructure(
positionalArguments + namedArguments.length,
namedArguments,
typeArguments.length);
- List<DartType> dartTypeArguments = _getTypeArguments(typeArguments);
+ List<DartType>? dartTypeArguments = _getTypeArguments(typeArguments);
if (commonElements.isExtractTypeArguments(target)) {
- _handleExtractTypeArguments(target, dartTypeArguments, callStructure);
+ _handleExtractTypeArguments(target, dartTypeArguments!, callStructure);
return;
} else {
- ImportEntity deferredImport = elementMap.getImport(import);
+ ImportEntity? deferredImport = elementMap.getImport(import);
impactBuilder.registerStaticUse(StaticUse.staticInvoke(
target, callStructure, dartTypeArguments, deferredImport));
}
@@ -409,7 +409,7 @@
elementMap.getNativeBehaviorForJsEmbeddedGlobalCall(node));
break;
case ForeignKind.JS_INTERCEPTOR_CONSTANT:
- InterfaceType type =
+ InterfaceType? type =
elementMap.getInterfaceTypeForJsInterceptorCall(node);
if (type != null) {
impactBuilder.registerTypeUse(TypeUse.instantiation(type));
@@ -449,29 +449,29 @@
@override
void registerStaticTearOff(
- ir.Procedure procedure, ir.LibraryDependency import) {
+ ir.Procedure procedure, ir.LibraryDependency? import) {
impactBuilder.registerStaticUse(StaticUse.staticTearOff(
elementMap.getMethod(procedure), elementMap.getImport(import)));
}
@override
- void registerStaticGet(ir.Member member, ir.LibraryDependency import) {
+ void registerStaticGet(ir.Member member, ir.LibraryDependency? import) {
impactBuilder.registerStaticUse(StaticUse.staticGet(
elementMap.getMember(member), elementMap.getImport(import)));
}
@override
- void registerStaticSet(ir.Member member, ir.LibraryDependency import) {
+ void registerStaticSet(ir.Member member, ir.LibraryDependency? import) {
impactBuilder.registerStaticUse(StaticUse.staticSet(
elementMap.getMember(member), elementMap.getImport(import)));
}
@override
- void registerSuperInvocation(ir.Member target, int positionalArguments,
+ void registerSuperInvocation(ir.Member? target, int positionalArguments,
List<String> namedArguments, List<ir.DartType> typeArguments) {
if (target != null) {
- FunctionEntity method = elementMap.getMember(target);
- List<DartType> dartTypeArguments = _getTypeArguments(typeArguments);
+ FunctionEntity method = elementMap.getMember(target) as FunctionEntity;
+ List<DartType>? dartTypeArguments = _getTypeArguments(typeArguments);
impactBuilder.registerStaticUse(StaticUse.superInvoke(
method,
CallStructure(positionalArguments + namedArguments.length,
@@ -481,18 +481,19 @@
// TODO(johnniwinther): Remove this when the CFE checks for missing
// concrete super targets.
impactBuilder.registerStaticUse(StaticUse.superInvoke(
- elementMap.getSuperNoSuchMethod(currentMember.enclosingClass),
+ elementMap.getSuperNoSuchMethod(currentMember.enclosingClass!),
CallStructure.ONE_ARG));
registerBackendImpact(_impacts.superNoSuchMethod);
}
}
@override
- void registerSuperGet(ir.Member target) {
+ void registerSuperGet(ir.Member? target) {
if (target != null) {
MemberEntity member = elementMap.getMember(target);
if (member.isFunction) {
- impactBuilder.registerStaticUse(StaticUse.superTearOff(member));
+ impactBuilder.registerStaticUse(
+ StaticUse.superTearOff(member as FunctionEntity));
} else {
impactBuilder.registerStaticUse(StaticUse.superGet(member));
}
@@ -500,26 +501,28 @@
// TODO(johnniwinther): Remove this when the CFE checks for missing
// concrete super targets.
impactBuilder.registerStaticUse(StaticUse.superInvoke(
- elementMap.getSuperNoSuchMethod(currentMember.enclosingClass),
+ elementMap.getSuperNoSuchMethod(currentMember.enclosingClass!),
CallStructure.ONE_ARG));
registerBackendImpact(_impacts.superNoSuchMethod);
}
}
@override
- void registerSuperSet(ir.Member target) {
+ void registerSuperSet(ir.Member? target) {
if (target != null) {
MemberEntity member = elementMap.getMember(target);
if (member.isField) {
- impactBuilder.registerStaticUse(StaticUse.superFieldSet(member));
+ impactBuilder
+ .registerStaticUse(StaticUse.superFieldSet(member as FieldEntity));
} else {
- impactBuilder.registerStaticUse(StaticUse.superSetterSet(member));
+ impactBuilder.registerStaticUse(
+ StaticUse.superSetterSet(member as FunctionEntity));
}
} else {
// TODO(johnniwinther): Remove this when the CFE checks for missing
// concrete super targets.
impactBuilder.registerStaticUse(StaticUse.superInvoke(
- elementMap.getSuperNoSuchMethod(currentMember.enclosingClass),
+ elementMap.getSuperNoSuchMethod(currentMember.enclosingClass!),
CallStructure.ONE_ARG));
registerBackendImpact(_impacts.superNoSuchMethod);
}
@@ -535,7 +538,7 @@
positionalArguments + namedArguments.length,
namedArguments,
typeArguments.length);
- List<DartType> dartTypeArguments = _getTypeArguments(typeArguments);
+ List<DartType>? dartTypeArguments = _getTypeArguments(typeArguments);
// Invocation of a local function. No need for dynamic use, but
// we need to track the type arguments.
impactBuilder.registerStaticUse(StaticUse.closureCall(
@@ -559,7 +562,7 @@
List<ir.DartType> typeArguments) {
Selector selector = elementMap.getInvocationSelector(
name, positionalArguments, namedArguments, typeArguments.length);
- List<DartType> dartTypeArguments = _getTypeArguments(typeArguments);
+ List<DartType>? dartTypeArguments = _getTypeArguments(typeArguments);
impactBuilder.registerDynamicUse(DynamicUse(selector,
_computeReceiverConstraint(receiverType, relation), dartTypeArguments));
}
@@ -574,7 +577,7 @@
positionalArguments + namedArguments.length,
namedArguments,
typeArguments.length);
- List<DartType> dartTypeArguments = _getTypeArguments(typeArguments);
+ List<DartType>? dartTypeArguments = _getTypeArguments(typeArguments);
impactBuilder.registerDynamicUse(DynamicUse(
callStructure.callSelector,
_computeReceiverConstraint(receiverType, ClassRelation.subtype),
@@ -589,7 +592,7 @@
int positionalArguments,
List<String> namedArguments,
List<ir.DartType> typeArguments) {
- List<DartType> dartTypeArguments = _getTypeArguments(typeArguments);
+ List<DartType>? dartTypeArguments = _getTypeArguments(typeArguments);
impactBuilder.registerDynamicUse(DynamicUse(
elementMap.getInvocationSelector(target.name, positionalArguments,
namedArguments, typeArguments.length),
@@ -635,9 +638,9 @@
@override
void registerRuntimeTypeUse(RuntimeTypeUseKind kind, ir.DartType receiverType,
- ir.DartType argumentType) {
+ ir.DartType? argumentType) {
DartType receiverDartType = elementMap.getDartType(receiverType);
- DartType argumentDartType =
+ DartType? argumentDartType =
argumentType == null ? null : elementMap.getDartType(argumentType);
// Enable runtime type support if we discover a getter called
@@ -649,7 +652,7 @@
}
@override
- void registerAssert({bool withMessage}) {
+ void registerAssert({required bool withMessage}) {
registerBackendImpact(withMessage
? _impacts.assertWithMessage
: _impacts.assertWithoutMessage);
@@ -660,7 +663,8 @@
ir.FunctionType expressionType, List<ir.DartType> typeArguments) {
// TODO(johnniwinther): Track which arities are used in instantiation.
final instantiation = GenericInstantiation(
- elementMap.getDartType(expressionType).withoutNullability,
+ elementMap.getDartType(expressionType).withoutNullability
+ as FunctionType,
typeArguments.map(elementMap.getDartType).toList());
registerBackendImpact(
_impacts.getGenericInstantiation(instantiation.typeArguments.length));
@@ -674,7 +678,7 @@
}
@override
- void registerLocalFunction(ir.TreeNode node) {
+ void registerLocalFunction(covariant ir.LocalFunction node) {
Local function = elementMap.getLocalFunction(node);
impactBuilder.registerStaticUse(StaticUse.closure(function));
registerBackendImpact(_impacts.closure);
@@ -727,7 +731,7 @@
@override
void registerSyncForIn(ir.DartType iterableType, ir.DartType iteratorType,
ClassRelation iteratorClassRelation) {
- Object receiverConstraint =
+ Object? receiverConstraint =
_computeReceiverConstraint(iteratorType, iteratorClassRelation);
registerBackendImpact(_impacts.syncForIn);
impactBuilder.registerDynamicUse(
@@ -741,7 +745,7 @@
@override
void registerAsyncForIn(ir.DartType iterableType, ir.DartType iteratorType,
ClassRelation iteratorClassRelation) {
- Object receiverConstraint =
+ Object? receiverConstraint =
_computeReceiverConstraint(iteratorType, iteratorClassRelation);
registerBackendImpact(_impacts.asyncForIn);
impactBuilder.registerDynamicUse(
@@ -770,8 +774,8 @@
}
@override
- void registerTypeLiteral(ir.DartType irType, ir.LibraryDependency import) {
- ImportEntity deferredImport = elementMap.getImport(import);
+ void registerTypeLiteral(ir.DartType irType, ir.LibraryDependency? import) {
+ ImportEntity? deferredImport = elementMap.getImport(import);
DartType type = elementMap.getDartType(irType);
impactBuilder.registerTypeUse(TypeUse.typeLiteral(type, deferredImport));
_customElementsResolutionAnalysis.registerTypeLiteral(type);
@@ -825,10 +829,10 @@
// Treat symbol constants as if Symbol doesn't override `==`.
return false;
}
- ClassEntity cls = type.element;
+ ClassEntity? cls = type.element;
while (cls != null) {
MemberEntity member =
- elementMap.elementEnvironment.lookupClassMember(cls, '==');
+ elementMap.elementEnvironment.lookupClassMember(cls, '==')!;
if (member.isAbstract) {
cls = elementMap.elementEnvironment.getSuperClass(cls);
} else {
@@ -842,7 +846,7 @@
for (ir.SwitchCase switchCase in node.cases) {
for (ir.Expression expression in switchCase.expressions) {
ConstantValue value =
- elementMap.getConstantValue(staticTypeContext, expression);
+ elementMap.getConstantValue(staticTypeContext, expression)!;
DartType type = value.getType(elementMap.commonElements);
if (type == commonElements.doubleType) {
reporter.reportErrorMessage(
@@ -854,7 +858,7 @@
MessageKind.SWITCH_CASE_FORBIDDEN, {'type': "Function"});
} else if (value is ObjectConstantValue &&
type != commonElements.typeLiteralType &&
- overridesEquals(type)) {
+ overridesEquals(type as InterfaceType)) {
reporter.reportErrorMessage(
computeSourceSpanFromTreeNode(expression),
MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
diff --git a/pkg/compiler/lib/src/universe/use.dart b/pkg/compiler/lib/src/universe/use.dart
index b4ebace..fb60943 100644
--- a/pkg/compiler/lib/src/universe/use.dart
+++ b/pkg/compiler/lib/src/universe/use.dart
@@ -561,7 +561,7 @@
ConstructorEntity element,
CallStructure callStructure,
InterfaceType type,
- ImportEntity deferredImport) {
+ ImportEntity? deferredImport) {
assert(
(type as dynamic) != null, // TODO(48820): remove when sound
failedAt(element, "No type provided for constructor invocation."));
@@ -583,7 +583,7 @@
ConstructorEntity element,
CallStructure callStructure,
InterfaceType type,
- ImportEntity deferredImport) {
+ ImportEntity? deferredImport) {
assert(
(type as dynamic) != null, // TODO(48820): remove when sound
failedAt(element, "No type provided for constructor invocation."));
@@ -645,7 +645,7 @@
/// An invocation of a local function [element] with the provided
/// [callStructure] and [typeArguments].
factory StaticUse.closureCall(Local element, CallStructure callStructure,
- List<DartType> typeArguments) {
+ List<DartType>? typeArguments) {
StaticUse staticUse = StaticUse.internal(
element, StaticUseKind.CLOSURE_CALL,
callStructure: callStructure, typeArguments: typeArguments);
@@ -836,7 +836,7 @@
}
/// [type] used as a type literal, like `foo() => T;`.
- factory TypeUse.typeLiteral(DartType type, ImportEntity deferredImport) {
+ factory TypeUse.typeLiteral(DartType type, ImportEntity? deferredImport) {
return TypeUse.internal(type, TypeUseKind.TYPE_LITERAL, deferredImport);
}
@@ -847,7 +847,7 @@
/// [type] used in a constant instantiation, like `const T();`.
factory TypeUse.constInstantiation(
- InterfaceType type, ImportEntity deferredImport) {
+ InterfaceType type, ImportEntity? deferredImport) {
return TypeUse.internal(
type, TypeUseKind.CONST_INSTANTIATION, deferredImport);
}