Cache the resolved file names.

This commit is contained in:
Roberto Raggi
2010-05-10 09:54:30 +02:00
parent 2e7e4fc92e
commit 3e440ec213
2 changed files with 24 additions and 6 deletions

View File

@@ -397,6 +397,28 @@ bool CppPreprocessor::includeFile(const QString &absoluteFilePath, QString *resu
}
QString CppPreprocessor::tryIncludeFile(QString &fileName, IncludeType type, unsigned *revision)
{
if (type == IncludeGlobal) {
const QString fn = m_fileNameCache.value(fileName);
if (! fn.isEmpty()) {
fileName = fn;
if (revision)
*revision = 0;
return QString();
}
}
const QString originalFileName = fileName;
const QString contents = tryIncludeFile_helper(fileName, type, revision);
if (type == IncludeGlobal)
m_fileNameCache.insert(originalFileName, fileName);
return contents;
}
QString CppPreprocessor::tryIncludeFile_helper(QString &fileName, IncludeType type, unsigned *revision)
{
QFileInfo fileInfo(fileName);
if (fileName == QLatin1String(pp_configuration_file) || fileInfo.isAbsolute()) {
@@ -1375,9 +1397,6 @@ void CppModelManager::parse(QFutureInterface<void> &future,
if (future.isCanceled())
break;
// Change the priority of the background parser thread to idle.
QThread::currentThread()->setPriority(QThread::IdlePriority);
const QString fileName = files.at(i);
const bool isSourceFile = i < sourceCount;
@@ -1396,9 +1415,6 @@ void CppModelManager::parse(QFutureInterface<void> &future,
if (isSourceFile)
preproc->resetEnvironment();
// Restore the previous thread priority.
QThread::currentThread()->setPriority(QThread::NormalPriority);
}
future.setProgressValue(files.size());