summaryrefslogtreecommitdiff
path: root/src/libs/cplusplus
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/cplusplus')
-rw-r--r--src/libs/cplusplus/CppDocument.cpp17
-rw-r--r--src/libs/cplusplus/CppDocument.h6
-rw-r--r--src/libs/cplusplus/DependencyTable.cpp43
-rw-r--r--src/libs/cplusplus/DependencyTable.h10
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;