Skip to content

Commit 9db65f8

Browse files
committed
swift-module-digester: removing super classes is API breaking.
1 parent 2909c22 commit 9db65f8

File tree

7 files changed

+23
-1
lines changed

7 files changed

+23
-1
lines changed

include/swift/AST/DiagnosticsModuleDiffer.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ ERROR(default_associated_type_removed,none,"%0 has removed default type %1", (St
6868

6969
ERROR(protocol_req_added,none,"%0 has been added as a protocol requirement", (StringRef))
7070

71+
ERROR(super_class_removed,none,"%0 has removed its super class %1", (StringRef, StringRef))
72+
7173
#ifndef DIAG_NO_UNDEF
7274
# if defined(DIAG)
7375
# undef DIAG

test/api-digester/Inputs/cake1.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,5 @@ public protocol RequiementChanges {
8989
associatedtype removedType
9090
var removedVar: Int {get}
9191
}
92+
93+
public class SuperClassRemoval: C3 {}

test/api-digester/Inputs/cake2.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,5 @@ public protocol RequiementChanges {
9696
func addedFunc()
9797
var addedVar: Int { get }
9898
}
99+
100+
public class SuperClassRemoval {}

test/api-digester/Outputs/Cake-abi.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,6 @@ cake1: AssociatedType AssociatedTypePro.T1 has removed default type Int
5959
cake2: AssociatedType RequiementChanges.addedTypeWithoutDefault has been added as a protocol requirement
6060
cake2: Func RequiementChanges.addedFunc() has been added as a protocol requirement
6161
cake2: Var RequiementChanges.addedVar has been added as a protocol requirement
62+
63+
/* Class Inheritance Change */
64+
cake1: Class SuperClassRemoval has removed its super class C3

test/api-digester/Outputs/Cake.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,7 @@ cake1: Struct fixedLayoutStruct has removed conformance to P1
4444
cake1: AssociatedType AssociatedTypePro.T1 has removed default type Int
4545
cake2: AssociatedType RequiementChanges.addedTypeWithoutDefault has been added as a protocol requirement
4646
cake2: Func RequiementChanges.addedFunc() has been added as a protocol requirement
47-
cake2: Var RequiementChanges.addedVar has been added as a protocol requirement
47+
cake2: Var RequiementChanges.addedVar has been added as a protocol requirement
48+
49+
/* Class Inheritance Change */
50+
cake1: Class SuperClassRemoval has removed its super class C3

tools/swift-api-digester/ModuleDiagsConsumer.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ static StringRef getCategoryName(uint32_t ID) {
5858
case LocalDiagID::default_associated_type_removed:
5959
case LocalDiagID::protocol_req_added:
6060
return "/* Protocol Requirement Change */";
61+
case LocalDiagID::super_class_removed:
62+
return "/* Class Inheritance Change */";
6163
default:
6264
return StringRef();
6365
}

tools/swift-api-digester/swift-api-digester.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,14 @@ static void diagnoseNominalTypeDeclChange(SDKNodeDeclType *L, SDKNodeDeclType *R
694694
Name);
695695
});
696696
}
697+
auto LSuperClass = L->getSuperClassName();
698+
auto RSuperClass = R->getSuperClassName();
699+
if (!LSuperClass.empty()) {
700+
if (RSuperClass.empty()) {
701+
Diags.diagnose(SourceLoc(), diag::super_class_removed, L->getScreenInfo(),
702+
LSuperClass);
703+
}
704+
}
697705
}
698706

699707
static void detectDeclChange(NodePtr L, NodePtr R, SDKContext &Ctx) {

0 commit comments

Comments
 (0)