From 8a180f71df44713990bb8f6b24e02c95772ec4c5 Mon Sep 17 00:00:00 2001 From: dt Date: Fri, 11 Mar 2011 15:58:33 +0100 Subject: [PATCH] Qt4ProjectManager: Small refactoring in reportIssues Do not report project dir specific issues next to each buildconfiguration. Also move the code to a place the TargetSetupPage can easily use, without having a hardcoded target list. Note: They currently aren't shown at all, next step is to show them once per target. Reviewed-By: hunger --- src/plugins/qt4projectmanager/qmakestep.cpp | 2 +- src/plugins/qt4projectmanager/qt-s60/qt-s60.pri | 2 - .../qt-s60/qt4symbiantargetfactory.cpp | 29 +++++++ .../qt-s60/qt4symbiantargetfactory.h | 1 + .../qt4projectmanager/qt-s60/s60projectchecker.cpp | 91 ---------------------- .../qt4projectmanager/qt-s60/s60projectchecker.h | 66 ---------------- .../qt4projectmanager/qt4basetargetfactory.h | 3 + .../qt4projectmanager/qt4projectconfigwidget.cpp | 3 +- src/plugins/qt4projectmanager/qt4target.cpp | 20 ++++- src/plugins/qt4projectmanager/qt4target.h | 2 +- src/plugins/qt4projectmanager/qtversionmanager.cpp | 33 +++++++- src/plugins/qt4projectmanager/qtversionmanager.h | 2 +- 12 files changed, 83 insertions(+), 171 deletions(-) delete mode 100644 src/plugins/qt4projectmanager/qt-s60/s60projectchecker.cpp delete mode 100644 src/plugins/qt4projectmanager/qt-s60/s60projectchecker.h diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 883365444c..c89955e47d 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -244,7 +244,7 @@ bool QMakeStep::init() node = qt4bc->subNodeBuild(); QString proFile = node->path(); - m_tasks = qt4BuildConfiguration()->qtVersion()->reportIssues(proFile, workingDirectory); + m_tasks = qt4BuildConfiguration()->qtVersion()->reportIssues(proFile, workingDirectory, true); m_scriptTemplate = node->projectType() == ScriptTemplate; return AbstractProcessStep::init(); diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri index a85714fe69..d38f46b4b2 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri +++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri @@ -5,7 +5,6 @@ SOURCES += $$PWD/s60manager.cpp \ $$PWD/s60emulatorrunconfiguration.cpp \ $$PWD/s60devicerunconfiguration.cpp \ $$PWD/s60devicerunconfigurationwidget.cpp \ - $$PWD/s60projectchecker.cpp \ $$PWD/rvcttoolchain.cpp \ $$PWD/s60runconfigbluetoothstarter.cpp \ $$PWD/abldparser.cpp \ @@ -41,7 +40,6 @@ HEADERS += $$PWD/s60manager.h \ $$PWD/s60emulatorrunconfiguration.h \ $$PWD/s60devicerunconfiguration.h \ $$PWD/s60devicerunconfigurationwidget.h \ - $$PWD/s60projectchecker.h \ $$PWD/rvcttoolchain.h \ $$PWD/s60runconfigbluetoothstarter.h \ $$PWD/abldparser.h \ diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp index ec76194fa2..900c1099cf 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.cpp @@ -48,6 +48,7 @@ #include using ProjectExplorer::idFromMap; +using ProjectExplorer::Task; using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; @@ -134,6 +135,34 @@ QString Qt4SymbianTargetFactory::defaultShadowBuildDirectory(const QString &proj return QString(); } +QList Qt4SymbianTargetFactory::reportIssues(const QString &proFile) +{ + QList results; + // Warn of strange characters in project name and path: + const QString projectName = proFile.mid(proFile.lastIndexOf(QLatin1Char('/')) + 1); + QString projectPath = proFile.left(proFile.lastIndexOf(QLatin1Char('/'))); +#if defined (Q_OS_WIN) + if (projectPath.at(1) == QChar(':') && projectPath.at(0).toUpper() >= QChar('A') && projectPath.at(0).toUpper() <= QChar('Z')) + projectPath = projectPath.mid(2); +#endif + if (projectPath.contains(QLatin1Char(' '))) { + results.append(Task(Task::Warning, + QCoreApplication::translate("ProjectExplorer::Internal::S60ProjectChecker", + "The Symbian toolchain does not handle spaces " + "in the project path '%1'.").arg(projectPath), + QString(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); + } + if (projectName.contains(QRegExp("[^a-zA-Z0-9.-]"))) { + results.append(Task(Task::Warning, + QCoreApplication::translate("ProjectExplorer::Internal::S60ProjectChecker", + "The Symbian toolchain does not handle special " + "characters in the project name '%1' well.") + .arg(projectName), + QString(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); + } + return results; +} + QList Qt4SymbianTargetFactory::availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion) { QList infos; diff --git a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h index e8ff2e27c2..0cf1920557 100644 --- a/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h +++ b/src/plugins/qt4projectmanager/qt-s60/qt4symbiantargetfactory.h @@ -59,6 +59,7 @@ public: virtual ProjectExplorer::Target *create(ProjectExplorer::Project *parent, const QString &id, Qt4TargetSetupWidget *widget); QString defaultShadowBuildDirectory(const QString &projectLocation, const QString &id); + QList reportIssues(const QString &proFile); QList availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion); bool isMobileTarget(const QString &id); }; diff --git a/src/plugins/qt4projectmanager/qt-s60/s60projectchecker.cpp b/src/plugins/qt4projectmanager/qt-s60/s60projectchecker.cpp deleted file mode 100644 index b77bbffce1..0000000000 --- a/src/plugins/qt4projectmanager/qt-s60/s60projectchecker.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -**************************************************************************/ - -#include "s60projectchecker.h" - -#include -#include -#include - -#include - -using namespace ProjectExplorer; -using namespace Qt4ProjectManager; -using namespace Qt4ProjectManager::Internal; - -QList -S60ProjectChecker::reportIssues(const QString &proFile) -{ - QList results; -#if defined (Q_OS_WIN) - const QString epocRootDir = version->systemRoot(); - // Report an error if project- and epoc directory are on different drives: - if (!epocRootDir.startsWith(proFile.left(3), Qt::CaseInsensitive) && !version->isBuildWithSymbianSbsV2()) { - results.append(Task(Task::Error, - QCoreApplication::translate("ProjectExplorer::Internal::S60ProjectChecker", - "The Symbian SDK and the project sources must reside on the same drive."), - QString(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); - } -#endif - - // Warn of strange characters in project name and path: - const QString projectName = proFile.mid(proFile.lastIndexOf(QLatin1Char('/')) + 1); - QString projectPath = proFile.left(proFile.lastIndexOf(QLatin1Char('/'))); -#if defined (Q_OS_WIN) - if (projectPath.at(1) == QChar(':') && projectPath.at(0).toUpper() >= QChar('A') && projectPath.at(0).toUpper() <= QChar('Z')) - projectPath = projectPath.mid(2); -#endif - if (projectPath.contains(QLatin1Char(' '))) { - results.append(Task(Task::Warning, - QCoreApplication::translate("ProjectExplorer::Internal::S60ProjectChecker", - "The Symbian toolchain does not handle spaces " - "in the project path '%1'.").arg(projectPath), - QString(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); - } - if (projectName.contains(QRegExp("[^a-zA-Z0-9.-]"))) { - results.append(Task(Task::Warning, - QCoreApplication::translate("ProjectExplorer::Internal::S60ProjectChecker", - "The Symbian toolchain does not handle special " - "characters in the project name '%1' well.") - .arg(projectName), - QString(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); - } - return results; -} - -QList -S60ProjectChecker::reportIssues(const Qt4Project *project) -{ - QString proFile = project->file()->fileName(); - return reportIssues(proFile); -} diff --git a/src/plugins/qt4projectmanager/qt-s60/s60projectchecker.h b/src/plugins/qt4projectmanager/qt-s60/s60projectchecker.h deleted file mode 100644 index 034962b139..0000000000 --- a/src/plugins/qt4projectmanager/qt-s60/s60projectchecker.h +++ /dev/null @@ -1,66 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2011 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** No Commercial Usage -** -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -**************************************************************************/ - -#ifndef S60PROJECTCHECKER_H -#define S60PROJECTCHECKER_H - -#include - -namespace Qt4ProjectManager { -class QtVersion; -class Qt4Project; - -namespace Internal { - -class S60ProjectChecker -{ -public: - /// Check a .pro-file/Qt version combination on possible issues with - /// its symbian setup. - /// @return a list of tasks, ordered on severity (errors first, then - /// warnings and finally info items. - static QList - reportIssues(const QString &proFile); - - /// Check a project/Qt version combination on possible issues with - /// its symbian setup. - /// @return a list of tasks, ordered on severity (errors first, then - /// warnings and finally info items. - static QList - reportIssues(const Qt4Project *project); -}; - -} // namespace Internal -} // namespace Qt4ProjectExplorer - -#endif // S60PROJECTCHECKER_H diff --git a/src/plugins/qt4projectmanager/qt4basetargetfactory.h b/src/plugins/qt4projectmanager/qt4basetargetfactory.h index 8c0cb93816..2be2ebc5bc 100644 --- a/src/plugins/qt4projectmanager/qt4basetargetfactory.h +++ b/src/plugins/qt4projectmanager/qt4basetargetfactory.h @@ -36,6 +36,7 @@ #include "qt4projectmanager_global.h" +#include #include #include @@ -62,6 +63,8 @@ public: /// used by the default implementation of createTargetSetupWidget /// not needed otherwise virtual QList availableBuildConfigurations(const QString &id, const QString &proFilePath, const QtVersionNumber &minimumQtVersion) = 0; + + virtual QList reportIssues(const QString &proFile); /// only used in the TargetSetupPage virtual QIcon iconForId(const QString &id) const = 0; diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 0dce28bf1d..51e17ffc38 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -368,7 +368,8 @@ void Qt4ProjectConfigWidget::updateImportLabel() if (m_buildConfiguration->shadowBuild()) buildDirectory = m_buildConfiguration->buildDirectory(); QList issues = m_buildConfiguration->qtVersion()->reportIssues(m_buildConfiguration->target()->project()->file()->fileName(), - buildDirectory); + buildDirectory, + true); if (incompatibleBuild) { m_ui->problemLabel->setVisible(true); diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp index 3bd08ab3c5..63fecb9009 100644 --- a/src/plugins/qt4projectmanager/qt4target.cpp +++ b/src/plugins/qt4projectmanager/qt4target.cpp @@ -116,6 +116,11 @@ QString Qt4BaseTargetFactory::msgBuildConfigurationName(const BuildConfiguration tr("%1 Release").arg(qtVersionName); } +QList Qt4BaseTargetFactory::reportIssues(const QString &proFile) +{ + return QList(); +} + // ------------------------------------------------------------------------- // Qt4BaseTarget // ------------------------------------------------------------------------- @@ -536,6 +541,7 @@ void Qt4DefaultTargetSetupWidget::setBuildConfigurationInfos(const QListsetPath(info.directory); else m_pathChoosers[i]->setPath(sourceDir); - reportIssues(i); + foundIssues &= reportIssues(i); } m_ignoreChange = false; + if (foundIssues) + m_detailsWidget->setState(Utils::DetailsWidget::Expanded); } } @@ -575,6 +583,7 @@ void Qt4DefaultTargetSetupWidget::setupWidgets() { m_ignoreChange = true; QString sourceDir = QFileInfo(m_proFilePath).absolutePath(); + bool foundIssues = false; for (int i = 0; i < m_infos.size(); ++i) { const BuildConfigurationInfo &info = m_infos.at(i); QCheckBox *checkbox = new QCheckBox; @@ -604,8 +613,10 @@ void Qt4DefaultTargetSetupWidget::setupWidgets() m_checkboxes.append(checkbox); m_pathChoosers.append(pathChooser); m_reportIssuesLabels.append(reportIssuesLabel); - reportIssues(i); + foundIssues = reportIssues(i); } + if (foundIssues) + m_detailsWidget->setState(Utils::DetailsWidget::Expanded); m_ignoreChange = false; } @@ -685,12 +696,13 @@ void Qt4DefaultTargetSetupWidget::shadowBuildingToggled() m_ignoreChange = false; } -void Qt4DefaultTargetSetupWidget::reportIssues(int index) +bool Qt4DefaultTargetSetupWidget::reportIssues(int index) { QPair issues = findIssues(m_infos.at(index)); QLabel *reportIssuesLabel = m_reportIssuesLabels.at(index); reportIssuesLabel->setText(issues.second); reportIssuesLabel->setVisible(issues.first != ProjectExplorer::Task::Unknown); + return issues.first != ProjectExplorer::Task::Unknown; } QPair Qt4DefaultTargetSetupWidget::findIssues(const BuildConfigurationInfo &info) @@ -701,7 +713,7 @@ QPair Qt4DefaultTargetSetupWidget::fin QString buildDir = info.directory; QtVersion *version = info.version; - QList issues = version->reportIssues(m_proFilePath, buildDir); + QList issues = version->reportIssues(m_proFilePath, buildDir, false); QString text; ProjectExplorer::Task::TaskType highestType = ProjectExplorer::Task::Unknown; diff --git a/src/plugins/qt4projectmanager/qt4target.h b/src/plugins/qt4projectmanager/qt4target.h index 8ff351546f..699995289e 100644 --- a/src/plugins/qt4projectmanager/qt4target.h +++ b/src/plugins/qt4projectmanager/qt4target.h @@ -135,7 +135,7 @@ public slots: private: void setBuildConfigurationInfos(const QList &list, bool resetEnabled = true); - void reportIssues(int index); + bool reportIssues(int index); QPair findIssues(const BuildConfigurationInfo &info); void createImportWidget(const BuildConfigurationInfo &info, int pos); diff --git a/src/plugins/qt4projectmanager/qtversionmanager.cpp b/src/plugins/qt4projectmanager/qtversionmanager.cpp index cff1e5d281..3d833aeb90 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.cpp +++ b/src/plugins/qt4projectmanager/qtversionmanager.cpp @@ -40,11 +40,11 @@ #include "qt-maemo/maemoglobal.h" #include "qt-maemo/maemomanager.h" #include "qt-s60/s60manager.h" -#include "qt-s60/s60projectchecker.h" #include "qt-s60/abldparser.h" #include "qt-s60/sbsv2parser.h" #include "qt-s60/gccetoolchain.h" #include "qt-s60/winscwtoolchain.h" +#include "qt4basetargetfactory.h" #include "qmlobservertool.h" #include "qmldumptool.h" @@ -85,6 +85,8 @@ #include #include +#include + using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; @@ -766,7 +768,7 @@ ProjectExplorer::IOutputParser *QtVersion::createOutputParser() const } QList -QtVersion::reportIssues(const QString &proFile, const QString &buildDir) +QtVersion::reportIssues(const QString &proFile, const QString &buildDir, bool includeTargetSpecificErrors) { QList results; @@ -807,10 +809,33 @@ QtVersion::reportIssues(const QString &proFile, const QString &buildDir) QLatin1String(ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM))); } +#if defined (Q_OS_WIN) QSet targets = supportedTargetIds(); if (targets.contains(Constants::S60_DEVICE_TARGET_ID) || - targets.contains(Constants::S60_EMULATOR_TARGET_ID)) - results.append(S60ProjectChecker::reportIssues(proFile)); + targets.contains(Constants::S60_EMULATOR_TARGET_ID)) { + const QString epocRootDir = systemRoot(); + // Report an error if project- and epoc directory are on different drives: + if (!epocRootDir.startsWith(proFile.left(3), Qt::CaseInsensitive) && !isBuildWithSymbianSbsV2()) { + results.append(ProjectExplorer::Task(ProjectExplorer::Task::Error, + QCoreApplication::translate("ProjectExplorer::Internal::S60ProjectChecker", + "The Symbian SDK and the project sources must reside on the same drive."), + QString(), -1, ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); + } + } +#endif + + if (includeTargetSpecificErrors) { + QList factories; + foreach (const QString &id, supportedTargetIds()) + if (Qt4BaseTargetFactory *factory = Qt4BaseTargetFactory::qt4BaseTargetFactoryForId(id)) + factories << factory; + + qSort(factories); + QList::iterator newend = std::unique(factories.begin(), factories.end()); + QList::iterator it = factories.begin(); + for ( ; it != newend; ++it) + results.append((*it)->reportIssues(proFile)); + } return results; } diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h index 8a5b137863..ccc2ea27a8 100644 --- a/src/plugins/qt4projectmanager/qtversionmanager.h +++ b/src/plugins/qt4projectmanager/qtversionmanager.h @@ -189,7 +189,7 @@ public: /// its symbian setup. /// @return a list of tasks, ordered on severity (errors first, then /// warnings and finally info items. - QList reportIssues(const QString &proFile, const QString &buildDir); + QList reportIssues(const QString &proFile, const QString &buildDir, bool includeTargetSpecificErrors); ProjectExplorer::IOutputParser *createOutputParser() const; -- 2.11.0