Skip to content

Commit c585fd6

Browse files
committed
ABIChecker: contains only opaque accessors for ABI/API checking
rdar://53776566
1 parent bf7ac27 commit c585fd6

File tree

4 files changed

+14
-3
lines changed

4 files changed

+14
-3
lines changed

include/swift/AST/Decl.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4686,6 +4686,10 @@ class AbstractStorageDecl : public ValueDecl {
46864686
/// To ensure an accessor is always returned, use getSynthesizedAccessor().
46874687
AccessorDecl *getOpaqueAccessor(AccessorKind kind) const;
46884688

4689+
/// Collect all opaque accessors.
4690+
ArrayRef<AccessorDecl*>
4691+
getOpaqueAccessors(llvm::SmallVectorImpl<AccessorDecl*> &scratch) const;
4692+
46894693
/// Return an accessor that was written in source. Returns null if the
46904694
/// accessor was not explicitly defined by the user.
46914695
AccessorDecl *getParsedAccessor(AccessorKind kind) const;

lib/AST/Decl.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2225,6 +2225,12 @@ AccessorDecl *AbstractStorageDecl::getOpaqueAccessor(AccessorKind kind) const {
22252225
return getSynthesizedAccessor(kind);
22262226
}
22272227

2228+
ArrayRef<AccessorDecl*> AbstractStorageDecl::getOpaqueAccessors(
2229+
llvm::SmallVectorImpl<AccessorDecl*> &scratch) const {
2230+
visitOpaqueAccessors([&](AccessorDecl *D) { scratch.push_back(D); });
2231+
return scratch;
2232+
}
2233+
22282234
bool AbstractStorageDecl::hasParsedAccessors() const {
22292235
for (auto *accessor : getAllAccessors())
22302236
if (!accessor->isImplicit())

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ cake: Accessor RemoveSetters.Value.Modify() has been removed
1212
cake: Accessor RemoveSetters.Value.Set() has been removed
1313
cake: Accessor RemoveSetters.subscript(_:).Modify() has been removed
1414
cake: Accessor RemoveSetters.subscript(_:).Set() has been removed
15-
cake: Accessor fixedLayoutStruct.height.Read() has been removed
1615
cake: AssociatedType RequiementChanges.removedType has been removed
1716
cake: Class C3 has been removed
1817
cake: Constructor Somestruct2.init(_:) has been removed

tools/swift-api-digester/ModuleAnalyzerNodes.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1694,7 +1694,8 @@ SwiftDeclCollector::constructVarNode(ValueDecl *VD) {
16941694
Info.IsImplicitlyUnwrappedOptional = VD->isImplicitlyUnwrappedOptional();
16951695
Var->addChild(constructTypeNode(VD->getInterfaceType(), Info));
16961696
if (auto VAD = dyn_cast<AbstractStorageDecl>(VD)) {
1697-
for(auto *AC: VAD->getAllAccessors()) {
1697+
llvm::SmallVector<AccessorDecl*, 4> scratch;
1698+
for(auto *AC: VAD->getOpaqueAccessors(scratch)) {
16981699
if (!Ctx.shouldIgnore(AC, VAD)) {
16991700
Var->addAccessor(constructFunctionNode(AC, SDKNodeKind::DeclAccessor));
17001701
}
@@ -1728,7 +1729,8 @@ SwiftDeclCollector::constructSubscriptDeclNode(SubscriptDecl *SD) {
17281729
for (auto *Node: createParameterNodes(SD->getIndices())) {
17291730
Subs->addChild(Node);
17301731
}
1731-
for(auto *AC: SD->getAllAccessors()) {
1732+
llvm::SmallVector<AccessorDecl*, 4> scratch;
1733+
for(auto *AC: SD->getOpaqueAccessors(scratch)) {
17321734
if (!Ctx.shouldIgnore(AC, SD)) {
17331735
Subs->addAccessor(constructFunctionNode(AC, SDKNodeKind::DeclAccessor));
17341736
}

0 commit comments

Comments
 (0)