forked from OSchip/llvm-project
[rename] NFC, extract symbol canonicalization logic into function
This function will be used by the clang-refactor's rename actions llvm-svn: 309813
This commit is contained in:
parent
fba97e6e21
commit
6ad001df1c
|
@ -28,6 +28,15 @@ class NamedDecl;
|
|||
|
||||
namespace tooling {
|
||||
|
||||
/// Returns the canonical declaration that best represents a symbol that can be
|
||||
/// renamed.
|
||||
///
|
||||
/// The following canonicalization rules are currently used:
|
||||
///
|
||||
/// - A constructor is canonicalized to its class.
|
||||
/// - A destructor is canonicalized to its class.
|
||||
const NamedDecl *getCanonicalSymbolDeclaration(const NamedDecl *FoundDecl);
|
||||
|
||||
struct USRFindingAction {
|
||||
USRFindingAction(ArrayRef<unsigned> SymbolOffsets,
|
||||
ArrayRef<std::string> QualifiedNames, bool Force)
|
||||
|
|
|
@ -39,6 +39,21 @@ using namespace llvm;
|
|||
namespace clang {
|
||||
namespace tooling {
|
||||
|
||||
const NamedDecl *getCanonicalSymbolDeclaration(const NamedDecl *FoundDecl) {
|
||||
// If FoundDecl is a constructor or destructor, we want to instead take
|
||||
// the Decl of the corresponding class.
|
||||
if (const auto *CtorDecl = dyn_cast<CXXConstructorDecl>(FoundDecl))
|
||||
FoundDecl = CtorDecl->getParent();
|
||||
else if (const auto *DtorDecl = dyn_cast<CXXDestructorDecl>(FoundDecl))
|
||||
FoundDecl = DtorDecl->getParent();
|
||||
// FIXME: (Alex L): Canonicalize implicit template instantions, just like
|
||||
// the indexer does it.
|
||||
|
||||
// Note: please update the declaration's doc comment every time the
|
||||
// canonicalization rules are changed.
|
||||
return FoundDecl;
|
||||
}
|
||||
|
||||
namespace {
|
||||
// \brief NamedDeclFindingConsumer should delegate finding USRs of given Decl to
|
||||
// AdditionalUSRFinder. AdditionalUSRFinder adds USRs of ctor and dtor if given
|
||||
|
@ -193,13 +208,7 @@ private:
|
|||
return false;
|
||||
}
|
||||
|
||||
// If FoundDecl is a constructor or destructor, we want to instead take
|
||||
// the Decl of the corresponding class.
|
||||
if (const auto *CtorDecl = dyn_cast<CXXConstructorDecl>(FoundDecl))
|
||||
FoundDecl = CtorDecl->getParent();
|
||||
else if (const auto *DtorDecl = dyn_cast<CXXDestructorDecl>(FoundDecl))
|
||||
FoundDecl = DtorDecl->getParent();
|
||||
|
||||
FoundDecl = getCanonicalSymbolDeclaration(FoundDecl);
|
||||
SpellingNames.push_back(FoundDecl->getNameAsString());
|
||||
AdditionalUSRFinder Finder(FoundDecl, Context);
|
||||
USRList.push_back(Finder.Find());
|
||||
|
|
Loading…
Reference in New Issue