diff options
Diffstat (limited to 'clang/lib/Tooling/Refactoring/Rename')
4 files changed, 19 insertions, 9 deletions
diff --git a/clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp b/clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp index b0634912e3fc..72598601d47d 100644 --- a/clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp +++ b/clang/lib/Tooling/Refactoring/Rename/RenamingAction.cpp @@ -170,7 +170,8 @@ static void convertChangesToFileReplacements( std::map<std::string, tooling::Replacements> *FileToReplaces) { for (const auto &AtomicChange : AtomicChanges) { for (const auto &Replace : AtomicChange.getReplacements()) { - llvm::Error Err = (*FileToReplaces)[Replace.getFilePath()].add(Replace); + llvm::Error Err = + (*FileToReplaces)[std::string(Replace.getFilePath())].add(Replace); if (Err) { llvm::errs() << "Renaming failed in " << Replace.getFilePath() << "! " << llvm::toString(std::move(Err)) << "\n"; diff --git a/clang/lib/Tooling/Refactoring/Rename/USRFinder.cpp b/clang/lib/Tooling/Refactoring/Rename/USRFinder.cpp index 55111202ac88..23f567f1c9ec 100644 --- a/clang/lib/Tooling/Refactoring/Rename/USRFinder.cpp +++ b/clang/lib/Tooling/Refactoring/Rename/USRFinder.cpp @@ -15,6 +15,7 @@ #include "clang/AST/AST.h" #include "clang/AST/ASTContext.h" #include "clang/AST/RecursiveASTVisitor.h" +#include "clang/Basic/SourceManager.h" #include "clang/Index/USRGeneration.h" #include "clang/Lex/Lexer.h" #include "clang/Tooling/Refactoring/RecursiveSymbolVisitor.h" diff --git a/clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp b/clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp index d966a5ef23c2..43dc32e158d3 100644 --- a/clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp +++ b/clang/lib/Tooling/Refactoring/Rename/USRFindingAction.cpp @@ -126,15 +126,24 @@ private: addUSRsOfCtorDtors(TemplateDecl->getTemplatedDecl()); } - void addUSRsOfCtorDtors(const CXXRecordDecl *RecordDecl) { - RecordDecl = RecordDecl->getDefinition(); + void addUSRsOfCtorDtors(const CXXRecordDecl *RD) { + const auto* RecordDecl = RD->getDefinition(); // Skip if the CXXRecordDecl doesn't have definition. - if (!RecordDecl) + if (!RecordDecl) { + USRSet.insert(getUSRForDecl(RD)); return; + } for (const auto *CtorDecl : RecordDecl->ctors()) USRSet.insert(getUSRForDecl(CtorDecl)); + // Add template constructor decls, they are not in ctors() unfortunately. + if (RecordDecl->hasUserDeclaredConstructor()) + for (const auto *D : RecordDecl->decls()) + if (const auto *FTD = dyn_cast<FunctionTemplateDecl>(D)) + if (const auto *Ctor = + dyn_cast<CXXConstructorDecl>(FTD->getTemplatedDecl())) + USRSet.insert(getUSRForDecl(Ctor)); USRSet.insert(getUSRForDecl(RecordDecl->getDestructor())); USRSet.insert(getUSRForDecl(RecordDecl)); diff --git a/clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp b/clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp index 408e184f5bf5..dfc319dd0639 100644 --- a/clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp +++ b/clang/lib/Tooling/Refactoring/Rename/USRLocFinder.cpp @@ -15,6 +15,7 @@ #include "clang/Tooling/Refactoring/Rename/USRLocFinder.h" #include "clang/AST/ASTContext.h" +#include "clang/AST/ParentMapContext.h" #include "clang/AST/RecursiveASTVisitor.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/SourceLocation.h" @@ -426,8 +427,7 @@ public: StartLoc, EndLoc, TemplateSpecType->getTemplateName().getAsTemplateDecl(), - getClosestAncestorDecl( - ast_type_traits::DynTypedNode::create(TargetLoc)), + getClosestAncestorDecl(DynTypedNode::create(TargetLoc)), GetNestedNameForType(TargetLoc), /*IgnorePrefixQualifers=*/false}; RenameInfos.push_back(Info); @@ -466,8 +466,7 @@ private: // FIXME: figure out how to handle it when there are multiple parents. if (Parents.size() != 1) return nullptr; - if (ast_type_traits::ASTNodeKind::getFromNodeKind<Decl>().isBaseOf( - Parents[0].getNodeKind())) + if (ASTNodeKind::getFromNodeKind<Decl>().isBaseOf(Parents[0].getNodeKind())) return Parents[0].template get<Decl>(); return getClosestAncestorDecl(Parents[0]); } @@ -536,7 +535,7 @@ createRenameAtomicChanges(llvm::ArrayRef<std::string> USRs, // Get the name without prefix qualifiers from NewName. size_t LastColonPos = NewName.find_last_of(':'); if (LastColonPos != std::string::npos) - ReplacedName = NewName.substr(LastColonPos + 1); + ReplacedName = std::string(NewName.substr(LastColonPos + 1)); } else { if (RenameInfo.FromDecl && RenameInfo.Context) { if (!llvm::isa<clang::TranslationUnitDecl>( |