forked from qt-creator/qt-creator
Clang: add globalFollowSymbol to RefactoringEngine
Allows to follow outside of current TU. Change-Id: Ieea2fd72bfdf6d60a988b40efcf2f41c5a71d045 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
@@ -367,50 +367,10 @@ QFuture<CppTools::CursorInfo> ClangEditorDocumentProcessor::requestLocalReferenc
|
||||
textDocument());
|
||||
}
|
||||
|
||||
static QVector<Utf8String> prioritizeByBaseName(const QString &curPath,
|
||||
const ::Utils::FileNameList &fileDeps)
|
||||
{
|
||||
QList<Utf8String> dependentFiles;
|
||||
dependentFiles.reserve(fileDeps.size());
|
||||
for (const ::Utils::FileName &dep: fileDeps)
|
||||
dependentFiles.push_back(dep.toString());
|
||||
|
||||
const QString curFilename = QFileInfo(curPath).fileName();
|
||||
if (CppTools::ProjectFile::isHeader(CppTools::ProjectFile::classify(curFilename))) {
|
||||
const QString withoutExt = QFileInfo(curFilename).baseName();
|
||||
int posToMove = 0;
|
||||
// Move exact match to the first place and partial matches after it
|
||||
for (int i = 0; i < dependentFiles.size(); ++i) {
|
||||
const QString baseName = QFileInfo(dependentFiles[i]).baseName();
|
||||
if (withoutExt == baseName) {
|
||||
dependentFiles.move(i, 0);
|
||||
posToMove++;
|
||||
continue;
|
||||
}
|
||||
if (baseName.contains(withoutExt))
|
||||
dependentFiles.move(i, posToMove++);
|
||||
}
|
||||
}
|
||||
// Limit the number of scans (don't search for overrides)
|
||||
if (dependentFiles.size() > 5)
|
||||
dependentFiles.erase(dependentFiles.begin() + 5, dependentFiles.end());
|
||||
return QVector<Utf8String>::fromList(dependentFiles);
|
||||
}
|
||||
|
||||
QFuture<CppTools::SymbolInfo>
|
||||
ClangEditorDocumentProcessor::requestFollowSymbol(int line, int column)
|
||||
{
|
||||
QVector<Utf8String> dependentFiles;
|
||||
CppTools::CppModelManager *modelManager = CppTools::CppModelManager::instance();
|
||||
if (modelManager && !modelManager->projectPart(filePath()).isEmpty()) {
|
||||
// This might be not so fast - index will change that
|
||||
const ::Utils::FileNameList fileDeps
|
||||
= modelManager->snapshot().filesDependingOn(filePath());
|
||||
dependentFiles = prioritizeByBaseName(filePath(), fileDeps);
|
||||
}
|
||||
|
||||
return m_communicator.requestFollowSymbol(simpleFileContainer(),
|
||||
dependentFiles,
|
||||
static_cast<quint32>(line),
|
||||
static_cast<quint32>(column));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user