summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@digia.com>2014-11-27 12:11:46 +0100
committerErik Verbruggen <erik.verbruggen@theqtcompany.com>2014-12-17 14:32:17 +0100
commita48adcf9be144eff9f22f30195e834f869fe19b4 (patch)
treee80ea9ea39345dbdeb060a04b95b1c46919396cc
parenta8ece5e9b0b92b36a4b513696afcc8ca6781e447 (diff)
downloadqt-creator-a48adcf9be144eff9f22f30195e834f869fe19b4.tar.gz
C++: handle case-insensitive file names in the CPlusPlus::Snapshot
... by keying on Utils::FileName Task-number: QTCREATORBUG-12390 Change-Id: Ia98afb5a9160a7fd9225a2f9e02539ff3c35ae86 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
-rw-r--r--src/libs/cplusplus/CppDocument.cpp16
-rw-r--r--src/libs/cplusplus/CppDocument.h30
-rw-r--r--src/libs/cplusplus/DependencyTable.cpp15
-rw-r--r--src/libs/cplusplus/DependencyTable.h9
-rw-r--r--src/libs/cplusplus/FastPreprocessor.cpp4
-rw-r--r--src/libs/utils/fileutils.cpp26
-rw-r--r--src/libs/utils/fileutils.h12
-rw-r--r--src/plugins/classview/classviewparser.cpp2
-rw-r--r--src/plugins/cppeditor/cppincludehierarchymodel.cpp2
-rw-r--r--src/plugins/cppeditor/cppquickfixes.cpp9
-rw-r--r--src/plugins/cpptools/builtineditordocumentparser.cpp18
-rw-r--r--src/plugins/cpptools/builtineditordocumentparser.h2
-rw-r--r--src/plugins/cpptools/cppfindreferences.cpp36
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp21
-rw-r--r--src/plugins/cpptools/typehierarchybuilder.cpp10
-rw-r--r--src/plugins/designer/qtcreatorintegration.cpp7
16 files changed, 141 insertions, 78 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())
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp
index 1479a72d23..f15d219332 100644
--- a/src/libs/utils/fileutils.cpp
+++ b/src/libs/utils/fileutils.cpp
@@ -624,6 +624,13 @@ FileName FileName::fromUserInput(const QString &filename)
return FileName(clean);
}
+/// Constructs a FileName from \a fileName, which is encoded as UTF-8.
+/// \a fileName is not checked for validity.
+FileName FileName::fromUtf8(const char *filename, int filenameSize)
+{
+ return FileName(QString::fromUtf8(filename, filenameSize));
+}
+
FileName::FileName(const QString &string)
: QString(string)
{
@@ -726,6 +733,25 @@ QTextStream &operator<<(QTextStream &s, const FileName &fn)
return s << fn.toString();
}
+int FileNameList::removeDuplicates()
+{
+ QSet<FileName> seen;
+ int removed = 0;
+
+ for (int i = 0; i < size(); ) {
+ const FileName &fn = at(i);
+ if (seen.contains(fn)) {
+ removeAt(i);
+ ++removed;
+ } else {
+ seen.insert(fn);
+ ++i;
+ }
+ }
+
+ return removed;
+}
+
static bool isFileDrop(const QMimeData *d, QList<FileDropSupport::FileSpec> *files = 0)
{
// internal drop
diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h
index 0a05451fd0..20a989003b 100644
--- a/src/libs/utils/fileutils.h
+++ b/src/libs/utils/fileutils.h
@@ -70,6 +70,7 @@ public:
static FileName fromString(const QString &filename, const QString &defaultExtension);
static FileName fromLatin1(const QByteArray &filename);
static FileName fromUserInput(const QString &filename);
+ static FileName fromUtf8(const char *filename, int filenameSize = -1);
QString toString() const;
QString toUserOutput() const;
bool exists() const;
@@ -104,6 +105,17 @@ private:
QTCREATOR_UTILS_EXPORT QTextStream &operator<<(QTextStream &s, const FileName &fn);
+class QTCREATOR_UTILS_EXPORT FileNameList : public QList<FileName>
+{
+public:
+ inline FileNameList() { }
+ inline explicit FileNameList(const FileName &i) { append(i); }
+ inline FileNameList(const FileNameList &l) : QList<FileName>(l) { }
+ inline FileNameList(const QList<FileName> &l) : QList<FileName>(l) { }
+
+ int removeDuplicates();
+};
+
class QTCREATOR_UTILS_EXPORT FileUtils {
public:
static bool removeRecursively(const FileName &filePath, QString *error = 0);
diff --git a/src/plugins/classview/classviewparser.cpp b/src/plugins/classview/classviewparser.cpp
index 468060ed97..9ab0ab218d 100644
--- a/src/plugins/classview/classviewparser.cpp
+++ b/src/plugins/classview/classviewparser.cpp
@@ -641,7 +641,7 @@ void Parser::resetData(const CPlusPlus::Snapshot &snapshot)
CPlusPlus::Snapshot::const_iterator cur = snapshot.begin();
CPlusPlus::Snapshot::const_iterator end = snapshot.end();
for (; cur != end; ++cur)
- d->documentList[cur.key()] = cur.value();
+ d->documentList[cur.key().toString()] = cur.value();
d->docLocker.unlock();
diff --git a/src/plugins/cppeditor/cppincludehierarchymodel.cpp b/src/plugins/cppeditor/cppincludehierarchymodel.cpp
index 8481c8cb0b..a7fb9780bb 100644
--- a/src/plugins/cppeditor/cppincludehierarchymodel.cpp
+++ b/src/plugins/cppeditor/cppincludehierarchymodel.cpp
@@ -341,7 +341,7 @@ void CppIncludeHierarchyModel::buildHierarchyIncludedBy_helper(const QString &fi
cyclic->insert(filePath);
Snapshot::const_iterator citEnd = snapshot.end();
for (Snapshot::const_iterator cit = snapshot.begin(); cit != citEnd; ++cit) {
- const QString filePathFromSnapshot = cit.key();
+ const QString filePathFromSnapshot = cit.key().toString();
Document::Ptr doc = cit.value();
foreach (const Document::Include &includeFile, doc->resolvedIncludes()) {
const QString includedFilePath = includeFile.resolvedFileName();
diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp
index 691d7687de..b00605055d 100644
--- a/src/plugins/cppeditor/cppquickfixes.cpp
+++ b/src/plugins/cppeditor/cppquickfixes.cpp
@@ -1907,12 +1907,13 @@ void AddIncludeForUndefinedIdentifier::match(const CppQuickFixInterface &interfa
Snapshot localForwardHeaders = forwardHeaders;
localForwardHeaders.insert(interface.snapshot().document(info->fileName()));
- QStringList headerAndItsForwardingHeaders;
- headerAndItsForwardingHeaders << info->fileName();
+ Utils::FileNameList headerAndItsForwardingHeaders;
+ headerAndItsForwardingHeaders << Utils::FileName::fromString(info->fileName());
headerAndItsForwardingHeaders += localForwardHeaders.filesDependingOn(info->fileName());
- foreach (const QString &header, headerAndItsForwardingHeaders) {
- const QString include = findShortestInclude(currentDocumentFilePath, header,
+ foreach (const Utils::FileName &header, headerAndItsForwardingHeaders) {
+ const QString include = findShortestInclude(currentDocumentFilePath,
+ header.toString(),
headerPaths);
if (include.size() > 2) {
const QString headerFileName = QFileInfo(info->fileName()).fileName();
diff --git a/src/plugins/cpptools/builtineditordocumentparser.cpp b/src/plugins/cpptools/builtineditordocumentparser.cpp
index 35bbd06b30..5a763d08e3 100644
--- a/src/plugins/cpptools/builtineditordocumentparser.cpp
+++ b/src/plugins/cpptools/builtineditordocumentparser.cpp
@@ -116,9 +116,9 @@ void BuiltinEditorDocumentParser::update(WorkingCopy workingCopy)
m_snapshot = Snapshot();
} else {
// Remove changed files from the snapshot
- QSet<QString> toRemove;
+ QSet<Utils::FileName> toRemove;
foreach (const Document::Ptr &doc, m_snapshot) {
- QString fileName = doc->fileName();
+ const Utils::FileName fileName = Utils::FileName::fromString(doc->fileName());
if (workingCopy.contains(fileName)) {
if (workingCopy.get(fileName).second != doc->editorRevision())
addFileAndDependencies(&toRemove, fileName);
@@ -131,7 +131,7 @@ void BuiltinEditorDocumentParser::update(WorkingCopy workingCopy)
if (!toRemove.isEmpty()) {
invalidateSnapshot = true;
- foreach (const QString &fileName, toRemove)
+ foreach (const Utils::FileName &fileName, toRemove)
m_snapshot.remove(fileName);
}
}
@@ -183,7 +183,7 @@ void BuiltinEditorDocumentParser::update(WorkingCopy workingCopy)
m_snapshot = sourceProcessor.snapshot();
Snapshot newSnapshot = m_snapshot.simplified(document());
for (Snapshot::const_iterator i = m_snapshot.begin(), ei = m_snapshot.end(); i != ei; ++i) {
- if (Client::isInjectedFile(i.key()))
+ if (Client::isInjectedFile(i.key().toString()))
newSnapshot.insert(i.value());
}
m_snapshot = newSnapshot;
@@ -231,12 +231,12 @@ BuiltinEditorDocumentParser *BuiltinEditorDocumentParser::get(const QString &fil
return 0;
}
-void BuiltinEditorDocumentParser::addFileAndDependencies(QSet<QString> *toRemove,
- const QString &fileName) const
+void BuiltinEditorDocumentParser::addFileAndDependencies(QSet<Utils::FileName> *toRemove,
+ const Utils::FileName &fileName) const
{
toRemove->insert(fileName);
- if (fileName != filePath()) {
- QStringList deps = m_snapshot.filesDependingOn(fileName);
- toRemove->unite(QSet<QString>::fromList(deps));
+ if (fileName != Utils::FileName::fromString(filePath())) {
+ Utils::FileNameList deps = m_snapshot.filesDependingOn(fileName);
+ toRemove->unite(QSet<Utils::FileName>::fromList(deps));
}
}
diff --git a/src/plugins/cpptools/builtineditordocumentparser.h b/src/plugins/cpptools/builtineditordocumentparser.h
index 22298df33f..686fbfe3c9 100644
--- a/src/plugins/cpptools/builtineditordocumentparser.h
+++ b/src/plugins/cpptools/builtineditordocumentparser.h
@@ -65,7 +65,7 @@ public:
static BuiltinEditorDocumentParser *get(const QString &filePath);
private:
- void addFileAndDependencies(QSet<QString> *toRemove, const QString &fileName) const;
+ void addFileAndDependencies(QSet<Utils::FileName> *toRemove, const Utils::FileName &fileName) const;
private:
QByteArray m_configFile;
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 9b18b689fd..2c8856c4b8 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -55,7 +55,7 @@ using namespace CppTools::Internal;
using namespace CppTools;
using namespace CPlusPlus;
-static QByteArray getSource(const QString &fileName,
+static QByteArray getSource(const Utils::FileName &fileName,
const WorkingCopy &workingCopy)
{
if (workingCopy.contains(fileName)) {
@@ -66,7 +66,7 @@ static QByteArray getSource(const QString &fileName,
QString error;
QTextCodec *defaultCodec = EditorManager::defaultTextCodec();
Utils::TextFileFormat::ReadResult result = Utils::TextFileFormat::readFile(
- fileName, defaultCodec, &fileContents, &format, &error);
+ fileName.toString(), defaultCodec, &fileContents, &format, &error);
if (result != Utils::TextFileFormat::ReadSuccess)
qWarning() << "Could not read " << fileName << ". Error: " << error;
@@ -188,7 +188,7 @@ public:
future(future)
{ }
- QList<Usage> operator()(const QString &fileName)
+ QList<Usage> operator()(const Utils::FileName &fileName)
{
QList<Usage> usages;
if (future->isPaused())
@@ -205,7 +205,7 @@ public:
Document::Ptr doc;
const QByteArray unpreprocessedSource = getSource(fileName, workingCopy);
- if (symbolDocument && fileName == symbolDocument->fileName()) {
+ if (symbolDocument && fileName == Utils::FileName::fromString(symbolDocument->fileName())) {
doc = symbolDocument;
} else {
doc = snapshot.preprocessedDocument(unpreprocessedSource, fileName);
@@ -278,22 +278,24 @@ static void find_helper(QFutureInterface<Usage> &future,
const Snapshot snapshot = context.snapshot();
- const QString sourceFile = QString::fromUtf8(symbol->fileName(), symbol->fileNameLength());
- QStringList files(sourceFile);
+ const Utils::FileName sourceFile = Utils::FileName::fromUtf8(symbol->fileName(),
+ symbol->fileNameLength());
+ Utils::FileNameList files(sourceFile);
if (symbol->isClass()
|| symbol->isForwardClassDeclaration()
|| (symbol->enclosingScope()
&& !symbol->isStatic()
&& symbol->enclosingScope()->isNamespace())) {
- foreach (const Document::Ptr &doc, context.snapshot()) {
- if (doc->fileName() == sourceFile)
+ const Snapshot snapshotFromContext = context.snapshot();
+ for (auto i = snapshotFromContext.begin(), ei = snapshotFromContext.end(); i != ei; ++i) {
+ if (i.key() == sourceFile)
continue;
- Control *control = doc->control();
+ const Control *control = i.value()->control();
if (control->findIdentifier(symbolId->chars(), symbolId->size()))
- files.append(doc->fileName());
+ files.append(i.key());
}
} else {
files += snapshot.filesDependingOn(sourceFile);
@@ -452,7 +454,8 @@ CPlusPlus::Symbol *CppFindReferences::findSymbol(const CppFindReferencesParamete
Document::Ptr newSymbolDocument = snapshot.document(symbolFile);
// document is not parsed and has no bindings yet, do it
- QByteArray source = getSource(newSymbolDocument->fileName(), m_modelManager->workingCopy());
+ QByteArray source = getSource(Utils::FileName::fromString(newSymbolDocument->fileName()),
+ m_modelManager->workingCopy());
Document::Ptr doc =
snapshot.preprocessedDocument(source, newSymbolDocument->fileName());
doc->check();
@@ -543,7 +546,7 @@ public:
: workingCopy(workingCopy), snapshot(snapshot), macro(macro), future(future)
{ }
- QList<Usage> operator()(const QString &fileName)
+ QList<Usage> operator()(const Utils::FileName &fileName)
{
QList<Usage> usages;
Document::Ptr doc = snapshot.document(fileName);
@@ -573,7 +576,7 @@ restart_search:
if (macro.name() == useMacro.name()) {
unsigned column;
const QString &lineSource = matchingLine(use.bytesBegin(), source, &column);
- usages.append(Usage(fileName, lineSource, use.beginLine(), column,
+ usages.append(Usage(fileName.toString(), lineSource, use.beginLine(), column,
useMacro.nameToQString().size()));
}
}
@@ -614,8 +617,8 @@ static void findMacroUses_helper(QFutureInterface<Usage> &future,
const Snapshot snapshot,
const Macro macro)
{
- const QString& sourceFile = macro.fileName();
- QStringList files(sourceFile);
+ const Utils::FileName sourceFile = Utils::FileName::fromString(macro.fileName());
+ Utils::FileNameList files(sourceFile);
files += snapshot.filesDependingOn(sourceFile);
files.removeDuplicates();
@@ -662,7 +665,8 @@ void CppFindReferences::findMacroUses(const Macro &macro, const QString &replace
// add the macro definition itself
{
- const QByteArray &source = getSource(macro.fileName(), workingCopy);
+ const QByteArray &source = getSource(Utils::FileName::fromString(macro.fileName()),
+ workingCopy);
unsigned column;
const QString line = FindMacroUsesInFile::matchingLine(macro.bytesOffset(), source,
&column);
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index e2948e9fd7..ed063d99c3 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -814,12 +814,12 @@ QList<ProjectPart::Ptr> CppModelManager::projectPart(const QString &fileName) co
QList<ProjectPart::Ptr> CppModelManager::projectPartFromDependencies(const QString &fileName) const
{
QSet<ProjectPart::Ptr> parts;
- const QStringList deps = snapshot().filesDependingOn(fileName);
+ const Utils::FileNameList deps = snapshot().filesDependingOn(fileName);
- {
- QMutexLocker locker(&d->m_projectMutex);
- foreach (const QString &dep, deps)
- parts.unite(QSet<ProjectPart::Ptr>::fromList(d->m_fileToProjectParts.value(dep)));
+ QMutexLocker locker(&d->m_projectMutex);
+ foreach (const Utils::FileName &dep, deps) {
+ parts.unite(QSet<ProjectPart::Ptr>::fromList(
+ d->m_fileToProjectParts.value(dep.toString())));
}
return parts.values();
@@ -963,7 +963,7 @@ void CppModelManager::GC()
}
Snapshot currentSnapshot = snapshot();
- QSet<QString> reachableFiles;
+ QSet<Utils::FileName> reachableFiles;
// The configuration file is part of the project files, which is just fine.
// If single files are open, without any project, then there is no need to
// keep the configuration file around.
@@ -974,9 +974,10 @@ void CppModelManager::GC()
const QString file = todo.last();
todo.removeLast();
- if (reachableFiles.contains(file))
+ const Utils::FileName fileName = Utils::FileName::fromString(file);
+ if (reachableFiles.contains(fileName))
continue;
- reachableFiles.insert(file);
+ reachableFiles.insert(fileName);
if (Document::Ptr doc = currentSnapshot.document(file))
todo += doc->includedFiles();
@@ -986,12 +987,12 @@ void CppModelManager::GC()
QStringList notReachableFiles;
Snapshot newSnapshot;
for (Snapshot::const_iterator it = currentSnapshot.begin(); it != currentSnapshot.end(); ++it) {
- const QString fileName = it.key();
+ const Utils::FileName &fileName = it.key();
if (reachableFiles.contains(fileName))
newSnapshot.insert(it.value());
else
- notReachableFiles.append(fileName);
+ notReachableFiles.append(fileName.toString());
}
// Announce removing files and replace the snapshot
diff --git a/src/plugins/cpptools/typehierarchybuilder.cpp b/src/plugins/cpptools/typehierarchybuilder.cpp
index 2cb2249638..aa390cf956 100644
--- a/src/plugins/cpptools/typehierarchybuilder.cpp
+++ b/src/plugins/cpptools/typehierarchybuilder.cpp
@@ -195,9 +195,13 @@ void TypeHierarchyBuilder::buildDerived(TypeHierarchy *typeHierarchy,
QStringList TypeHierarchyBuilder::filesDependingOn(CPlusPlus::Symbol *symbol) const
{
+ QStringList deps;
if (!symbol)
- return QStringList();
+ return deps;
- const QString file = QString::fromUtf8(symbol->fileName(), symbol->fileNameLength());
- return QStringList() << file << _snapshot.filesDependingOn(file);
+ Utils::FileName file = Utils::FileName::fromUtf8(symbol->fileName(), symbol->fileNameLength());
+ deps << file.toString();
+ foreach (const Utils::FileName &fileName, _snapshot.filesDependingOn(file))
+ deps.append(fileName.toString());
+ return deps;
}
diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp
index 75d5aef09e..689b36dcb3 100644
--- a/src/plugins/designer/qtcreatorintegration.cpp
+++ b/src/plugins/designer/qtcreatorintegration.cpp
@@ -528,11 +528,10 @@ bool QtCreatorIntegration::navigateToSlot(const QString &objectName,
Snapshot newDocTable;
const Project *uiProject = SessionManager::projectForFile(currentUiFile);
if (uiProject) {
- Snapshot::const_iterator end = docTable.end();
- for (Snapshot::iterator it = docTable.begin(); it != end; ++it) {
- const Project *project = SessionManager::projectForFile(it.key());
+ for (Snapshot::const_iterator i = docTable.begin(), ei = docTable.end(); i != ei; ++i) {
+ const Project *project = SessionManager::projectForFile(i.key().toString());
if (project == uiProject)
- newDocTable.insert(it.value());
+ newDocTable.insert(i.value());
}
} else {
const CppTools::WorkingCopy workingCopy =