From 1cccc9428b4ca9a87285b35113f942be02226d04 Mon Sep 17 00:00:00 2001 From: Henning Gruendl Date: Wed, 21 May 2025 13:13:59 +0200 Subject: [PATCH] Hotfix for missing import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QDS-15384 Change-Id: Ia1ded05040f1fcc6326989587491604433f2efb0 Reviewed-by: Henning Gründl Reviewed-by: Thomas Hartmann --- .../buildsystem/qmlbuildsystem.cpp | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp index 3604d8a1e86..f3f7c28a2fd 100644 --- a/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp +++ b/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.cpp @@ -480,6 +480,51 @@ bool QmlBuildSystem::setMainUiFileInProjectFile(const Utils::FilePath &newMainUi && setFileSettingInProjectFile("mainUiFile", newMainUiFilePath, m_projectItem->mainUiFile()); } +static void addImport(const Utils::FilePath &mainFilePath, + const Utils::FilePath &mainUiFilePath, + QString &fileContent) +{ + auto commonPath = Utils::FileUtils::commonPath({mainFilePath, mainUiFilePath}); + auto path = mainUiFilePath.parentDir().prefixRemoved(commonPath.path()); + + if (!path) + return; + + const QChar pathSeparator = path->pathComponentSeparator(); + + QString importPath; + + if (path->pathView().startsWith(pathSeparator)) + importPath = path->pathView().mid(1).toString(); + + if (importPath.isEmpty()) + return; + + static const QRegularExpression rx( + "^import\\s+(?:(?:\"(?[^\"]+)\"|(?[\\w.]+))(?:\\s+(?\\d+(?:" + "\\." + "\\d+)?)?)?(?:\\s+as\\s+(?\\w+))?)?\\s*$"); + + QStringList fileContentLines = fileContent.split('\n'); + unsigned lastImportIndex = 0; + + for (unsigned i = 0; i != fileContentLines.size(); ++i) { + QRegularExpressionMatch match = rx.match(fileContentLines[i]); + + if (match.hasMatch()) { + auto pathCaptured = match.capturedView("path"); + if (!pathCaptured.isEmpty() && pathCaptured == importPath) + return; + + lastImportIndex = i; + } + } + + fileContentLines.insert(lastImportIndex + 1, QString("import \"%1\"").arg(importPath)); + + fileContent = fileContentLines.join("\n"); +} + bool QmlBuildSystem::setMainUiFileInMainFile(const Utils::FilePath &newMainUiFilePath) { Core::FileChangeBlocker fileChangeBlocker(mainFilePath()); @@ -504,6 +549,8 @@ bool QmlBuildSystem::setMainUiFileInMainFile(const Utils::FilePath &newMainUiFil const QString currentMain = QString("%1 {").arg(mainUiFilePath().baseName()); const QString newMain = QString("%1 {").arg(newMainUiFilePath.baseName()); + addImport(mainFilePath(), newMainUiFilePath, fileContent); + if (fileContent.contains(currentMain)) fileContent.replace(currentMain, newMain);