Skip to content

Commit 4ed9f9a

Browse files
committed
migrator: support the migration from member variables to global ones. rdar://41658300
1 parent 967beef commit 4ed9f9a

File tree

6 files changed

+21
-8
lines changed

6 files changed

+21
-8
lines changed

include/swift/IDE/APIDigesterData.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,10 @@ struct TypeMemberDiffItem: public APIDiffItem {
260260
Optional<uint8_t> removedIndex;
261261
StringRef oldTypeName;
262262
StringRef oldPrintedName;
263-
264263
private:
265264
DeclNameViewer OldNameViewer;
266265
DeclNameViewer NewNameViewer;
267-
266+
std::string NewTypeDot;
268267
public:
269268
TypeMemberDiffItemSubKind Subkind;
270269

@@ -276,7 +275,9 @@ struct TypeMemberDiffItem: public APIDiffItem {
276275
newTypeName(newTypeName), newPrintedName(newPrintedName),
277276
selfIndex(selfIndex), removedIndex(removedIndex), oldTypeName(oldTypeName),
278277
oldPrintedName(oldPrintedName), OldNameViewer(oldPrintedName),
279-
NewNameViewer(newPrintedName), Subkind(getSubKind()) {}
278+
NewNameViewer(newPrintedName),
279+
NewTypeDot(newTypeName.empty() ? "" : (llvm::Twine(newTypeName) + ".").str()),
280+
Subkind(getSubKind()) {}
280281
static StringRef head();
281282
static void describe(llvm::raw_ostream &os);
282283
static void undef(llvm::raw_ostream &os);
@@ -286,6 +287,7 @@ struct TypeMemberDiffItem: public APIDiffItem {
286287
StringRef getKey() const override { return usr; }
287288
const DeclNameViewer &getOldName() const { return OldNameViewer; }
288289
const DeclNameViewer &getNewName() const { return NewNameViewer; }
290+
StringRef getNewTypeAndDot() const { return NewTypeDot; }
289291
APIDiffItemKind getKind() const override {
290292
return APIDiffItemKind::ADK_TypeMemberDiffItem;
291293
}

lib/Migrator/APIDiffMigratorPass.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
329329
if (auto *MI = dyn_cast<TypeMemberDiffItem>(Item)) {
330330
if (MI->Subkind == TypeMemberDiffItemSubKind::FuncRename) {
331331
llvm::raw_svector_ostream OS(Buffer);
332-
OS << MI->newTypeName << "." << MI->newPrintedName;
332+
OS << MI->getNewTypeAndDot() << MI->newPrintedName;
333333
return DeclNameViewer(OS.str());
334334
}
335335
}
@@ -343,7 +343,7 @@ 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->newTypeName) + "." +
346+
Text = (llvm::Twine(NeedNoTypeName ? "." : MD->getNewTypeAndDot()) +
347347
MD->getNewName().base()).str();
348348
return true;
349349
}
@@ -541,7 +541,7 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
541541
bool NeedNoTypeName = isDotMember(ToReplace) &&
542542
Item->oldPrintedName == Item->newPrintedName;
543543
Editor.replace(ToReplace,
544-
(llvm::Twine(NeedNoTypeName ? "" : Item->newTypeName) + "." +
544+
(llvm::Twine(NeedNoTypeName ? "." : Item->getNewTypeAndDot()) +
545545
Item->getNewName().base()).str());
546546
return true;
547547
}
@@ -693,8 +693,8 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
693693
return false;
694694

695695
if (Item->Subkind == TypeMemberDiffItemSubKind::GlobalFuncToStaticProperty) {
696-
Editor.replace(Call->getSourceRange(), (llvm::Twine(Item->newTypeName) +
697-
"." + Item->getNewName().base()).str());
696+
Editor.replace(Call->getSourceRange(),
697+
(llvm::Twine(Item->getNewTypeAndDot()) + Item->getNewName().base()).str());
698698
return true;
699699
}
700700
if (*Item->selfIndex)

test/Migrator/Inputs/Cities.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ open class Cities {
1111
open func maroochy(x: Int?, y: Int?) {}
1212
public struct CityKind {
1313
public static let Town = 1
14+
public static let Village = 1
1415
}
1516
}
1617

test/Migrator/Inputs/qualified.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@
3131
"NewPrintedName": "NewTown",
3232
"NewTypeName": "NewCityKind"
3333
},
34+
{
35+
"DiffItemKind": "TypeMemberDiffItem",
36+
"Usr": "s:6CitiesAAC8CityKindV7VillageSivpZ",
37+
"OldPrintedName": "Village",
38+
"OldTypeName": "Cities.CityKind",
39+
"NewPrintedName": "GlobalCityKindVillage",
40+
"NewTypeName": ""
41+
},
3442
{
3543
"DiffItemKind": "TypeMemberDiffItem",
3644
"Usr": "s:6Cities12ToplevelTypeC",

test/Migrator/qualified-replacement.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ func foo() {
1212
_ = FooComparisonResult.orderedSame
1313
let _ : FooComparisonResult = .orderedSame
1414
_ = Cities.CityKind.Town
15+
_ = Cities.CityKind.Village
1516
_ = ToplevelType()
1617
_ = ToplevelType(recordName: "")
1718
bar(.orderedSame)

test/Migrator/qualified-replacement.swift.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ func foo() {
1212
_ = NewFooComparisonResult.NewFooOrderedSame
1313
let _ : FooComparisonResult = NewFooComparisonResult.NewFooOrderedSame
1414
_ = NewCityKind.NewTown
15+
_ = GlobalCityKindVillage
1516
_ = ToplevelWrapper.internalType()
1617
_ = ToplevelWrapper.internalType(recordName: "")
1718
bar(NewFooComparisonResult.NewFooOrderedSame)

0 commit comments

Comments
 (0)