forked from qt-creator/qt-creator
		
	Cache the resolved file names.
This commit is contained in:
		@@ -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());
 | 
			
		||||
 
 | 
			
		||||
@@ -270,6 +270,7 @@ protected:
 | 
			
		||||
 | 
			
		||||
    bool includeFile(const QString &absoluteFilePath, QString *result, 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);
 | 
			
		||||
 | 
			
		||||
@@ -303,6 +304,7 @@ private:
 | 
			
		||||
    QSet<QString> m_todo;
 | 
			
		||||
    QSet<QString> m_processed;
 | 
			
		||||
    unsigned m_revision;
 | 
			
		||||
    QHash<QString, QString> m_fileNameCache;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // namespace Internal
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user