mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
API checker: only diagnose adding enum cases to exhaustive enums
Adding new cases to a non-exhaustive enum type isn't source-breaking since it only triggers a warning. rdar://63464929
This commit is contained in:
@@ -126,7 +126,9 @@ SDKNodeTypeAlias::SDKNodeTypeAlias(SDKNodeInitInfo Info):
|
||||
SDKNodeDeclType::SDKNodeDeclType(SDKNodeInitInfo Info):
|
||||
SDKNodeDecl(Info, SDKNodeKind::DeclType), SuperclassUsr(Info.SuperclassUsr),
|
||||
SuperclassNames(Info.SuperclassNames),
|
||||
EnumRawTypeName(Info.EnumRawTypeName), IsExternal(Info.IsExternal),
|
||||
EnumRawTypeName(Info.EnumRawTypeName),
|
||||
IsExternal(Info.IsExternal),
|
||||
IsEnumExhaustive(Info.IsEnumExhaustive),
|
||||
HasMissingDesignatedInitializers(Info.HasMissingDesignatedInitializers),
|
||||
InheritsConvenienceInitializers(Info.InheritsConvenienceInitializers) {}
|
||||
|
||||
@@ -1426,6 +1428,7 @@ SDKNodeInitInfo::SDKNodeInitInfo(SDKContext &Ctx, ValueDecl *VD)
|
||||
|
||||
// Get enum raw type name if this is an enum.
|
||||
if (auto *ED = dyn_cast<EnumDecl>(VD)) {
|
||||
IsEnumExhaustive = ED->isFormallyExhaustive(nullptr);
|
||||
if (auto RT = ED->getRawType()) {
|
||||
if (auto *D = RT->getNominalOrBoundGenericNominal()) {
|
||||
EnumRawTypeName = D->getName().str();
|
||||
@@ -1981,6 +1984,7 @@ void SDKNodeDeclType::jsonize(json::Output &out) {
|
||||
output(out, KeyKind::KK_superclassUsr, SuperclassUsr);
|
||||
output(out, KeyKind::KK_enumRawTypeName, EnumRawTypeName);
|
||||
output(out, KeyKind::KK_isExternal, IsExternal);
|
||||
output(out, KeyKind::KK_isEnumExhaustive, IsEnumExhaustive);
|
||||
output(out, KeyKind::KK_hasMissingDesignatedInitializers,
|
||||
HasMissingDesignatedInitializers);
|
||||
output(out, KeyKind::KK_inheritsConvenienceInitializers,
|
||||
|
||||
Reference in New Issue
Block a user