forked from qt-creator/qt-creator
QmlProjectManager: Fix crash when creating qml project
Change-Id: Icaaa4f455f40b84188f014848f84c1c8a0ab238b Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
@@ -176,11 +176,11 @@ public:
|
|||||||
|
|
||||||
BuildConfiguration *buildConfiguration() const { return m_buildConfiguration; }
|
BuildConfiguration *buildConfiguration() const { return m_buildConfiguration; }
|
||||||
|
|
||||||
|
BuildSystem *buildSystem() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
RunConfiguration(BuildConfiguration *bc, Utils::Id id);
|
RunConfiguration(BuildConfiguration *bc, Utils::Id id);
|
||||||
|
|
||||||
BuildSystem *buildSystem() const;
|
|
||||||
|
|
||||||
using Updater = std::function<void()>;
|
using Updater = std::function<void()>;
|
||||||
void setUpdater(const Updater &updater);
|
void setUpdater(const Updater &updater);
|
||||||
|
|
||||||
|
@@ -14,7 +14,6 @@
|
|||||||
|
|
||||||
#include <projectexplorer/projectexplorer.h>
|
#include <projectexplorer/projectexplorer.h>
|
||||||
#include <projectexplorer/projectexplorerconstants.h>
|
#include <projectexplorer/projectexplorerconstants.h>
|
||||||
#include <projectexplorer/target.h>
|
|
||||||
|
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
#include <utils/layoutbuilder.h>
|
#include <utils/layoutbuilder.h>
|
||||||
@@ -91,7 +90,9 @@ void QmlMainFileAspect::fromMap(const Store &map)
|
|||||||
|
|
||||||
void QmlMainFileAspect::updateFileComboBox()
|
void QmlMainFileAspect::updateFileComboBox()
|
||||||
{
|
{
|
||||||
const FilePath projectDir = m_target->project()->projectDirectory();
|
auto buildSystem = qmlBuildSystem();
|
||||||
|
QTC_ASSERT(buildSystem, return);
|
||||||
|
const FilePath projectDir = buildSystem->projectDirectory();
|
||||||
|
|
||||||
if (mainScriptSource() == FileInProjectFile) {
|
if (mainScriptSource() == FileInProjectFile) {
|
||||||
const FilePath mainScriptInFilePath = mainScript().relativePathFromDir(projectDir);
|
const FilePath mainScriptInFilePath = mainScript().relativePathFromDir(projectDir);
|
||||||
@@ -108,7 +109,7 @@ void QmlMainFileAspect::updateFileComboBox()
|
|||||||
m_fileListModel.appendRow(new QStandardItem(CURRENT_FILE));
|
m_fileListModel.appendRow(new QStandardItem(CURRENT_FILE));
|
||||||
QModelIndex currentIndex;
|
QModelIndex currentIndex;
|
||||||
|
|
||||||
FilePaths sortedFiles = m_target->project()->files(Project::SourceFiles);
|
FilePaths sortedFiles = buildSystem->project()->files(Project::SourceFiles);
|
||||||
|
|
||||||
// make paths relative to project directory
|
// make paths relative to project directory
|
||||||
FilePaths relativeFiles;
|
FilePaths relativeFiles;
|
||||||
@@ -143,6 +144,7 @@ void QmlMainFileAspect::updateFileComboBox()
|
|||||||
|
|
||||||
QmlMainFileAspect::MainScriptSource QmlMainFileAspect::mainScriptSource() const
|
QmlMainFileAspect::MainScriptSource QmlMainFileAspect::mainScriptSource() const
|
||||||
{
|
{
|
||||||
|
QTC_ASSERT(qmlBuildSystem(), return FileInEditor);
|
||||||
if (!qmlBuildSystem()->mainFile().isEmpty())
|
if (!qmlBuildSystem()->mainFile().isEmpty())
|
||||||
return FileInProjectFile;
|
return FileInProjectFile;
|
||||||
if (!m_mainScriptFilename.isEmpty())
|
if (!m_mainScriptFilename.isEmpty())
|
||||||
@@ -160,11 +162,6 @@ void QmlMainFileAspect::setMainScript(int index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QmlMainFileAspect::setTarget(ProjectExplorer::Target *target)
|
|
||||||
{
|
|
||||||
m_target = target;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QmlMainFileAspect::setScriptSource(MainScriptSource source, const QString &settingsPath)
|
void QmlMainFileAspect::setScriptSource(MainScriptSource source, const QString &settingsPath)
|
||||||
{
|
{
|
||||||
if (source == FileInEditor) {
|
if (source == FileInEditor) {
|
||||||
@@ -175,7 +172,8 @@ void QmlMainFileAspect::setScriptSource(MainScriptSource source, const QString &
|
|||||||
m_mainScriptFilename.clear();
|
m_mainScriptFilename.clear();
|
||||||
} else { // FileInSettings
|
} else { // FileInSettings
|
||||||
m_scriptFile = settingsPath;
|
m_scriptFile = settingsPath;
|
||||||
m_mainScriptFilename = m_target->project()->projectDirectory() / m_scriptFile;
|
if (QTC_GUARD(qmlBuildSystem()))
|
||||||
|
m_mainScriptFilename = qmlBuildSystem()->projectDirectory() / m_scriptFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
emit changed();
|
emit changed();
|
||||||
@@ -187,7 +185,7 @@ void QmlMainFileAspect::setScriptSource(MainScriptSource source, const QString &
|
|||||||
*/
|
*/
|
||||||
FilePath QmlMainFileAspect::mainScript() const
|
FilePath QmlMainFileAspect::mainScript() const
|
||||||
{
|
{
|
||||||
if (!qmlBuildSystem()->mainFile().isEmpty()) {
|
if (QTC_GUARD(qmlBuildSystem()) && !qmlBuildSystem()->mainFile().isEmpty()) {
|
||||||
const FilePath pathInProject = qmlBuildSystem()->mainFilePath();
|
const FilePath pathInProject = qmlBuildSystem()->mainFilePath();
|
||||||
return qmlBuildSystem()->canonicalProjectDir().resolvePath(pathInProject);
|
return qmlBuildSystem()->canonicalProjectDir().resolvePath(pathInProject);
|
||||||
}
|
}
|
||||||
@@ -232,7 +230,9 @@ bool QmlMainFileAspect::isQmlFilePresent()
|
|||||||
|| mainScriptMimeType.matchesName(QMLPROJECT_MIMETYPE)) {
|
|| mainScriptMimeType.matchesName(QMLPROJECT_MIMETYPE)) {
|
||||||
// find a qml file with lowercase filename. This is slow, but only done
|
// find a qml file with lowercase filename. This is slow, but only done
|
||||||
// in initialization/other border cases.
|
// in initialization/other border cases.
|
||||||
const FilePaths files = m_target->project()->files(Project::SourceFiles);
|
|
||||||
|
QTC_ASSERT(qmlBuildSystem(), return qmlFileFound);
|
||||||
|
const FilePaths files = qmlBuildSystem()->project()->files(Project::SourceFiles);
|
||||||
for (const FilePath &filename : files) {
|
for (const FilePath &filename : files) {
|
||||||
if (!filename.isEmpty() && filename.baseName().at(0).isLower()) {
|
if (!filename.isEmpty() && filename.baseName().at(0).isLower()) {
|
||||||
const MimeType type = mimeTypeForFile(filename);
|
const MimeType type = mimeTypeForFile(filename);
|
||||||
@@ -252,7 +252,9 @@ bool QmlMainFileAspect::isQmlFilePresent()
|
|||||||
|
|
||||||
QmlBuildSystem *QmlMainFileAspect::qmlBuildSystem() const
|
QmlBuildSystem *QmlMainFileAspect::qmlBuildSystem() const
|
||||||
{
|
{
|
||||||
return static_cast<QmlBuildSystem *>(m_target->buildSystem());
|
RunConfiguration *runConfig = qobject_cast<RunConfiguration *>(container());
|
||||||
|
QTC_ASSERT(runConfig, return nullptr);
|
||||||
|
return qobject_cast<QmlBuildSystem *>(runConfig->buildSystem());
|
||||||
}
|
}
|
||||||
|
|
||||||
} // QmlProjectManager
|
} // QmlProjectManager
|
||||||
|
@@ -50,7 +50,6 @@ public:
|
|||||||
MainScriptSource mainScriptSource() const;
|
MainScriptSource mainScriptSource() const;
|
||||||
void setMainScript(int index);
|
void setMainScript(int index);
|
||||||
|
|
||||||
void setTarget(ProjectExplorer::Target *target);
|
|
||||||
void setScriptSource(MainScriptSource source, const QString &settingsPath = QString());
|
void setScriptSource(MainScriptSource source, const QString &settingsPath = QString());
|
||||||
|
|
||||||
Utils::FilePath mainScript() const;
|
Utils::FilePath mainScript() const;
|
||||||
@@ -60,7 +59,6 @@ public:
|
|||||||
QmlBuildSystem *qmlBuildSystem() const;
|
QmlBuildSystem *qmlBuildSystem() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ProjectExplorer::Target *m_target = nullptr;
|
|
||||||
QPointer<QComboBox> m_fileListCombo;
|
QPointer<QComboBox> m_fileListCombo;
|
||||||
QStandardItemModel m_fileListModel;
|
QStandardItemModel m_fileListModel;
|
||||||
QString m_scriptFile;
|
QString m_scriptFile;
|
||||||
|
@@ -118,7 +118,6 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(BuildConfiguration *bc, I
|
|||||||
return cmd;
|
return cmd;
|
||||||
});
|
});
|
||||||
|
|
||||||
qmlMainFile.setTarget(target());
|
|
||||||
connect(&qmlMainFile, &BaseAspect::changed, this, &RunConfiguration::update);
|
connect(&qmlMainFile, &BaseAspect::changed, this, &RunConfiguration::update);
|
||||||
|
|
||||||
if (Core::ICore::isQtDesignStudio())
|
if (Core::ICore::isQtDesignStudio())
|
||||||
|
Reference in New Issue
Block a user