Skip to content

Commit b291a62

Browse files
committed
migrator: ensure we update unresolved member access correctly to global names. rdar://41658300
1 parent 73c50a3 commit b291a62

File tree

6 files changed

+31
-6
lines changed

6 files changed

+31
-6
lines changed

include/swift/IDE/APIDigesterData.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ struct TypeMemberDiffItem: public APIDiffItem {
276276
selfIndex(selfIndex), removedIndex(removedIndex), oldTypeName(oldTypeName),
277277
oldPrintedName(oldPrintedName), OldNameViewer(oldPrintedName),
278278
NewNameViewer(newPrintedName),
279-
NewTypeDot(newTypeName.empty() ? "" : (llvm::Twine(newTypeName) + ".").str()),
279+
NewTypeDot(isNewNameGlobal() ? "" : (llvm::Twine(newTypeName) + ".").str()),
280280
Subkind(getSubKind()) {}
281281
static StringRef head();
282282
static void describe(llvm::raw_ostream &os);
@@ -291,6 +291,7 @@ struct TypeMemberDiffItem: public APIDiffItem {
291291
APIDiffItemKind getKind() const override {
292292
return APIDiffItemKind::ADK_TypeMemberDiffItem;
293293
}
294+
bool isNewNameGlobal() const { return newTypeName.empty(); }
294295
private:
295296
TypeMemberDiffItemSubKind getSubKind() const;
296297
};

lib/Migrator/APIDiffMigratorPass.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -343,8 +343,13 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
343343
if (MD->Subkind == TypeMemberDiffItemSubKind::SimpleReplacement) {
344344
bool NeedNoTypeName = isDotMember &&
345345
MD->oldPrintedName == MD->newPrintedName;
346-
Text = (llvm::Twine(NeedNoTypeName ? "." : MD->getNewTypeAndDot()) +
347-
MD->getNewName().base()).str();
346+
if (NeedNoTypeName) {
347+
Text = (llvm::Twine(MD->isNewNameGlobal() ? "" : ".") +
348+
MD->getNewName().base()).str();
349+
} else {
350+
Text = (llvm::Twine(MD->getNewTypeAndDot()) +
351+
MD->getNewName().base()).str();
352+
}
348353
return true;
349354
}
350355
}
@@ -540,9 +545,15 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
540545
if (Item->Subkind == TypeMemberDiffItemSubKind::QualifiedReplacement) {
541546
bool NeedNoTypeName = isDotMember(ToReplace) &&
542547
Item->oldPrintedName == Item->newPrintedName;
543-
Editor.replace(ToReplace,
544-
(llvm::Twine(NeedNoTypeName ? "." : Item->getNewTypeAndDot()) +
545-
Item->getNewName().base()).str());
548+
if (NeedNoTypeName) {
549+
Editor.replace(ToReplace,
550+
(llvm::Twine(Item->isNewNameGlobal() ? "" : ".") +
551+
Item->getNewName().base()).str());
552+
} else {
553+
Editor.replace(ToReplace,
554+
(llvm::Twine(Item->getNewTypeAndDot()) +
555+
Item->getNewName().base()).str());
556+
}
546557
return true;
547558
}
548559
}

test/Migrator/Inputs/qualified.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,12 @@
5555
"NewPrintedName": "orderedMemberSame",
5656
"NewTypeName": "NewFooComparisonResult.Nested"
5757
},
58+
{
59+
"DiffItemKind": "TypeMemberDiffItem",
60+
"Usr": "c:@E@FooComparisonResult@FooOrderedMovedToGlobal",
61+
"OldPrintedName": "orderedMovedToGlobal",
62+
"OldTypeName": "FooComparisonResult",
63+
"NewPrintedName": "orderedMovedToGlobal",
64+
"NewTypeName": ""
65+
},
5866
]

test/Migrator/mock-sdk/Bar.framework/Headers/Bar.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ typedef NS_ENUM(long, FooComparisonResult) {
5555
FooOrderedSame,
5656
FooOrderedDescending,
5757
FooOrderedMemberSame,
58+
FooOrderedMovedToGlobal,
5859
};
5960

6061
@interface BarBase

test/Migrator/qualified-replacement.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ func foo() {
1919
bar(.orderedMemberSame)
2020
bar(FooComparisonResult.orderedSame)
2121
bar(FooComparisonResult.orderedMemberSame)
22+
bar(FooComparisonResult.orderedMovedToGlobal)
23+
bar(.orderedMovedToGlobal)
2224
}
2325

2426
func foo(_: ToplevelType) {}

test/Migrator/qualified-replacement.swift.expected

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ func foo() {
1919
bar(.orderedMemberSame)
2020
bar(NewFooComparisonResult.NewFooOrderedSame)
2121
bar(NewFooComparisonResult.Nested.orderedMemberSame)
22+
bar(orderedMovedToGlobal)
23+
bar(orderedMovedToGlobal)
2224
}
2325

2426
func foo(_: ToplevelWrapper.internalType) {}

0 commit comments

Comments
 (0)