[cfe] Remove isNonNullableByDefault from various functions

Change-Id: I757b3be578f5ce6489482cdcaae45480ed20ce68
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/366660
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
Johnni Winther 2024-05-16 08:20:28 +00:00 committed by Commit Queue
parent eccaf152ee
commit d8e6d26159
8 changed files with 49 additions and 151 deletions

View file

@ -67,8 +67,7 @@ class DelayedOverrideCheck implements DelayedCheck {
void callback(Member interfaceMember, bool isSetter) {
_classBuilder.checkOverride(membersBuilder.hierarchyBuilder.types,
membersBuilder, declaredMember, interfaceMember, isSetter, callback,
isInterfaceCheck: !_classBuilder.isMixinApplication,
declaredNeedsLegacyErasure: false);
isInterfaceCheck: !_classBuilder.isMixinApplication);
}
for (ClassMember overriddenMember in _overriddenMembers) {

View file

@ -11,7 +11,6 @@ import 'package:kernel/core_types.dart';
import 'package:kernel/names.dart' show equalsName;
import 'package:kernel/reference_from_index.dart' show IndexedContainer;
import 'package:kernel/src/bounds_checks.dart';
import 'package:kernel/src/legacy_erasure.dart';
import 'package:kernel/src/types.dart' show Types;
import 'package:kernel/type_algebra.dart'
show
@ -1304,8 +1303,7 @@ class SourceClassBuilder extends ClassBuilderImpl
Member interfaceMember,
bool isSetter,
callback(Member interfaceMember, bool isSetter),
{required bool isInterfaceCheck,
required bool declaredNeedsLegacyErasure}) {
{required bool isInterfaceCheck}) {
if (declaredMember == interfaceMember) {
return;
}
@ -1319,33 +1317,18 @@ class SourceClassBuilder extends ClassBuilderImpl
if (declaredMember.kind == interfaceMember.kind) {
if (declaredMember.kind == ProcedureKind.Method ||
declaredMember.kind == ProcedureKind.Operator) {
bool seenCovariant = checkMethodOverride(
types,
declaredMember,
interfaceMember,
interfaceMemberOrigin,
isInterfaceCheck,
declaredNeedsLegacyErasure);
bool seenCovariant = checkMethodOverride(types, declaredMember,
interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
if (seenCovariant) {
_handleSeenCovariant(
memberHierarchy, interfaceMember, isSetter, callback);
}
} else if (declaredMember.kind == ProcedureKind.Getter) {
checkGetterOverride(
types,
declaredMember,
interfaceMember,
interfaceMemberOrigin,
isInterfaceCheck,
declaredNeedsLegacyErasure);
checkGetterOverride(types, declaredMember, interfaceMember,
interfaceMemberOrigin, isInterfaceCheck);
} else if (declaredMember.kind == ProcedureKind.Setter) {
bool seenCovariant = checkSetterOverride(
types,
declaredMember,
interfaceMember,
interfaceMemberOrigin,
isInterfaceCheck,
declaredNeedsLegacyErasure);
bool seenCovariant = checkSetterOverride(types, declaredMember,
interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
if (seenCovariant) {
_handleSeenCovariant(
memberHierarchy, interfaceMember, isSetter, callback);
@ -1371,22 +1354,12 @@ class SourceClassBuilder extends ClassBuilderImpl
!interfaceMember.isConst) ||
interfaceMember is Procedure && interfaceMember.isSetter;
if (declaredMemberHasGetter && interfaceMemberHasGetter) {
checkGetterOverride(
types,
declaredMember,
interfaceMember,
interfaceMemberOrigin,
isInterfaceCheck,
declaredNeedsLegacyErasure);
checkGetterOverride(types, declaredMember, interfaceMember,
interfaceMemberOrigin, isInterfaceCheck);
}
if (declaredMemberHasSetter && interfaceMemberHasSetter) {
bool seenCovariant = checkSetterOverride(
types,
declaredMember,
interfaceMember,
interfaceMemberOrigin,
isInterfaceCheck,
declaredNeedsLegacyErasure);
bool seenCovariant = checkSetterOverride(types, declaredMember,
interfaceMember, interfaceMemberOrigin, isInterfaceCheck);
if (seenCovariant) {
_handleSeenCovariant(
memberHierarchy, interfaceMember, isSetter, callback);
@ -1411,8 +1384,7 @@ class SourceClassBuilder extends ClassBuilderImpl
Member interfaceMemberOrigin,
FunctionNode? declaredFunction,
FunctionNode? interfaceFunction,
bool isInterfaceCheck,
bool declaredNeedsLegacyErasure) {
bool isInterfaceCheck) {
Substitution? interfaceSubstitution;
if (interfaceMember.enclosingClass!.typeParameters.isNotEmpty) {
Class enclosingClass = interfaceMember.enclosingClass!;
@ -1480,9 +1452,6 @@ class SourceClassBuilder extends ClassBuilderImpl
interfaceSubstitution.substituteType(interfaceBound);
}
DartType computedBound = substitution.substituteType(interfaceBound);
if (declaredNeedsLegacyErasure) {
declaredBound = legacyErasure(declaredBound);
}
if (!types
.performNullabilityAwareMutualSubtypesCheck(
declaredBound, computedBound)
@ -1544,7 +1513,6 @@ class SourceClassBuilder extends ClassBuilderImpl
bool isCovariantByDeclaration,
VariableDeclaration? declaredParameter,
bool isInterfaceCheck,
bool declaredNeedsLegacyErasure,
{bool asIfDeclaredParameter = false}) {
if (interfaceSubstitution != null) {
interfaceType = interfaceSubstitution.substituteType(interfaceType);
@ -1552,9 +1520,6 @@ class SourceClassBuilder extends ClassBuilderImpl
if (declaredSubstitution != null) {
declaredType = declaredSubstitution.substituteType(declaredType);
}
if (declaredNeedsLegacyErasure) {
declaredType = legacyErasure(declaredType);
}
bool inParameter = declaredParameter != null || asIfDeclaredParameter;
DartType subtype = inParameter ? interfaceType : declaredType;
@ -1629,8 +1594,7 @@ class SourceClassBuilder extends ClassBuilderImpl
Procedure declaredMember,
Procedure interfaceMember,
Member interfaceMemberOrigin,
bool isInterfaceCheck,
bool declaredNeedsLegacyErasure) {
bool isInterfaceCheck) {
assert(declaredMember.kind == interfaceMember.kind);
assert(declaredMember.kind == ProcedureKind.Method ||
declaredMember.kind == ProcedureKind.Operator);
@ -1647,8 +1611,7 @@ class SourceClassBuilder extends ClassBuilderImpl
interfaceMemberOrigin,
declaredFunction,
interfaceFunction,
isInterfaceCheck,
declaredNeedsLegacyErasure);
isInterfaceCheck);
Substitution? declaredSubstitution =
_computeDeclaredSubstitution(types, declaredMember);
@ -1664,8 +1627,7 @@ class SourceClassBuilder extends ClassBuilderImpl
interfaceFunction.returnType,
/* isCovariantByDeclaration = */ false,
/* declaredParameter = */ null,
isInterfaceCheck,
declaredNeedsLegacyErasure);
isInterfaceCheck);
if (declaredFunction.positionalParameters.length <
interfaceFunction.positionalParameters.length) {
reportInvalidOverride(
@ -1743,8 +1705,7 @@ class SourceClassBuilder extends ClassBuilderImpl
declaredParameter.isCovariantByDeclaration ||
interfaceParameter.isCovariantByDeclaration,
declaredParameter,
isInterfaceCheck,
declaredNeedsLegacyErasure);
isInterfaceCheck);
if (declaredParameter.isCovariantByDeclaration) seenCovariant = true;
}
if (declaredFunction.namedParameters.isEmpty &&
@ -1823,10 +1784,8 @@ class SourceClassBuilder extends ClassBuilderImpl
interfaceNamedParameters.current.type,
declaredParameter.isCovariantByDeclaration,
declaredParameter,
isInterfaceCheck,
declaredNeedsLegacyErasure);
if (!declaredNeedsLegacyErasure &&
declaredParameter.isRequired &&
isInterfaceCheck);
if (declaredParameter.isRequired &&
!interfaceNamedParameters.current.isRequired) {
reportInvalidOverride(
isInterfaceCheck,
@ -1861,8 +1820,7 @@ class SourceClassBuilder extends ClassBuilderImpl
Member declaredMember,
Member interfaceMember,
Member interfaceMemberOrigin,
bool isInterfaceCheck,
bool declaredNeedsLegacyErasure) {
bool isInterfaceCheck) {
Substitution? interfaceSubstitution = _computeInterfaceSubstitution(
types,
declaredMember,
@ -1872,8 +1830,7 @@ class SourceClassBuilder extends ClassBuilderImpl
null,
/* interfaceFunction = */
null,
isInterfaceCheck,
declaredNeedsLegacyErasure);
isInterfaceCheck);
Substitution? declaredSubstitution =
_computeDeclaredSubstitution(types, declaredMember);
DartType declaredType = declaredMember.getterType;
@ -1891,8 +1848,7 @@ class SourceClassBuilder extends ClassBuilderImpl
false,
/* declaredParameter = */
null,
isInterfaceCheck,
declaredNeedsLegacyErasure);
isInterfaceCheck);
}
/// Checks whether [declaredMember] correctly overrides [interfaceMember].
@ -1908,8 +1864,7 @@ class SourceClassBuilder extends ClassBuilderImpl
Member declaredMember,
Member interfaceMember,
Member interfaceMemberOrigin,
bool isInterfaceCheck,
bool declaredNeedsLegacyErasure) {
bool isInterfaceCheck) {
Substitution? interfaceSubstitution = _computeInterfaceSubstitution(
types,
declaredMember,
@ -1919,8 +1874,7 @@ class SourceClassBuilder extends ClassBuilderImpl
null,
/* interfaceFunction = */
null,
isInterfaceCheck,
declaredNeedsLegacyErasure);
isInterfaceCheck);
Substitution? declaredSubstitution =
_computeDeclaredSubstitution(types, declaredMember);
DartType declaredType = declaredMember.setterType;
@ -1947,7 +1901,6 @@ class SourceClassBuilder extends ClassBuilderImpl
isCovariantByDeclaration,
declaredParameter,
isInterfaceCheck,
declaredNeedsLegacyErasure,
asIfDeclaredParameter: true);
return isCovariantByDeclaration;
}

View file

@ -156,8 +156,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase
visitor: this,
helper: helper,
uri: uriForInstrumentation,
coreTypes: coreTypes,
isNonNullableByDefault: true);
coreTypes: coreTypes);
/// The innermost cascade whose expressions are currently being visited, or
/// `null` if no cascade's expressions are currently being visited.

View file

@ -421,7 +421,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
_getPreciseTypeErrorTemplate(inferenceResult.expression);
AssignabilityResult assignabilityResult = _computeAssignabilityKind(
contextType, inferenceResult.inferredType,
isNonNullableByDefault: true,
isVoidAllowed: isVoidAllowed,
isExpressionTypePrecise: preciseTypeErrorTemplate != null,
coerceExpression: coerceExpression,
@ -530,7 +529,6 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
_getPreciseTypeErrorTemplate(inferenceResult.expression);
AssignabilityResult assignabilityResult = _computeAssignabilityKind(
contextType, inferenceResult.inferredType,
isNonNullableByDefault: true,
isVoidAllowed: isVoidAllowed,
isExpressionTypePrecise: preciseTypeErrorTemplate != null,
coerceExpression: isCoercionAllowed,
@ -806,8 +804,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
/// The computation is side-effect free.
AssignabilityResult _computeAssignabilityKind(
DartType contextType, DartType expressionType,
{required bool isNonNullableByDefault,
required bool isVoidAllowed,
{required bool isVoidAllowed,
required bool isExpressionTypePrecise,
required bool coerceExpression,
required int fileOffset,
@ -851,7 +848,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
}
if (shouldTearOff) {
needsTearoff = true;
if (isNonNullableByDefault && target.isNullable) {
if (target.isNullable) {
return const AssignabilityResult(
AssignabilityKind.unassignableCantTearoff,
needsTearOff: false);
@ -878,23 +875,17 @@ abstract class InferenceVisitorBase implements InferenceVisitor {
IsSubtypeOf isDirectSubtypeResult = typeSchemaEnvironment
.performNullabilityAwareSubtypeCheck(expressionType, contextType);
bool isDirectlyAssignable = isNonNullableByDefault
? isDirectSubtypeResult.isSubtypeWhenUsingNullabilities()
: isDirectSubtypeResult.isSubtypeWhenIgnoringNullabilities();
bool isDirectlyAssignable =
isDirectSubtypeResult.isSubtypeWhenUsingNullabilities();
if (isDirectlyAssignable) {
return new AssignabilityResult(AssignabilityKind.assignable,
needsTearOff: needsTearoff,
implicitInstantiation: implicitInstantiation);
}
bool isIndirectlyAssignable = isNonNullableByDefault
? expressionType is DynamicType
: typeSchemaEnvironment
.performNullabilityAwareSubtypeCheck(contextType, expressionType)
.isSubtypeWhenIgnoringNullabilities();
bool isIndirectlyAssignable = expressionType is DynamicType;
if (!isIndirectlyAssignable) {
if (isNonNullableByDefault &&
isDirectSubtypeResult.isSubtypeWhenIgnoringNullabilities()) {
if (isDirectSubtypeResult.isSubtypeWhenIgnoringNullabilities()) {
return new AssignabilityResult.withTypes(
AssignabilityKind.unassignableNullability,
isDirectSubtypeResult.subtype,

View file

@ -24,14 +24,11 @@ class SharedTypeAnalyzerErrors
final CoreTypes coreTypes;
final bool isNonNullableByDefault;
SharedTypeAnalyzerErrors(
{required this.visitor,
required this.helper,
required this.uri,
required this.coreTypes,
required this.isNonNullableByDefault});
required this.coreTypes});
@override
void assertInErrorRecovery() {

View file

@ -346,10 +346,8 @@ abstract class TypeInferenceEngine {
/// kernel objects.
class TypeInferenceEngineImpl extends TypeInferenceEngine {
final Benchmarker? benchmarker;
final FunctionType unknownFunctionNonNullable =
final FunctionType unknownFunction =
new FunctionType(const [], const DynamicType(), Nullability.nonNullable);
final FunctionType unknownFunctionLegacy =
new FunctionType(const [], const DynamicType(), Nullability.legacy);
TypeInferenceEngineImpl(Instrumentation? instrumentation, this.benchmarker)
: super(instrumentation);
@ -366,28 +364,11 @@ class TypeInferenceEngineImpl extends TypeInferenceEngine {
new AssignedVariables<TreeNode, VariableDeclaration>();
}
if (benchmarker == null) {
return new TypeInferrerImpl(
this,
uri,
false,
thisType,
library,
assignedVariables,
dataForTesting,
unknownFunctionNonNullable,
unknownFunctionLegacy);
return new TypeInferrerImpl(this, uri, false, thisType, library,
assignedVariables, dataForTesting, unknownFunction);
}
return new TypeInferrerImplBenchmarked(
this,
uri,
false,
thisType,
library,
assignedVariables,
dataForTesting,
benchmarker!,
unknownFunctionNonNullable,
unknownFunctionLegacy);
return new TypeInferrerImplBenchmarked(this, uri, false, thisType, library,
assignedVariables, dataForTesting, benchmarker!, unknownFunction);
}
@override
@ -402,28 +383,11 @@ class TypeInferenceEngineImpl extends TypeInferenceEngine {
new AssignedVariables<TreeNode, VariableDeclaration>();
}
if (benchmarker == null) {
return new TypeInferrerImpl(
this,
uri,
true,
thisType,
library,
assignedVariables,
dataForTesting,
unknownFunctionNonNullable,
unknownFunctionLegacy);
return new TypeInferrerImpl(this, uri, true, thisType, library,
assignedVariables, dataForTesting, unknownFunction);
}
return new TypeInferrerImplBenchmarked(
this,
uri,
true,
thisType,
library,
assignedVariables,
dataForTesting,
benchmarker!,
unknownFunctionNonNullable,
unknownFunctionLegacy);
return new TypeInferrerImplBenchmarked(this, uri, true, thisType, library,
assignedVariables, dataForTesting, benchmarker!, unknownFunction);
}
}

View file

@ -140,10 +140,8 @@ class TypeInferrerImpl implements TypeInferrer {
this.libraryBuilder,
this.assignedVariables,
this.dataForTesting,
FunctionType unknownFunctionNonNullable,
FunctionType unknownFunctionLegacy)
: unknownFunction = unknownFunctionNonNullable,
instrumentation = isTopLevel ? null : engine.instrumentation,
this.unknownFunction)
: instrumentation = isTopLevel ? null : engine.instrumentation,
typeSchemaEnvironment = engine.typeSchemaEnvironment,
operations = new OperationsCfe(engine.typeSchemaEnvironment,
omittedNullabilityValue: libraryBuilder.nonNullable,
@ -310,7 +308,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
InferenceDataForTesting? dataForTesting,
this.benchmarker,
FunctionType unknownFunctionNonNullable,
FunctionType unknownFunctionLegacy,
) : impl = new TypeInferrerImpl(
engine,
uriForInstrumentation,
@ -320,7 +317,6 @@ class TypeInferrerImplBenchmarked implements TypeInferrer {
assignedVariables,
dataForTesting,
unknownFunctionNonNullable,
unknownFunctionLegacy,
);
@override

View file

@ -1253,8 +1253,8 @@ class FuzzCompiles
compilationSetup.options.globalFeatures,
builder.importUri,
builder.library.languageVersion);
fuzzAstVisitorSorter = new FuzzAstVisitorSorter(
orgData, true, libFeatures.patterns.isEnabled);
fuzzAstVisitorSorter =
new FuzzAstVisitorSorter(orgData, libFeatures.patterns.isEnabled);
} on FormatException catch (e, st) {
// UTF-16-LE formatted test crashes `utf8.decode(bytes)` --- catch that
return new Result<ComponentResult>(
@ -1406,8 +1406,8 @@ class FuzzCompiles
compilationSetup.options.globalFeatures,
builder.importUri,
builder.library.languageVersion);
fuzzAstVisitorSorter = new FuzzAstVisitorSorter(
orgData, true, libFeatures.patterns.isEnabled);
fuzzAstVisitorSorter =
new FuzzAstVisitorSorter(orgData, libFeatures.patterns.isEnabled);
} on FormatException catch (e, st) {
// UTF-16-LE formatted test crashes `utf8.decode(bytes)` --- catch that
return new Result<ComponentResult>(
@ -1647,16 +1647,15 @@ enum FuzzOriginalType {
class FuzzAstVisitorSorter extends IgnoreSomeForCompatibilityAstVisitor {
final Uint8List bytes;
final String asString;
final bool nnbd;
final bool allowPatterns;
FuzzAstVisitorSorter(this.bytes, this.nnbd, this.allowPatterns)
FuzzAstVisitorSorter(this.bytes, this.allowPatterns)
: asString = utf8.decode(bytes) {
CompilationUnitEnd ast = getAST(bytes,
includeBody: false,
includeComments: true,
enableExtensionMethods: true,
enableNonNullable: nnbd,
enableNonNullable: true,
allowPatterns: allowPatterns);
ast.accept(this);