diff options
Diffstat (limited to 'src/libs/cplusplus')
-rw-r--r-- | src/libs/cplusplus/CppDocument.cpp | 16 | ||||
-rw-r--r-- | src/libs/cplusplus/CppDocument.h | 30 | ||||
-rw-r--r-- | src/libs/cplusplus/DependencyTable.cpp | 15 | ||||
-rw-r--r-- | src/libs/cplusplus/DependencyTable.h | 9 | ||||
-rw-r--r-- | src/libs/cplusplus/FastPreprocessor.cpp | 4 |
5 files changed, 45 insertions, 29 deletions
diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 3eea3c80c1..e28f089322 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -741,17 +741,17 @@ bool Snapshot::isEmpty() const return _documents.isEmpty(); } -Snapshot::const_iterator Snapshot::find(const QString &fileName) const +Snapshot::const_iterator Snapshot::find(const Utils::FileName &fileName) const { return _documents.find(fileName); } -void Snapshot::remove(const QString &fileName) +void Snapshot::remove(const Utils::FileName &fileName) { _documents.remove(fileName); } -bool Snapshot::contains(const QString &fileName) const +bool Snapshot::contains(const Utils::FileName &fileName) const { return _documents.contains(fileName); } @@ -759,15 +759,15 @@ bool Snapshot::contains(const QString &fileName) const void Snapshot::insert(Document::Ptr doc) { if (doc) { - _documents.insert(doc->fileName(), doc); + _documents.insert(Utils::FileName::fromString(doc->fileName()), doc); m_deps.files.clear(); // Will trigger re-build when accessed. } } Document::Ptr Snapshot::preprocessedDocument(const QByteArray &source, - const QString &fileName) const + const Utils::FileName &fileName) const { - Document::Ptr newDoc = Document::create(fileName); + Document::Ptr newDoc = Document::create(fileName.toString()); if (Document::Ptr thisDocument = document(fileName)) { newDoc->_revision = thisDocument->_revision; newDoc->_editorRevision = thisDocument->_editorRevision; @@ -821,7 +821,7 @@ QList<Snapshot::IncludeLocation> Snapshot::includeLocationsOfDocument(const QStr return result; } -QStringList Snapshot::filesDependingOn(const QString &fileName) const +Utils::FileNameList Snapshot::filesDependingOn(const Utils::FileName &fileName) const { updateDependencyTable(); return m_deps.filesDependingOn(fileName); @@ -850,7 +850,7 @@ void Snapshot::allIncludesForDocument_helper(const QString &fileName, QSet<QStri } } -Document::Ptr Snapshot::document(const QString &fileName) const +Document::Ptr Snapshot::document(const Utils::FileName &fileName) const { return _documents.value(fileName); } diff --git a/src/libs/cplusplus/CppDocument.h b/src/libs/cplusplus/CppDocument.h index f840737d47..c4ffaa7cd3 100644 --- a/src/libs/cplusplus/CppDocument.h +++ b/src/libs/cplusplus/CppDocument.h @@ -37,6 +37,8 @@ #include <cplusplus/PreprocessorClient.h> #include <cplusplus/DependencyTable.h> +#include <utils/fileutils.h> + #include <QSharedPointer> #include <QDateTime> #include <QHash> @@ -395,7 +397,7 @@ private: class CPLUSPLUS_EXPORT Snapshot { - typedef QHash<QString, Document::Ptr> Base; + typedef QHash<Utils::FileName, Document::Ptr> Base; public: Snapshot(); @@ -409,20 +411,32 @@ public: bool isEmpty() const; void insert(Document::Ptr doc); // ### remove - void remove(const QString &fileName); // ### remove + void remove(const Utils::FileName &fileName); // ### remove + void remove(const QString &fileName) + { remove(Utils::FileName::fromString(fileName)); } const_iterator begin() const { return _documents.begin(); } const_iterator end() const { return _documents.end(); } - bool contains(const QString &fileName) const; - Document::Ptr document(const QString &fileName) const; + bool contains(const Utils::FileName &fileName) const; + bool contains(const QString &fileName) const + { return contains(Utils::FileName::fromString(fileName)); } + + Document::Ptr document(const Utils::FileName &fileName) const; + Document::Ptr document(const QString &fileName) const + { return document(Utils::FileName::fromString(fileName)); } - const_iterator find(const QString &fileName) const; + const_iterator find(const Utils::FileName &fileName) const; + const_iterator find(const QString &fileName) const + { return find(Utils::FileName::fromString(fileName)); } Snapshot simplified(Document::Ptr doc) const; Document::Ptr preprocessedDocument(const QByteArray &source, - const QString &fileName) const; + const Utils::FileName &fileName) const; + Document::Ptr preprocessedDocument(const QByteArray &source, + const QString &fileName) const + { return preprocessedDocument(source, Utils::FileName::fromString(fileName)); } Document::Ptr documentFromSource(const QByteArray &preprocessedDocument, const QString &fileName) const; @@ -430,7 +444,9 @@ public: QSet<QString> allIncludesForDocument(const QString &fileName) const; QList<IncludeLocation> includeLocationsOfDocument(const QString &fileName) const; - QStringList filesDependingOn(const QString &fileName) const; + Utils::FileNameList filesDependingOn(const Utils::FileName &fileName) const; + Utils::FileNameList filesDependingOn(const QString &fileName) const + { return filesDependingOn(Utils::FileName::fromString(fileName)); } void updateDependencyTable() const; bool operator==(const Snapshot &other) const; diff --git a/src/libs/cplusplus/DependencyTable.cpp b/src/libs/cplusplus/DependencyTable.cpp index 18c945d5cf..9a6743ada4 100644 --- a/src/libs/cplusplus/DependencyTable.cpp +++ b/src/libs/cplusplus/DependencyTable.cpp @@ -34,13 +34,14 @@ using namespace CPlusPlus; -QStringList DependencyTable::filesDependingOn(const QString &fileName) const +Utils::FileNameList DependencyTable::filesDependingOn(const Utils::FileName &fileName) const { + Utils::FileNameList deps; + int index = fileIndex.value(fileName, -1); if (index == -1) - return QStringList(); + return deps; - QStringList deps; for (int i = 0; i < files.size(); ++i) { const QBitArray &bits = includeMap.at(i); @@ -53,7 +54,6 @@ QStringList DependencyTable::filesDependingOn(const QString &fileName) const void DependencyTable::build(const Snapshot &snapshot) { - includesPerFile.clear(); files.clear(); fileIndex.clear(); includes.clear(); @@ -71,15 +71,14 @@ void DependencyTable::build(const Snapshot &snapshot) } for (int i = 0; i < files.size(); ++i) { - const QString fileName = files.at(i); - if (Document::Ptr doc = snapshot.document(files.at(i))) { + const Utils::FileName &fileName = files.at(i); + if (Document::Ptr doc = snapshot.document(fileName)) { QBitArray bitmap(files.size()); QList<int> directIncludes; const QStringList documentIncludes = doc->includedFiles(); - includesPerFile.insert(fileName, documentIncludes); foreach (const QString &includedFile, documentIncludes) { - int index = fileIndex.value(includedFile); + int index = fileIndex.value(Utils::FileName::fromString(includedFile)); if (index == -1) continue; diff --git a/src/libs/cplusplus/DependencyTable.h b/src/libs/cplusplus/DependencyTable.h index 1bcc930b28..bcaa3365a3 100644 --- a/src/libs/cplusplus/DependencyTable.h +++ b/src/libs/cplusplus/DependencyTable.h @@ -33,6 +33,8 @@ #include <cplusplus/CPlusPlusForwardDeclarations.h> +#include <utils/fileutils.h> + #include <QBitArray> #include <QHash> #include <QString> @@ -48,11 +50,10 @@ class CPLUSPLUS_EXPORT DependencyTable private: friend class Snapshot; void build(const Snapshot &snapshot); - QStringList filesDependingOn(const QString &fileName) const; + Utils::FileNameList filesDependingOn(const Utils::FileName &fileName) const; - QHash<QString, QStringList> includesPerFile; - QVector<QString> files; - QHash<QString, int> fileIndex; + QVector<Utils::FileName> files; + QHash<Utils::FileName, int> fileIndex; QHash<int, QList<int> > includes; QVector<QBitArray> includeMap; }; diff --git a/src/libs/cplusplus/FastPreprocessor.cpp b/src/libs/cplusplus/FastPreprocessor.cpp index 1590bc1faa..e6ef1d37f7 100644 --- a/src/libs/cplusplus/FastPreprocessor.cpp +++ b/src/libs/cplusplus/FastPreprocessor.cpp @@ -53,8 +53,8 @@ QByteArray FastPreprocessor::run(Document::Ptr newDoc, const QByteArray &source) _merged.insert(fileName); for (Snapshot::const_iterator i = _snapshot.begin(), ei = _snapshot.end(); i != ei; ++i) { - if (isInjectedFile(i.key())) - mergeEnvironment(i.key()); + if (isInjectedFile(i.key().toString())) + mergeEnvironment(i.key().toString()); } foreach (const Document::Include &i, doc->resolvedIncludes()) |