diff options
Diffstat (limited to 'src/libs/cplusplus')
-rw-r--r-- | src/libs/cplusplus/CppDocument.cpp | 17 | ||||
-rw-r--r-- | src/libs/cplusplus/CppDocument.h | 6 | ||||
-rw-r--r-- | src/libs/cplusplus/DependencyTable.cpp | 43 | ||||
-rw-r--r-- | src/libs/cplusplus/DependencyTable.h | 10 |
4 files changed, 24 insertions, 52 deletions
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 389a030b55..a107749883 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -713,6 +713,7 @@ bool Document::DiagnosticMessage::operator!=(const Document::DiagnosticMessage & } Snapshot::Snapshot() + : m_deps(new DependencyTable) { } @@ -747,8 +748,10 @@ bool Snapshot::contains(const QString &fileName) const void Snapshot::insert(Document::Ptr doc) { - if (doc) + if (doc) { _documents.insert(doc->fileName(), doc); + m_deps->files.clear(); // Will trigger re-build when accessed. + } } Document::Ptr Snapshot::preprocessedDocument(const QByteArray &source, @@ -795,6 +798,18 @@ QSet<QString> Snapshot::allIncludesForDocument(const QString &fileName) const return result; } +QStringList Snapshot::filesDependingOn(const QString &fileName) const +{ + updateDependencyTable(); + return m_deps->filesDependingOn(fileName); +} + +void Snapshot::updateDependencyTable() const +{ + if (m_deps->files.isEmpty()) + m_deps->build(*this); +} + void Snapshot::allIncludesForDocument_helper(const QString &fileName, QSet<QString> &result) const { if (Document::Ptr doc = document(fileName)) { diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index 43a77aba17..cbfa8a0cbb 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -34,6 +34,7 @@ #include <cplusplus/CPlusPlusForwardDeclarations.h> #include <cplusplus/PreprocessorClient.h> +#include <cplusplus/DependencyTable.h> #include <QSharedPointer> #include <QDateTime> @@ -424,10 +425,13 @@ public: QSet<QString> allIncludesForDocument(const QString &fileName) const; + QStringList filesDependingOn(const QString &fileName) const; + void updateDependencyTable() const; + private: void allIncludesForDocument_helper(const QString &fileName, QSet<QString> &result) const; -private: + mutable QSharedPointer<DependencyTable> m_deps; Base _documents; }; diff --git a/src/libs/cplusplus/DependencyTable.cpp b/src/libs/cplusplus/DependencyTable.cpp index 7ce2c162e0..ad5ef8e018 100644 --- a/src/libs/cplusplus/DependencyTable.cpp +++ b/src/libs/cplusplus/DependencyTable.cpp @@ -27,7 +27,6 @@ ** ****************************************************************************/ -#include "DependencyTable.h" #include "CppDocument.h" #include <QDebug> @@ -51,50 +50,8 @@ QStringList DependencyTable::filesDependingOn(const QString &fileName) const return deps; } -QHash<QString, QStringList> DependencyTable::dependencyTable() const -{ - QHash<QString, QStringList> depMap; - - for (int index = 0; index < files.size(); ++index) { - QStringList deps; - for (int i = 0; i < files.size(); ++i) { - const QBitArray &bits = includeMap.at(i); - - if (bits.testBit(index)) - deps.append(files.at(i)); - } - depMap[files.at(index)] = deps; - } - - return depMap; -} - -bool DependencyTable::isValidFor(const Snapshot &snapshot) const -{ - const int documentCount = snapshot.size(); - if (documentCount != files.size()) - return false; - - for (Snapshot::const_iterator it = snapshot.begin(); it != snapshot.end(); ++it) { - QHash<QString, QStringList>::const_iterator i = includesPerFile.find(it.key()); - if (i == includesPerFile.end()) - return false; - - if (i.value() != it.value()->includedFiles()) - return false; - } - - return true; -} - void DependencyTable::build(const Snapshot &snapshot) { - includesPerFile.clear(); - files.clear(); - fileIndex.clear(); - includes.clear(); - includeMap.clear(); - const int documentCount = snapshot.size(); files.resize(documentCount); includeMap.resize(documentCount); diff --git a/src/libs/cplusplus/DependencyTable.h b/src/libs/cplusplus/DependencyTable.h index 2b6378f254..f044bb6567 100644 --- a/src/libs/cplusplus/DependencyTable.h +++ b/src/libs/cplusplus/DependencyTable.h @@ -44,15 +44,11 @@ class Snapshot; class CPLUSPLUS_EXPORT DependencyTable { -public: - bool isValidFor(const Snapshot &snapshot) const; - - QStringList filesDependingOn(const QString &fileName) const; - QHash<QString, QStringList> dependencyTable() const; - +private: + friend class Snapshot; void build(const Snapshot &snapshot); + QStringList filesDependingOn(const QString &fileName) const; -private: QHash<QString, QStringList> includesPerFile; QVector<QString> files; QHash<QString, int> fileIndex; |