Clang: use local renaming based on ClangCodeModel

Provide refactoring engine for ClangCodeModel and
implement missing methods.

Change-Id: If5c913e0c5a7941cd2ced54d0fcfa4d625eadc93
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Ivan Donchevskii
2017-09-26 16:00:30 +02:00
parent 94e818dc82
commit 32bae7ef6c
30 changed files with 275 additions and 21 deletions

View File

@@ -121,7 +121,7 @@ public:
ReferencesCollector(CXTranslationUnit cxTranslationUnit);
~ReferencesCollector();
ReferencesResult collect(uint line, uint column) const;
ReferencesResult collect(uint line, uint column, bool localReferences = false) const;
private:
bool isWithinTokenRange(CXToken token, uint line, uint column) const;
@@ -207,7 +207,7 @@ bool ReferencesCollector::checkToken(unsigned index, const Utf8String &identifie
return candidate.usr() == usr;
}
ReferencesResult ReferencesCollector::collect(uint line, uint column) const
ReferencesResult ReferencesCollector::collect(uint line, uint column, bool localReferences) const
{
ReferencesResult result;
@@ -216,11 +216,15 @@ ReferencesResult ReferencesCollector::collect(uint line, uint column) const
return result;
const Cursor cursorFromUser = m_cxCursors[static_cast<int>(index)];
const ReferencedCursor refCursor = ReferencedCursor::find(cursorFromUser);
const Utf8String usr = refCursor.usr();
if (usr.isEmpty())
return result;
if (localReferences && !refCursor.isLocalVariable())
return result;
const CXToken token = m_cxTokens[index];
const Utf8String identifier = ClangString(clang_getTokenSpelling(m_cxTranslationUnit, token));
for (uint i = 0; i < m_cxTokenCount; ++i) {
@@ -239,10 +243,11 @@ ReferencesResult ReferencesCollector::collect(uint line, uint column) const
ReferencesResult collectReferences(CXTranslationUnit cxTranslationUnit,
uint line,
uint column)
uint column,
bool localReferences)
{
ReferencesCollector collector(cxTranslationUnit);
return collector.collect(line, column);
return collector.collect(line, column, localReferences);
}
} // namespace ClangBackEnd