mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 15:47:08 +00:00
[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:
parent
c543ceb96a
commit
1315b3ab72
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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>{};
|
||||
|
|
|
@ -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]);
|
||||
|
|
Loading…
Reference in a new issue