@@ -273,6 +273,21 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
273
273
SF->getASTContext ().SourceMgr , Range).str () == " nil" ;
274
274
}
275
275
276
+ bool isDotMember (CharSourceRange Range) {
277
+ auto S = Range.str ();
278
+ return S.startswith (" ." ) && S.substr (1 ).find (" ." ) == StringRef::npos;
279
+ }
280
+
281
+ bool isDotMember (SourceRange Range) {
282
+ return isDotMember (Lexer::getCharSourceRangeFromSourceRange (
283
+ SF->getASTContext ().SourceMgr , Range));
284
+ }
285
+
286
+ bool isDotMember (Expr *E) {
287
+ auto Range = E->getSourceRange ();
288
+ return Range.isValid () && isDotMember (Range);
289
+ }
290
+
276
291
std::vector<APIDiffItem*> getRelatedDiffItems (ValueDecl *VD) {
277
292
std::vector<APIDiffItem*> results;
278
293
if (!VD)
@@ -323,11 +338,13 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
323
338
}
324
339
325
340
326
- bool isSimpleReplacement (APIDiffItem *Item, std::string &Text) {
341
+ bool isSimpleReplacement (APIDiffItem *Item, bool isDotMember, std::string &Text) {
327
342
if (auto *MD = dyn_cast<TypeMemberDiffItem>(Item)) {
328
343
if (MD->Subkind == TypeMemberDiffItemSubKind::SimpleReplacement) {
329
- Text = (llvm::Twine (MD->newTypeName ) + " ." + MD->getNewName ().base ()).
330
- str ();
344
+ bool NeedNoTypeName = isDotMember &&
345
+ MD->oldPrintedName == MD->newPrintedName ;
346
+ Text = (llvm::Twine (NeedNoTypeName ? " " : MD->newTypeName ) + " ." +
347
+ MD->getNewName ().base ()).str ();
331
348
return true ;
332
349
}
333
350
}
@@ -423,7 +440,7 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
423
440
Type T, ReferenceMetaData Data) override {
424
441
for (auto *Item: getRelatedDiffItems (CtorTyRef ? CtorTyRef: D)) {
425
442
std::string RepText;
426
- if (isSimpleReplacement (Item, RepText)) {
443
+ if (isSimpleReplacement (Item, isDotMember (Range), RepText)) {
427
444
Editor.replace (Range, RepText);
428
445
return true ;
429
446
}
@@ -498,8 +515,11 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
498
515
for (auto *I: getRelatedDiffItems (VD)) {
499
516
if (auto *Item = dyn_cast<TypeMemberDiffItem>(I)) {
500
517
if (Item->Subkind == TypeMemberDiffItemSubKind::QualifiedReplacement) {
501
- Editor.replace (ToReplace, (llvm::Twine (Item->newTypeName ) + " ." +
502
- Item->getNewName ().base ()).str ());
518
+ bool NeedNoTypeName = isDotMember (ToReplace) &&
519
+ Item->oldPrintedName == Item->newPrintedName ;
520
+ Editor.replace (ToReplace,
521
+ (llvm::Twine (NeedNoTypeName ? " " : Item->newTypeName ) + " ." +
522
+ Item->getNewName ().base ()).str ());
503
523
return true ;
504
524
}
505
525
}
@@ -773,7 +793,7 @@ struct APIDiffMigratorPass : public ASTMigratorPass, public SourceEntityWalker {
773
793
StringRef LeftComment;
774
794
StringRef RightComment;
775
795
for (auto *Item: getRelatedDiffItems (RD)) {
776
- if (isSimpleReplacement (Item, Rename)) {
796
+ if (isSimpleReplacement (Item, isDotMember (Reference), Rename)) {
777
797
} else if (auto *CI = dyn_cast<CommonDiffItem>(Item)) {
778
798
if (CI->isStringRepresentableChange () &&
779
799
CI->NodeKind == SDKNodeKind::DeclVar) {
0 commit comments