forked from qt-creator/qt-creator
Project: Add setRootProjectNode method
Add setRootProjectNode method and a default implementation of rootProjectNode to Project. Use that in all derived classes. Change-Id: Id28cde04457a20a8963d43020785ef9d77fea57c Reviewed-by: Niels Weber <niels.weber@theqtcompany.com> Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
@@ -78,24 +78,18 @@ AutotoolsProject::AutotoolsProject(AutotoolsManager *manager, const QString &fil
|
|||||||
setId(Constants::AUTOTOOLS_PROJECT_ID);
|
setId(Constants::AUTOTOOLS_PROJECT_ID);
|
||||||
setProjectManager(manager);
|
setProjectManager(manager);
|
||||||
setDocument(new AutotoolsProjectFile(fileName));
|
setDocument(new AutotoolsProjectFile(fileName));
|
||||||
m_rootNode = new AutotoolsProjectNode(projectFilePath());
|
setRootProjectNode(new AutotoolsProjectNode(projectFilePath()));
|
||||||
setProjectContext(Core::Context(Constants::PROJECT_CONTEXT));
|
setProjectContext(Core::Context(Constants::PROJECT_CONTEXT));
|
||||||
setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
|
setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
|
||||||
|
|
||||||
const QFileInfo fileInfo = projectFilePath().toFileInfo();
|
const QFileInfo fileInfo = projectFilePath().toFileInfo();
|
||||||
m_projectName = fileInfo.absoluteDir().dirName();
|
m_projectName = fileInfo.absoluteDir().dirName();
|
||||||
m_rootNode->setDisplayName(fileInfo.absoluteDir().dirName());
|
rootProjectNode()->setDisplayName(m_projectName);
|
||||||
}
|
}
|
||||||
|
|
||||||
AutotoolsProject::~AutotoolsProject()
|
AutotoolsProject::~AutotoolsProject()
|
||||||
{
|
{
|
||||||
// Although ProjectExplorer::ProjectNode is a QObject, the ctor
|
setRootProjectNode(0);
|
||||||
// does not allow to specify the parent. Manually setting the
|
|
||||||
// parent would be possible, but we use the same approach as in the
|
|
||||||
// other project managers and delete the node manually (TBD).
|
|
||||||
//
|
|
||||||
delete m_rootNode;
|
|
||||||
m_rootNode = 0;
|
|
||||||
|
|
||||||
if (m_makefileParserThread != 0) {
|
if (m_makefileParserThread != 0) {
|
||||||
m_makefileParserThread->wait();
|
m_makefileParserThread->wait();
|
||||||
@@ -114,11 +108,6 @@ QString AutotoolsProject::defaultBuildDirectory(const QString &projectPath)
|
|||||||
return QFileInfo(projectPath).absolutePath();
|
return QFileInfo(projectPath).absolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectNode *AutotoolsProject::rootProjectNode() const
|
|
||||||
{
|
|
||||||
return m_rootNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList AutotoolsProject::files(FilesMode fileMode) const
|
QStringList AutotoolsProject::files(FilesMode fileMode) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(fileMode);
|
Q_UNUSED(fileMode);
|
||||||
@@ -261,7 +250,7 @@ void AutotoolsProject::buildFileNodeTree(const QDir &directory,
|
|||||||
// This allows to reuse existing nodes and to remove obsolete
|
// This allows to reuse existing nodes and to remove obsolete
|
||||||
// nodes later.
|
// nodes later.
|
||||||
QHash<QString, Node *> nodeHash;
|
QHash<QString, Node *> nodeHash;
|
||||||
foreach (Node * node, nodes(m_rootNode))
|
foreach (Node *node, nodes(rootProjectNode()))
|
||||||
nodeHash.insert(node->filePath().toString(), node);
|
nodeHash.insert(node->filePath().toString(), node);
|
||||||
|
|
||||||
// Add the sources to the filenode project tree. Sources
|
// Add the sources to the filenode project tree. Sources
|
||||||
@@ -291,7 +280,7 @@ void AutotoolsProject::buildFileNodeTree(const QDir &directory,
|
|||||||
parentFolder = insertFolderNode(QDir(subDir), nodeHash);
|
parentFolder = insertFolderNode(QDir(subDir), nodeHash);
|
||||||
if (parentFolder == 0) {
|
if (parentFolder == 0) {
|
||||||
// No node gets created for the root folder
|
// No node gets created for the root folder
|
||||||
parentFolder = m_rootNode;
|
parentFolder = rootProjectNode();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QTC_ASSERT(parentFolder, return);
|
QTC_ASSERT(parentFolder, return);
|
||||||
@@ -332,7 +321,7 @@ void AutotoolsProject::buildFileNodeTree(const QDir &directory,
|
|||||||
FolderNode *grandParent = parent->parentFolderNode();
|
FolderNode *grandParent = parent->parentFolderNode();
|
||||||
grandParent->removeFolderNodes(QList<FolderNode *>() << parent);
|
grandParent->removeFolderNodes(QList<FolderNode *>() << parent);
|
||||||
parent = grandParent;
|
parent = grandParent;
|
||||||
if (parent == m_rootNode)
|
if (parent == rootProjectNode())
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -343,7 +332,7 @@ void AutotoolsProject::buildFileNodeTree(const QDir &directory,
|
|||||||
FolderNode *AutotoolsProject::insertFolderNode(const QDir &nodeDir, QHash<QString, Node *> &nodes)
|
FolderNode *AutotoolsProject::insertFolderNode(const QDir &nodeDir, QHash<QString, Node *> &nodes)
|
||||||
{
|
{
|
||||||
const Utils::FileName nodePath = Utils::FileName::fromString(nodeDir.absolutePath());
|
const Utils::FileName nodePath = Utils::FileName::fromString(nodeDir.absolutePath());
|
||||||
QFileInfo rootInfo = m_rootNode->filePath().toFileInfo();
|
QFileInfo rootInfo = rootProjectNode()->filePath().toFileInfo();
|
||||||
const Utils::FileName rootPath = Utils::FileName::fromString(rootInfo.absolutePath());
|
const Utils::FileName rootPath = Utils::FileName::fromString(rootInfo.absolutePath());
|
||||||
|
|
||||||
// Do not create a folder for the root node
|
// Do not create a folder for the root node
|
||||||
@@ -356,7 +345,7 @@ FolderNode *AutotoolsProject::insertFolderNode(const QDir &nodeDir, QHash<QStrin
|
|||||||
|
|
||||||
// Get parent-folder. If it does not exist, create it recursively.
|
// Get parent-folder. If it does not exist, create it recursively.
|
||||||
// Take care that the m_rootNode is considered as top folder.
|
// Take care that the m_rootNode is considered as top folder.
|
||||||
FolderNode *parentFolder = m_rootNode;
|
FolderNode *parentFolder = rootProjectNode();
|
||||||
if ((rootPath != folder->filePath()) && dir.cdUp()) {
|
if ((rootPath != folder->filePath()) && dir.cdUp()) {
|
||||||
const QString parentDir = dir.absolutePath();
|
const QString parentDir = dir.absolutePath();
|
||||||
if (!nodes.contains(parentDir)) {
|
if (!nodes.contains(parentDir)) {
|
||||||
|
@@ -74,7 +74,6 @@ public:
|
|||||||
~AutotoolsProject() override;
|
~AutotoolsProject() override;
|
||||||
|
|
||||||
QString displayName() const override;
|
QString displayName() const override;
|
||||||
ProjectExplorer::ProjectNode *rootProjectNode() const override;
|
|
||||||
QStringList files(FilesMode fileMode) const override;
|
QStringList files(FilesMode fileMode) const override;
|
||||||
static QString defaultBuildDirectory(const QString &projectPath);
|
static QString defaultBuildDirectory(const QString &projectPath);
|
||||||
QStringList buildTargets() const;
|
QStringList buildTargets() const;
|
||||||
@@ -140,9 +139,6 @@ private:
|
|||||||
/// Return value for AutotoolsProject::files()
|
/// Return value for AutotoolsProject::files()
|
||||||
QStringList m_files;
|
QStringList m_files;
|
||||||
|
|
||||||
/// Return value for AutotoolsProject::rootProjectNode()
|
|
||||||
AutotoolsProjectNode *m_rootNode;
|
|
||||||
|
|
||||||
/// Watches project files for changes.
|
/// Watches project files for changes.
|
||||||
Utils::FileSystemWatcher *m_fileWatcher;
|
Utils::FileSystemWatcher *m_fileWatcher;
|
||||||
QStringList m_watchedFiles;
|
QStringList m_watchedFiles;
|
||||||
|
@@ -88,16 +88,16 @@ using namespace Utils;
|
|||||||
\class CMakeProject
|
\class CMakeProject
|
||||||
*/
|
*/
|
||||||
CMakeProject::CMakeProject(CMakeManager *manager, const FileName &fileName) :
|
CMakeProject::CMakeProject(CMakeManager *manager, const FileName &fileName) :
|
||||||
m_rootNode(new CMakeProjectNode(fileName)),
|
|
||||||
m_watcher(new QFileSystemWatcher(this))
|
m_watcher(new QFileSystemWatcher(this))
|
||||||
{
|
{
|
||||||
setId(Constants::CMAKEPROJECT_ID);
|
setId(Constants::CMAKEPROJECT_ID);
|
||||||
setProjectManager(manager);
|
setProjectManager(manager);
|
||||||
setDocument(new CMakeFile(fileName));
|
setDocument(new CMakeFile(fileName));
|
||||||
|
setRootProjectNode(new CMakeProjectNode(fileName));
|
||||||
setProjectContext(Core::Context(CMakeProjectManager::Constants::PROJECTCONTEXT));
|
setProjectContext(Core::Context(CMakeProjectManager::Constants::PROJECTCONTEXT));
|
||||||
setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
|
setProjectLanguages(Core::Context(ProjectExplorer::Constants::LANG_CXX));
|
||||||
|
|
||||||
m_rootNode->setDisplayName(fileName.parentDir().fileName());
|
rootProjectNode()->setDisplayName(fileName.parentDir().fileName());
|
||||||
|
|
||||||
connect(this, &CMakeProject::buildTargetsChanged, this, &CMakeProject::updateRunConfigurations);
|
connect(this, &CMakeProject::buildTargetsChanged, this, &CMakeProject::updateRunConfigurations);
|
||||||
connect(m_watcher, &QFileSystemWatcher::fileChanged, this, &CMakeProject::fileChanged);
|
connect(m_watcher, &QFileSystemWatcher::fileChanged, this, &CMakeProject::fileChanged);
|
||||||
@@ -106,7 +106,6 @@ CMakeProject::CMakeProject(CMakeManager *manager, const FileName &fileName) :
|
|||||||
CMakeProject::~CMakeProject()
|
CMakeProject::~CMakeProject()
|
||||||
{
|
{
|
||||||
m_codeModelFuture.cancel();
|
m_codeModelFuture.cancel();
|
||||||
delete m_rootNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMakeProject::fileChanged(const QString &fileName)
|
void CMakeProject::fileChanged(const QString &fileName)
|
||||||
@@ -265,7 +264,7 @@ bool CMakeProject::parseCMakeLists()
|
|||||||
Kit *k = activeTarget()->kit();
|
Kit *k = activeTarget()->kit();
|
||||||
|
|
||||||
// setFolderName
|
// setFolderName
|
||||||
m_rootNode->setDisplayName(QFileInfo(cbpFile).completeBaseName());
|
rootProjectNode()->setDisplayName(QFileInfo(cbpFile).completeBaseName());
|
||||||
CMakeCbpParser cbpparser;
|
CMakeCbpParser cbpparser;
|
||||||
// Parsing
|
// Parsing
|
||||||
//qDebug()<<"Parsing file "<<cbpFile;
|
//qDebug()<<"Parsing file "<<cbpFile;
|
||||||
@@ -282,7 +281,7 @@ bool CMakeProject::parseCMakeLists()
|
|||||||
// how can we ensure that it is completely written?
|
// how can we ensure that it is completely written?
|
||||||
m_watcher->addPath(cbpFile);
|
m_watcher->addPath(cbpFile);
|
||||||
|
|
||||||
m_rootNode->setDisplayName(cbpparser.projectName());
|
rootProjectNode()->setDisplayName(cbpparser.projectName());
|
||||||
|
|
||||||
//qDebug()<<"Building Tree";
|
//qDebug()<<"Building Tree";
|
||||||
QList<ProjectExplorer::FileNode *> fileList = cbpparser.fileList();
|
QList<ProjectExplorer::FileNode *> fileList = cbpparser.fileList();
|
||||||
@@ -306,7 +305,7 @@ bool CMakeProject::parseCMakeLists()
|
|||||||
m_files.append(fn->filePath().toString());
|
m_files.append(fn->filePath().toString());
|
||||||
m_files.sort();
|
m_files.sort();
|
||||||
|
|
||||||
buildTree(m_rootNode, fileList);
|
buildTree(static_cast<CMakeProjectNode *>(rootProjectNode()), fileList);
|
||||||
|
|
||||||
//qDebug()<<"Adding Targets";
|
//qDebug()<<"Adding Targets";
|
||||||
m_buildTargets = cbpparser.buildTargets();
|
m_buildTargets = cbpparser.buildTargets();
|
||||||
@@ -506,15 +505,9 @@ ProjectExplorer::FolderNode *CMakeProject::findOrCreateFolder(CMakeProjectNode *
|
|||||||
|
|
||||||
QString CMakeProject::displayName() const
|
QString CMakeProject::displayName() const
|
||||||
{
|
{
|
||||||
return m_rootNode->displayName();
|
return rootProjectNode()->displayName();
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectExplorer::ProjectNode *CMakeProject::rootProjectNode() const
|
|
||||||
{
|
|
||||||
return m_rootNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QStringList CMakeProject::files(FilesMode fileMode) const
|
QStringList CMakeProject::files(FilesMode fileMode) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(fileMode)
|
Q_UNUSED(fileMode)
|
||||||
|
@@ -100,8 +100,6 @@ public:
|
|||||||
|
|
||||||
QString displayName() const override;
|
QString displayName() const override;
|
||||||
|
|
||||||
ProjectExplorer::ProjectNode *rootProjectNode() const override;
|
|
||||||
|
|
||||||
QStringList files(FilesMode fileMode) const override;
|
QStringList files(FilesMode fileMode) const override;
|
||||||
QStringList buildTargetTitles(bool runnable = false) const;
|
QStringList buildTargetTitles(bool runnable = false) const;
|
||||||
QList<CMakeBuildTarget> buildTargets() const;
|
QList<CMakeBuildTarget> buildTargets() const;
|
||||||
@@ -149,7 +147,6 @@ private:
|
|||||||
ProjectExplorer::Target *m_activeTarget = 0;
|
ProjectExplorer::Target *m_activeTarget = 0;
|
||||||
|
|
||||||
// TODO probably need a CMake specific node structure
|
// TODO probably need a CMake specific node structure
|
||||||
Internal::CMakeProjectNode *m_rootNode;
|
|
||||||
QStringList m_files;
|
QStringList m_files;
|
||||||
QList<CMakeBuildTarget> m_buildTargets;
|
QList<CMakeBuildTarget> m_buildTargets;
|
||||||
QFileSystemWatcher *m_watcher;
|
QFileSystemWatcher *m_watcher;
|
||||||
|
@@ -50,7 +50,6 @@ public:
|
|||||||
~TestProject() override;
|
~TestProject() override;
|
||||||
|
|
||||||
QString displayName() const override { return m_name; }
|
QString displayName() const override { return m_name; }
|
||||||
ProjectExplorer::ProjectNode *rootProjectNode() const override { return 0; }
|
|
||||||
|
|
||||||
QStringList files(FilesMode fileMode) const override { Q_UNUSED(fileMode); return QStringList(); }
|
QStringList files(FilesMode fileMode) const override { Q_UNUSED(fileMode); return QStringList(); }
|
||||||
|
|
||||||
|
@@ -72,6 +72,7 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
|
|||||||
setId(Constants::GENERICPROJECT_ID);
|
setId(Constants::GENERICPROJECT_ID);
|
||||||
setProjectManager(manager);
|
setProjectManager(manager);
|
||||||
setDocument(new GenericProjectFile(this, fileName, GenericProject::Everything));
|
setDocument(new GenericProjectFile(this, fileName, GenericProject::Everything));
|
||||||
|
setRootProjectNode(new GenericProjectNode(this));
|
||||||
setProjectContext(Context(GenericProjectManager::Constants::PROJECTCONTEXT));
|
setProjectContext(Context(GenericProjectManager::Constants::PROJECTCONTEXT));
|
||||||
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
|
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
|
||||||
|
|
||||||
@@ -92,8 +93,6 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
|
|||||||
DocumentManager::addDocument(m_includesIDocument);
|
DocumentManager::addDocument(m_includesIDocument);
|
||||||
DocumentManager::addDocument(m_configIDocument);
|
DocumentManager::addDocument(m_configIDocument);
|
||||||
|
|
||||||
m_rootNode = new GenericProjectNode(this);
|
|
||||||
|
|
||||||
FileNode *projectFilesNode = new FileNode(Utils::FileName::fromString(m_filesFileName),
|
FileNode *projectFilesNode = new FileNode(Utils::FileName::fromString(m_filesFileName),
|
||||||
ProjectFileType,
|
ProjectFileType,
|
||||||
/* generated = */ false);
|
/* generated = */ false);
|
||||||
@@ -106,10 +105,8 @@ GenericProject::GenericProject(Manager *manager, const QString &fileName)
|
|||||||
ProjectFileType,
|
ProjectFileType,
|
||||||
/* generated = */ false);
|
/* generated = */ false);
|
||||||
|
|
||||||
m_rootNode->addFileNodes(QList<FileNode *>()
|
rootProjectNode()->addFileNodes(QList<FileNode *>() << projectFilesNode
|
||||||
<< projectFilesNode
|
<< projectIncludesNode << projectConfigNode);
|
||||||
<< projectIncludesNode
|
|
||||||
<< projectConfigNode);
|
|
||||||
|
|
||||||
projectManager()->registerProject(this);
|
projectManager()->registerProject(this);
|
||||||
}
|
}
|
||||||
@@ -118,8 +115,6 @@ GenericProject::~GenericProject()
|
|||||||
{
|
{
|
||||||
m_codeModelFuture.cancel();
|
m_codeModelFuture.cancel();
|
||||||
projectManager()->unregisterProject(this);
|
projectManager()->unregisterProject(this);
|
||||||
|
|
||||||
delete m_rootNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString GenericProject::filesFileName() const
|
QString GenericProject::filesFileName() const
|
||||||
@@ -281,7 +276,7 @@ void GenericProject::refresh(RefreshOptions options)
|
|||||||
parseProject(options);
|
parseProject(options);
|
||||||
|
|
||||||
if (options & Files)
|
if (options & Files)
|
||||||
m_rootNode->refresh(oldFileList);
|
static_cast<GenericProjectNode *>(rootProjectNode())->refresh(oldFileList);
|
||||||
|
|
||||||
refreshCppCodeModel();
|
refreshCppCodeModel();
|
||||||
}
|
}
|
||||||
@@ -392,11 +387,6 @@ Manager *GenericProject::projectManager() const
|
|||||||
return static_cast<Manager *>(Project::projectManager());
|
return static_cast<Manager *>(Project::projectManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
GenericProjectNode *GenericProject::rootProjectNode() const
|
|
||||||
{
|
|
||||||
return m_rootNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList GenericProject::files(FilesMode fileMode) const
|
QStringList GenericProject::files(FilesMode fileMode) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(fileMode);
|
Q_UNUSED(fileMode);
|
||||||
|
@@ -63,7 +63,6 @@ public:
|
|||||||
QString displayName() const override;
|
QString displayName() const override;
|
||||||
Manager *projectManager() const override;
|
Manager *projectManager() const override;
|
||||||
|
|
||||||
GenericProjectNode *rootProjectNode() const override;
|
|
||||||
QStringList files(FilesMode fileMode) const override;
|
QStringList files(FilesMode fileMode) const override;
|
||||||
|
|
||||||
QStringList buildTargets() const;
|
QStringList buildTargets() const;
|
||||||
@@ -109,7 +108,6 @@ private:
|
|||||||
QStringList m_rawProjectIncludePaths;
|
QStringList m_rawProjectIncludePaths;
|
||||||
QStringList m_projectIncludePaths;
|
QStringList m_projectIncludePaths;
|
||||||
|
|
||||||
GenericProjectNode *m_rootNode;
|
|
||||||
QFuture<void> m_codeModelFuture;
|
QFuture<void> m_codeModelFuture;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -207,7 +207,7 @@ QString IosRunConfiguration::applicationName() const
|
|||||||
QmakeProject *pro = qobject_cast<QmakeProject *>(target()->project());
|
QmakeProject *pro = qobject_cast<QmakeProject *>(target()->project());
|
||||||
const QmakeProFileNode *node = 0;
|
const QmakeProFileNode *node = 0;
|
||||||
if (pro)
|
if (pro)
|
||||||
node = pro->rootQmakeProjectNode();
|
node = pro->rootProjectNode();
|
||||||
if (node)
|
if (node)
|
||||||
node = node->findProFileFor(profilePath());
|
node = node->findProFileFor(profilePath());
|
||||||
if (node) {
|
if (node) {
|
||||||
@@ -233,7 +233,7 @@ FileName IosRunConfiguration::bundleDirectory() const
|
|||||||
QmakeProject *pro = qobject_cast<QmakeProject *>(target()->project());
|
QmakeProject *pro = qobject_cast<QmakeProject *>(target()->project());
|
||||||
const QmakeProFileNode *node = 0;
|
const QmakeProFileNode *node = 0;
|
||||||
if (pro)
|
if (pro)
|
||||||
node = pro->rootQmakeProjectNode();
|
node = pro->rootProjectNode();
|
||||||
if (node)
|
if (node)
|
||||||
node = node->findProFileFor(profilePath());
|
node = node->findProFileFor(profilePath());
|
||||||
if (node) {
|
if (node) {
|
||||||
|
@@ -36,6 +36,7 @@
|
|||||||
#include "editorconfiguration.h"
|
#include "editorconfiguration.h"
|
||||||
#include "kit.h"
|
#include "kit.h"
|
||||||
#include "projectexplorer.h"
|
#include "projectexplorer.h"
|
||||||
|
#include "projectnodes.h"
|
||||||
#include "target.h"
|
#include "target.h"
|
||||||
#include "session.h"
|
#include "session.h"
|
||||||
#include "settingsaccessor.h"
|
#include "settingsaccessor.h"
|
||||||
@@ -95,6 +96,7 @@ public:
|
|||||||
Core::Id m_id;
|
Core::Id m_id;
|
||||||
Core::IDocument *m_document = 0;
|
Core::IDocument *m_document = 0;
|
||||||
IProjectManager *m_manager = 0;
|
IProjectManager *m_manager = 0;
|
||||||
|
ProjectNode *m_rootProjectNode = 0;
|
||||||
QList<Target *> m_targets;
|
QList<Target *> m_targets;
|
||||||
Target *m_activeTarget = 0;
|
Target *m_activeTarget = 0;
|
||||||
EditorConfiguration m_editorConfiguration;
|
EditorConfiguration m_editorConfiguration;
|
||||||
@@ -111,8 +113,13 @@ public:
|
|||||||
|
|
||||||
ProjectPrivate::~ProjectPrivate()
|
ProjectPrivate::~ProjectPrivate()
|
||||||
{
|
{
|
||||||
delete m_accessor;
|
// Make sure our root node is 0 when deleting
|
||||||
|
ProjectNode *oldNode = m_rootProjectNode;
|
||||||
|
m_rootProjectNode = 0;
|
||||||
|
delete oldNode;
|
||||||
|
|
||||||
delete m_document;
|
delete m_document;
|
||||||
|
delete m_accessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
Project::Project() : d(new ProjectPrivate)
|
Project::Project() : d(new ProjectPrivate)
|
||||||
@@ -432,6 +439,13 @@ void Project::setProjectManager(IProjectManager *manager)
|
|||||||
d->m_manager = manager;
|
d->m_manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Project::setRootProjectNode(ProjectNode *root)
|
||||||
|
{
|
||||||
|
ProjectNode *oldNode = d->m_rootProjectNode;
|
||||||
|
d->m_rootProjectNode = root;
|
||||||
|
delete oldNode;
|
||||||
|
}
|
||||||
|
|
||||||
Target *Project::restoreTarget(const QVariantMap &data)
|
Target *Project::restoreTarget(const QVariantMap &data)
|
||||||
{
|
{
|
||||||
Core::Id id = idFromMap(data);
|
Core::Id id = idFromMap(data);
|
||||||
@@ -522,6 +536,11 @@ IProjectManager *Project::projectManager() const
|
|||||||
return d->m_manager;
|
return d->m_manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ProjectNode *Project::rootProjectNode() const
|
||||||
|
{
|
||||||
|
return d->m_rootProjectNode;
|
||||||
|
}
|
||||||
|
|
||||||
Project::RestoreResult Project::fromMap(const QVariantMap &map, QString *errorMessage)
|
Project::RestoreResult Project::fromMap(const QVariantMap &map, QString *errorMessage)
|
||||||
{
|
{
|
||||||
Q_UNUSED(errorMessage);
|
Q_UNUSED(errorMessage);
|
||||||
|
@@ -88,6 +88,8 @@ public:
|
|||||||
|
|
||||||
virtual IProjectManager *projectManager() const;
|
virtual IProjectManager *projectManager() const;
|
||||||
|
|
||||||
|
virtual ProjectNode *rootProjectNode() const;
|
||||||
|
|
||||||
bool hasActiveBuildSettings() const;
|
bool hasActiveBuildSettings() const;
|
||||||
|
|
||||||
// EditorConfiguration:
|
// EditorConfiguration:
|
||||||
@@ -112,8 +114,6 @@ public:
|
|||||||
enum class RestoreResult { Ok, Error, UserAbort };
|
enum class RestoreResult { Ok, Error, UserAbort };
|
||||||
RestoreResult restoreSettings(QString *errorMessage);
|
RestoreResult restoreSettings(QString *errorMessage);
|
||||||
|
|
||||||
virtual ProjectNode *rootProjectNode() const = 0;
|
|
||||||
|
|
||||||
enum FilesMode { AllFiles, ExcludeGeneratedFiles };
|
enum FilesMode { AllFiles, ExcludeGeneratedFiles };
|
||||||
virtual QStringList files(FilesMode fileMode) const = 0;
|
virtual QStringList files(FilesMode fileMode) const = 0;
|
||||||
// TODO: generalize to find source(s) of generated files?
|
// TODO: generalize to find source(s) of generated files?
|
||||||
@@ -175,6 +175,7 @@ protected:
|
|||||||
void setId(Core::Id id);
|
void setId(Core::Id id);
|
||||||
void setDocument(Core::IDocument *doc); // takes ownership!
|
void setDocument(Core::IDocument *doc); // takes ownership!
|
||||||
void setProjectManager(IProjectManager *manager);
|
void setProjectManager(IProjectManager *manager);
|
||||||
|
void setRootProjectNode(ProjectNode *root); // takes ownership!
|
||||||
void setProjectContext(Core::Context context);
|
void setProjectContext(Core::Context context);
|
||||||
void setProjectLanguages(Core::Context language);
|
void setProjectLanguages(Core::Context language);
|
||||||
void addProjectLanguage(Core::Id id);
|
void addProjectLanguage(Core::Id id);
|
||||||
|
@@ -251,7 +251,6 @@ public:
|
|||||||
QString displayName() const override { return m_projectName; }
|
QString displayName() const override { return m_projectName; }
|
||||||
PythonProjectManager *projectManager() const override;
|
PythonProjectManager *projectManager() const override;
|
||||||
|
|
||||||
ProjectNode *rootProjectNode() const override;
|
|
||||||
QStringList files(FilesMode) const override { return m_files; }
|
QStringList files(FilesMode) const override { return m_files; }
|
||||||
QStringList files() const { return m_files; }
|
QStringList files() const { return m_files; }
|
||||||
|
|
||||||
@@ -274,8 +273,6 @@ private:
|
|||||||
QStringList m_rawFileList;
|
QStringList m_rawFileList;
|
||||||
QStringList m_files;
|
QStringList m_files;
|
||||||
QHash<QString, QString> m_rawListEntries;
|
QHash<QString, QString> m_rawListEntries;
|
||||||
|
|
||||||
ProjectNode *m_rootNode;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class PythonProjectFile : public Core::IDocument
|
class PythonProjectFile : public Core::IDocument
|
||||||
@@ -620,6 +617,7 @@ PythonProject::PythonProject(PythonProjectManager *manager, const QString &fileN
|
|||||||
setProjectManager(manager);
|
setProjectManager(manager);
|
||||||
setDocument(new PythonProjectFile(this, fileName));
|
setDocument(new PythonProjectFile(this, fileName));
|
||||||
DocumentManager::addDocument(document());
|
DocumentManager::addDocument(document());
|
||||||
|
setRootProjectNode(new PythonProjectNode(this));
|
||||||
|
|
||||||
setProjectContext(Context(PythonProjectContext));
|
setProjectContext(Context(PythonProjectContext));
|
||||||
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
|
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
|
||||||
@@ -627,7 +625,6 @@ PythonProject::PythonProject(PythonProjectManager *manager, const QString &fileN
|
|||||||
QFileInfo fileInfo = projectFilePath().toFileInfo();
|
QFileInfo fileInfo = projectFilePath().toFileInfo();
|
||||||
|
|
||||||
m_projectName = fileInfo.completeBaseName();
|
m_projectName = fileInfo.completeBaseName();
|
||||||
m_rootNode = new PythonProjectNode(this);
|
|
||||||
|
|
||||||
projectManager()->registerProject(this);
|
projectManager()->registerProject(this);
|
||||||
}
|
}
|
||||||
@@ -635,8 +632,6 @@ PythonProject::PythonProject(PythonProjectManager *manager, const QString &fileN
|
|||||||
PythonProject::~PythonProject()
|
PythonProject::~PythonProject()
|
||||||
{
|
{
|
||||||
projectManager()->unregisterProject(this);
|
projectManager()->unregisterProject(this);
|
||||||
|
|
||||||
delete m_rootNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PythonProjectManager *PythonProject::projectManager() const
|
PythonProjectManager *PythonProject::projectManager() const
|
||||||
@@ -775,7 +770,7 @@ private:
|
|||||||
|
|
||||||
void PythonProject::refresh()
|
void PythonProject::refresh()
|
||||||
{
|
{
|
||||||
m_rootNode->removeFileNodes(m_rootNode->fileNodes());
|
rootProjectNode()->removeFileNodes(rootProjectNode()->fileNodes());
|
||||||
parseProject();
|
parseProject();
|
||||||
|
|
||||||
QDir baseDir(projectDirectory().toString());
|
QDir baseDir(projectDirectory().toString());
|
||||||
@@ -786,7 +781,7 @@ void PythonProject::refresh()
|
|||||||
fileNodes.append(new PythonFileNode(FileName::fromString(file), displayName));
|
fileNodes.append(new PythonFileNode(FileName::fromString(file), displayName));
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rootNode->addFileNodes(fileNodes);
|
rootProjectNode()->addFileNodes(fileNodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -844,11 +839,6 @@ QStringList PythonProject::processEntries(const QStringList &paths,
|
|||||||
return absolutePaths;
|
return absolutePaths;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectNode *PythonProject::rootProjectNode() const
|
|
||||||
{
|
|
||||||
return m_rootNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
Project::RestoreResult PythonProject::fromMap(const QVariantMap &map, QString *errorMessage)
|
Project::RestoreResult PythonProject::fromMap(const QVariantMap &map, QString *errorMessage)
|
||||||
{
|
{
|
||||||
Project::RestoreResult res = Project::fromMap(map, errorMessage);
|
Project::RestoreResult res = Project::fromMap(map, errorMessage);
|
||||||
|
@@ -101,7 +101,6 @@ static const char CONFIG_PRECOMPILEDHEADER[] = "precompiledHeader";
|
|||||||
|
|
||||||
QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
|
QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
|
||||||
m_projectName(QFileInfo(fileName).completeBaseName()),
|
m_projectName(QFileInfo(fileName).completeBaseName()),
|
||||||
m_rootProjectNode(0),
|
|
||||||
m_qbsProjectParser(0),
|
m_qbsProjectParser(0),
|
||||||
m_qbsUpdateFutureInterface(0),
|
m_qbsUpdateFutureInterface(0),
|
||||||
m_parsingScheduled(false),
|
m_parsingScheduled(false),
|
||||||
@@ -112,9 +111,9 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
|
|||||||
|
|
||||||
setId(Constants::PROJECT_ID);
|
setId(Constants::PROJECT_ID);
|
||||||
setProjectManager(manager);
|
setProjectManager(manager);
|
||||||
|
|
||||||
setDocument(new QbsProjectFile(this, fileName));
|
setDocument(new QbsProjectFile(this, fileName));
|
||||||
DocumentManager::addDocument(document());
|
DocumentManager::addDocument(document());
|
||||||
|
setRootProjectNode(new QbsRootProjectNode(this));
|
||||||
|
|
||||||
setProjectContext(Context(Constants::PROJECT_ID));
|
setProjectContext(Context(Constants::PROJECT_ID));
|
||||||
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
|
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_CXX));
|
||||||
@@ -126,9 +125,6 @@ QbsProject::QbsProject(QbsManager *manager, const QString &fileName) :
|
|||||||
connect(this, SIGNAL(environmentChanged()), this, SLOT(delayParsing()));
|
connect(this, SIGNAL(environmentChanged()), this, SLOT(delayParsing()));
|
||||||
|
|
||||||
connect(&m_parsingDelay, SIGNAL(timeout()), this, SLOT(startParsing()));
|
connect(&m_parsingDelay, SIGNAL(timeout()), this, SLOT(startParsing()));
|
||||||
|
|
||||||
// NOTE: QbsProjectNode does not use this as a parent!
|
|
||||||
m_rootProjectNode = new QbsRootProjectNode(this); // needs documents to be initialized!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QbsProject::~QbsProject()
|
QbsProject::~QbsProject()
|
||||||
@@ -141,12 +137,6 @@ QbsProject::~QbsProject()
|
|||||||
delete m_qbsUpdateFutureInterface;
|
delete m_qbsUpdateFutureInterface;
|
||||||
m_qbsUpdateFutureInterface = 0;
|
m_qbsUpdateFutureInterface = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Deleting the root node triggers a few things, make sure rootProjectNode
|
|
||||||
// returns 0 already
|
|
||||||
QbsProjectNode *root = m_rootProjectNode;
|
|
||||||
m_rootProjectNode = 0;
|
|
||||||
delete root;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QbsProject::displayName() const
|
QString QbsProject::displayName() const
|
||||||
@@ -159,9 +149,9 @@ QbsManager *QbsProject::projectManager() const
|
|||||||
return static_cast<QbsManager *>(Project::projectManager());
|
return static_cast<QbsManager *>(Project::projectManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectNode *QbsProject::rootProjectNode() const
|
QbsRootProjectNode *QbsProject::rootProjectNode() const
|
||||||
{
|
{
|
||||||
return m_rootProjectNode;
|
return static_cast<QbsRootProjectNode *>(Project::rootProjectNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void collectFilesForProject(const qbs::ProjectData &project, QSet<QString> &result)
|
static void collectFilesForProject(const qbs::ProjectData &project, QSet<QString> &result)
|
||||||
@@ -286,7 +276,7 @@ bool QbsProject::addFilesToProduct(QbsBaseProjectNode *node, const QStringList &
|
|||||||
m_projectData = m_qbsProject.projectData();
|
m_projectData = m_qbsProject.projectData();
|
||||||
QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData),
|
QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData),
|
||||||
allPaths, QFileInfo(productFilePath).absolutePath(), true);
|
allPaths, QFileInfo(productFilePath).absolutePath(), true);
|
||||||
m_rootProjectNode->update();
|
rootProjectNode()->update();
|
||||||
emit fileListChanged();
|
emit fileListChanged();
|
||||||
}
|
}
|
||||||
return notAdded->isEmpty();
|
return notAdded->isEmpty();
|
||||||
@@ -315,7 +305,7 @@ bool QbsProject::removeFilesFromProduct(QbsBaseProjectNode *node, const QStringL
|
|||||||
m_projectData = m_qbsProject.projectData();
|
m_projectData = m_qbsProject.projectData();
|
||||||
QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData), allPaths,
|
QbsGroupNode::setupFiles(node, reRetrieveGroupData(productData, groupData), allPaths,
|
||||||
QFileInfo(productFilePath).absolutePath(), true);
|
QFileInfo(productFilePath).absolutePath(), true);
|
||||||
m_rootProjectNode->update();
|
rootProjectNode()->update();
|
||||||
emit fileListChanged();
|
emit fileListChanged();
|
||||||
}
|
}
|
||||||
return notRemoved->isEmpty();
|
return notRemoved->isEmpty();
|
||||||
@@ -454,7 +444,7 @@ void QbsProject::handleQbsParsingDone(bool success)
|
|||||||
|
|
||||||
if (projectData != m_projectData) {
|
if (projectData != m_projectData) {
|
||||||
m_projectData = projectData;
|
m_projectData = projectData;
|
||||||
m_rootProjectNode->update();
|
rootProjectNode()->update();
|
||||||
|
|
||||||
updateDocuments(m_qbsProject.isValid()
|
updateDocuments(m_qbsProject.isValid()
|
||||||
? m_qbsProject.buildSystemFiles() : QSet<QString>() << projectFilePath().toString());
|
? m_qbsProject.buildSystemFiles() : QSet<QString>() << projectFilePath().toString());
|
||||||
@@ -767,7 +757,7 @@ void QbsProject::updateCppCodeModel()
|
|||||||
|
|
||||||
foreach (const QString &file, grp.allFilePaths()) {
|
foreach (const QString &file, grp.allFilePaths()) {
|
||||||
if (file.endsWith(QLatin1String(".ui"))) {
|
if (file.endsWith(QLatin1String(".ui"))) {
|
||||||
QStringList generated = m_rootProjectNode->qbsProject()
|
QStringList generated = rootProjectNode()->qbsProject()
|
||||||
.generatedFiles(prd, file, QStringList(QLatin1String("hpp")));
|
.generatedFiles(prd, file, QStringList(QLatin1String("hpp")));
|
||||||
if (generated.count() == 1)
|
if (generated.count() == 1)
|
||||||
uiFiles.insert(file, generated.at(0));
|
uiFiles.insert(file, generated.at(0));
|
||||||
|
@@ -33,6 +33,8 @@
|
|||||||
|
|
||||||
#include "qbsprojectmanager.h"
|
#include "qbsprojectmanager.h"
|
||||||
|
|
||||||
|
#include "qbsnodes.h"
|
||||||
|
|
||||||
#include <cpptools/cppprojects.h>
|
#include <cpptools/cppprojects.h>
|
||||||
|
|
||||||
#include <projectexplorer/project.h>
|
#include <projectexplorer/project.h>
|
||||||
@@ -53,7 +55,6 @@ namespace QbsProjectManager {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
class QbsBaseProjectNode;
|
class QbsBaseProjectNode;
|
||||||
class QbsProjectNode;
|
class QbsProjectNode;
|
||||||
class QbsRootProjectNode;
|
|
||||||
class QbsProjectParser;
|
class QbsProjectParser;
|
||||||
class QbsBuildConfiguration;
|
class QbsBuildConfiguration;
|
||||||
|
|
||||||
@@ -67,8 +68,7 @@ public:
|
|||||||
|
|
||||||
QString displayName() const override;
|
QString displayName() const override;
|
||||||
QbsManager *projectManager() const override;
|
QbsManager *projectManager() const override;
|
||||||
|
QbsRootProjectNode *rootProjectNode() const override;
|
||||||
ProjectExplorer::ProjectNode *rootProjectNode() const override;
|
|
||||||
|
|
||||||
QStringList files(FilesMode fileMode) const override;
|
QStringList files(FilesMode fileMode) const override;
|
||||||
|
|
||||||
@@ -149,7 +149,6 @@ private:
|
|||||||
qbs::Project m_qbsProject;
|
qbs::Project m_qbsProject;
|
||||||
qbs::ProjectData m_projectData;
|
qbs::ProjectData m_projectData;
|
||||||
QSet<Core::IDocument *> m_qbsDocuments;
|
QSet<Core::IDocument *> m_qbsDocuments;
|
||||||
QbsRootProjectNode *m_rootProjectNode;
|
|
||||||
|
|
||||||
QbsProjectParser *m_qbsProjectParser;
|
QbsProjectParser *m_qbsProjectParser;
|
||||||
|
|
||||||
|
@@ -123,7 +123,7 @@ QmakeProjectManager::QmakeProFileNode *AndroidExtraLibraryListModel::activeNode(
|
|||||||
if (!qarc)
|
if (!qarc)
|
||||||
return 0;
|
return 0;
|
||||||
auto project = static_cast<QmakeProject *>(m_target->project());
|
auto project = static_cast<QmakeProject *>(m_target->project());
|
||||||
return project->rootQmakeProjectNode()->findProFileFor(qarc->proFilePath());
|
return project->rootProjectNode()->findProFileFor(qarc->proFilePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidExtraLibraryListModel::proFileUpdated(QmakeProjectManager::QmakeProFileNode *node)
|
void AndroidExtraLibraryListModel::proFileUpdated(QmakeProjectManager::QmakeProFileNode *node)
|
||||||
|
@@ -211,7 +211,7 @@ CreateAndroidManifestWizard::CreateAndroidManifestWizard(ProjectExplorer::Target
|
|||||||
const QmakeProFileNode *currentRunNode = 0;
|
const QmakeProFileNode *currentRunNode = 0;
|
||||||
ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration();
|
ProjectExplorer::RunConfiguration *rc = target->activeRunConfiguration();
|
||||||
if (auto qrc = qobject_cast<QmakeAndroidRunConfiguration *>(rc))
|
if (auto qrc = qobject_cast<QmakeAndroidRunConfiguration *>(rc))
|
||||||
currentRunNode = project->rootQmakeProjectNode()->findProFileFor(qrc->proFilePath());
|
currentRunNode = project->rootProjectNode()->findProFileFor(qrc->proFilePath());
|
||||||
|
|
||||||
if (nodes.isEmpty()) {
|
if (nodes.isEmpty()) {
|
||||||
// oh uhm can't create anything
|
// oh uhm can't create anything
|
||||||
|
@@ -158,7 +158,7 @@ Utils::FileName QmakeAndroidBuildApkStep::androidPackageSourceDir() const
|
|||||||
{
|
{
|
||||||
QmakeProjectManager::QmakeProject *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
|
QmakeProjectManager::QmakeProject *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
|
||||||
const QmakeProjectManager::QmakeProFileNode *node
|
const QmakeProjectManager::QmakeProFileNode *node
|
||||||
= pro->rootQmakeProjectNode()->findProFileFor(proFilePathForInputFile());
|
= pro->rootProjectNode()->findProFileFor(proFilePathForInputFile());
|
||||||
if (!node)
|
if (!node)
|
||||||
return Utils::FileName();
|
return Utils::FileName();
|
||||||
return Utils::FileName::fromString(node->singleVariableValue(QmakeProjectManager::AndroidPackageSourceDir));
|
return Utils::FileName::fromString(node->singleVariableValue(QmakeProjectManager::AndroidPackageSourceDir));
|
||||||
@@ -199,7 +199,7 @@ bool QmakeAndroidBuildApkStep::init(QList<const BuildStep *> &earlierSteps)
|
|||||||
QString outputDir = bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString();
|
QString outputDir = bc->buildDirectory().appendPath(QLatin1String(Constants::ANDROID_BUILDDIRECTORY)).toString();
|
||||||
|
|
||||||
const auto *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
|
const auto *pro = static_cast<QmakeProjectManager::QmakeProject *>(project());
|
||||||
const QmakeProjectManager::QmakeProFileNode *node = pro->rootQmakeProjectNode()->findProFileFor(proFilePathForInputFile());
|
const QmakeProjectManager::QmakeProFileNode *node = pro->rootProjectNode()->findProFileFor(proFilePathForInputFile());
|
||||||
m_skipBuilding = !node;
|
m_skipBuilding = !node;
|
||||||
if (m_skipBuilding)
|
if (m_skipBuilding)
|
||||||
return true;
|
return true;
|
||||||
|
@@ -112,7 +112,7 @@ QVariantMap QmakeAndroidRunConfiguration::toMap() const
|
|||||||
QString QmakeAndroidRunConfiguration::defaultDisplayName()
|
QString QmakeAndroidRunConfiguration::defaultDisplayName()
|
||||||
{
|
{
|
||||||
auto project = static_cast<QmakeProject *>(target()->project());
|
auto project = static_cast<QmakeProject *>(target()->project());
|
||||||
const QmakeProjectManager::QmakeProFileNode *root = project->rootQmakeProjectNode();
|
const QmakeProjectManager::QmakeProFileNode *root = project->rootProjectNode();
|
||||||
if (root) {
|
if (root) {
|
||||||
const QmakeProjectManager::QmakeProFileNode *node = root->findProFileFor(m_proFilePath);
|
const QmakeProjectManager::QmakeProFileNode *node = root->findProFileFor(m_proFilePath);
|
||||||
if (node) // should always be found
|
if (node) // should always be found
|
||||||
|
@@ -114,7 +114,7 @@ Utils::FileName QmakeAndroidSupport::androiddeployJsonPath(ProjectExplorer::Targ
|
|||||||
return Utils::FileName();
|
return Utils::FileName();
|
||||||
|
|
||||||
const QmakeProFileNode *node =
|
const QmakeProFileNode *node =
|
||||||
pro->rootQmakeProjectNode()->findProFileFor(buildApkStep->proFilePathForInputFile());
|
pro->rootProjectNode()->findProFileFor(buildApkStep->proFilePathForInputFile());
|
||||||
if (!node) // should never happen
|
if (!node) // should never happen
|
||||||
return Utils::FileName();
|
return Utils::FileName();
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ Utils::FileName QmakeAndroidSupport::manifestSourcePath(const ProjectExplorer::T
|
|||||||
if (auto qrc = qobject_cast<QmakeAndroidRunConfiguration *>(rc)) {
|
if (auto qrc = qobject_cast<QmakeAndroidRunConfiguration *>(rc)) {
|
||||||
Utils::FileName proFilePath = qrc->proFilePath();
|
Utils::FileName proFilePath = qrc->proFilePath();
|
||||||
const auto project = static_cast<QmakeProjectManager::QmakeProject *>(target->project());
|
const auto project = static_cast<QmakeProjectManager::QmakeProject *>(target->project());
|
||||||
const QmakeProFileNode *node = project->rootQmakeProjectNode()->findProFileFor(proFilePath);
|
const QmakeProFileNode *node = project->rootProjectNode()->findProFileFor(proFilePath);
|
||||||
if (node) {
|
if (node) {
|
||||||
QString packageSource = node->singleVariableValue(AndroidPackageSourceDir);
|
QString packageSource = node->singleVariableValue(AndroidPackageSourceDir);
|
||||||
if (!packageSource.isEmpty()) {
|
if (!packageSource.isEmpty()) {
|
||||||
|
@@ -352,7 +352,7 @@ bool DesktopQmakeRunConfiguration::fromMap(const QVariantMap &map)
|
|||||||
QString DesktopQmakeRunConfiguration::executable() const
|
QString DesktopQmakeRunConfiguration::executable() const
|
||||||
{
|
{
|
||||||
QmakeProject *pro = static_cast<QmakeProject *>(target()->project());
|
QmakeProject *pro = static_cast<QmakeProject *>(target()->project());
|
||||||
const QmakeProFileNode *node = pro->rootQmakeProjectNode()->findProFileFor(m_proFilePath);
|
const QmakeProFileNode *node = pro->rootProjectNode()->findProFileFor(m_proFilePath);
|
||||||
return extractWorkingDirAndExecutable(node).second;
|
return extractWorkingDirAndExecutable(node).second;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -399,7 +399,7 @@ QString DesktopQmakeRunConfiguration::workingDirectory() const
|
|||||||
QString DesktopQmakeRunConfiguration::baseWorkingDirectory() const
|
QString DesktopQmakeRunConfiguration::baseWorkingDirectory() const
|
||||||
{
|
{
|
||||||
QmakeProject *pro = static_cast<QmakeProject *>(target()->project());
|
QmakeProject *pro = static_cast<QmakeProject *>(target()->project());
|
||||||
const QmakeProFileNode *node = pro->rootQmakeProjectNode()->findProFileFor(m_proFilePath);
|
const QmakeProFileNode *node = pro->rootProjectNode()->findProFileFor(m_proFilePath);
|
||||||
return extractWorkingDirAndExecutable(node).first;
|
return extractWorkingDirAndExecutable(node).first;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -416,7 +416,7 @@ void DesktopQmakeRunConfiguration::addToBaseEnvironment(Environment &env) const
|
|||||||
// The user could be linking to a library found via a -L/some/dir switch
|
// The user could be linking to a library found via a -L/some/dir switch
|
||||||
// to find those libraries while actually running we explicitly prepend those
|
// to find those libraries while actually running we explicitly prepend those
|
||||||
// dirs to the library search path
|
// dirs to the library search path
|
||||||
const QmakeProFileNode *node = static_cast<QmakeProject *>(target()->project())->rootQmakeProjectNode()->findProFileFor(m_proFilePath);
|
const QmakeProFileNode *node = static_cast<QmakeProject *>(target()->project())->rootProjectNode()->findProFileFor(m_proFilePath);
|
||||||
if (m_isUsingLibrarySearchPath && node) {
|
if (m_isUsingLibrarySearchPath && node) {
|
||||||
const QStringList libDirectories = node->variableValue(LibDirectoriesVar);
|
const QStringList libDirectories = node->variableValue(LibDirectoriesVar);
|
||||||
if (!libDirectories.isEmpty()) {
|
if (!libDirectories.isEmpty()) {
|
||||||
@@ -444,7 +444,7 @@ Utils::FileName DesktopQmakeRunConfiguration::proFilePath() const
|
|||||||
QString DesktopQmakeRunConfiguration::defaultDisplayName()
|
QString DesktopQmakeRunConfiguration::defaultDisplayName()
|
||||||
{
|
{
|
||||||
auto project = static_cast<QmakeProject *>(target()->project());
|
auto project = static_cast<QmakeProject *>(target()->project());
|
||||||
const QmakeProFileNode *root = project->rootQmakeProjectNode();
|
const QmakeProFileNode *root = project->rootProjectNode();
|
||||||
if (root) {
|
if (root) {
|
||||||
const QmakeProFileNode *node = root->findProFileFor(m_proFilePath);
|
const QmakeProFileNode *node = root->findProFileFor(m_proFilePath);
|
||||||
if (node) // should always be found
|
if (node) // should always be found
|
||||||
|
@@ -264,7 +264,7 @@ bool MakeStep::init(QList<const BuildStep *> &earlierSteps)
|
|||||||
appendOutputParser(new QMakeParser); // make may cause qmake to be run, add last to make sure
|
appendOutputParser(new QMakeParser); // make may cause qmake to be run, add last to make sure
|
||||||
// it has a low priority.
|
// it has a low priority.
|
||||||
|
|
||||||
m_scriptTarget = (static_cast<QmakeProject *>(bc->target()->project())->rootQmakeProjectNode()->projectType() == ScriptTemplate);
|
m_scriptTarget = (static_cast<QmakeProject *>(bc->target()->project())->rootProjectNode()->projectType() == ScriptTemplate);
|
||||||
|
|
||||||
return AbstractProcessStep::init(earlierSteps);
|
return AbstractProcessStep::init(earlierSteps);
|
||||||
}
|
}
|
||||||
|
@@ -238,7 +238,7 @@ void QmakeBuildConfiguration::setBuildDirectory(const FileName &directory)
|
|||||||
|
|
||||||
QString QmakeBuildConfiguration::makefile() const
|
QString QmakeBuildConfiguration::makefile() const
|
||||||
{
|
{
|
||||||
return static_cast<QmakeProject *>(target()->project())->rootQmakeProjectNode()->makefile();
|
return static_cast<QmakeProject *>(target()->project())->rootProjectNode()->makefile();
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseQtVersion::QmakeBuildConfigs QmakeBuildConfiguration::qmakeBuildConfiguration() const
|
BaseQtVersion::QmakeBuildConfigs QmakeBuildConfiguration::qmakeBuildConfiguration() const
|
||||||
|
@@ -2538,7 +2538,7 @@ QString QmakeProFileNode::sourceDir() const
|
|||||||
|
|
||||||
QString QmakeProFileNode::buildDir(QmakeBuildConfiguration *bc) const
|
QString QmakeProFileNode::buildDir(QmakeBuildConfiguration *bc) const
|
||||||
{
|
{
|
||||||
const QDir srcDirRoot = m_project->rootQmakeProjectNode()->sourceDir();
|
const QDir srcDirRoot = m_project->rootProjectNode()->sourceDir();
|
||||||
const QString relativeDir = srcDirRoot.relativeFilePath(m_projectDir);
|
const QString relativeDir = srcDirRoot.relativeFilePath(m_projectDir);
|
||||||
if (!bc && m_project->activeTarget())
|
if (!bc && m_project->activeTarget())
|
||||||
bc = static_cast<QmakeBuildConfiguration *>(m_project->activeTarget()->activeBuildConfiguration());
|
bc = static_cast<QmakeBuildConfiguration *>(m_project->activeTarget()->activeBuildConfiguration());
|
||||||
|
@@ -337,11 +337,6 @@ QmakeProject::~QmakeProject()
|
|||||||
projectManager()->unregisterProject(this);
|
projectManager()->unregisterProject(this);
|
||||||
delete m_projectFiles;
|
delete m_projectFiles;
|
||||||
m_cancelEvaluate = true;
|
m_cancelEvaluate = true;
|
||||||
// Deleting the root node triggers a few things, make sure rootProjectNode
|
|
||||||
// returns 0 already
|
|
||||||
QmakeProFileNode *root = m_rootProjectNode;
|
|
||||||
m_rootProjectNode = 0;
|
|
||||||
delete root;
|
|
||||||
Q_ASSERT(m_qmakeGlobalsRefCnt == 0);
|
Q_ASSERT(m_qmakeGlobalsRefCnt == 0);
|
||||||
delete m_qmakeVfs;
|
delete m_qmakeVfs;
|
||||||
}
|
}
|
||||||
@@ -349,7 +344,7 @@ QmakeProject::~QmakeProject()
|
|||||||
void QmakeProject::updateFileList()
|
void QmakeProject::updateFileList()
|
||||||
{
|
{
|
||||||
QmakeProjectFiles newFiles;
|
QmakeProjectFiles newFiles;
|
||||||
ProjectFilesVisitor::findProjectFiles(m_rootProjectNode, &newFiles);
|
ProjectFilesVisitor::findProjectFiles(rootProjectNode(), &newFiles);
|
||||||
if (newFiles != *m_projectFiles) {
|
if (newFiles != *m_projectFiles) {
|
||||||
*m_projectFiles = newFiles;
|
*m_projectFiles = newFiles;
|
||||||
emit fileListChanged();
|
emit fileListChanged();
|
||||||
@@ -376,7 +371,7 @@ Project::RestoreResult QmakeProject::fromMap(const QVariantMap &map, QString *er
|
|||||||
|
|
||||||
projectManager()->registerProject(this);
|
projectManager()->registerProject(this);
|
||||||
|
|
||||||
m_rootProjectNode = new QmakeProFileNode(this, projectFilePath());
|
setRootProjectNode(new QmakeProFileNode(this, projectFilePath()));
|
||||||
|
|
||||||
// On active buildconfiguration changes, reevaluate the .pro files
|
// On active buildconfiguration changes, reevaluate the .pro files
|
||||||
m_activeTarget = activeTarget();
|
m_activeTarget = activeTarget();
|
||||||
@@ -702,7 +697,7 @@ void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode::AsyncUpdateDelay delay)
|
|||||||
m_cancelEvaluate = true;
|
m_cancelEvaluate = true;
|
||||||
m_asyncUpdateState = AsyncFullUpdatePending;
|
m_asyncUpdateState = AsyncFullUpdatePending;
|
||||||
enableActiveQmakeBuildConfiguration(activeTarget(), false);
|
enableActiveQmakeBuildConfiguration(activeTarget(), false);
|
||||||
m_rootProjectNode->setParseInProgressRecursive(true);
|
rootProjectNode()->setParseInProgressRecursive(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -710,7 +705,7 @@ void QmakeProject::scheduleAsyncUpdate(QmakeProFileNode::AsyncUpdateDelay delay)
|
|||||||
qDebug()<<" starting timer for full update, setting state to full update pending";
|
qDebug()<<" starting timer for full update, setting state to full update pending";
|
||||||
m_partialEvaluate.clear();
|
m_partialEvaluate.clear();
|
||||||
enableActiveQmakeBuildConfiguration(activeTarget(), false);
|
enableActiveQmakeBuildConfiguration(activeTarget(), false);
|
||||||
m_rootProjectNode->setParseInProgressRecursive(true);
|
rootProjectNode()->setParseInProgressRecursive(true);
|
||||||
m_asyncUpdateState = AsyncFullUpdatePending;
|
m_asyncUpdateState = AsyncFullUpdatePending;
|
||||||
|
|
||||||
// Cancel running code model update
|
// Cancel running code model update
|
||||||
@@ -805,7 +800,7 @@ void QmakeProject::asyncUpdate()
|
|||||||
if (m_asyncUpdateState == AsyncFullUpdatePending) {
|
if (m_asyncUpdateState == AsyncFullUpdatePending) {
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug()<<" full update, starting with root node";
|
qDebug()<<" full update, starting with root node";
|
||||||
m_rootProjectNode->asyncUpdate();
|
rootProjectNode()->asyncUpdate();
|
||||||
} else {
|
} else {
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug()<<" partial update,"<<m_partialEvaluate.size()<<"nodes to update";
|
qDebug()<<" partial update,"<<m_partialEvaluate.size()<<"nodes to update";
|
||||||
@@ -883,8 +878,8 @@ QString QmakeProject::generatedUiHeader(const FileName &formFile) const
|
|||||||
{
|
{
|
||||||
// Look in sub-profiles as SessionManager::projectForFile returns
|
// Look in sub-profiles as SessionManager::projectForFile returns
|
||||||
// the top-level project only.
|
// the top-level project only.
|
||||||
if (m_rootProjectNode)
|
if (rootProjectNode())
|
||||||
if (const QmakeProFileNode *pro = proFileNodeOf(m_rootProjectNode, FormType, formFile))
|
if (const QmakeProFileNode *pro = proFileNodeOf(rootProjectNode(), FormType, formFile))
|
||||||
return QmakeProFileNode::uiHeaderFile(
|
return QmakeProFileNode::uiHeaderFile(
|
||||||
pro->uiDirectory(Utils::FileName::fromString(pro->buildDir())),
|
pro->uiDirectory(Utils::FileName::fromString(pro->buildDir())),
|
||||||
formFile, pro->singleVariableValue(QmakeVariable::UiHeaderExtensionVar));
|
formFile, pro->singleVariableValue(QmakeVariable::UiHeaderExtensionVar));
|
||||||
@@ -927,14 +922,14 @@ QtSupport::ProFileReader *QmakeProject::createProFileReader(const QmakeProFileNo
|
|||||||
m_qmakeGlobals->qmake_abslocation = QDir::cleanPath(qtVersion->qmakeCommand().toString());
|
m_qmakeGlobals->qmake_abslocation = QDir::cleanPath(qtVersion->qmakeCommand().toString());
|
||||||
m_qmakeGlobals->setProperties(qtVersion->versionInfo());
|
m_qmakeGlobals->setProperties(qtVersion->versionInfo());
|
||||||
}
|
}
|
||||||
m_qmakeGlobals->setDirectories(m_rootProjectNode->sourceDir(), m_rootProjectNode->buildDir());
|
m_qmakeGlobals->setDirectories(rootProjectNode()->sourceDir(), rootProjectNode()->buildDir());
|
||||||
m_qmakeGlobals->sysroot = systemRoot;
|
m_qmakeGlobals->sysroot = systemRoot;
|
||||||
|
|
||||||
Environment::const_iterator eit = env.constBegin(), eend = env.constEnd();
|
Environment::const_iterator eit = env.constBegin(), eend = env.constEnd();
|
||||||
for (; eit != eend; ++eit)
|
for (; eit != eend; ++eit)
|
||||||
m_qmakeGlobals->environment.insert(env.key(eit), env.value(eit));
|
m_qmakeGlobals->environment.insert(env.key(eit), env.value(eit));
|
||||||
|
|
||||||
m_qmakeGlobals->setCommandLineArguments(m_rootProjectNode->buildDir(), qmakeArgs);
|
m_qmakeGlobals->setCommandLineArguments(rootProjectNode()->buildDir(), qmakeArgs);
|
||||||
|
|
||||||
QtSupport::ProFileCacheManager::instance()->incRefCount();
|
QtSupport::ProFileCacheManager::instance()->incRefCount();
|
||||||
|
|
||||||
@@ -986,29 +981,24 @@ void QmakeProject::destroyProFileReader(QtSupport::ProFileReader *reader)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectNode *QmakeProject::rootProjectNode() const
|
QmakeProFileNode *QmakeProject::rootProjectNode() const
|
||||||
{
|
{
|
||||||
return m_rootProjectNode;
|
return static_cast<QmakeProFileNode *>(Project::rootProjectNode());
|
||||||
}
|
|
||||||
|
|
||||||
QmakeProFileNode *QmakeProject::rootQmakeProjectNode() const
|
|
||||||
{
|
|
||||||
return m_rootProjectNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QmakeProject::validParse(const FileName &proFilePath) const
|
bool QmakeProject::validParse(const FileName &proFilePath) const
|
||||||
{
|
{
|
||||||
if (!m_rootProjectNode)
|
if (!rootProjectNode())
|
||||||
return false;
|
return false;
|
||||||
const QmakeProFileNode *node = m_rootProjectNode->findProFileFor(proFilePath);
|
const QmakeProFileNode *node = rootProjectNode()->findProFileFor(proFilePath);
|
||||||
return node && node->validParse();
|
return node && node->validParse();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QmakeProject::parseInProgress(const FileName &proFilePath) const
|
bool QmakeProject::parseInProgress(const FileName &proFilePath) const
|
||||||
{
|
{
|
||||||
if (!m_rootProjectNode)
|
if (!rootProjectNode())
|
||||||
return false;
|
return false;
|
||||||
const QmakeProFileNode *node = m_rootProjectNode->findProFileFor(proFilePath);
|
const QmakeProFileNode *node = rootProjectNode()->findProFileFor(proFilePath);
|
||||||
return node && node->parseInProgress();
|
return node && node->parseInProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1035,7 +1025,7 @@ QList<QmakeProFileNode *> QmakeProject::allProFiles(const QList<QmakeProjectType
|
|||||||
QList<QmakeProFileNode *> list;
|
QList<QmakeProFileNode *> list;
|
||||||
if (!rootProjectNode())
|
if (!rootProjectNode())
|
||||||
return list;
|
return list;
|
||||||
collectAllProFiles(list, rootQmakeProjectNode(), parse, projectTypes);
|
collectAllProFiles(list, rootProjectNode(), parse, projectTypes);
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1116,7 +1106,7 @@ void QmakeProject::notifyChanged(const FileName &name)
|
|||||||
{
|
{
|
||||||
if (files(QmakeProject::ExcludeGeneratedFiles).contains(name.toString())) {
|
if (files(QmakeProject::ExcludeGeneratedFiles).contains(name.toString())) {
|
||||||
QList<QmakeProFileNode *> list;
|
QList<QmakeProFileNode *> list;
|
||||||
findProFile(name, rootQmakeProjectNode(), list);
|
findProFile(name, rootProjectNode(), list);
|
||||||
foreach (QmakeProFileNode *node, list) {
|
foreach (QmakeProFileNode *node, list) {
|
||||||
QtSupport::ProFileCacheManager::instance()->discardFile(name.toString());
|
QtSupport::ProFileCacheManager::instance()->discardFile(name.toString());
|
||||||
node->scheduleUpdate(QmakeProFileNode::ParseNow);
|
node->scheduleUpdate(QmakeProFileNode::ParseNow);
|
||||||
@@ -1357,10 +1347,10 @@ QString QmakeProject::disabledReasonForRunConfiguration(const FileName &proFileP
|
|||||||
return tr("The .pro file \"%1\" does not exist.")
|
return tr("The .pro file \"%1\" does not exist.")
|
||||||
.arg(proFilePath.fileName());
|
.arg(proFilePath.fileName());
|
||||||
|
|
||||||
if (!m_rootProjectNode) // Shutting down
|
if (!rootProjectNode()) // Shutting down
|
||||||
return QString();
|
return QString();
|
||||||
|
|
||||||
if (!m_rootProjectNode->findProFileFor(proFilePath))
|
if (!rootProjectNode()->findProFileFor(proFilePath))
|
||||||
return tr("The .pro file \"%1\" is not part of the project.")
|
return tr("The .pro file \"%1\" is not part of the project.")
|
||||||
.arg(proFilePath.fileName());
|
.arg(proFilePath.fileName());
|
||||||
|
|
||||||
@@ -1381,7 +1371,7 @@ void QmakeProject::updateBuildSystemData()
|
|||||||
Target * const target = activeTarget();
|
Target * const target = activeTarget();
|
||||||
if (!target)
|
if (!target)
|
||||||
return;
|
return;
|
||||||
const QmakeProFileNode * const rootNode = rootQmakeProjectNode();
|
const QmakeProFileNode * const rootNode = rootProjectNode();
|
||||||
if (!rootNode || rootNode->parseInProgress())
|
if (!rootNode || rootNode->parseInProgress())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@@ -76,8 +76,7 @@ public:
|
|||||||
|
|
||||||
bool supportsKit(ProjectExplorer::Kit *k, QString *errorMesage) const override;
|
bool supportsKit(ProjectExplorer::Kit *k, QString *errorMesage) const override;
|
||||||
|
|
||||||
ProjectExplorer::ProjectNode *rootProjectNode() const override;
|
QmakeProFileNode *rootProjectNode() const override;
|
||||||
QmakeProFileNode *rootQmakeProjectNode() const;
|
|
||||||
bool validParse(const Utils::FileName &proFilePath) const;
|
bool validParse(const Utils::FileName &proFilePath) const;
|
||||||
bool parseInProgress(const Utils::FileName &proFilePath) const;
|
bool parseInProgress(const Utils::FileName &proFilePath) const;
|
||||||
|
|
||||||
@@ -180,8 +179,6 @@ private:
|
|||||||
void startAsyncTimer(QmakeProFileNode::AsyncUpdateDelay delay);
|
void startAsyncTimer(QmakeProFileNode::AsyncUpdateDelay delay);
|
||||||
bool matchesKit(const ProjectExplorer::Kit *kit);
|
bool matchesKit(const ProjectExplorer::Kit *kit);
|
||||||
|
|
||||||
QmakeProFileNode *m_rootProjectNode = 0;
|
|
||||||
|
|
||||||
// Current configuration
|
// Current configuration
|
||||||
QString m_oldQtIncludePath;
|
QString m_oldQtIncludePath;
|
||||||
QString m_oldQtLibsPath;
|
QString m_oldQtLibsPath;
|
||||||
|
@@ -207,7 +207,7 @@ void QmakeProjectConfigWidget::updateProblemLabel()
|
|||||||
}
|
}
|
||||||
|
|
||||||
QmakeProject *p = static_cast<QmakeProject *>(m_buildConfiguration->target()->project());
|
QmakeProject *p = static_cast<QmakeProject *>(m_buildConfiguration->target()->project());
|
||||||
if (p->rootQmakeProjectNode()->parseInProgress() || !p->rootQmakeProjectNode()->validParse()) {
|
if (p->rootProjectNode()->parseInProgress() || !p->rootProjectNode()->validParse()) {
|
||||||
setProblemLabel(QString());
|
setProblemLabel(QString());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@@ -227,7 +227,7 @@ bool QMakeStep::init(QList<const BuildStep *> &earlierSteps)
|
|||||||
|
|
||||||
setOutputParser(new QMakeParser);
|
setOutputParser(new QMakeParser);
|
||||||
|
|
||||||
QmakeProFileNode *node = static_cast<QmakeProject *>(qt4bc->target()->project())->rootQmakeProjectNode();
|
QmakeProFileNode *node = static_cast<QmakeProject *>(qt4bc->target()->project())->rootProjectNode();
|
||||||
if (qt4bc->subNodeBuild())
|
if (qt4bc->subNodeBuild())
|
||||||
node = qt4bc->subNodeBuild();
|
node = qt4bc->subNodeBuild();
|
||||||
QString proFile = node->filePath().toString();
|
QString proFile = node->filePath().toString();
|
||||||
|
@@ -65,14 +65,13 @@ QmlProject::QmlProject(Internal::Manager *manager, const Utils::FileName &fileNa
|
|||||||
setProjectManager(manager);
|
setProjectManager(manager);
|
||||||
setDocument(new Internal::QmlProjectFile(this, fileName));
|
setDocument(new Internal::QmlProjectFile(this, fileName));
|
||||||
DocumentManager::addDocument(document(), true);
|
DocumentManager::addDocument(document(), true);
|
||||||
|
setRootProjectNode(new Internal::QmlProjectNode(this));
|
||||||
|
|
||||||
setProjectContext(Context(QmlProjectManager::Constants::PROJECTCONTEXT));
|
setProjectContext(Context(QmlProjectManager::Constants::PROJECTCONTEXT));
|
||||||
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_QMLJS));
|
setProjectLanguages(Context(ProjectExplorer::Constants::LANG_QMLJS));
|
||||||
|
|
||||||
m_projectName = projectFilePath().toFileInfo().completeBaseName();
|
m_projectName = projectFilePath().toFileInfo().completeBaseName();
|
||||||
|
|
||||||
m_rootNode = new Internal::QmlProjectNode(this);
|
|
||||||
|
|
||||||
projectManager()->registerProject(this);
|
projectManager()->registerProject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +80,6 @@ QmlProject::~QmlProject()
|
|||||||
projectManager()->unregisterProject(this);
|
projectManager()->unregisterProject(this);
|
||||||
|
|
||||||
delete m_projectItem.data();
|
delete m_projectItem.data();
|
||||||
delete m_rootNode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlProject::addedTarget(Target *target)
|
void QmlProject::addedTarget(Target *target)
|
||||||
@@ -177,7 +175,7 @@ void QmlProject::parseProject(RefreshOptions options)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m_rootNode->refresh();
|
rootProjectNode()->refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options & Configuration) {
|
if (options & Configuration) {
|
||||||
@@ -193,7 +191,7 @@ void QmlProject::refresh(RefreshOptions options)
|
|||||||
parseProject(options);
|
parseProject(options);
|
||||||
|
|
||||||
if (options & Files)
|
if (options & Files)
|
||||||
m_rootNode->refresh();
|
rootProjectNode()->refresh();
|
||||||
|
|
||||||
if (!modelManager())
|
if (!modelManager())
|
||||||
return;
|
return;
|
||||||
@@ -323,9 +321,9 @@ bool QmlProject::supportsKit(Kit *k, QString *errorMessage) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProjectNode *QmlProject::rootProjectNode() const
|
Internal::QmlProjectNode *QmlProject::rootProjectNode() const
|
||||||
{
|
{
|
||||||
return m_rootNode;
|
return static_cast<Internal::QmlProjectNode *>(Project::rootProjectNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
QStringList QmlProject::files(FilesMode) const
|
QStringList QmlProject::files(FilesMode) const
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
#include "qmlprojectmanager_global.h"
|
#include "qmlprojectmanager_global.h"
|
||||||
|
|
||||||
#include "qmlprojectmanager.h"
|
#include "qmlprojectmanager.h"
|
||||||
|
#include "qmlprojectnodes.h"
|
||||||
|
|
||||||
#include <projectexplorer/project.h>
|
#include <projectexplorer/project.h>
|
||||||
|
|
||||||
@@ -47,10 +48,7 @@ namespace QmlProjectManager {
|
|||||||
|
|
||||||
class QmlProjectItem;
|
class QmlProjectItem;
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal { class QmlProjectFile; }
|
||||||
class QmlProjectFile;
|
|
||||||
class QmlProjectNode;
|
|
||||||
} // namespace Internal
|
|
||||||
|
|
||||||
class QMLPROJECTMANAGER_EXPORT QmlProject : public ProjectExplorer::Project
|
class QMLPROJECTMANAGER_EXPORT QmlProject : public ProjectExplorer::Project
|
||||||
{
|
{
|
||||||
@@ -67,7 +65,7 @@ public:
|
|||||||
|
|
||||||
bool supportsKit(ProjectExplorer::Kit *k, QString *errorMessage) const override;
|
bool supportsKit(ProjectExplorer::Kit *k, QString *errorMessage) const override;
|
||||||
|
|
||||||
ProjectExplorer::ProjectNode *rootProjectNode() const override;
|
Internal::QmlProjectNode *rootProjectNode() const override;
|
||||||
QStringList files(FilesMode fileMode) const override;
|
QStringList files(FilesMode fileMode) const override;
|
||||||
|
|
||||||
bool validProjectFile() const;
|
bool validProjectFile() const;
|
||||||
@@ -118,8 +116,6 @@ private:
|
|||||||
QStringList m_files;
|
QStringList m_files;
|
||||||
|
|
||||||
QPointer<QmlProjectItem> m_projectItem;
|
QPointer<QmlProjectItem> m_projectItem;
|
||||||
|
|
||||||
Internal::QmlProjectNode *m_rootNode;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace QmlProjectManager
|
} // namespace QmlProjectManager
|
||||||
|
Reference in New Issue
Block a user