diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-09-12 14:14:18 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@digia.com> | 2014-09-12 17:42:32 +0200 |
commit | 7290c43da14c1f416c8de0654d8f335a3b271989 (patch) | |
tree | f2906de0a582143aa9f759ee18ab1fadcbd79c86 /src/plugins/cpptools/cppprojects.cpp | |
parent | 9c1f44e942caa722add82af4462315cea8ee2e17 (diff) | |
download | qt-creator-7290c43da14c1f416c8de0654d8f335a3b271989.tar.gz |
C++: update project info once after finishing adding all project parts.
So that recalculating the information is not O(n^2) but linear.
Change-Id: I69903e0b5ad321d071804d782ad634a3f300e71a
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppprojects.cpp')
-rw-r--r-- | src/plugins/cpptools/cppprojects.cpp | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/src/plugins/cpptools/cppprojects.cpp b/src/plugins/cpptools/cppprojects.cpp index eb99b11626..5f4e1f009f 100644 --- a/src/plugins/cpptools/cppprojects.cpp +++ b/src/plugins/cpptools/cppprojects.cpp @@ -166,35 +166,36 @@ const QList<ProjectPart::Ptr> ProjectInfo::projectParts() const void ProjectInfo::appendProjectPart(const ProjectPart::Ptr &part) { - if (!part) - return; - - m_projectParts.append(part); + if (part) + m_projectParts.append(part); +} +void ProjectInfo::finish() +{ typedef ProjectPart::HeaderPath HeaderPath; - // Update header paths - QSet<HeaderPath> incs = QSet<HeaderPath>::fromList(m_headerPaths); - foreach (const HeaderPath &hp, part->headerPaths) { - if (!incs.contains(hp)) { - incs.insert(hp); - m_headerPaths += hp; + QSet<HeaderPath> incs; + foreach (const ProjectPart::Ptr &part, m_projectParts) { + // Update header paths + foreach (const HeaderPath &hp, part->headerPaths) { + if (!incs.contains(hp)) { + incs.insert(hp); + m_headerPaths += hp; + } } - } - // Update source files - foreach (const ProjectFile &file, part->files) - m_sourceFiles.insert(file.path); - - // Update defines - if (!m_defines.isEmpty()) - m_defines.append('\n'); - m_defines.append(part->toolchainDefines); - m_defines.append(part->projectDefines); - if (!part->projectConfigFile.isEmpty()) { - m_defines.append('\n'); - m_defines += ProjectPart::readProjectConfigFile(part); - m_defines.append('\n'); + // Update source files + foreach (const ProjectFile &file, part->files) + m_sourceFiles.insert(file.path); + + // Update defines + m_defines.append(part->toolchainDefines); + m_defines.append(part->projectDefines); + if (!part->projectConfigFile.isEmpty()) { + m_defines.append('\n'); + m_defines += ProjectPart::readProjectConfigFile(part); + m_defines.append('\n'); + } } } |