Commit 3e440ec2 authored by Roberto Raggi's avatar Roberto Raggi
Browse files

Cache the resolved file names.

parent 2e7e4fc9
...@@ -397,6 +397,28 @@ bool CppPreprocessor::includeFile(const QString &absoluteFilePath, QString *resu ...@@ -397,6 +397,28 @@ bool CppPreprocessor::includeFile(const QString &absoluteFilePath, QString *resu
} }
QString CppPreprocessor::tryIncludeFile(QString &fileName, IncludeType type, unsigned *revision) 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); QFileInfo fileInfo(fileName);
if (fileName == QLatin1String(pp_configuration_file) || fileInfo.isAbsolute()) { if (fileName == QLatin1String(pp_configuration_file) || fileInfo.isAbsolute()) {
...@@ -1375,9 +1397,6 @@ void CppModelManager::parse(QFutureInterface<void> &future, ...@@ -1375,9 +1397,6 @@ void CppModelManager::parse(QFutureInterface<void> &future,
if (future.isCanceled()) if (future.isCanceled())
break; break;
// Change the priority of the background parser thread to idle.
QThread::currentThread()->setPriority(QThread::IdlePriority);
const QString fileName = files.at(i); const QString fileName = files.at(i);
const bool isSourceFile = i < sourceCount; const bool isSourceFile = i < sourceCount;
...@@ -1396,9 +1415,6 @@ void CppModelManager::parse(QFutureInterface<void> &future, ...@@ -1396,9 +1415,6 @@ void CppModelManager::parse(QFutureInterface<void> &future,
if (isSourceFile) if (isSourceFile)
preproc->resetEnvironment(); preproc->resetEnvironment();
// Restore the previous thread priority.
QThread::currentThread()->setPriority(QThread::NormalPriority);
} }
future.setProgressValue(files.size()); future.setProgressValue(files.size());
......
...@@ -270,6 +270,7 @@ protected: ...@@ -270,6 +270,7 @@ protected:
bool includeFile(const QString &absoluteFilePath, QString *result, unsigned *revision); bool includeFile(const QString &absoluteFilePath, QString *result, unsigned *revision);
QString tryIncludeFile(QString &fileName, IncludeType type, unsigned *revision); QString tryIncludeFile(QString &fileName, IncludeType type, unsigned *revision);
QString tryIncludeFile_helper(QString &fileName, IncludeType type, unsigned *revision);
void mergeEnvironment(CPlusPlus::Document::Ptr doc); void mergeEnvironment(CPlusPlus::Document::Ptr doc);
...@@ -303,6 +304,7 @@ private: ...@@ -303,6 +304,7 @@ private:
QSet<QString> m_todo; QSet<QString> m_todo;
QSet<QString> m_processed; QSet<QString> m_processed;
unsigned m_revision; unsigned m_revision;
QHash<QString, QString> m_fileNameCache;
}; };
} // namespace Internal } // namespace Internal
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment