Clang: Fix template renaming

Change-Id: I8040fe8dfc99d66e242ce2ff8589aa914838bfc9
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2016-08-04 19:55:54 +02:00
parent fe3a7d6479
commit 98a167c0d5
4 changed files with 93 additions and 24 deletions

View File

@@ -59,17 +59,15 @@ public:
return true;
}
bool shouldVisitImplicitCode() const
{
return true;
}
bool VisitNamedDecl(const clang::NamedDecl *declaration)
{
auto name = declaration->getNameAsString();
return setResultIfCursorIsInBetween(declaration, declaration->getLocation(),
declaration->getNameAsString().length());
bool notFound = setResultIfCursorIsInBetween(declaration,
declaration->getLocation(),
declaration->getNameAsString().length());
return true;
}
bool VisitDeclRefExpr(const clang::DeclRefExpr *expression)
@@ -77,16 +75,18 @@ public:
if (!iterateNestedNameSpecifierLocation(expression->getQualifierLoc()))
return false;
const auto *Decl = expression->getFoundDecl();
return setResultIfCursorIsInBetween(Decl, expression->getLocation(),
Decl->getNameAsString().length());
const auto *declaration = expression->getFoundDecl();
return setResultIfCursorIsInBetween(declaration,
expression->getLocation(),
declaration->getNameAsString().length());
}
bool VisitMemberExpr(const clang::MemberExpr *Expr)
bool VisitMemberExpr(const clang::MemberExpr *expression)
{
const auto *Decl = Expr->getFoundDecl().getDecl();
return setResultIfCursorIsInBetween(Decl, Expr->getMemberLoc(),
Decl->getNameAsString().length());
const auto *declaration = expression->getFoundDecl().getDecl();
return setResultIfCursorIsInBetween(declaration,
expression->getMemberLoc(),
declaration->getNameAsString().length());
}
std::vector<const clang::NamedDecl*> takeNamedDecl()
@@ -156,7 +156,8 @@ private:
std::vector<const clang::NamedDecl*> namedDeclarations;
const clang::SourceManager &sourceManager;
const clang::SourceLocation cursorSourceLocation; // The location to find the NamedDecl.
const clang::SourceLocation cursorSourceLocation;
bool isTemplate = false;
};
inline