diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2014-11-27 10:49:18 +0100 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@theqtcompany.com> | 2014-12-15 15:58:25 +0100 |
commit | be4a0306965aecc701b0890d5339ed7f596e7793 (patch) | |
tree | 54c055ca2245f64015b37f69db7c97e01eb0bf9b /src | |
parent | e3977de08eb5577222f01a9013185b036dee4564 (diff) | |
download | qt-creator-be4a0306965aecc701b0890d5339ed7f596e7793.tar.gz |
C++: handle case-insensitive file names in the WorkingCopy
... by keying on Utils::FileName
Task-number: QTCREATORBUG-12390
Change-Id: Ia1a59d2e422b4f92300ac6a8e0e52dd7456a6e70
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/utils/fileutils.cpp | 5 | ||||
-rw-r--r-- | src/libs/utils/fileutils.h | 1 | ||||
-rw-r--r-- | src/plugins/clangcodemodel/clangutils.cpp | 12 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppcodemodelinspectordialog.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodemodelinspectordumper.cpp | 4 | ||||
-rw-r--r-- | src/plugins/cpptools/cppmodelmanager_test.cpp | 4 | ||||
-rw-r--r-- | src/plugins/cpptools/cppworkingcopy.h | 23 | ||||
-rw-r--r-- | src/plugins/designer/qtcreatorintegration.cpp | 10 |
8 files changed, 45 insertions, 19 deletions
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 6d75342b99..1479a72d23 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -721,6 +721,11 @@ FileName &FileName::appendString(QChar str) return *this; } +QTextStream &operator<<(QTextStream &s, const FileName &fn) +{ + return s << fn.toString(); +} + 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 4e2403322b..0a05451fd0 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -102,6 +102,7 @@ private: FileName(const QString &string); }; +QTCREATOR_UTILS_EXPORT QTextStream &operator<<(QTextStream &s, const FileName &fn); class QTCREATOR_UTILS_EXPORT FileUtils { public: diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp index f5d3daaa31..8bf2c8ea04 100644 --- a/src/plugins/clangcodemodel/clangutils.cpp +++ b/src/plugins/clangcodemodel/clangutils.cpp @@ -74,17 +74,17 @@ UnsavedFiles createUnsavedFiles(WorkingCopy workingCopy) // TODO: change the modelmanager to hold one working copy, and amend it every time we ask for one. // TODO: Reason: the UnsavedFile needs a QByteArray. - QSet<QString> modifiedFiles; + QSet<::Utils::FileName> modifiedFiles; foreach (IDocument *doc, Core::DocumentManager::modifiedDocuments()) - modifiedFiles.insert(doc->filePath()); + modifiedFiles.insert(::Utils::FileName::fromString(doc->filePath())); UnsavedFiles result; - QHashIterator<QString, QPair<QByteArray, unsigned> > wcIter = workingCopy.iterator(); + QHashIterator<::Utils::FileName, QPair<QByteArray, unsigned> > wcIter = workingCopy.iterator(); while (wcIter.hasNext()) { wcIter.next(); - const QString &fileName = wcIter.key(); - if (modifiedFiles.contains(fileName) && QFile(fileName).exists()) - result.insert(fileName, wcIter.value().first); + const ::Utils::FileName &fileName = wcIter.key(); + if (modifiedFiles.contains(fileName) && QFile(fileName.toString()).exists()) + result.insert(fileName.toString(), wcIter.value().first); } return result; diff --git a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp index 9a3811cc2d..7c189f52e2 100644 --- a/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp +++ b/src/plugins/cppeditor/cppcodemodelinspectordialog.cpp @@ -1087,10 +1087,11 @@ void WorkingCopyModel::configure(const WorkingCopy &workingCopy) { emit layoutAboutToBeChanged(); m_workingCopyList.clear(); - QHashIterator<QString, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); + QHashIterator<Utils::FileName, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); while (it.hasNext()) { it.next(); - m_workingCopyList << WorkingCopyEntry(it.key(), it.value().first, it.value().second); + m_workingCopyList << WorkingCopyEntry(it.key().toString(), it.value().first, + it.value().second); } emit layoutChanged(); } diff --git a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp index 32c420b217..e0f44277c4 100644 --- a/src/plugins/cpptools/cppcodemodelinspectordumper.cpp +++ b/src/plugins/cpptools/cppcodemodelinspectordumper.cpp @@ -580,10 +580,10 @@ void Dumper::dumpWorkingCopy(const WorkingCopy &workingCopy) m_out << "Working Copy contains " << workingCopy.size() << " entries{{{1\n"; const QByteArray i1 = indent(1); - QHashIterator<QString, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); + QHashIterator<::Utils::FileName, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); while (it.hasNext()) { it.next(); - const QString filePath = it.key(); + const ::Utils::FileName &filePath = it.key(); unsigned sourcRevision = it.value().second; m_out << i1 << "rev=" << sourcRevision << ", " << filePath << "\n"; } diff --git a/src/plugins/cpptools/cppmodelmanager_test.cpp b/src/plugins/cpptools/cppmodelmanager_test.cpp index 0e7b35f364..bb0641a779 100644 --- a/src/plugins/cpptools/cppmodelmanager_test.cpp +++ b/src/plugins/cpptools/cppmodelmanager_test.cpp @@ -684,10 +684,10 @@ void CppToolsPlugin::test_modelmanager_extraeditorsupport_uiFiles() QCOMPARE(workingCopy.size(), 2); // mm->configurationFileName() and "ui_*.h" QStringList fileNamesInWorkinCopy; - QHashIterator<QString, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); + QHashIterator<Utils::FileName, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); while (it.hasNext()) { it.next(); - fileNamesInWorkinCopy << QFileInfo(it.key()).fileName(); + fileNamesInWorkinCopy << QFileInfo(it.key().toString()).fileName(); } fileNamesInWorkinCopy.sort(); const QString expectedUiHeaderFileName = _("ui_mainwindow.h"); diff --git a/src/plugins/cpptools/cppworkingcopy.h b/src/plugins/cpptools/cppworkingcopy.h index 4507c46127..088fd22a1e 100644 --- a/src/plugins/cpptools/cppworkingcopy.h +++ b/src/plugins/cpptools/cppworkingcopy.h @@ -33,6 +33,8 @@ #include "cpptools_global.h" +#include <utils/fileutils.h> + #include <QHash> #include <QString> #include <QPair> @@ -45,28 +47,43 @@ public: WorkingCopy(); void insert(const QString &fileName, const QByteArray &source, unsigned revision = 0) + { insert(Utils::FileName::fromString(fileName), source, revision); } + + void insert(const Utils::FileName &fileName, const QByteArray &source, unsigned revision = 0) { _elements.insert(fileName, qMakePair(source, revision)); } bool contains(const QString &fileName) const + { return contains(Utils::FileName::fromString(fileName)); } + + bool contains(const Utils::FileName &fileName) const { return _elements.contains(fileName); } QByteArray source(const QString &fileName) const + { return source(Utils::FileName::fromString(fileName)); } + + QByteArray source(const Utils::FileName &fileName) const { return _elements.value(fileName).first; } unsigned revision(const QString &fileName) const + { return revision(Utils::FileName::fromString(fileName)); } + + unsigned revision(const Utils::FileName &fileName) const { return _elements.value(fileName).second; } QPair<QByteArray, unsigned> get(const QString &fileName) const + { return get(Utils::FileName::fromString(fileName)); } + + QPair<QByteArray, unsigned> get(const Utils::FileName &fileName) const { return _elements.value(fileName); } - QHashIterator<QString, QPair<QByteArray, unsigned> > iterator() const - { return QHashIterator<QString, QPair<QByteArray, unsigned> >(_elements); } + QHashIterator<Utils::FileName, QPair<QByteArray, unsigned> > iterator() const + { return QHashIterator<Utils::FileName, QPair<QByteArray, unsigned> >(_elements); } int size() const { return _elements.size(); } private: - typedef QHash<QString, QPair<QByteArray, unsigned> > Table; + typedef QHash<Utils::FileName, QPair<QByteArray, unsigned> > Table; Table _elements; }; diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp index 0abeb9a11f..75d5aef09e 100644 --- a/src/plugins/designer/qtcreatorintegration.cpp +++ b/src/plugins/designer/qtcreatorintegration.cpp @@ -537,12 +537,14 @@ bool QtCreatorIntegration::navigateToSlot(const QString &objectName, } else { const CppTools::WorkingCopy workingCopy = CppTools::CppModelManager::instance()->workingCopy(); - QHashIterator<QString, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); + const Utils::FileName configFileName = + Utils::FileName::fromString(CppTools::CppModelManager::configurationFileName()); + QHashIterator<Utils::FileName, QPair<QByteArray, unsigned> > it = workingCopy.iterator(); while (it.hasNext()) { it.next(); - const QString fileName = it.key(); - if (fileName != CppTools::CppModelManager::configurationFileName()) - newDocTable.insert(docTable.document(fileName)); + const Utils::FileName &fileName = it.key(); + if (fileName != configFileName) + newDocTable.insert(docTable.document(fileName.toString())); } } docTable = newDocTable; |