[kernel] Remove isNonNullableByDefault from checkBounds and instantiateToBounds

Change-Id: Ie1faa72cd1d9eaae65e1fb2fd44bf7a70b94a025
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/368641
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Mayank Patke <fishythefish@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
Johnni Winther 2024-05-30 13:51:46 +00:00 committed by Commit Queue
parent c543ceb96a
commit 1315b3ab72
9 changed files with 29 additions and 60 deletions

View file

@ -602,8 +602,8 @@ class JsKernelToElementMap implements JsToElementMap, IrToElementMap {
data.instantiationToBounds = data.thisType;
} else {
data.instantiationToBounds = getInterfaceType(ir.instantiateToBounds(
coreTypes.legacyRawType(node), coreTypes.objectClass,
isNonNullableByDefault: true) as ir.InterfaceType);
coreTypes.legacyRawType(node), coreTypes.objectClass)
as ir.InterfaceType);
}
}
}

View file

@ -315,8 +315,8 @@ class KernelToElementMap implements IrToElementMap {
data.instantiationToBounds = data.thisType;
} else {
data.instantiationToBounds = getInterfaceType(ir.instantiateToBounds(
coreTypes.legacyRawType(node), coreTypes.objectClass,
isNonNullableByDefault: true) as ir.InterfaceType);
coreTypes.legacyRawType(node), coreTypes.objectClass)
as ir.InterfaceType);
}
}
}

View file

@ -4492,8 +4492,7 @@ class BodyBuilder extends StackListenerImpl
typeArgument = buildDartType(
typeArguments.single, TypeUse.literalTypeArgument,
allowPotentiallyConstantType: false);
typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass,
isNonNullableByDefault: true);
typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
}
} else {
typeArgument = implicitTypeArgument;
@ -4546,8 +4545,7 @@ class BodyBuilder extends StackListenerImpl
typeArgument = buildDartType(
typeArguments.single, TypeUse.literalTypeArgument,
allowPotentiallyConstantType: false);
typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass,
isNonNullableByDefault: true);
typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
}
}
@ -4681,8 +4679,7 @@ class BodyBuilder extends StackListenerImpl
typeArgument = buildDartType(
typeArguments.single, TypeUse.literalTypeArgument,
allowPotentiallyConstantType: false);
typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass,
isNonNullableByDefault: true);
typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
} else {
typeArgument = implicitTypeArgument;
}
@ -4861,10 +4858,8 @@ class BodyBuilder extends StackListenerImpl
allowPotentiallyConstantType: false);
valueType = buildDartType(typeArguments[1], TypeUse.literalTypeArgument,
allowPotentiallyConstantType: false);
keyType = instantiateToBounds(keyType, coreTypes.objectClass,
isNonNullableByDefault: true);
valueType = instantiateToBounds(valueType, coreTypes.objectClass,
isNonNullableByDefault: true);
keyType = instantiateToBounds(keyType, coreTypes.objectClass);
valueType = instantiateToBounds(valueType, coreTypes.objectClass);
}
}
@ -4906,10 +4901,8 @@ class BodyBuilder extends StackListenerImpl
allowPotentiallyConstantType: false);
valueType = buildDartType(typeArguments[1], TypeUse.literalTypeArgument,
allowPotentiallyConstantType: false);
keyType = instantiateToBounds(keyType, coreTypes.objectClass,
isNonNullableByDefault: true);
valueType = instantiateToBounds(valueType, coreTypes.objectClass,
isNonNullableByDefault: true);
keyType = instantiateToBounds(keyType, coreTypes.objectClass);
valueType = instantiateToBounds(valueType, coreTypes.objectClass);
}
} else {
keyType = implicitTypeArgument;

View file

@ -164,8 +164,7 @@ class BuilderMixinInferrer {
p.bound = substitution.substituteType(p.bound);
}
// Use instantiate to bounds.
List<DartType> bounds = calculateBounds(parameters, coreTypes.objectClass,
isNonNullableByDefault: true);
List<DartType> bounds = calculateBounds(parameters, coreTypes.objectClass);
for (int i = 0; i < mixedInType.typeArguments.length; ++i) {
mixedInType.typeArguments[i] = bounds[i];
}

View file

@ -829,8 +829,7 @@ class SourceEnumBuilder extends SourceClassBuilder {
classHierarchy.coreTypes,
new ListLiteral(values,
typeArgument: instantiateToBounds(rawType(Nullability.nonNullable),
classHierarchy.coreTypes.objectClass,
isNonNullableByDefault: true),
classHierarchy.coreTypes.objectClass),
isConst: true));
for (SourceFieldBuilder elementBuilder in elementBuilders) {

View file

@ -1061,9 +1061,8 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
}
onType = inferredSubstitution
.substituteType(extensionBuilder.extension.onType);
List<DartType> instantiateToBoundTypeArguments = calculateBounds(
typeParameters, coreTypes.objectClass,
isNonNullableByDefault: true);
List<DartType> instantiateToBoundTypeArguments =
calculateBounds(typeParameters, coreTypes.objectClass);
Substitution instantiateToBoundsSubstitution = Substitution.fromPairs(
typeParameters, instantiateToBoundTypeArguments);
onTypeInstantiateToBounds = instantiateToBoundsSubstitution

View file

@ -250,9 +250,8 @@ class TypeSchemaEnvironment extends HierarchyBasedTypeEnvironment
helperTypeParameters[i].bound = inferredTypes[i];
}
}
List<DartType> instantiatedTypes = calculateBounds(
helperTypeParameters, coreTypes.objectClass,
isNonNullableByDefault: true);
List<DartType> instantiatedTypes =
calculateBounds(helperTypeParameters, coreTypes.objectClass);
for (int i = 0; i < instantiatedTypes.length; ++i) {
if (inferredTypes[i] is UnknownType) {
inferredTypes[i] = instantiatedTypes[i];

View file

@ -153,8 +153,7 @@ class OccurrenceCollectorVisitor implements DartTypeVisitor<void> {
}
}
DartType instantiateToBounds(DartType type, Class objectClass,
{required bool isNonNullableByDefault}) {
DartType instantiateToBounds(DartType type, Class objectClass) {
if (type is InterfaceType) {
if (type.typeArguments.isEmpty) return type;
for (DartType typeArgument in type.typeArguments) {
@ -165,11 +164,8 @@ DartType instantiateToBounds(DartType type, Class objectClass,
return type;
}
}
return new InterfaceType.byReference(
type.classReference,
type.nullability,
calculateBounds(type.classNode.typeParameters, objectClass,
isNonNullableByDefault: isNonNullableByDefault));
return new InterfaceType.byReference(type.classReference, type.nullability,
calculateBounds(type.classNode.typeParameters, objectClass));
}
if (type is TypedefType) {
if (type.typeArguments.isEmpty) return type;
@ -178,11 +174,8 @@ DartType instantiateToBounds(DartType type, Class objectClass,
return type;
}
}
return new TypedefType.byReference(
type.typedefReference,
type.nullability,
calculateBounds(type.typedefNode.typeParameters, objectClass,
isNonNullableByDefault: isNonNullableByDefault));
return new TypedefType.byReference(type.typedefReference, type.nullability,
calculateBounds(type.typedefNode.typeParameters, objectClass));
}
return type;
}
@ -194,30 +187,21 @@ DartType instantiateToBounds(DartType type, Class objectClass,
/// (https://github.com/dart-lang/sdk/blob/master/docs/language/informal/instantiate-to-bound.md)
/// of the algorithm for details.
List<DartType> calculateBounds(
List<TypeParameter> typeParameters, Class objectClass,
{required bool isNonNullableByDefault}) {
return calculateBoundsInternal(typeParameters, objectClass,
isNonNullableByDefault: isNonNullableByDefault);
}
List<DartType> calculateBoundsInternal(
List<TypeParameter> typeParameters, Class objectClass,
{required bool isNonNullableByDefault}) {
List<TypeParameter> typeParameters, Class objectClass) {
List<DartType> bounds =
new List<DartType>.filled(typeParameters.length, dummyDartType);
for (int i = 0; i < typeParameters.length; i++) {
DartType bound = typeParameters[i].bound;
bool isContravariant = typeParameters[i].variance == Variance.contravariant;
if (identical(bound, TypeParameter.unsetBoundSentinel)) {
bound = isNonNullableByDefault && isContravariant
? const NeverType.nonNullable()
: const DynamicType();
bound =
isContravariant ? const NeverType.nonNullable() : const DynamicType();
} else if (bound is InterfaceType &&
bound.classReference == objectClass.reference) {
DartType defaultType = typeParameters[i].defaultType;
if (!(defaultType is InterfaceType &&
defaultType.classNode == objectClass)) {
bound = isNonNullableByDefault && isContravariant
bound = isContravariant
? const NeverType.nonNullable()
: const DynamicType();
}
@ -228,9 +212,7 @@ List<DartType> calculateBoundsInternal(
TypeVariableGraph graph = new TypeVariableGraph(typeParameters, bounds);
List<List<int>> stronglyConnected = computeStrongComponents(graph);
final DartType topType = const DynamicType();
final DartType bottomType = isNonNullableByDefault
? const NeverType.nonNullable()
: const NeverType.legacy();
final DartType bottomType = const NeverType.nonNullable();
for (List<int> component in stronglyConnected) {
Map<TypeParameter, DartType> upperBounds = <TypeParameter, DartType>{};
Map<TypeParameter, DartType> lowerBounds = <TypeParameter, DartType>{};

View file

@ -625,8 +625,7 @@ class _KernelFromParsedType implements Visitor<Node, TypeParserEnvironment> {
..defaultType = type;
}
}
List<DartType> defaultTypes = calculateBounds(typeParameters, objectClass,
isNonNullableByDefault: true);
List<DartType> defaultTypes = calculateBounds(typeParameters, objectClass);
for (int i = 0; i < typeParameters.length; i++) {
typeParameters[i].defaultType = defaultTypes[i];
}
@ -694,8 +693,7 @@ class _KernelFromParsedType implements Visitor<Node, TypeParserEnvironment> {
typeParameters[i])));
List<DartType> defaultTypes = calculateBounds(
freshTypeParametersFromStructuralParameters.freshTypeParameters,
objectClass,
isNonNullableByDefault: true);
objectClass);
for (int i = 0; i < typeParameters.length; i++) {
typeParameters[i].defaultType =
substitution.substituteType(defaultTypes[i]);