QbsProjectManager: Assign types to source files.

At the moment, all source files get the type "unknown",
so certain code in other plugins that looks for e.g.
Qt resource files never finds any.

Task-number: QBS-762
Change-Id: I71b798980b7ca318f2b4e7871148ba72703f8d83
Reviewed-by: Jake Petroules <jake.petroules@petroules.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
This commit is contained in:
Christian Kandeler
2015-03-10 16:41:59 +01:00
parent cc469f6466
commit 008def4f36
4 changed files with 66 additions and 14 deletions

View File

@@ -39,6 +39,7 @@
#include <projectexplorer/projectexplorerconstants.h>
#include <projectexplorer/target.h>
#include <qtsupport/qtsupportconstants.h>
#include <utils/algorithm.h>
#include <utils/hostosinfo.h>
#include <utils/qtcassert.h>
@@ -462,14 +463,14 @@ void QbsGroupNode::updateQbsGroupData(const qbs::GroupData &grp, const QString &
idx->setPathAndLine(Utils::FileName::fromString(grp.location().filePath()),
grp.location().line());
setupFiles(this, grp.allFilePaths(), productPath, updateExisting);
setupFiles(this, grp, grp.allFilePaths(), productPath, updateExisting);
if (updateExisting)
emitNodeUpdated();
}
void QbsGroupNode::setupFiles(ProjectExplorer::FolderNode *root, const QStringList &files,
const QString &productPath, bool updateExisting)
void QbsGroupNode::setupFiles(ProjectExplorer::FolderNode *root, const qbs::GroupData &group,
const QStringList &files, const QString &productPath, bool updateExisting)
{
// Build up a tree of nodes:
FileTreeNode tree;
@@ -487,10 +488,10 @@ void QbsGroupNode::setupFiles(ProjectExplorer::FolderNode *root, const QStringLi
FileTreeNode::reorder(&tree, productPath);
FileTreeNode::simplify(&tree);
setupFolder(root, &tree, productPath, updateExisting);
setupFolder(root, group, &tree, productPath, updateExisting);
}
void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root,
void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root, const qbs::GroupData &group,
const FileTreeNode *fileTree, const QString &baseDir,
bool updateExisting)
{
@@ -531,7 +532,7 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root,
if (updateExisting)
fn->emitNodeUpdated();
} else {
fn = new ProjectExplorer::FileNode(path, ProjectExplorer::UnknownFileType, false);
fn = new ProjectExplorer::FileNode(path, fileType(group, c->path()), false);
filesToAdd.append(fn);
}
continue;
@@ -556,7 +557,7 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root,
fn->setDisplayName(displayNameFromPath(c->path(), baseDir));
}
setupFolder(fn, c, c->path(), updateExisting);
setupFolder(fn, group, c, c->path(), updateExisting);
}
}
root->removeFileNodes(filesToRemove);
@@ -564,6 +565,29 @@ void QbsGroupNode::setupFolder(ProjectExplorer::FolderNode *root,
root->addFileNodes(filesToAdd);
}
ProjectExplorer::FileType QbsGroupNode::fileType(const qbs::GroupData &group,
const QString &filePath)
{
if (!group.isValid())
return ProjectExplorer::UnknownFileType;
const qbs::SourceArtifact artifact = Utils::findOrDefault(group.allSourceArtifacts(),
[filePath](const qbs::SourceArtifact &sa) { return sa.filePath() == filePath; });
QTC_ASSERT(artifact.isValid(), return ProjectExplorer::UnknownFileType);
if (artifact.fileTags().contains(QLatin1String("c"))
|| artifact.fileTags().contains(QLatin1String("cpp"))
|| artifact.fileTags().contains(QLatin1String("objc"))
|| artifact.fileTags().contains(QLatin1String("objcpp"))) {
return ProjectExplorer::SourceType;
}
if (artifact.fileTags().contains(QLatin1String("hpp")))
return ProjectExplorer::HeaderType;
if (artifact.fileTags().contains(QLatin1String("qrc")))
return ProjectExplorer::ResourceType;
if (artifact.fileTags().contains(QLatin1String("ui")))
return ProjectExplorer::FormType;
return ProjectExplorer::UnknownFileType;
}
// --------------------------------------------------------------------
// QbsProductNode:
// --------------------------------------------------------------------
@@ -682,7 +706,7 @@ void QbsProductNode::setQbsProductData(const qbs::Project &project, const qbs::P
foreach (const qbs::GroupData &grp, prd.groups()) {
if (grp.name() == prd.name() && grp.location() == prd.location()) {
// Set implicit product group right onto this node:
QbsGroupNode::setupFiles(this, grp.allFilePaths(), productPath, updateExisting);
QbsGroupNode::setupFiles(this, grp, grp.allFilePaths(), productPath, updateExisting);
continue;
}
QbsGroupNode *gn = findGroupNode(grp.name());
@@ -855,7 +879,8 @@ void QbsRootProjectNode::update()
if (Utils::FileName::fromString(f).isChildOf(base))
projectBuildSystemFiles.append(f);
}
QbsGroupNode::setupFiles(m_buildSystemFiles, projectBuildSystemFiles, base.toString(), false);
QbsGroupNode::setupFiles(m_buildSystemFiles, qbs::GroupData(), projectBuildSystemFiles,
base.toString(), false);
update(m_project->qbsProject(), m_project->qbsProjectData());
}

View File

@@ -108,12 +108,15 @@ public:
QString productPath() const;
static void setupFiles(FolderNode *root, const QStringList &files,
// group can be invalid
static void setupFiles(FolderNode *root, const qbs::GroupData &group, const QStringList &files,
const QString &productPath, bool updateExisting);
private:
static void setupFolder(ProjectExplorer::FolderNode *folder,
static void setupFolder(ProjectExplorer::FolderNode *folder, const qbs::GroupData &group,
const FileTreeNode *subFileTree, const QString &baseDir, bool updateExisting);
static ProjectExplorer::FileType fileType(const qbs::GroupData &group, const QString &filePath);
qbs::GroupData m_qbsGroupData;
QString m_productPath;

View File

@@ -254,6 +254,25 @@ bool QbsProject::ensureWriteableQbsFile(const QString &file)
return true;
}
qbs::GroupData QbsProject::reRetrieveGroupData(const qbs::ProductData &oldProduct,
const qbs::GroupData &oldGroup)
{
qbs::GroupData newGroup;
foreach (const qbs::ProductData &pd, m_projectData.allProducts()) {
if (uniqueProductName(pd) == uniqueProductName(oldProduct)) {
foreach (const qbs::GroupData &gd, pd.groups()) {
if (gd.location() == oldGroup.location()) {
newGroup = gd;
break;
}
}
break;
}
}
QTC_CHECK(newGroup.isValid());
return newGroup;
}
bool QbsProject::addFilesToProduct(QbsBaseProjectNode *node, const QStringList &filePaths,
const qbs::ProductData &productData, const qbs::GroupData &groupData, QStringList *notAdded)
{
@@ -273,7 +292,8 @@ bool QbsProject::addFilesToProduct(QbsBaseProjectNode *node, const QStringList &
}
if (notAdded->count() != filePaths.count()) {
m_projectData = m_qbsProject.projectData();
QbsGroupNode::setupFiles(node, allPaths, QFileInfo(productFilePath).absolutePath(), true);
QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData),
allPaths, QFileInfo(productFilePath).absolutePath(), true);
m_rootProjectNode->update();
}
return notAdded->isEmpty();
@@ -300,7 +320,8 @@ bool QbsProject::removeFilesFromProduct(QbsBaseProjectNode *node, const QStringL
}
if (notRemoved->count() != filePaths.count()) {
m_projectData = m_qbsProject.projectData();
QbsGroupNode::setupFiles(node, allPaths, QFileInfo(productFilePath).absolutePath(), true);
QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData), allPaths,
QFileInfo(productFilePath).absolutePath(), true);
m_rootProjectNode->update();
}
return notRemoved->isEmpty();

View File

@@ -144,6 +144,9 @@ private:
static bool ensureWriteableQbsFile(const QString &file);
qbs::GroupData reRetrieveGroupData(const qbs::ProductData &oldProduct,
const qbs::GroupData &oldGroup);
QbsManager *const m_manager;
const QString m_projectName;
const QString m_fileName;