forked from qt-creator/qt-creator
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:
@@ -261,6 +261,7 @@ void ClangCodeModelServer::requestReferences(const RequestReferencesMessage &mes
|
||||
|
||||
JobRequest jobRequest = processor.createJobRequest(JobRequest::Type::RequestReferences);
|
||||
fillJobRequest(jobRequest, message);
|
||||
jobRequest.localReferences = message.local();
|
||||
processor.addJob(jobRequest);
|
||||
processor.process();
|
||||
} catch (const std::exception &exception) {
|
||||
|
||||
@@ -118,6 +118,7 @@ public:
|
||||
qint32 funcNameStartColumn = -1;
|
||||
quint64 ticketNumber = 0;
|
||||
Utf8StringVector dependentFiles;
|
||||
bool localReferences = false;
|
||||
};
|
||||
|
||||
using JobRequests = QVector<JobRequest>;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -54,7 +54,8 @@ public:
|
||||
|
||||
ReferencesResult collectReferences(CXTranslationUnit cxTranslationUnit,
|
||||
uint line,
|
||||
uint column);
|
||||
uint column,
|
||||
bool localReferences = false);
|
||||
|
||||
} // namespace ClangBackEnd
|
||||
|
||||
|
||||
@@ -43,9 +43,10 @@ IAsyncJob::AsyncPrepareResult RequestReferencesJob::prepareAsyncRun()
|
||||
const TranslationUnit translationUnit = *m_translationUnit;
|
||||
const quint32 line = jobRequest.line;
|
||||
const quint32 column = jobRequest.column;
|
||||
setRunner([translationUnit, line, column]() {
|
||||
const bool localReferences = jobRequest.localReferences;
|
||||
setRunner([translationUnit, line, column, localReferences]() {
|
||||
TIME_SCOPE_DURATION("RequestReferencesJobRunner");
|
||||
return translationUnit.references(line, column);
|
||||
return translationUnit.references(line, column, localReferences);
|
||||
});
|
||||
|
||||
return AsyncPrepareResult{translationUnit.id()};
|
||||
|
||||
@@ -139,9 +139,9 @@ void TranslationUnit::extractDocumentAnnotations(
|
||||
skippedSourceRanges = this->skippedSourceRanges().toSourceRangeContainers();
|
||||
}
|
||||
|
||||
ReferencesResult TranslationUnit::references(uint line, uint column) const
|
||||
ReferencesResult TranslationUnit::references(uint line, uint column, bool localReferences) const
|
||||
{
|
||||
return collectReferences(m_cxTranslationUnit, line, column);
|
||||
return collectReferences(m_cxTranslationUnit, line, column, localReferences);
|
||||
}
|
||||
|
||||
DiagnosticSet TranslationUnit::diagnostics() const
|
||||
|
||||
@@ -85,7 +85,7 @@ public:
|
||||
QVector<SourceRangeContainer> &skippedSourceRanges) const;
|
||||
|
||||
|
||||
ReferencesResult references(uint line, uint column) const;
|
||||
ReferencesResult references(uint line, uint column, bool localReferences = false) const;
|
||||
DiagnosticSet diagnostics() const;
|
||||
|
||||
SourceLocation sourceLocationAt(uint line, uint column) const;
|
||||
|
||||
Reference in New Issue
Block a user