QmlProjectManager: FilePathify further

Change-Id: I8d83cc93778f8786c30e0aaef459c51005139b19
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
hjk
2023-01-06 09:47:53 +01:00
parent 92b23cb827
commit ec43a6c005
6 changed files with 61 additions and 65 deletions

View File

@@ -173,18 +173,17 @@ public:
runControl->target()->buildSystem()); runControl->target()->buildSystem());
QTC_ASSERT(qmlBuildSystem, return); QTC_ASSERT(qmlBuildSystem, return);
const QString mainScript = aspect->mainScript; const FilePath mainScript = aspect->mainScript;
const QString currentFile = aspect->currentFile; const FilePath currentFile = aspect->currentFile;
const QString mainScriptFromProject = qmlBuildSystem->targetFile( const QString mainScriptFromProject = qmlBuildSystem->targetFile(mainScript).path();
FilePath::fromString(mainScript)).path();
QStringList qmlProjectRunConfigurationArguments = cmd.splitArguments(); QStringList qmlProjectRunConfigurationArguments = cmd.splitArguments();
if (!currentFile.isEmpty() && qmlProjectRunConfigurationArguments.last().contains(mainScriptFromProject)) { if (!currentFile.isEmpty() && qmlProjectRunConfigurationArguments.last().contains(mainScriptFromProject)) {
qmlProjectRunConfigurationArguments.removeLast(); qmlProjectRunConfigurationArguments.removeLast();
cmd = CommandLine(cmd.executable(), qmlProjectRunConfigurationArguments); cmd = CommandLine(cmd.executable(), qmlProjectRunConfigurationArguments);
cmd.addArg(currentFile); cmd.addArg(currentFile.path());
} }
} }

View File

@@ -32,9 +32,9 @@ namespace QmlProjectManager {
const char M_CURRENT_FILE[] = "CurrentFile"; const char M_CURRENT_FILE[] = "CurrentFile";
const char CURRENT_FILE[] = QT_TRANSLATE_NOOP("::QmlProjectManager", "<Current File>"); const char CURRENT_FILE[] = QT_TRANSLATE_NOOP("::QmlProjectManager", "<Current File>");
static bool caseInsensitiveLessThan(const QString &s1, const QString &s2) static bool caseInsensitiveLessThan(const FilePath &s1, const FilePath &s2)
{ {
return s1.toLower() < s2.toLower(); return s1.toString().toCaseFolded() < s2.toString().toCaseFolded();
} }
QmlMainFileAspect::QmlMainFileAspect(Target *target) QmlMainFileAspect::QmlMainFileAspect(Target *target)
@@ -89,12 +89,12 @@ void QmlMainFileAspect::fromMap(const QVariantMap &map)
void QmlMainFileAspect::updateFileComboBox() void QmlMainFileAspect::updateFileComboBox()
{ {
QDir projectDir(m_target->project()->projectDirectory().toString()); const FilePath projectDir = m_target->project()->projectDirectory();
if (mainScriptSource() == FileInProjectFile) { if (mainScriptSource() == FileInProjectFile) {
const QString mainScriptInFilePath = projectDir.relativeFilePath(mainScript()); const FilePath mainScriptInFilePath = projectDir.relativeChildPath(mainScript());
m_fileListModel.clear(); m_fileListModel.clear();
m_fileListModel.appendRow(new QStandardItem(mainScriptInFilePath)); m_fileListModel.appendRow(new QStandardItem(mainScriptInFilePath.toString()));
if (m_fileListCombo) if (m_fileListCombo)
m_fileListCombo->setEnabled(false); m_fileListCombo->setEnabled(false);
return; return;
@@ -106,27 +106,25 @@ void QmlMainFileAspect::updateFileComboBox()
m_fileListModel.appendRow(new QStandardItem(CURRENT_FILE)); m_fileListModel.appendRow(new QStandardItem(CURRENT_FILE));
QModelIndex currentIndex; QModelIndex currentIndex;
QStringList sortedFiles = Utils::transform(m_target->project()->files(Project::SourceFiles), FilePaths sortedFiles = m_target->project()->files(Project::SourceFiles);
&Utils::FilePath::toString);
// make paths relative to project directory // make paths relative to project directory
QStringList relativeFiles; FilePaths relativeFiles;
for (const QString &fn : std::as_const(sortedFiles)) for (const FilePath &fn : std::as_const(sortedFiles))
relativeFiles += projectDir.relativeFilePath(fn); relativeFiles += projectDir.relativeChildPath(fn);
sortedFiles = relativeFiles; sortedFiles = relativeFiles;
std::stable_sort(sortedFiles.begin(), sortedFiles.end(), caseInsensitiveLessThan); std::stable_sort(sortedFiles.begin(), sortedFiles.end(), caseInsensitiveLessThan);
QString mainScriptPath; FilePath mainScriptPath;
if (mainScriptSource() != FileInEditor) if (mainScriptSource() != FileInEditor)
mainScriptPath = projectDir.relativeFilePath(mainScript()); mainScriptPath = projectDir.relativeChildPath(mainScript());
for (const QString &fn : std::as_const(sortedFiles)) { for (const FilePath &fn : std::as_const(sortedFiles)) {
QFileInfo fileInfo(fn); if (fn.suffixView() != u"qml")
if (fileInfo.suffix() != "qml")
continue; continue;
auto item = new QStandardItem(fn); auto item = new QStandardItem(fn.toString());
m_fileListModel.appendRow(item); m_fileListModel.appendRow(item);
if (mainScriptPath == fn) if (mainScriptPath == fn)
@@ -170,7 +168,7 @@ 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().toString() + '/' + m_scriptFile; m_mainScriptFilename = m_target->project()->projectDirectory() / m_scriptFile;
} }
emit changed(); emit changed();
@@ -180,14 +178,11 @@ void QmlMainFileAspect::setScriptSource(MainScriptSource source, const QString &
/** /**
Returns absolute path to main script file. Returns absolute path to main script file.
*/ */
QString QmlMainFileAspect::mainScript() const FilePath QmlMainFileAspect::mainScript() const
{ {
if (!qmlBuildSystem()->mainFile().isEmpty()) { if (!qmlBuildSystem()->mainFile().isEmpty()) {
const QString pathInProject = qmlBuildSystem()->mainFile(); const FilePath pathInProject = qmlBuildSystem()->mainFile();
if (QFileInfo(pathInProject).isAbsolute()) return qmlBuildSystem()->canonicalProjectDir().resolvePath(pathInProject);
return pathInProject;
else
return QDir(qmlBuildSystem()->canonicalProjectDir().toString()).absoluteFilePath(pathInProject);
} }
if (!m_mainScriptFilename.isEmpty()) if (!m_mainScriptFilename.isEmpty())
@@ -196,7 +191,7 @@ QString QmlMainFileAspect::mainScript() const
return m_currentFileFilename; return m_currentFileFilename;
} }
QString QmlMainFileAspect::currentFile() const FilePath QmlMainFileAspect::currentFile() const
{ {
return m_currentFileFilename; return m_currentFileFilename;
} }
@@ -207,7 +202,7 @@ void QmlMainFileAspect::changeCurrentFile(Core::IEditor *editor)
editor = EditorManager::currentEditor(); editor = EditorManager::currentEditor();
if (editor) if (editor)
m_currentFileFilename = editor->document()->filePath().toString(); m_currentFileFilename = editor->document()->filePath();
emit changed(); emit changed();
} }
@@ -219,7 +214,7 @@ bool QmlMainFileAspect::isQmlFilePresent()
IDocument *document = EditorManager::currentDocument(); IDocument *document = EditorManager::currentDocument();
const MimeType mainScriptMimeType = mimeTypeForFile(mainScript()); const MimeType mainScriptMimeType = mimeTypeForFile(mainScript());
if (document) { if (document) {
m_currentFileFilename = document->filePath().toString(); m_currentFileFilename = document->filePath();
if (mainScriptMimeType.matchesName(ProjectExplorer::Constants::QML_MIMETYPE) if (mainScriptMimeType.matchesName(ProjectExplorer::Constants::QML_MIMETYPE)
|| mainScriptMimeType.matchesName(ProjectExplorer::Constants::QMLUI_MIMETYPE)) { || mainScriptMimeType.matchesName(ProjectExplorer::Constants::QMLUI_MIMETYPE)) {
qmlFileFound = true; qmlFileFound = true;
@@ -229,13 +224,13 @@ bool QmlMainFileAspect::isQmlFilePresent()
|| mainScriptMimeType.matchesName(QmlJSTools::Constants::QMLPROJECT_MIMETYPE)) { || mainScriptMimeType.matchesName(QmlJSTools::Constants::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 auto files = m_target->project()->files(Project::SourceFiles); const FilePaths files = m_target->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);
if (type.matchesName(ProjectExplorer::Constants::QML_MIMETYPE) if (type.matchesName(ProjectExplorer::Constants::QML_MIMETYPE)
|| type.matchesName(ProjectExplorer::Constants::QMLUI_MIMETYPE)) { || type.matchesName(ProjectExplorer::Constants::QMLUI_MIMETYPE)) {
m_currentFileFilename = filename.toString(); m_currentFileFilename = filename;
qmlFileFound = true; qmlFileFound = true;
break; break;
} }
@@ -252,4 +247,5 @@ QmlBuildSystem *QmlMainFileAspect::qmlBuildSystem() const
{ {
return static_cast<QmlBuildSystem *>(m_target->buildSystem()); return static_cast<QmlBuildSystem *>(m_target->buildSystem());
} }
} // namespace QmlProjectManager
} // QmlProjectManager

View File

@@ -38,8 +38,8 @@ public:
struct Data : BaseAspect::Data struct Data : BaseAspect::Data
{ {
QString mainScript; Utils::FilePath mainScript;
QString currentFile; Utils::FilePath currentFile;
}; };
void addToLayout(Utils::Layouting::LayoutBuilder &builder) final; void addToLayout(Utils::Layouting::LayoutBuilder &builder) final;
@@ -52,8 +52,8 @@ public:
void setScriptSource(MainScriptSource source, const QString &settingsPath = QString()); void setScriptSource(MainScriptSource source, const QString &settingsPath = QString());
QString mainScript() const; Utils::FilePath mainScript() const;
QString currentFile() const; Utils::FilePath currentFile() const;
void changeCurrentFile(Core::IEditor *editor = nullptr); void changeCurrentFile(Core::IEditor *editor = nullptr);
bool isQmlFilePresent(); bool isQmlFilePresent();
QmlBuildSystem *qmlBuildSystem() const; QmlBuildSystem *qmlBuildSystem() const;
@@ -64,9 +64,9 @@ public:
QStandardItemModel m_fileListModel; QStandardItemModel m_fileListModel;
QString m_scriptFile; QString m_scriptFile;
// absolute path to current file (if being used) // absolute path to current file (if being used)
QString m_currentFileFilename; Utils::FilePath m_currentFileFilename;
// absolute path to selected main script (if being used) // absolute path to selected main script (if being used)
QString m_mainScriptFilename; Utils::FilePath m_mainScriptFilename;
}; };
} // namespace QmlProjectManager } // QmlProjectManager

View File

@@ -250,7 +250,9 @@ void QmlBuildSystem::parseProject(RefreshOptions options)
} }
} }
bool QmlBuildSystem::setFileSettingInProjectFile(const QString &setting, const Utils::FilePath &mainFilePath, const QString &oldFile) bool QmlBuildSystem::setFileSettingInProjectFile(const QString &setting,
const FilePath &mainFilePath,
const FilePath &oldFile)
{ {
// make sure to change it also in the qmlproject file // make sure to change it also in the qmlproject file
const Utils::FilePath qmlProjectFilePath = project()->projectFilePath(); const Utils::FilePath qmlProjectFilePath = project()->projectFilePath();
@@ -283,7 +285,7 @@ bool QmlBuildSystem::setFileSettingInProjectFile(const QString &setting, const U
auto index = fileContent.lastIndexOf("}"); auto index = fileContent.lastIndexOf("}");
fileContent.insert(index, addedText); fileContent.insert(index, addedText);
} else { } else {
QString originalFileName = oldFile; QString originalFileName = oldFile.path();
originalFileName.replace(".", "\\."); originalFileName.replace(".", "\\.");
const QRegularExpression expression(QString("%1\\s*\"(%2)\"").arg(settingQmlCode).arg(originalFileName)); const QRegularExpression expression(QString("%1\\s*\"(%2)\"").arg(settingQmlCode).arg(originalFileName));
@@ -328,43 +330,42 @@ void QmlBuildSystem::refresh(RefreshOptions options)
emit projectChanged(); emit projectChanged();
} }
QString QmlBuildSystem::mainFile() const FilePath QmlBuildSystem::mainFile() const
{ {
if (m_projectItem) if (m_projectItem)
return m_projectItem->mainFile(); return FilePath::fromString(m_projectItem->mainFile());
return QString(); return {};
} }
QString QmlBuildSystem::mainUiFile() const FilePath QmlBuildSystem::mainUiFile() const
{ {
if (m_projectItem) if (m_projectItem)
return m_projectItem->mainUiFile(); return FilePath::fromString(m_projectItem->mainUiFile());
return QString(); return {};
} }
Utils::FilePath QmlBuildSystem::mainFilePath() const FilePath QmlBuildSystem::mainFilePath() const
{ {
return projectDirectory().pathAppended(mainFile()); return projectDirectory().resolvePath(mainFile());
} }
Utils::FilePath QmlBuildSystem::mainUiFilePath() const FilePath QmlBuildSystem::mainUiFilePath() const
{ {
return projectDirectory().pathAppended(mainUiFile()); return projectDirectory().resolvePath(mainUiFile());
} }
bool QmlBuildSystem::setMainFileInProjectFile(const Utils::FilePath &newMainFilePath) bool QmlBuildSystem::setMainFileInProjectFile(const FilePath &newMainFilePath)
{ {
return setFileSettingInProjectFile("mainFile", newMainFilePath, mainFile()); return setFileSettingInProjectFile("mainFile", newMainFilePath, mainFile());
} }
bool QmlBuildSystem::setMainUiFileInProjectFile(const Utils::FilePath &newMainUiFilePath) bool QmlBuildSystem::setMainUiFileInProjectFile(const FilePath &newMainUiFilePath)
{ {
return setMainUiFileInMainFile(newMainUiFilePath) return setMainUiFileInMainFile(newMainUiFilePath)
&& setFileSettingInProjectFile("mainUiFile", newMainUiFilePath, mainUiFile()); && setFileSettingInProjectFile("mainUiFile", newMainUiFilePath, mainUiFile());
} }
bool QmlBuildSystem::setMainUiFileInMainFile(const Utils::FilePath &newMainUiFilePath) bool QmlBuildSystem::setMainUiFileInMainFile(const FilePath &newMainUiFilePath)
{ {
Core::FileChangeBlocker fileChangeBlocker(mainFilePath()); Core::FileChangeBlocker fileChangeBlocker(mainFilePath());
const QList<Core::IEditor *> editors = Core::DocumentModel::editorsForFilePath(mainFilePath()); const QList<Core::IEditor *> editors = Core::DocumentModel::editorsForFilePath(mainFilePath());
@@ -793,9 +794,9 @@ bool QmlBuildSystem::deleteFiles(Node *context, const FilePaths &filePaths)
bool QmlBuildSystem::renameFile(Node * context, const FilePath &oldFilePath, const FilePath &newFilePath) bool QmlBuildSystem::renameFile(Node * context, const FilePath &oldFilePath, const FilePath &newFilePath)
{ {
if (dynamic_cast<QmlProjectNode *>(context)) { if (dynamic_cast<QmlProjectNode *>(context)) {
if (oldFilePath.endsWith(mainFile())) if (oldFilePath.endsWith(mainFile().path()))
return setMainFileInProjectFile(newFilePath); return setMainFileInProjectFile(newFilePath);
if (oldFilePath.endsWith(mainUiFile())) if (oldFilePath.endsWith(mainUiFile().path()))
return setMainUiFileInProjectFile(newFilePath); return setMainUiFileInProjectFile(newFilePath);
return true; return true;

View File

@@ -53,8 +53,8 @@ public:
void refresh(RefreshOptions options); void refresh(RefreshOptions options);
Utils::FilePath canonicalProjectDir() const; Utils::FilePath canonicalProjectDir() const;
QString mainFile() const; Utils::FilePath mainFile() const;
QString mainUiFile() const; Utils::FilePath mainUiFile() const;
Utils::FilePath mainFilePath() const; Utils::FilePath mainFilePath() const;
Utils::FilePath mainUiFilePath() const; Utils::FilePath mainUiFilePath() const;
@@ -106,7 +106,7 @@ signals:
private: private:
bool setFileSettingInProjectFile(const QString &setting, bool setFileSettingInProjectFile(const QString &setting,
const Utils::FilePath &mainFilePath, const Utils::FilePath &mainFilePath,
const QString &oldFile); const Utils::FilePath &oldFile);
std::unique_ptr<QmlProjectItem> m_projectItem; std::unique_ptr<QmlProjectItem> m_projectItem;
Utils::FilePath m_canonicalProjectDir; Utils::FilePath m_canonicalProjectDir;

View File

@@ -54,7 +54,7 @@ private:
QString disabledReason() const final; QString disabledReason() const final;
bool isEnabled() const final; bool isEnabled() const final;
QString mainScript() const; FilePath mainScript() const;
FilePath qmlRuntimeFilePath() const; FilePath qmlRuntimeFilePath() const;
void createQtVersionAspect(); void createQtVersionAspect();
@@ -108,7 +108,7 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Target *target, Id id)
cmd.addArg("widget"); cmd.addArg("widget");
} }
const FilePath main = bs->targetFile(FilePath::fromString(mainScript())); const FilePath main = bs->targetFile(mainScript());
if (!main.isEmpty()) if (!main.isEmpty())
cmd.addArg(main.nativePath()); cmd.addArg(main.nativePath());
@@ -292,7 +292,7 @@ bool QmlProjectRunConfiguration::isEnabled() const
&& activeBuildSystem()->hasParsingData(); && activeBuildSystem()->hasParsingData();
} }
QString QmlProjectRunConfiguration::mainScript() const FilePath QmlProjectRunConfiguration::mainScript() const
{ {
return m_qmlMainFileAspect->mainScript(); return m_qmlMainFileAspect->mainScript();
} }