Use Utils::FileName in Qt4ProFileNode

Change-Id: I6c0702caa2259e8fcaae48d1ac91622398ce7696
Reviewed-by: Yuchen Deng <loaden@gmail.com>
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
Daniel Teske
2011-11-08 18:53:51 +01:00
committed by hjk
parent 16e97f0d51
commit b0ec3c130e
2 changed files with 41 additions and 50 deletions

View File

@@ -305,13 +305,13 @@ struct InternalNode
// ... // ...
// and afterwards calls compress() which merges directory nodes with single children, i.e. to // and afterwards calls compress() which merges directory nodes with single children, i.e. to
// * /absolute/path // * /absolute/path
void create(const QString &projectDir, const QStringList &newFilePaths, ProjectExplorer::FileType type) void create(const QString &projectDir, const QSet<Utils::FileName> &newFilePaths, ProjectExplorer::FileType type)
{ {
static const QChar separator = QChar('/'); static const QChar separator = QChar('/');
const QString projectDirWithSeparator = projectDir + separator; const QString projectDirWithSeparator = projectDir + separator;
int projectDirWithSeparatorLength = projectDirWithSeparator.length(); int projectDirWithSeparatorLength = projectDirWithSeparator.length();
foreach (const QString &file, newFilePaths) { foreach (const Utils::FileName &file, newFilePaths) {
QString fileWithoutPrefix; Utils::FileName fileWithoutPrefix;
bool isRelative; bool isRelative;
if (file.startsWith(projectDirWithSeparator)) { if (file.startsWith(projectDirWithSeparator)) {
isRelative = true; isRelative = true;
@@ -320,7 +320,7 @@ struct InternalNode
isRelative = false; isRelative = false;
fileWithoutPrefix = file; fileWithoutPrefix = file;
} }
QStringList parts = fileWithoutPrefix.split(separator, QString::SkipEmptyParts); QStringList parts = fileWithoutPrefix.toString().split(separator, QString::SkipEmptyParts);
#ifndef Q_OS_WIN #ifndef Q_OS_WIN
if (!isRelative && parts.count() > 0) if (!isRelative && parts.count() > 0)
parts[0].prepend(separator); parts[0].prepend(separator);
@@ -344,7 +344,7 @@ struct InternalNode
} }
path += separator; path += separator;
} else { // key is filename } else { // key is filename
currentNode->files.append(file); currentNode->files.append(file.toString());
} }
} }
} }
@@ -513,9 +513,9 @@ QStringList Qt4PriFileNode::fullVPaths(const QStringList &baseVPaths, QtSupport:
return vPaths; return vPaths;
} }
static QSet<QString> recursiveEnumerate(const QString &folder) static QSet<Utils::FileName> recursiveEnumerate(const QString &folder)
{ {
QSet<QString> result; QSet<Utils::FileName> result;
QFileInfo fi(folder); QFileInfo fi(folder);
if (fi.isDir()) { if (fi.isDir()) {
QDir dir(folder); QDir dir(folder);
@@ -525,22 +525,14 @@ static QSet<QString> recursiveEnumerate(const QString &folder)
if (file.isDir()) if (file.isDir())
result += recursiveEnumerate(file.absoluteFilePath()); result += recursiveEnumerate(file.absoluteFilePath());
else else
result += file.absoluteFilePath(); result += Utils::FileName(file);
} }
} else if (fi.exists()) { } else if (fi.exists()) {
result << folder; result << Utils::FileName(fi);
} }
return result; return result;
} }
QSet<QString> lowercaseAll(QSet<QString> strings)
{
QSet<QString> result;
foreach (const QString &s, strings)
result << s.toLower();
return result;
}
void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader *readerExact, ProFile *includeFileCumlative, QtSupport::ProFileReader *readerCumulative) void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader *readerExact, ProFile *includeFileCumlative, QtSupport::ProFileReader *readerCumulative)
{ {
// add project file node // add project file node
@@ -583,7 +575,7 @@ void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader
++it; ++it;
} else { } else {
// move files directly to m_recursiveEnumerateFiles // move files directly to m_recursiveEnumerateFiles
m_recursiveEnumerateFiles << *it; m_recursiveEnumerateFiles << Utils::FileName::fromString(*it);
it = folders.erase(it); it = folders.erase(it);
} }
} else { } else {
@@ -598,10 +590,7 @@ void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader
foreach (const QString &folder, folders) { foreach (const QString &folder, folders) {
m_recursiveEnumerateFiles += recursiveEnumerate(folder); m_recursiveEnumerateFiles += recursiveEnumerate(folder);
} }
#ifdef Q_OS_WIN QMap<FileType, QSet<Utils::FileName> > foundFiles;
m_recursiveEnumerateFiles = lowercaseAll(m_recursiveEnumerateFiles);
#endif
QMap<FileType, QSet<QString> > foundFiles;
QStringList baseVPathsExact; QStringList baseVPathsExact;
if (includeFileExact) if (includeFileExact)
@@ -617,20 +606,21 @@ void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader
FileType type = fileTypes.at(i).type; FileType type = fileTypes.at(i).type;
QStringList qmakeVariables = varNames(type); QStringList qmakeVariables = varNames(type);
QSet<QString> newFilePaths; QSet<Utils::FileName> newFilePaths;
foreach (const QString &qmakeVariable, qmakeVariables) { foreach (const QString &qmakeVariable, qmakeVariables) {
if (includeFileExact) { if (includeFileExact) {
QStringList vPathsExact = fullVPaths(baseVPathsExact, readerExact, type, qmakeVariable, projectDir); QStringList vPathsExact = fullVPaths(baseVPathsExact, readerExact, type, qmakeVariable, projectDir);
newFilePaths += readerExact->absoluteFileValues(qmakeVariable, projectDir, vPathsExact, includeFileExact).toSet(); QStringList tmp = readerExact->absoluteFileValues(qmakeVariable, projectDir, vPathsExact, includeFileExact);
foreach (const QString &t, tmp)
newFilePaths += Utils::FileName::fromString(t);
} }
if (includeFileCumlative) { if (includeFileCumlative) {
QStringList vPathsCumulative = fullVPaths(baseVPathsCumulative, readerCumulative, type, qmakeVariable, projectDir); QStringList vPathsCumulative = fullVPaths(baseVPathsCumulative, readerCumulative, type, qmakeVariable, projectDir);
newFilePaths += readerCumulative->absoluteFileValues(qmakeVariable, projectDir, vPathsCumulative, includeFileCumlative).toSet(); QStringList tmp = readerCumulative->absoluteFileValues(qmakeVariable, projectDir, vPathsCumulative, includeFileCumlative);
foreach (const QString &t, tmp)
newFilePaths += Utils::FileName::fromString(t);
} }
} }
#ifdef Q_OS_WIN
newFilePaths = lowercaseAll(newFilePaths);
#endif
foundFiles[type] = newFilePaths; foundFiles[type] = newFilePaths;
m_recursiveEnumerateFiles.subtract(newFilePaths); m_recursiveEnumerateFiles.subtract(newFilePaths);
@@ -638,7 +628,7 @@ void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader
for (int i = 0; i < fileTypes.size(); ++i) { for (int i = 0; i < fileTypes.size(); ++i) {
FileType type = fileTypes.at(i).type; FileType type = fileTypes.at(i).type;
QSet<QString> newFilePaths = filterFilesProVariables(type, foundFiles[type]); QSet<Utils::FileName> newFilePaths = filterFilesProVariables(type, foundFiles[type]);
newFilePaths += filterFilesRecursiveEnumerata(type, m_recursiveEnumerateFiles); newFilePaths += filterFilesRecursiveEnumerata(type, m_recursiveEnumerateFiles);
// We only need to save this information if // We only need to save this information if
@@ -656,7 +646,7 @@ void Qt4PriFileNode::update(ProFile *includeFileExact, QtSupport::ProFileReader
subfolder->displayName = fileTypes.at(i).typeName; subfolder->displayName = fileTypes.at(i).typeName;
contents.subnodes.insert(subfolder->fullPath, subfolder); contents.subnodes.insert(subfolder->fullPath, subfolder);
// create the hierarchy with subdirectories // create the hierarchy with subdirectories
subfolder->create(m_projectDir, newFilePaths.toList(), type); subfolder->create(m_projectDir, newFilePaths, type);
} }
} }
@@ -689,18 +679,18 @@ void Qt4PriFileNode::folderChanged(const QString &folder)
changedFolder.append(QLatin1Char('/')); changedFolder.append(QLatin1Char('/'));
// Collect all the files // Collect all the files
QSet<QString> newFiles; QSet<Utils::FileName> newFiles;
newFiles += recursiveEnumerate(changedFolder); newFiles += recursiveEnumerate(changedFolder);
foreach (const QString &file, m_recursiveEnumerateFiles) { foreach (const Utils::FileName &file, m_recursiveEnumerateFiles) {
if (!file.startsWith(changedFolder)) if (!file.startsWith(changedFolder))
newFiles.insert(file); newFiles.insert(file);
} }
QSet<QString> addedFiles = newFiles; QSet<Utils::FileName> addedFiles = newFiles;
addedFiles.subtract(m_recursiveEnumerateFiles); addedFiles.subtract(m_recursiveEnumerateFiles);
QSet<QString> removedFiles = m_recursiveEnumerateFiles; QSet<Utils::FileName> removedFiles = m_recursiveEnumerateFiles;
removedFiles.subtract(newFiles); removedFiles.subtract(newFiles);
if (addedFiles.isEmpty() && removedFiles.isEmpty()) if (addedFiles.isEmpty() && removedFiles.isEmpty())
@@ -713,8 +703,8 @@ void Qt4PriFileNode::folderChanged(const QString &folder)
const QVector<Qt4NodeStaticData::FileTypeData> &fileTypes = qt4NodeStaticData()->fileTypeData; const QVector<Qt4NodeStaticData::FileTypeData> &fileTypes = qt4NodeStaticData()->fileTypeData;
for (int i = 0; i < fileTypes.size(); ++i) { for (int i = 0; i < fileTypes.size(); ++i) {
FileType type = fileTypes.at(i).type; FileType type = fileTypes.at(i).type;
QSet<QString> add = filterFilesRecursiveEnumerata(type, addedFiles); QSet<Utils::FileName> add = filterFilesRecursiveEnumerata(type, addedFiles);
QSet<QString> remove = filterFilesRecursiveEnumerata(type, removedFiles); QSet<Utils::FileName> remove = filterFilesRecursiveEnumerata(type, removedFiles);
if (!add.isEmpty() || !remove.isEmpty()) { if (!add.isEmpty() || !remove.isEmpty()) {
// Scream :) // Scream :)
@@ -739,7 +729,7 @@ void Qt4PriFileNode::folderChanged(const QString &folder)
subfolder->displayName = fileTypes.at(i).typeName; subfolder->displayName = fileTypes.at(i).typeName;
contents.subnodes.insert(subfolder->fullPath, subfolder); contents.subnodes.insert(subfolder->fullPath, subfolder);
// create the hierarchy with subdirectories // create the hierarchy with subdirectories
subfolder->create(m_projectDir, m_files[type].toList(), type); subfolder->create(m_projectDir, m_files[type], type);
} }
} }
@@ -825,7 +815,7 @@ QList<ProjectNode::ProjectAction> Qt4PriFileNode::supportedActions(Node *node) c
// work on a subset of the file types according to project type. // work on a subset of the file types according to project type.
actions << AddNewFile; actions << AddNewFile;
if (m_recursiveEnumerateFiles.contains(node->path())) { if (m_recursiveEnumerateFiles.contains(Utils::FileName::fromString(node->path()))) {
actions << EraseFile; actions << EraseFile;
} else { } else {
actions << RemoveFile; actions << RemoveFile;
@@ -1268,36 +1258,36 @@ QStringList Qt4PriFileNode::dynamicVarNames(QtSupport::ProFileReader *readerExac
return result; return result;
} }
QSet<QString> Qt4PriFileNode::filterFilesProVariables(ProjectExplorer::FileType fileType, const QSet<QString> &files) QSet<Utils::FileName> Qt4PriFileNode::filterFilesProVariables(ProjectExplorer::FileType fileType, const QSet<Utils::FileName> &files)
{ {
if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType) if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType)
return files; return files;
QSet<QString> result; QSet<Utils::FileName> result;
if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType) if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType)
return result; return result;
if (fileType == ProjectExplorer::QMLType) { if (fileType == ProjectExplorer::QMLType) {
foreach (const QString &file, files) foreach (const Utils::FileName &file, files)
if (file.endsWith(".qml")) if (file.endsWith(".qml"))
result << file; result << file;
} else { } else {
foreach (const QString &file, files) foreach (const Utils::FileName &file, files)
if (!file.endsWith(".qml")) if (!file.endsWith(".qml"))
result << file; result << file;
} }
return result; return result;
} }
QSet<QString> Qt4PriFileNode::filterFilesRecursiveEnumerata(ProjectExplorer::FileType fileType, const QSet<QString> &files) QSet<Utils::FileName> Qt4PriFileNode::filterFilesRecursiveEnumerata(ProjectExplorer::FileType fileType, const QSet<Utils::FileName> &files)
{ {
QSet<QString> result; QSet<Utils::FileName> result;
if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType) if (fileType != ProjectExplorer::QMLType && fileType != ProjectExplorer::UnknownFileType)
return result; return result;
if(fileType == ProjectExplorer::QMLType) { if(fileType == ProjectExplorer::QMLType) {
foreach (const QString &file, files) foreach (const Utils::FileName &file, files)
if (file.endsWith(".qml")) if (file.endsWith(".qml"))
result << file; result << file;
} else { } else {
foreach (const QString &file, files) foreach (const Utils::FileName &file, files)
if (!file.endsWith(".qml")) if (!file.endsWith(".qml"))
result << file; result << file;
} }

View File

@@ -35,6 +35,7 @@
#include "qt4projectmanager_global.h" #include "qt4projectmanager_global.h"
#include <utils/fileutils.h>
#include <coreplugin/ifile.h> #include <coreplugin/ifile.h>
#include <projectexplorer/projectnodes.h> #include <projectexplorer/projectnodes.h>
@@ -163,8 +164,8 @@ protected:
void clear(); void clear();
static QStringList varNames(FileType type); static QStringList varNames(FileType type);
static QStringList dynamicVarNames(QtSupport::ProFileReader *readerExact, QtSupport::ProFileReader *readerCumulative); static QStringList dynamicVarNames(QtSupport::ProFileReader *readerExact, QtSupport::ProFileReader *readerCumulative);
static QSet<QString> filterFilesProVariables(ProjectExplorer::FileType fileType, const QSet<QString> &files); static QSet<Utils::FileName> filterFilesProVariables(ProjectExplorer::FileType fileType, const QSet<Utils::FileName> &files);
static QSet<QString> filterFilesRecursiveEnumerata(ProjectExplorer::FileType fileType, const QSet<QString> &files); static QSet<Utils::FileName> filterFilesRecursiveEnumerata(ProjectExplorer::FileType fileType, const QSet<Utils::FileName> &files);
enum ChangeType { enum ChangeType {
AddToProFile, AddToProFile,
@@ -202,8 +203,8 @@ private:
// Memory is cheap... // Memory is cheap...
// TODO (really that cheap?) // TODO (really that cheap?)
QMap<ProjectExplorer::FileType, QSet<QString> > m_files; QMap<ProjectExplorer::FileType, QSet<Utils::FileName> > m_files;
QSet<QString> m_recursiveEnumerateFiles; QSet<Utils::FileName> m_recursiveEnumerateFiles;
QSet<QString> m_watchedFolders; QSet<QString> m_watchedFolders;
bool m_includedInExactParse; bool m_includedInExactParse;