From f87f2c97666deaba143d5a3f8702cd8ecc92af7e Mon Sep 17 00:00:00 2001 From: kh1 Date: Mon, 30 Nov 2009 14:53:16 +0100 Subject: [PATCH 01/62] Missing return. --- .../qt4projectmanager/qt-maemo/maemorunconfiguration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index eb9bff1b9f9..6382ab51c5c 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -500,7 +500,7 @@ const QString MaemoRunConfiguration::gdbCmd() const QString MaemoRunConfiguration::maddeRoot() const { if (const MaemoToolChain *tc = toolchain()) - tc->maddeRoot(); + return tc->maddeRoot(); return QString(); } From 756a67854ac55058f1e6da496ade91f4255b5d02 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 30 Nov 2009 15:21:16 +0100 Subject: [PATCH 02/62] Highlight unused symbols. --- src/plugins/cppeditor/cppeditor.cpp | 8 ++++---- src/plugins/texteditor/basetexteditor.h | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 465c51a6d0a..8e177406bc6 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1934,7 +1934,7 @@ void CPPEditor::updateSemanticInfo(const SemanticInfo &semanticInfo) int line = 0, column = 0; convertPosition(position(), &line, &column); - QList allSelections; + QList unusedSelections; m_renameSelections.clear(); @@ -1955,16 +1955,16 @@ void CPPEditor::updateSemanticInfo(const SemanticInfo &semanticInfo) if (uses.size() == 1) { // it's an unused declaration - // highlightUses(uses, &allSelections); + highlightUses(uses, &unusedSelections); } else if (good) { QList selections; highlightUses(uses, &selections); m_renameSelections += selections; - allSelections += selections; } } - setExtraSelections(CodeSemanticsSelection, allSelections); + setExtraSelections(UnusedSymbolSelection, unusedSelections); + setExtraSelections(CodeSemanticsSelection, m_renameSelections); } SemanticHighlighter::Source CPPEditor::currentSource(bool force) diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index a9495b747e8..9a04cf6076f 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -471,8 +471,9 @@ public: ParenthesesMatchingSelection, CodeWarningsSelection, CodeSemanticsSelection, - OtherSelection, + UnusedSymbolSelection, FakeVimSelection, + OtherSelection, NExtraSelectionKinds }; void setExtraSelections(ExtraSelectionKind kind, const QList &selections); From 4ef64b8dc66e22f31f58ae178405bcd1d1f8f3b0 Mon Sep 17 00:00:00 2001 From: dt Date: Fri, 20 Nov 2009 14:38:43 +0100 Subject: [PATCH 03/62] Fix No Buils Steps label hiding/showing, remove button en/disable --- src/plugins/projectexplorer/buildstepspage.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index 6c2a3c0f011..1e1e71d3fc3 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -129,6 +129,7 @@ void BuildStepsPage::init(const QString &buildConfiguration) } m_noStepsLabel->setVisible(steps.isEmpty()); + m_removeButton->setEnabled(!steps.isEmpty()); // make sure widget is updated foreach(BuildStepsWidgetStruct s, m_buildSteps) { @@ -322,4 +323,6 @@ void BuildStepsPage::updateBuildStepButtonsState() s.upButton->setEnabled((i>0) && !(steps.at(i)->immutable() && steps.at(i - 1))); s.downButton->setEnabled((i + 1< steps.count()) && !(steps.at(i)->immutable() && steps.at(i + 1)->immutable())); } + m_noStepsLabel->setVisible(steps.isEmpty()); + m_removeButton->setEnabled(!steps.isEmpty()); } From ae633c19567d2c4c5b507f34d92e5fbd127faedf Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 23 Nov 2009 12:11:48 +0100 Subject: [PATCH 04/62] Add BuildConfiguration classes Each project has it's own BuildConfiguarion * classes, they'll get a decent type safe interface and the setValue/value stuff will be removed. --- .../cmakebuildconfiguration.cpp | 42 +++++++++++++++ .../cmakebuildconfiguration.h | 42 +++++++++++++++ .../cmakeprojectmanager/cmakeproject.cpp | 13 ++++- .../cmakeprojectmanager/cmakeproject.h | 1 + .../cmakeprojectmanager.pro | 6 ++- .../genericbuildconfiguration.cpp | 46 +++++++++++++++++ .../genericbuildconfiguration.h | 48 +++++++++++++++++ .../genericprojectmanager/genericproject.cpp | 13 ++++- .../genericprojectmanager/genericproject.h | 1 + .../genericprojectmanager.pro | 7 +-- .../projectexplorer/buildconfiguration.h | 19 +++++-- .../buildsettingspropertiespage.cpp | 5 +- src/plugins/projectexplorer/project.cpp | 11 ---- src/plugins/projectexplorer/project.h | 2 +- src/plugins/projectexplorer/session.cpp | 1 - .../qt4buildconfiguration.cpp | 51 +++++++++++++++++++ .../qt4projectmanager/qt4buildconfiguration.h | 50 ++++++++++++++++++ src/plugins/qt4projectmanager/qt4project.cpp | 11 +++- src/plugins/qt4projectmanager/qt4project.h | 1 + .../qt4projectconfigwidget.cpp | 3 +- .../qt4projectmanager/qt4projectmanager.pro | 6 ++- 21 files changed, 348 insertions(+), 31 deletions(-) create mode 100644 src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp create mode 100644 src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h create mode 100644 src/plugins/genericprojectmanager/genericbuildconfiguration.cpp create mode 100644 src/plugins/genericprojectmanager/genericbuildconfiguration.h create mode 100644 src/plugins/qt4projectmanager/qt4buildconfiguration.cpp create mode 100644 src/plugins/qt4projectmanager/qt4buildconfiguration.h diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp new file mode 100644 index 00000000000..3ea888b3bd7 --- /dev/null +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -0,0 +1,42 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "cmakebuildconfiguration.h" + +CMakeBuildConfiguration::CMakeBuildConfiguration(const QString &name) + : BuildConfiguration(name) +{ + +} + +CMakeBuildConfiguration::CMakeBuildConfiguration(const QString &name, BuildConfiguration *source) + : BuildConfiguration(name, source) +{ + +} diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h new file mode 100644 index 00000000000..be98eecda15 --- /dev/null +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -0,0 +1,42 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef CMAKEBUILDCONFIGURATION_H +#define CMAKEBUILDCONFIGURATION_H + +#include + +class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration +{ +public: + CMakeBuildConfiguration(const QString &name); + CMakeBuildConfiguration(const QString &name, BuildConfiguration *source); +}; + +#endif // CMAKEBUILDCONFIGURATION_H diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 8363b7491b5..34262e966a4 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -34,6 +34,7 @@ #include "makestep.h" #include "cmakeopenprojectwizard.h" #include "cmakebuildenvironmentwidget.h" +#include "cmakebuildconfiguration.h" #include #include @@ -103,7 +104,7 @@ bool CMakeBuildConfigurationFactory::create(const QString &type) const &ok); if (!ok || buildConfigurationName.isEmpty()) return false; - BuildConfiguration *bc = new BuildConfiguration(buildConfigurationName); + BuildConfiguration *bc = new CMakeBuildConfiguration(buildConfigurationName); MakeStep *makeStep = new MakeStep(m_project, bc); bc->insertBuildStep(0, makeStep); @@ -132,6 +133,14 @@ bool CMakeBuildConfigurationFactory::create(const QString &type) const return true; } +bool CMakeBuildConfigurationFactory::clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const +{ + CMakeBuildConfiguration *old = static_cast(source); + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(name, old); + m_project->addBuildConfiguration(bc); + return true; +} + /*! \class CMakeProject */ @@ -649,7 +658,7 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader if (copw.exec() != QDialog::Accepted) return false; - ProjectExplorer::BuildConfiguration *bc = new ProjectExplorer::BuildConfiguration("all"); + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration("all"); addBuildConfiguration(bc); bc->setValue("msvcVersion", copw.msvcVersion()); if (!copw.buildDirectory().isEmpty()) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 126061c61be..38595b525cd 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -74,6 +74,7 @@ public: QString displayNameForType(const QString &type) const; bool create(const QString &type) const; + bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; private: CMakeProject *m_project; diff --git a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro index fe516111f6e..fd898b76754 100644 --- a/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro +++ b/src/plugins/cmakeprojectmanager/cmakeprojectmanager.pro @@ -10,7 +10,8 @@ HEADERS = cmakeproject.h \ makestep.h \ cmakerunconfiguration.h \ cmakeopenprojectwizard.h \ - cmakebuildenvironmentwidget.h + cmakebuildenvironmentwidget.h \ + cmakebuildconfiguration.h SOURCES = cmakeproject.cpp \ cmakeprojectplugin.cpp \ cmakeprojectmanager.cpp \ @@ -18,7 +19,8 @@ SOURCES = cmakeproject.cpp \ makestep.cpp \ cmakerunconfiguration.cpp \ cmakeopenprojectwizard.cpp \ - cmakebuildenvironmentwidget.cpp + cmakebuildenvironmentwidget.cpp \ + cmakebuildconfiguration.cpp RESOURCES += cmakeproject.qrc FORMS += diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp new file mode 100644 index 00000000000..04385f82121 --- /dev/null +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -0,0 +1,46 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "genericbuildconfiguration.h" + +using namespace GenericProjectManager; +using namespace GenericProjectManager::Internal; +using ProjectExplorer::BuildConfiguration; + +GenericBuildConfiguration::GenericBuildConfiguration(const QString &name) + : BuildConfiguration(name) +{ + +} + +GenericBuildConfiguration::GenericBuildConfiguration(const QString &name, GenericBuildConfiguration *source) + : BuildConfiguration(name, source) +{ + +} diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h new file mode 100644 index 00000000000..58f05dc4478 --- /dev/null +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -0,0 +1,48 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef GENERICBUILDCONFIGURATION_H +#define GENERICBUILDCONFIGURATION_H + +#include + +namespace GenericProjectManager { + namespace Internal { + + +class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration +{ +public: + GenericBuildConfiguration(const QString &name); + GenericBuildConfiguration(const QString &name, GenericBuildConfiguration *source); +}; + +} // namespace GenericProjectManager +} // namespace Internal +#endif // GENERICBUILDCONFIGURATION_H diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 7775582cc4a..25e914a9fb8 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -30,6 +30,7 @@ #include "genericproject.h" #include "genericprojectconstants.h" #include "genericmakestep.h" +#include "genericbuildconfiguration.h" #include #include @@ -145,7 +146,7 @@ bool GenericBuildConfigurationFactory::create(const QString &type) const &ok); if (!ok || buildConfigurationName.isEmpty()) return false; - BuildConfiguration *bc = new BuildConfiguration(buildConfigurationName); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(buildConfigurationName); m_project->addBuildConfiguration(bc); // also makes the name unique... GenericMakeStep *makeStep = new GenericMakeStep(m_project, bc); @@ -154,6 +155,14 @@ bool GenericBuildConfigurationFactory::create(const QString &type) const return true; } +bool GenericBuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const +{ + // TODO + GenericBuildConfiguration *bc = new GenericBuildConfiguration(name, static_cast(source)); + m_project->addBuildConfiguration(bc); + return true; +} + //////////////////////////////////////////////////////////////////////////////////// // GenericProject //////////////////////////////////////////////////////////////////////////////////// @@ -518,7 +527,7 @@ bool GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead Project::restoreSettingsImpl(reader); if (buildConfigurations().isEmpty()) { - ProjectExplorer::BuildConfiguration *bc = new BuildConfiguration("all"); + GenericBuildConfiguration *bc = new GenericBuildConfiguration("all"); addBuildConfiguration(bc); GenericMakeStep *makeStep = new GenericMakeStep(this, bc); diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index 784951aa23a..c0a3c042036 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -67,6 +67,7 @@ public: QString displayNameForType(const QString &type) const; bool create(const QString &type) const; + bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; private: GenericProject *m_project; diff --git a/src/plugins/genericprojectmanager/genericprojectmanager.pro b/src/plugins/genericprojectmanager/genericprojectmanager.pro index a58404176a9..cc7f6164242 100644 --- a/src/plugins/genericprojectmanager/genericprojectmanager.pro +++ b/src/plugins/genericprojectmanager/genericprojectmanager.pro @@ -10,7 +10,8 @@ HEADERS = genericproject.h \ genericprojectwizard.h \ genericprojectfileseditor.h \ pkgconfigtool.h \ - genericmakestep.h + genericmakestep.h \ + genericbuildconfiguration.h SOURCES = genericproject.cpp \ genericprojectplugin.cpp \ genericprojectmanager.cpp \ @@ -18,8 +19,8 @@ SOURCES = genericproject.cpp \ genericprojectwizard.cpp \ genericprojectfileseditor.cpp \ pkgconfigtool.cpp \ - genericmakestep.cpp + genericmakestep.cpp \ + genericbuildconfiguration.cpp RESOURCES += genericproject.qrc FORMS += genericmakestep.ui - OTHER_FILES += GenericProjectManager.pluginspec diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 54ec4a69013..a6acb4c1c30 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -50,13 +50,14 @@ class PROJECTEXPLORER_EXPORT BuildConfiguration : public QObject Q_OBJECT public: - BuildConfiguration(const QString &name); - BuildConfiguration(const QString &name, BuildConfiguration *source); - ~BuildConfiguration(); + // ctors are protected + virtual ~BuildConfiguration(); + QString name() const; QString displayName() const; void setDisplayName(const QString &name); + // TODO remove those QVariant value(const QString &key) const; void setValue(const QString &key, QVariant value); @@ -73,6 +74,10 @@ public: void removeCleanStep(int position); void moveCleanStepUp(int position); +protected: + BuildConfiguration(const QString &name); + BuildConfiguration(const QString &name, BuildConfiguration *source); + private: void setName(const QString &name); @@ -101,6 +106,14 @@ public: // returns true if build configuration(s) actually have been added virtual bool create(const QString &type) const = 0; + // clones a given BuildConfiguration + virtual bool clone(const QString &name, BuildConfiguration *source) const = 0; + + // TODO All those methods make the internal name (and display name) unique, + // but in different ways + + //virtual bool restore(const QString &name); + // to come: // restore // clone diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index fac04077b61..bf2fcf13fd0 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -356,7 +356,10 @@ void BuildSettingsWidget::cloneConfiguration(const QString &sourceConfiguration) newBuildConfiguration = Project::makeUnique(newBuildConfiguration, buildConfigurationNames); - m_project->copyBuildConfiguration(sourceConfiguration, newBuildConfiguration); + BuildConfiguration *sourceBc = m_project->buildConfiguration(sourceConfiguration); + + m_project->buildConfigurationFactory()->clone(newBuildConfiguration, sourceBc); + m_project->setDisplayNameFor(m_project->buildConfiguration(newBuildConfiguration), newDisplayName); m_buildConfiguration = newBuildConfiguration; diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index e8c0b31c844..37bd4d3fa0c 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -109,17 +109,6 @@ void Project::removeBuildConfiguration(BuildConfiguration *configuration) delete configuration; } -void Project::copyBuildConfiguration(const QString &source, const QString &dest) -{ - BuildConfiguration *sourceConfiguration = buildConfiguration(source); - if (!sourceConfiguration) - return; - - m_buildConfigurationValues.push_back(new BuildConfiguration(dest, sourceConfiguration)); - - emit addedBuildConfiguration(this, dest); -} - QList Project::buildConfigurations() const { return m_buildConfigurationValues; diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 6ad90351f4f..2e7e43a6972 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -86,7 +86,7 @@ public: // Build configuration void addBuildConfiguration(BuildConfiguration *configuration); void removeBuildConfiguration(BuildConfiguration *configuration); - void copyBuildConfiguration(const QString &source, const QString &dest); + BuildConfiguration *buildConfiguration(const QString & name) const; QList buildConfigurations() const; // remove and add "QString uniqueConfigurationDisplayName(const QString &proposedName) const" instead diff --git a/src/plugins/projectexplorer/session.cpp b/src/plugins/projectexplorer/session.cpp index 8dcb7c238d2..8fb3b897d51 100644 --- a/src/plugins/projectexplorer/session.cpp +++ b/src/plugins/projectexplorer/session.cpp @@ -853,7 +853,6 @@ Project *SessionManager::projectForFile(const QString &fileName) const foreach (Project *p, projectList) if (p != currentProject && projectContainsFile(p, fileName)) return p; - return 0; } diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp new file mode 100644 index 00000000000..cc62dbe4484 --- /dev/null +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -0,0 +1,51 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#include "qt4buildconfiguration.h" + +using namespace Qt4ProjectManager; +using namespace Qt4ProjectManager::Internal; +using ProjectExplorer::BuildConfiguration; + +Qt4BuildConfiguration::Qt4BuildConfiguration(const QString &name) + : BuildConfiguration(name) +{ + +} + +Qt4BuildConfiguration::Qt4BuildConfiguration(const QString &name, Qt4BuildConfiguration *source) + : BuildConfiguration(name, source) +{ + +} + +Qt4BuildConfiguration::~Qt4BuildConfiguration() +{ + +} diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h new file mode 100644 index 00000000000..d359a7810ae --- /dev/null +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -0,0 +1,50 @@ +/************************************************************************** +** +** This file is part of Qt Creator +** +** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +** +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** Commercial Usage +** +** Licensees holding valid Qt Commercial licenses may use this file in +** accordance with the Qt Commercial License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Nokia. +** +** 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. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** +**************************************************************************/ + +#ifndef QT4BUILDCONFIGURATION_H +#define QT4BUILDCONFIGURATION_H + +#include + +namespace Qt4ProjectManager { +namespace Internal { + +class Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration +{ +public: + Qt4BuildConfiguration(const QString &name); + // copy ctor + Qt4BuildConfiguration(const QString &name, Qt4BuildConfiguration *source); + ~Qt4BuildConfiguration(); +}; + +} // namespace Qt4ProjectManager +} // namespace Internal + +#endif // QT4BUILDCONFIGURATION_H diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 4f23d4bbbab..7c127bba263 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -41,6 +41,7 @@ #include "qt4projectmanagerconstants.h" #include "projectloadwizard.h" #include "qtversionmanager.h" +#include "qt4buildconfiguration.h" #ifdef QTCREATOR_WITH_S60 #include "qt-s60/gccetoolchain.h" @@ -295,6 +296,14 @@ bool Qt4BuildConfigurationFactory::create(const QString &type) const return true; } +bool Qt4BuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const +{ + Qt4BuildConfiguration *oldbc = static_cast(source); + Qt4BuildConfiguration *newbc = new Qt4BuildConfiguration(name, oldbc); + m_project->addBuildConfiguration(newbc); + return true; +} + /*! \class Qt4Project @@ -443,7 +452,7 @@ void Qt4Project::addQt4BuildConfiguration(QString buildConfigurationName, QtVers bool debug = qmakeBuildConfiguration & QtVersion::DebugBuild; // Add the buildconfiguration - ProjectExplorer::BuildConfiguration *bc = new ProjectExplorer::BuildConfiguration(buildConfigurationName); + Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(buildConfigurationName); addBuildConfiguration(bc); QMakeStep *qmakeStep = new QMakeStep(this, bc); diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index d5529125b76..84ae43db613 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -131,6 +131,7 @@ public: QString displayNameForType(const QString &type) const; bool create(const QString &type) const; + bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; void update(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index a309cc7e628..fdafc76416f 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -165,8 +165,7 @@ void Qt4ProjectConfigWidget::init(const QString &buildConfiguration) void Qt4ProjectConfigWidget::changeConfigName(const QString &newName) { - m_pro->setDisplayNameFor( - m_pro->buildConfiguration(m_buildConfiguration), newName); + m_pro->setDisplayNameFor(m_pro->buildConfiguration(m_buildConfiguration), newName); } void Qt4ProjectConfigWidget::setupQtVersionsComboBox() diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index b30e3fe8c05..556deeb6a14 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro @@ -39,7 +39,8 @@ HEADERS += qt4projectmanagerplugin.h \ qtuicodemodelsupport.h \ externaleditors.h \ gettingstartedwelcomepagewidget.h \ - gettingstartedwelcomepage.h + gettingstartedwelcomepage.h \ + qt4buildconfiguration.h SOURCES += qt4projectmanagerplugin.cpp \ qt4projectmanager.cpp \ qt4project.cpp \ @@ -74,7 +75,8 @@ SOURCES += qt4projectmanagerplugin.cpp \ qtuicodemodelsupport.cpp \ externaleditors.cpp \ gettingstartedwelcomepagewidget.cpp \ - gettingstartedwelcomepage.cpp + gettingstartedwelcomepage.cpp \ + qt4buildconfiguration.cpp FORMS += makestep.ui \ qmakestep.ui \ qt4projectconfigwidget.ui \ From 20214787d13089b5822ebea1f0be02c0efe75176 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 23 Nov 2009 13:29:45 +0100 Subject: [PATCH 05/62] Add BuildConfiguration::restore and BuildConfiguration::project() More API work. --- .../cmakebuildconfiguration.cpp | 9 +++++++-- .../cmakebuildconfiguration.h | 11 +++++++++- .../cmakeprojectmanager/cmakeproject.cpp | 20 +++++++++++-------- .../cmakeprojectmanager/cmakeproject.h | 5 +++-- .../genericbuildconfiguration.cpp | 5 +++-- .../genericbuildconfiguration.h | 6 ++++-- .../genericprojectmanager/genericproject.cpp | 18 +++++++++++------ .../genericprojectmanager/genericproject.h | 5 +++-- .../projectexplorer/buildconfiguration.cpp | 11 +++++++--- .../projectexplorer/buildconfiguration.h | 16 ++++++++++----- src/plugins/projectexplorer/project.cpp | 4 ++-- .../qt4buildconfiguration.cpp | 5 +++-- .../qt4projectmanager/qt4buildconfiguration.h | 5 ++++- src/plugins/qt4projectmanager/qt4project.cpp | 20 +++++++++++++------ src/plugins/qt4projectmanager/qt4project.h | 14 +++++++------ 15 files changed, 104 insertions(+), 50 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 3ea888b3bd7..4cf0a743919 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -28,9 +28,13 @@ **************************************************************************/ #include "cmakebuildconfiguration.h" +#include "cmakeproject.h" -CMakeBuildConfiguration::CMakeBuildConfiguration(const QString &name) - : BuildConfiguration(name) +using namespace CMakeProjectManager; +using namespace Internal; + +CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeProject *pro, const QString &name) + : BuildConfiguration(pro, name) { } @@ -40,3 +44,4 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(const QString &name, BuildConfi { } + diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index be98eecda15..2152b8bb238 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -32,11 +32,20 @@ #include +namespace CMakeProjectManager { +namespace Internal { + +class CMakeProject; + class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - CMakeBuildConfiguration(const QString &name); + CMakeBuildConfiguration(CMakeProject *pro, const QString &name); CMakeBuildConfiguration(const QString &name, BuildConfiguration *source); }; + +} // namespace Internal +} // namespace CMakeProjectManager + #endif // CMAKEBUILDCONFIGURATION_H diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 34262e966a4..56f321603fc 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -90,7 +90,7 @@ QString CMakeBuildConfigurationFactory::displayNameForType(const QString & /* ty return tr("Create"); } -bool CMakeBuildConfigurationFactory::create(const QString &type) const +BuildConfiguration *CMakeBuildConfigurationFactory::create(const QString &type) const { QTC_ASSERT(type == "Create", return false); @@ -104,7 +104,7 @@ bool CMakeBuildConfigurationFactory::create(const QString &type) const &ok); if (!ok || buildConfigurationName.isEmpty()) return false; - BuildConfiguration *bc = new CMakeBuildConfiguration(buildConfigurationName); + BuildConfiguration *bc = new CMakeBuildConfiguration(m_project, buildConfigurationName); MakeStep *makeStep = new MakeStep(m_project, bc); bc->insertBuildStep(0, makeStep); @@ -130,15 +130,21 @@ bool CMakeBuildConfigurationFactory::create(const QString &type) const // Default to all if (m_project->targets().contains("all")) makeStep->setBuildTarget("all", true); - return true; + return bc; } -bool CMakeBuildConfigurationFactory::clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const +BuildConfiguration *CMakeBuildConfigurationFactory::clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const { CMakeBuildConfiguration *old = static_cast(source); CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(name, old); m_project->addBuildConfiguration(bc); - return true; + return bc; +} + +BuildConfiguration *CMakeBuildConfigurationFactory::restore(const QString &name) const +{ + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(m_project, name); + return bc; } /*! @@ -658,7 +664,7 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader if (copw.exec() != QDialog::Accepted) return false; - CMakeBuildConfiguration *bc = new CMakeBuildConfiguration("all"); + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(this, "all"); addBuildConfiguration(bc); bc->setValue("msvcVersion", copw.msvcVersion()); if (!copw.buildDirectory().isEmpty()) @@ -677,8 +683,6 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader // We have a user file, but we could still be missing the cbp file // or simply run createXml with the saved settings QFileInfo sourceFileInfo(m_fileName); - QStringList needToCreate; - QStringList needToUpdate; BuildConfiguration *activeBC = activeBuildConfiguration(); QString cbpFile = CMakeManager::findCbpFile(QDir(buildDirectory(activeBC))); QFileInfo cbpFileFi(cbpFile); diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 38595b525cd..6e61e7889f8 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -73,8 +73,9 @@ public: QStringList availableCreationTypes() const; QString displayNameForType(const QString &type) const; - bool create(const QString &type) const; - bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *create(const QString &type) const; + ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore(const QString &name) const; private: CMakeProject *m_project; diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 04385f82121..9e1f05a7ea5 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -28,13 +28,14 @@ **************************************************************************/ #include "genericbuildconfiguration.h" +#include "genericproject.h" using namespace GenericProjectManager; using namespace GenericProjectManager::Internal; using ProjectExplorer::BuildConfiguration; -GenericBuildConfiguration::GenericBuildConfiguration(const QString &name) - : BuildConfiguration(name) +GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, const QString &name) + : BuildConfiguration(pro, name) { } diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index 58f05dc4478..5cfd664032d 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -33,13 +33,15 @@ #include namespace GenericProjectManager { - namespace Internal { +namespace Internal { + +class GenericProject; class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - GenericBuildConfiguration(const QString &name); + GenericBuildConfiguration(GenericProject *pro, const QString &name); GenericBuildConfiguration(const QString &name, GenericBuildConfiguration *source); }; diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 25e914a9fb8..40bf9fee978 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -132,7 +132,7 @@ QString GenericBuildConfigurationFactory::displayNameForType(const QString & /* return tr("Create"); } -bool GenericBuildConfigurationFactory::create(const QString &type) const +BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type) const { QTC_ASSERT(type == "Create", return false); //TODO asking for name is duplicated everywhere, but maybe more @@ -146,21 +146,27 @@ bool GenericBuildConfigurationFactory::create(const QString &type) const &ok); if (!ok || buildConfigurationName.isEmpty()) return false; - GenericBuildConfiguration *bc = new GenericBuildConfiguration(buildConfigurationName); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, buildConfigurationName); m_project->addBuildConfiguration(bc); // also makes the name unique... GenericMakeStep *makeStep = new GenericMakeStep(m_project, bc); bc->insertBuildStep(0, makeStep); makeStep->setBuildTarget("all", /* on = */ true); - return true; + return bc; } -bool GenericBuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const +BuildConfiguration *GenericBuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const { // TODO GenericBuildConfiguration *bc = new GenericBuildConfiguration(name, static_cast(source)); m_project->addBuildConfiguration(bc); - return true; + return bc; +} + +BuildConfiguration *GenericBuildConfigurationFactory::restore(const QString &name) const +{ + GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, name); + return bc; } //////////////////////////////////////////////////////////////////////////////////// @@ -527,7 +533,7 @@ bool GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead Project::restoreSettingsImpl(reader); if (buildConfigurations().isEmpty()) { - GenericBuildConfiguration *bc = new GenericBuildConfiguration("all"); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(this, "all"); addBuildConfiguration(bc); GenericMakeStep *makeStep = new GenericMakeStep(this, bc); diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index c0a3c042036..6ad13b2bda8 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -66,8 +66,9 @@ public: QStringList availableCreationTypes() const; QString displayNameForType(const QString &type) const; - bool create(const QString &type) const; - bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *create(const QString &type) const; + ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore(const QString &name) const; private: GenericProject *m_project; diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index a9cbeda862e..3c80b43b5d5 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -44,14 +44,14 @@ IBuildStepFactory *findFactory(const QString &name) return 0; } -BuildConfiguration::BuildConfiguration(const QString &name) - : m_name(name) +BuildConfiguration::BuildConfiguration(Project *pro, const QString &name) + : m_name(name), m_project(pro) { setDisplayName(name); } BuildConfiguration::BuildConfiguration(const QString &name, BuildConfiguration *source) - : m_values(source->m_values), m_name(name) + : m_values(source->m_values), m_name(name), m_project(source->m_project) { foreach(BuildStep *originalbs, source->buildSteps()) { IBuildStepFactory *factory = findFactory(originalbs->name()); @@ -172,6 +172,11 @@ void BuildConfiguration::moveCleanStepUp(int position) m_cleanSteps.swap(position - 1, position); } +Project *BuildConfiguration::project() const +{ + return m_project; +} + /// // IBuildConfigurationFactory /// diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index a6acb4c1c30..2f7f05c1cfc 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -74,8 +74,10 @@ public: void removeCleanStep(int position); void moveCleanStepUp(int position); + Project *project() const; + protected: - BuildConfiguration(const QString &name); + BuildConfiguration(Project * project, const QString &name); BuildConfiguration(const QString &name, BuildConfiguration *source); private: @@ -86,6 +88,7 @@ private: QHash m_values; QString m_name; + Project *m_project; friend class Project; // for setName }; @@ -104,15 +107,18 @@ public: // creates build configuration(s) for given type and adds them to project // returns true if build configuration(s) actually have been added - virtual bool create(const QString &type) const = 0; + virtual BuildConfiguration *create(const QString &type) const = 0; + + // clones a given BuildConfiguration and adds it to the project + virtual BuildConfiguration *clone(const QString &name, BuildConfiguration *source) const = 0; + + // restores a BuildConfiguration with the name and adds it to the project + virtual BuildConfiguration *restore(const QString &name) const = 0; - // clones a given BuildConfiguration - virtual bool clone(const QString &name, BuildConfiguration *source) const = 0; // TODO All those methods make the internal name (and display name) unique, // but in different ways - //virtual bool restore(const QString &name); // to come: // restore diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 37bd4d3fa0c..2ac3d728a3f 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -222,8 +222,8 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) // restoring BuldConfigurations from settings const QStringList buildConfigurationNames = reader.restoreValue("buildconfigurations").toStringList(); foreach (const QString &buildConfigurationName, buildConfigurationNames) { - BuildConfiguration *bc = new BuildConfiguration(buildConfigurationName); - addBuildConfiguration(bc); + BuildConfiguration *bc = buildConfigurationFactory()->restore(buildConfigurationName); + QMap temp = reader.restoreValue("buildConfiguration-" + buildConfigurationName).toMap(); bc->setValuesFromMap(temp); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index cc62dbe4484..05d90274633 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -28,13 +28,14 @@ **************************************************************************/ #include "qt4buildconfiguration.h" +#include "qt4project.h" using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; using ProjectExplorer::BuildConfiguration; -Qt4BuildConfiguration::Qt4BuildConfiguration(const QString &name) - : BuildConfiguration(name) +Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Project *pro, const QString &name) + : BuildConfiguration(pro, name) { } diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index d359a7810ae..8ea2cd81160 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -33,12 +33,15 @@ #include namespace Qt4ProjectManager { + +class Qt4Project; + namespace Internal { class Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - Qt4BuildConfiguration(const QString &name); + Qt4BuildConfiguration(Qt4Project *pro, const QString &name); // copy ctor Qt4BuildConfiguration(const QString &name, Qt4BuildConfiguration *source); ~Qt4BuildConfiguration(); diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 7c127bba263..c7c5979614b 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -270,7 +270,7 @@ QString Qt4BuildConfigurationFactory::displayNameForType(const QString &type) co return QString(); } -bool Qt4BuildConfigurationFactory::create(const QString &type) const +BuildConfiguration *Qt4BuildConfigurationFactory::create(const QString &type) const { QTC_ASSERT(m_versions.contains(type), return false); const VersionInfo &info = m_versions.value(type); @@ -290,18 +290,25 @@ bool Qt4BuildConfigurationFactory::create(const QString &type) const m_project->addQt4BuildConfiguration(tr("%1 Debug").arg(buildConfigurationName), version, (version->defaultBuildConfig() | QtVersion::DebugBuild)); + BuildConfiguration *bc = m_project->addQt4BuildConfiguration(tr("%1 Release").arg(buildConfigurationName), version, (version->defaultBuildConfig() & ~QtVersion::DebugBuild)); - return true; + return bc; } -bool Qt4BuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const +BuildConfiguration *Qt4BuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const { Qt4BuildConfiguration *oldbc = static_cast(source); Qt4BuildConfiguration *newbc = new Qt4BuildConfiguration(name, oldbc); m_project->addBuildConfiguration(newbc); - return true; + return newbc; +} + +BuildConfiguration *Qt4BuildConfigurationFactory::restore(const QString &name) const +{ + Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(m_project, name); + return bc; } /*! @@ -445,14 +452,14 @@ ProjectExplorer::IBuildConfigurationFactory *Qt4Project::buildConfigurationFacto return m_buildConfigurationFactory; } -void Qt4Project::addQt4BuildConfiguration(QString buildConfigurationName, QtVersion *qtversion, +Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigurationName, QtVersion *qtversion, QtVersion::QmakeBuildConfigs qmakeBuildConfiguration, QStringList additionalArguments) { bool debug = qmakeBuildConfiguration & QtVersion::DebugBuild; // Add the buildconfiguration - Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(buildConfigurationName); + Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this, buildConfigurationName); addBuildConfiguration(bc); QMakeStep *qmakeStep = new QMakeStep(this, bc); @@ -479,6 +486,7 @@ void Qt4Project::addQt4BuildConfiguration(QString buildConfigurationName, QtVers setQtVersion(bc, 0); else setQtVersion(bc, qtversion->uniqueId()); + return bc; } namespace { diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 84ae43db613..e0faac766c3 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -73,6 +73,7 @@ namespace Internal { class GCCPreprocessor; struct Qt4ProjectFiles; class Qt4ProjectConfigWidget; + class Qt4BuildConfiguration; class CodeModelInfo { @@ -130,8 +131,9 @@ public: QStringList availableCreationTypes() const; QString displayNameForType(const QString &type) const; - bool create(const QString &type) const; - bool clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *create(const QString &type) const; + ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore(const QString &name) const; void update(); @@ -162,10 +164,10 @@ public: Qt4Manager *qt4ProjectManager() const; ProjectExplorer::IBuildConfigurationFactory *buildConfigurationFactory() const; - void addQt4BuildConfiguration(QString buildConfigurationName, - QtVersion *qtversion, - QtVersion::QmakeBuildConfigs qmakeBuildConfiguration, - QStringList additionalArguments = QStringList()); + Internal::Qt4BuildConfiguration *addQt4BuildConfiguration(QString buildConfigurationName, + QtVersion *qtversion, + QtVersion::QmakeBuildConfigs qmakeBuildConfiguration, + QStringList additionalArguments = QStringList()); QList dependencies(); //NBS remove QListdependsOn(); From 60a1ee12ba09085f9e14e1a4f6e915705a4c4b48 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 23 Nov 2009 15:47:26 +0100 Subject: [PATCH 06/62] Remove project() from BuildStep The project() should in most cases not matter, instead the BuildConfiguration should. This shows all the information that needs to move into the BuildConfiguration classes. --- .../cmakeprojectmanager/cmakeproject.cpp | 8 ++-- src/plugins/cmakeprojectmanager/makestep.cpp | 26 ++++------ src/plugins/cmakeprojectmanager/makestep.h | 6 +-- .../genericprojectmanager/genericmakestep.cpp | 34 ++++++------- .../genericprojectmanager/genericmakestep.h | 7 +-- .../genericprojectmanager/genericproject.cpp | 4 +- .../projectexplorer/abstractmakestep.cpp | 7 +-- .../projectexplorer/abstractmakestep.h | 2 +- .../projectexplorer/abstractprocessstep.cpp | 4 +- .../projectexplorer/abstractprocessstep.h | 2 +- src/plugins/projectexplorer/buildmanager.cpp | 22 +++++---- src/plugins/projectexplorer/buildstep.cpp | 11 ++--- src/plugins/projectexplorer/buildstep.h | 9 ++-- .../projectexplorer/buildstepspage.cpp | 2 +- src/plugins/projectexplorer/processstep.cpp | 13 ++--- src/plugins/projectexplorer/processstep.h | 4 +- src/plugins/projectexplorer/project.cpp | 8 ++-- src/plugins/qt4projectmanager/makestep.cpp | 21 ++++---- src/plugins/qt4projectmanager/makestep.h | 4 +- src/plugins/qt4projectmanager/qmakestep.cpp | 48 +++++++++++-------- src/plugins/qt4projectmanager/qmakestep.h | 5 +- src/plugins/qt4projectmanager/qt4project.cpp | 6 +-- 22 files changed, 120 insertions(+), 133 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 56f321603fc..9c42cbf1b12 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -106,10 +106,10 @@ BuildConfiguration *CMakeBuildConfigurationFactory::create(const QString &type) return false; BuildConfiguration *bc = new CMakeBuildConfiguration(m_project, buildConfigurationName); - MakeStep *makeStep = new MakeStep(m_project, bc); + MakeStep *makeStep = new MakeStep(bc); bc->insertBuildStep(0, makeStep); - MakeStep *cleanMakeStep = new MakeStep(m_project, bc); + MakeStep *cleanMakeStep = new MakeStep(bc); bc->insertCleanStep(0, cleanMakeStep); cleanMakeStep->setClean(true); @@ -671,11 +671,11 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader bc->setValue("buildDirectory", copw.buildDirectory()); // Now create a standard build configuration - makeStep = new MakeStep(this, bc); + makeStep = new MakeStep(bc); bc->insertBuildStep(0, makeStep); //TODO save arguments somewhere copw.arguments() - MakeStep *cleanMakeStep = new MakeStep(this, bc); + MakeStep *cleanMakeStep = new MakeStep(bc); bc->insertCleanStep(0, cleanMakeStep); cleanMakeStep->setClean(true); setActiveBuildConfiguration(bc); diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 242a7493d26..e0ea03b4f92 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -42,15 +42,14 @@ using namespace CMakeProjectManager; using namespace CMakeProjectManager::Internal; using namespace ProjectExplorer; -MakeStep::MakeStep(CMakeProject *pro, BuildConfiguration *bc) - : AbstractMakeStep(pro, bc), m_pro(pro), m_clean(false), m_futureInterface(0) +MakeStep::MakeStep(BuildConfiguration *bc) + : AbstractMakeStep(bc), m_clean(false), m_futureInterface(0) { m_percentProgress = QRegExp("^\\[\\s*(\\d*)%\\]"); } MakeStep::MakeStep(MakeStep *bs, BuildConfiguration *bc) : AbstractMakeStep(bs, bc), - m_pro(bs->m_pro), m_clean(bs->m_clean), m_futureInterface(0), m_buildTargets(bs->m_buildTargets), @@ -97,17 +96,19 @@ void MakeStep::storeIntoLocalMap(QMap &map) bool MakeStep::init() { BuildConfiguration *bc = buildConfiguration(); - setBuildParser(m_pro->buildParser(bc)); + // TODO, we should probably have a member cmakeBuildConfiguration(); + CMakeProject *pro = static_cast(buildConfiguration()->project()); + setBuildParser(pro->buildParser(bc)); setEnabled(true); - setWorkingDirectory(m_pro->buildDirectory(bc)); + setWorkingDirectory(pro->buildDirectory(bc)); - setCommand(m_pro->toolChain(bc)->makeCommand()); + setCommand(pro->toolChain(bc)->makeCommand()); QStringList arguments = m_buildTargets; arguments << additionalArguments(); setArguments(arguments); - setEnvironment(m_pro->environment(bc)); + setEnvironment(pro->environment(bc)); setIgnoreReturnValue(m_clean); return AbstractMakeStep::init(); @@ -154,11 +155,6 @@ void MakeStep::stdOut(const QString &line) AbstractMakeStep::stdOut(line); } -CMakeProject *MakeStep::project() const -{ - return m_pro; -} - bool MakeStep::buildsTarget(const QString &target) const { return m_buildTargets.contains(target); @@ -277,12 +273,10 @@ bool MakeStepFactory::canCreate(const QString &name) const return (Constants::MAKESTEP == name); } -BuildStep *MakeStepFactory::create(Project *project, BuildConfiguration *bc, const QString &name) const +BuildStep *MakeStepFactory::create(BuildConfiguration *bc, const QString &name) const { Q_ASSERT(name == Constants::MAKESTEP); - CMakeProject *pro = qobject_cast(project); - Q_ASSERT(pro); - return new MakeStep(pro, bc); + return new MakeStep(bc); } BuildStep *MakeStepFactory::clone(BuildStep *bs, BuildConfiguration *bc) const diff --git a/src/plugins/cmakeprojectmanager/makestep.h b/src/plugins/cmakeprojectmanager/makestep.h index 43103252511..f01bb1d6141 100644 --- a/src/plugins/cmakeprojectmanager/makestep.h +++ b/src/plugins/cmakeprojectmanager/makestep.h @@ -49,7 +49,7 @@ class MakeStep : public ProjectExplorer::AbstractMakeStep friend class MakeStepConfigWidget; // TODO remove // This is for modifying internal data public: - MakeStep(CMakeProject *pro, ProjectExplorer::BuildConfiguration *bc); + MakeStep(ProjectExplorer::BuildConfiguration *bc); MakeStep(MakeStep *bs, ProjectExplorer::BuildConfiguration *bc); ~MakeStep(); virtual bool init(); @@ -60,7 +60,6 @@ public: virtual QString displayName(); virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget(); virtual bool immutable() const; - CMakeProject *project() const; bool buildsTarget(const QString &target) const; void setBuildTarget(const QString &target, bool on); QStringList additionalArguments() const; @@ -77,7 +76,6 @@ protected: // For parsing [ 76%] virtual void stdOut(const QString &line); private: - CMakeProject *m_pro; bool m_clean; QRegExp m_percentProgress; QFutureInterface *m_futureInterface; @@ -107,7 +105,7 @@ private: class MakeStepFactory : public ProjectExplorer::IBuildStepFactory { virtual bool canCreate(const QString &name) const; - virtual ProjectExplorer::BuildStep *create(ProjectExplorer::Project *pro, ProjectExplorer::BuildConfiguration *bc, const QString &name) const; + virtual ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString &name) const; virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; virtual QStringList canCreateForProject(ProjectExplorer::Project *pro) const; virtual QString displayNameForName(const QString &name) const; diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index 6fbb3d700f7..eb1debd8f47 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -47,13 +47,13 @@ using namespace GenericProjectManager; using namespace GenericProjectManager::Internal; -GenericMakeStep::GenericMakeStep(GenericProject *pro, ProjectExplorer::BuildConfiguration *bc) - : AbstractMakeStep(pro, bc), m_pro(pro) +GenericMakeStep::GenericMakeStep(ProjectExplorer::BuildConfiguration *bc) + : AbstractMakeStep(bc) { } GenericMakeStep::GenericMakeStep(GenericMakeStep *bs, ProjectExplorer::BuildConfiguration *bc) - : AbstractMakeStep(bs, bc), m_pro(bs->project()) + : AbstractMakeStep(bs, bc) { m_buildTargets = bs->m_buildTargets; m_makeArguments = bs->m_makeArguments; @@ -67,20 +67,21 @@ GenericMakeStep::~GenericMakeStep() bool GenericMakeStep::init() { ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); - const QString buildParser = m_pro->buildParser(bc); + //TODO + GenericProject *pro = static_cast(buildConfiguration()->project()); + const QString buildParser = pro->buildParser(bc); setBuildParser(buildParser); - qDebug() << "*** build parser:" << buildParser; setEnabled(true); Core::VariableManager *vm = Core::VariableManager::instance(); - const QString rawBuildDir = m_pro->buildDirectory(bc); + const QString rawBuildDir = buildConfiguration()->project()->buildDirectory(bc); const QString buildDir = vm->resolve(rawBuildDir); setWorkingDirectory(buildDir); setCommand(makeCommand()); setArguments(replacedArguments()); - setEnvironment(m_pro->environment(bc)); + setEnvironment(buildConfiguration()->project()->environment(bc)); return AbstractMakeStep::init(); } @@ -119,7 +120,9 @@ QString GenericMakeStep::makeCommand() const { QString command = m_makeCommand; if (command.isEmpty()) { - if (ProjectExplorer::ToolChain *toolChain = m_pro->toolChain()) + // TODO + GenericProject *pro = static_cast(buildConfiguration()->project()); + if (ProjectExplorer::ToolChain *toolChain = pro->toolChain()) command = toolChain->makeCommand(); else command = QLatin1String("make"); @@ -152,11 +155,6 @@ bool GenericMakeStep::immutable() const return true; } -GenericProject *GenericMakeStep::project() const -{ - return m_pro; -} - bool GenericMakeStep::buildsTarget(const QString &target) const { return m_buildTargets.contains(target); @@ -184,7 +182,8 @@ GenericMakeStepConfigWidget::GenericMakeStepConfigWidget(GenericMakeStep *makeSt m_ui->setupUi(this); // TODO update this list also on rescans of the GenericLists.txt - GenericProject *pro = m_makeStep->project(); + //TODO + GenericProject *pro = static_cast(m_makeStep->buildConfiguration()->project()); foreach (const QString &target, pro->targets()) { QListWidgetItem *item = new QListWidgetItem(target, m_ui->targetsList); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); @@ -280,14 +279,11 @@ bool GenericMakeStepFactory::canCreate(const QString &name) const return (Constants::MAKESTEP == name); } -ProjectExplorer::BuildStep *GenericMakeStepFactory::create(ProjectExplorer::Project *project, - ProjectExplorer::BuildConfiguration *bc, +ProjectExplorer::BuildStep *GenericMakeStepFactory::create(ProjectExplorer::BuildConfiguration *bc, const QString &name) const { Q_ASSERT(name == Constants::MAKESTEP); - GenericProject *pro = qobject_cast(project); - Q_ASSERT(pro); - return new GenericMakeStep(pro, bc); + return new GenericMakeStep(bc); } ProjectExplorer::BuildStep *GenericMakeStepFactory::clone(ProjectExplorer::BuildStep *bs, diff --git a/src/plugins/genericprojectmanager/genericmakestep.h b/src/plugins/genericprojectmanager/genericmakestep.h index a9cc5bd18b5..c8c059a3501 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.h +++ b/src/plugins/genericprojectmanager/genericmakestep.h @@ -56,7 +56,7 @@ class GenericMakeStep : public ProjectExplorer::AbstractMakeStep Q_OBJECT friend class GenericMakeStepConfigWidget; // TODO remove again? public: - GenericMakeStep(GenericProject *pro, ProjectExplorer::BuildConfiguration *bc); + GenericMakeStep(ProjectExplorer::BuildConfiguration *bc); GenericMakeStep(GenericMakeStep *bs, ProjectExplorer::BuildConfiguration *bc); ~GenericMakeStep(); virtual bool init(); @@ -67,7 +67,6 @@ public: virtual QString displayName(); virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget(); virtual bool immutable() const; - GenericProject *project() const; bool buildsTarget(const QString &target) const; void setBuildTarget(const QString &target, bool on); QStringList replacedArguments() const; @@ -76,7 +75,6 @@ public: virtual void restoreFromLocalMap(const QMap &map); virtual void storeIntoLocalMap(QMap &map); private: - GenericProject *m_pro; QStringList m_buildTargets; QStringList m_makeArguments; QString m_makeCommand; @@ -105,8 +103,7 @@ private: class GenericMakeStepFactory : public ProjectExplorer::IBuildStepFactory { virtual bool canCreate(const QString &name) const; - virtual ProjectExplorer::BuildStep *create(ProjectExplorer::Project *pro, - ProjectExplorer::BuildConfiguration *bc, + virtual ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString &name) const; virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 40bf9fee978..676636e0020 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -149,7 +149,7 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, buildConfigurationName); m_project->addBuildConfiguration(bc); // also makes the name unique... - GenericMakeStep *makeStep = new GenericMakeStep(m_project, bc); + GenericMakeStep *makeStep = new GenericMakeStep(bc); bc->insertBuildStep(0, makeStep); makeStep->setBuildTarget("all", /* on = */ true); return bc; @@ -536,7 +536,7 @@ bool GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead GenericBuildConfiguration *bc = new GenericBuildConfiguration(this, "all"); addBuildConfiguration(bc); - GenericMakeStep *makeStep = new GenericMakeStep(this, bc); + GenericMakeStep *makeStep = new GenericMakeStep(bc); bc->insertBuildStep(0, makeStep); makeStep->setBuildTarget("all", /* on = */ true); diff --git a/src/plugins/projectexplorer/abstractmakestep.cpp b/src/plugins/projectexplorer/abstractmakestep.cpp index 56e41862f78..6a3573ba839 100644 --- a/src/plugins/projectexplorer/abstractmakestep.cpp +++ b/src/plugins/projectexplorer/abstractmakestep.cpp @@ -31,6 +31,7 @@ #include "projectexplorerconstants.h" #include "project.h" +#include "buildconfiguration.h" #include #include @@ -46,8 +47,8 @@ namespace { bool debug = false; } -AbstractMakeStep::AbstractMakeStep(Project *project, BuildConfiguration *bc) - : AbstractProcessStep(project, bc), +AbstractMakeStep::AbstractMakeStep(BuildConfiguration *bc) + : AbstractProcessStep(bc), m_buildParser(0) { } @@ -144,7 +145,7 @@ void AbstractMakeStep::slotAddToTaskWindow(const TaskWindow::Task &task) if (debug) qDebug() << "No success. Trying all files in project ..."; QString fileName = QFileInfo(filePath).fileName(); - foreach (const QString &file, project()->files(ProjectExplorer::Project::AllFiles)) { + foreach (const QString &file, buildConfiguration()->project()->files(ProjectExplorer::Project::AllFiles)) { QFileInfo candidate(file); if (candidate.fileName() == fileName) { if (debug) diff --git a/src/plugins/projectexplorer/abstractmakestep.h b/src/plugins/projectexplorer/abstractmakestep.h index de15f380c25..4d8f9268bfa 100644 --- a/src/plugins/projectexplorer/abstractmakestep.h +++ b/src/plugins/projectexplorer/abstractmakestep.h @@ -46,7 +46,7 @@ class PROJECTEXPLORER_EXPORT AbstractMakeStep : public ProjectExplorer::Abstract { Q_OBJECT public: - AbstractMakeStep(Project * project, BuildConfiguration *bc); + AbstractMakeStep(BuildConfiguration *bc); AbstractMakeStep(AbstractMakeStep *bs, BuildConfiguration *bc); ~AbstractMakeStep(); virtual bool init(); diff --git a/src/plugins/projectexplorer/abstractprocessstep.cpp b/src/plugins/projectexplorer/abstractprocessstep.cpp index 399fd8ab423..af92a62ec67 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.cpp +++ b/src/plugins/projectexplorer/abstractprocessstep.cpp @@ -39,8 +39,8 @@ using namespace ProjectExplorer; -AbstractProcessStep::AbstractProcessStep(Project *pro, BuildConfiguration *bc) - : BuildStep(pro, bc), m_timer(0), m_futureInterface(0), m_process(0), m_eventLoop(0) +AbstractProcessStep::AbstractProcessStep(BuildConfiguration *bc) + : BuildStep(bc), m_timer(0), m_futureInterface(0), m_process(0), m_eventLoop(0) { } diff --git a/src/plugins/projectexplorer/abstractprocessstep.h b/src/plugins/projectexplorer/abstractprocessstep.h index b1d62a62c5d..2c725f0b01a 100644 --- a/src/plugins/projectexplorer/abstractprocessstep.h +++ b/src/plugins/projectexplorer/abstractprocessstep.h @@ -65,7 +65,7 @@ class PROJECTEXPLORER_EXPORT AbstractProcessStep : public BuildStep { Q_OBJECT public: - AbstractProcessStep(Project *pro, BuildConfiguration *bc); + AbstractProcessStep(BuildConfiguration *bc); AbstractProcessStep(AbstractProcessStep *bs, BuildConfiguration *bc); /// reimplemented from BuildStep::init() /// You need to call this from YourBuildStep::init() diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp index 9b1fc2fe436..4f5a27a0192 100644 --- a/src/plugins/projectexplorer/buildmanager.cpp +++ b/src/plugins/projectexplorer/buildmanager.cpp @@ -136,7 +136,7 @@ void BuildManager::cancel() this, SLOT(addToTaskWindow(ProjectExplorer::TaskWindow::Task))); disconnect(m_currentBuildStep, SIGNAL(addToOutputWindow(QString)), this, SLOT(addToOutputWindow(QString))); - decrementActiveBuildSteps(m_currentBuildStep->project()); + decrementActiveBuildSteps(m_currentBuildStep->buildConfiguration()->project()); m_progressFutureInterface->setProgressValueAndText(m_progress*100, "Build canceled"); //TODO NBS fix in qtconcurrent clearBuildQueue(); @@ -169,7 +169,7 @@ void BuildManager::emitCancelMessage() void BuildManager::clearBuildQueue() { foreach (BuildStep * bs, m_buildQueue) - decrementActiveBuildSteps(bs->project()); + decrementActiveBuildSteps(bs->buildConfiguration()->project()); m_buildQueue.clear(); m_running = false; @@ -280,13 +280,14 @@ void BuildManager::nextBuildQueue() bool result = m_watcher.result(); if (!result) { // Build Failure - addToOutputWindow(tr("Error while building project %1").arg(m_currentBuildStep->project()->name())); + const QString projectName = m_currentBuildStep->buildConfiguration()->project()->name(); + addToOutputWindow(tr("Error while building project %1").arg(projectName)); addToOutputWindow(tr("When executing build step '%1'").arg(m_currentBuildStep->displayName())); // NBS TODO fix in qtconcurrent - m_progressFutureInterface->setProgressValueAndText(m_progress*100, tr("Error while building project %1").arg(m_currentBuildStep->project()->name())); + m_progressFutureInterface->setProgressValueAndText(m_progress*100, tr("Error while building project %1").arg(projectName)); } - decrementActiveBuildSteps(m_currentBuildStep->project()); + decrementActiveBuildSteps(m_currentBuildStep->buildConfiguration()->project()); if (result) nextStep(); else @@ -317,17 +318,18 @@ void BuildManager::nextStep() bool init = m_currentBuildStep->init(); if (!init) { - addToOutputWindow(tr("Error while building project %1").arg(m_currentBuildStep->project()->name())); + const QString projectName = m_currentBuildStep->buildConfiguration()->project()->name(); + addToOutputWindow(tr("Error while building project %1").arg(projectName)); addToOutputWindow(tr("When executing build step '%1'").arg(m_currentBuildStep->displayName())); cancel(); return; } - if (m_currentBuildStep->project() != m_previousBuildStepProject) { - const QString projectName = m_currentBuildStep->project()->name(); + if (m_currentBuildStep->buildConfiguration()->project() != m_previousBuildStepProject) { + const QString projectName = m_currentBuildStep->buildConfiguration()->project()->name(); addToOutputWindow(tr("Running build steps for project %2...") .arg(projectName)); - m_previousBuildStepProject = m_currentBuildStep->project(); + m_previousBuildStepProject = m_currentBuildStep->buildConfiguration()->project(); } m_watcher.setFuture(QtConcurrent::run(&BuildStep::run, m_currentBuildStep)); } else { @@ -346,7 +348,7 @@ void BuildManager::buildQueueAppend(BuildStep * bs) { m_buildQueue.append(bs); ++m_maxProgress; - incrementActiveBuildSteps(bs->project()); + incrementActiveBuildSteps(bs->buildConfiguration()->project()); } void BuildManager::buildProjects(const QList &projects, const QList &configurations) diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index ef0b07c9ffc..360ad3dc4b2 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -36,13 +36,13 @@ using namespace ProjectExplorer; -BuildStep::BuildStep(Project * pro, BuildConfiguration *bc) - : m_project(pro), m_buildConfiguration(bc) +BuildStep::BuildStep(BuildConfiguration *bc) + : m_buildConfiguration(bc) { } BuildStep::BuildStep(BuildStep *bs, BuildConfiguration *bc) - : m_project(bs->m_project), m_buildConfiguration(bc) + : m_buildConfiguration(bc) { } @@ -68,11 +68,6 @@ void BuildStep::storeIntoLocalMap(QMap &map) Q_UNUSED(map) } -Project *BuildStep::project() const -{ - return m_project; -} - BuildConfiguration *BuildStep::buildConfiguration() const { return m_buildConfiguration; diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index aafb119d24f..f8a481a556a 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -37,7 +37,7 @@ #include namespace ProjectExplorer { - +// TODO remove this class Project; class BuildConfiguration; @@ -71,9 +71,8 @@ class BuildStepConfigWidget; class PROJECTEXPLORER_EXPORT BuildStep : public QObject { Q_OBJECT - friend class Project; //for managing BuildConfigurations protected: - BuildStep(Project *p, BuildConfiguration *bc); + BuildStep(BuildConfiguration *bc); BuildStep(BuildStep *bs, BuildConfiguration *bc); public: @@ -110,7 +109,6 @@ public: virtual void restoreFromLocalMap(const QMap &map); virtual void storeIntoLocalMap(QMap &map); - Project *project() const; BuildConfiguration *buildConfiguration() const; Q_SIGNALS: @@ -120,7 +118,6 @@ Q_SIGNALS: void addToOutputWindow(const QString &string); private: - Project *m_project; BuildConfiguration *m_buildConfiguration; }; @@ -135,7 +132,7 @@ public: /// Called to check wheter this factory can restore the named BuildStep virtual bool canCreate(const QString &name) const = 0; /// Called to restore a buildstep - virtual BuildStep *create(Project *pro, BuildConfiguration *bc, const QString &name) const = 0; + virtual BuildStep *create(BuildConfiguration *bc, const QString &name) const = 0; /// Called by the add BuildStep action to check which BuildSteps could be added /// to the project by this factory, should return a list of names virtual QStringList canCreateForProject(Project *pro) const = 0; diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index 1e1e71d3fc3..35d3ba8c264 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -216,7 +216,7 @@ void BuildStepsPage::addBuildStep() if (QAction *action = qobject_cast(sender())) { BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); QPair pair = m_addBuildStepHash.value(action); - BuildStep *newStep = pair.second->create(m_pro, bc, pair.first); + BuildStep *newStep = pair.second->create(bc, pair.first); int pos = m_clean ? bc->cleanSteps().count() : bc->buildSteps().count(); m_clean ? bc->insertCleanStep(pos, newStep) : bc->insertBuildStep(pos, newStep); diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index eab3735146c..0add381c24d 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -30,6 +30,7 @@ #include "processstep.h" #include "buildstep.h" #include "project.h" +#include "buildconfiguration.h" #include #include @@ -45,8 +46,8 @@ static const char * const PROCESS_WORKINGDIRECTORY = "abstractProcess.workingDir static const char * const PROCESS_ARGUMENTS = "abstractProcess.arguments"; static const char * const PROCESS_ENABLED = "abstractProcess.enabled"; -ProcessStep::ProcessStep(Project *pro, BuildConfiguration *bc) - : AbstractProcessStep(pro, bc) +ProcessStep::ProcessStep(BuildConfiguration *bc) + : AbstractProcessStep(bc) { } @@ -64,12 +65,12 @@ ProcessStep::ProcessStep(ProcessStep *bs, BuildConfiguration *bc) bool ProcessStep::init() { - setEnvironment(project()->environment(buildConfiguration())); + setEnvironment(buildConfiguration()->project()->environment(buildConfiguration())); QString wd = workingDirectory(); if (wd.isEmpty()) wd = "$BUILDDIR"; - AbstractProcessStep::setWorkingDirectory(wd.replace("$BUILDDIR", project()->buildDirectory(buildConfiguration()))); + AbstractProcessStep::setWorkingDirectory(wd.replace("$BUILDDIR", buildConfiguration()->project()->buildDirectory(buildConfiguration()))); AbstractProcessStep::setCommand(m_command); AbstractProcessStep::setEnabled(m_enabled); AbstractProcessStep::setArguments(m_arguments); @@ -200,10 +201,10 @@ bool ProcessStepFactory::canCreate(const QString &name) const return name == "projectexplorer.processstep"; } -BuildStep *ProcessStepFactory::create(Project *pro, BuildConfiguration *bc, const QString &name) const +BuildStep *ProcessStepFactory::create(BuildConfiguration *bc, const QString &name) const { Q_UNUSED(name) - return new ProcessStep(pro, bc); + return new ProcessStep(bc); } BuildStep *ProcessStepFactory::clone(BuildStep *bs, BuildConfiguration *bc) const diff --git a/src/plugins/projectexplorer/processstep.h b/src/plugins/projectexplorer/processstep.h index 7b64a07af0b..e7e74d0267b 100644 --- a/src/plugins/projectexplorer/processstep.h +++ b/src/plugins/projectexplorer/processstep.h @@ -45,7 +45,7 @@ class ProcessStepFactory : public IBuildStepFactory public: ProcessStepFactory(); virtual bool canCreate(const QString &name) const; - virtual BuildStep *create(Project *pro, BuildConfiguration *bc, const QString &name) const; + virtual BuildStep *create(BuildConfiguration *bc, const QString &name) const; virtual BuildStep *clone(BuildStep *bs, BuildConfiguration *bc) const; virtual QStringList canCreateForProject(Project *pro) const; virtual QString displayNameForName(const QString &name) const; @@ -55,7 +55,7 @@ class ProcessStep : public ProjectExplorer::AbstractProcessStep { Q_OBJECT public: - ProcessStep(Project *pro, BuildConfiguration *bc); + ProcessStep(BuildConfiguration *bc); ProcessStep(ProcessStep *bs, BuildConfiguration *bc); virtual bool init(); virtual void run(QFutureInterface &); diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 2ac3d728a3f..a70faf4519b 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -238,7 +238,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) BuildStep *buildStep = 0; foreach (IBuildStepFactory *factory, buildStepFactories) { if (factory->canCreate(buildStepName)) { - buildStep = factory->create(this, bc, buildStepName); + buildStep = factory->create(bc, buildStepName); break; } } @@ -265,7 +265,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) BuildStep *cleanStep = 0; foreach (IBuildStepFactory *factory, buildStepFactories) { if (factory->canCreate(cleanStepName)) { - cleanStep = factory->create(this, bc, cleanStepName); + cleanStep = factory->create(bc, cleanStepName); break; } } @@ -303,7 +303,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) } if (factory) { foreach(BuildConfiguration *bc, buildConfigurations()) { - buildStep = factory->create(this, bc, buildStepName); + buildStep = factory->create(bc, buildStepName); bc->insertBuildStep(pos, buildStep); QMap buildStepValues = reader.restoreValue("buildstep" + QString().setNum(buildstepnr)).toMap(); buildStep->restoreFromGlobalMap(buildStepValues); @@ -335,7 +335,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) if (factory) { foreach(BuildConfiguration *bc, buildConfigurations()) { - cleanStep = factory->create(this, bc, cleanStepName); + cleanStep = factory->create(bc, cleanStepName); bc->insertCleanStep(pos, cleanStep); QMap cleanStepValues = reader.restoreValue("cleanstep" + QString().setNum(cleanstepnr)).toMap(); cleanStep->restoreFromGlobalMap(cleanStepValues); diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 6ec95cbba1e..66e2c0a7532 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -44,8 +44,8 @@ using ExtensionSystem::PluginManager; using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; -MakeStep::MakeStep(Qt4Project * project, ProjectExplorer::BuildConfiguration *bc) - : AbstractMakeStep(project, bc), m_clean(false) +MakeStep::MakeStep(ProjectExplorer::BuildConfiguration *bc) + : AbstractMakeStep(bc), m_clean(false) { } @@ -97,10 +97,11 @@ void MakeStep::storeIntoLocalMap(QMap &map) bool MakeStep::init() { ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); - Environment environment = project()->environment(bc); + Environment environment = buildConfiguration()->project()->environment(bc); setEnvironment(environment); - Qt4Project *qt4project = qobject_cast(project()); + //TODO + Qt4Project *qt4project = static_cast(buildConfiguration()->project()); QString workingDirectory = qt4project->buildDirectory(bc); setWorkingDirectory(workingDirectory); @@ -163,7 +164,7 @@ bool MakeStep::init() void MakeStep::run(QFutureInterface & fi) { - if (qobject_cast(project())->rootProjectNode()->projectType() == ScriptTemplate) { + if (static_cast(buildConfiguration()->project())->rootProjectNode()->projectType() == ScriptTemplate) { fi.reportResult(true); return; } @@ -213,7 +214,7 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) connect(makeStep, SIGNAL(changed()), this, SLOT(update())); - connect(makeStep->project(), SIGNAL(buildDirectoryChanged()), + connect(makeStep->buildConfiguration()->project(), SIGNAL(buildDirectoryChanged()), this, SLOT(updateDetails())); connect(ProjectExplorer::ProjectExplorerPlugin::instance(), SIGNAL(settingsChanged()), @@ -224,14 +225,14 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) void MakeStepConfigWidget::updateMakeOverrideLabel() { - Qt4Project *qt4project = qobject_cast(m_makeStep->project()); + Qt4Project *qt4project = static_cast(m_makeStep->buildConfiguration()->project()); m_ui.makeLabel->setText(tr("Override %1:").arg(qt4project-> makeCommand(m_makeStep->buildConfiguration()))); } void MakeStepConfigWidget::updateDetails() { - Qt4Project *pro = static_cast(m_makeStep->project()); + Qt4Project *pro = static_cast(m_makeStep->buildConfiguration()->project()); ProjectExplorer::BuildConfiguration *bc = m_makeStep->buildConfiguration(); QString workingDirectory = pro->buildDirectory(bc); @@ -325,10 +326,10 @@ bool MakeStepFactory::canCreate(const QString & name) const return (name == Constants::MAKESTEP); } -ProjectExplorer::BuildStep *MakeStepFactory::create(ProjectExplorer::Project *pro, ProjectExplorer::BuildConfiguration *bc, const QString & name) const +ProjectExplorer::BuildStep *MakeStepFactory::create(ProjectExplorer::BuildConfiguration *bc, const QString & name) const { Q_UNUSED(name) - return new MakeStep(static_cast(pro), bc); + return new MakeStep(bc); } ProjectExplorer::BuildStep *MakeStepFactory::clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h index f605120bc60..471316897de 100644 --- a/src/plugins/qt4projectmanager/makestep.h +++ b/src/plugins/qt4projectmanager/makestep.h @@ -52,7 +52,7 @@ public: MakeStepFactory(); virtual ~MakeStepFactory(); bool canCreate(const QString & name) const; - ProjectExplorer::BuildStep *create(ProjectExplorer::Project * pro, ProjectExplorer::BuildConfiguration *bc, const QString & name) const; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString & name) const; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; QStringList canCreateForProject(ProjectExplorer::Project *pro) const; QString displayNameForName(const QString &name) const; @@ -67,7 +67,7 @@ class MakeStep : public ProjectExplorer::AbstractMakeStep friend class MakeStepConfigWidget; // TODO remove this // used to access internal stuff public: - MakeStep(Qt4Project * project, ProjectExplorer::BuildConfiguration *bc); + MakeStep(ProjectExplorer::BuildConfiguration *bc); MakeStep(MakeStep *bs, ProjectExplorer::BuildConfiguration *bc); ~MakeStep(); virtual bool init(); diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 9b91f4c8dc0..79efdeea8ac 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -49,14 +49,13 @@ using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; using namespace ProjectExplorer; -QMakeStep::QMakeStep(Qt4Project *project, ProjectExplorer::BuildConfiguration *bc) - : AbstractMakeStep(project, bc), m_pro(project), m_forced(false) +QMakeStep::QMakeStep(ProjectExplorer::BuildConfiguration *bc) + : AbstractMakeStep(bc), m_forced(false) { } QMakeStep::QMakeStep(QMakeStep *bs, ProjectExplorer::BuildConfiguration *bc) : AbstractMakeStep(bs, bc), - m_pro(bs->m_pro), m_forced(false), m_qmakeArgs(bs->m_qmakeArgs) { @@ -72,21 +71,23 @@ QStringList QMakeStep::arguments() QStringList additonalArguments = m_qmakeArgs; ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); QStringList arguments; - arguments << project()->file()->fileName(); + arguments << buildConfiguration()->project()->file()->fileName(); arguments << "-r"; + // TODO + Qt4Project *pro = static_cast(buildConfiguration()->project()); if (!additonalArguments.contains("-spec")) - arguments << "-spec" << m_pro->qtVersion(bc)->mkspec(); + arguments << "-spec" << pro->qtVersion(bc)->mkspec(); #ifdef Q_OS_WIN - ToolChain::ToolChainType type = m_pro->toolChainType(bc); + ToolChain::ToolChainType type = pro->toolChainType(bc); if (type == ToolChain::GCC_MAEMO) arguments << QLatin1String("-unix"); #endif if (bc->value("buildConfiguration").isValid()) { QStringList configarguments; - QtVersion::QmakeBuildConfigs defaultBuildConfiguration = m_pro->qtVersion(bc)->defaultBuildConfig(); + QtVersion::QmakeBuildConfigs defaultBuildConfiguration = pro->qtVersion(bc)->defaultBuildConfig(); QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(bc->value("buildConfiguration").toInt()); if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) configarguments << "CONFIG-=debug_and_release"; @@ -111,7 +112,9 @@ QStringList QMakeStep::arguments() bool QMakeStep::init() { ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); - const QtVersion *qtVersion = m_pro->qtVersion(bc); + // TODO + Qt4Project *pro = static_cast(buildConfiguration()->project()); + const QtVersion *qtVersion = pro->qtVersion(bc); if (!qtVersion->isValid()) { #if defined(Q_WS_MAC) @@ -123,7 +126,7 @@ bool QMakeStep::init() } QStringList args = arguments(); - QString workingDirectory = m_pro->buildDirectory(bc); + QString workingDirectory = pro->buildDirectory(bc); QString program = qtVersion->qmakeCommand(); @@ -132,7 +135,7 @@ bool QMakeStep::init() if (QDir(workingDirectory).exists(QLatin1String("Makefile"))) { QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(workingDirectory); if (qtVersion->qmakeCommand() == qmakePath) { - m_needToRunQMake = !m_pro->compareBuildConfigurationToImportFrom(bc, workingDirectory); + m_needToRunQMake = !pro->compareBuildConfigurationToImportFrom(bc, workingDirectory); } } @@ -145,7 +148,7 @@ bool QMakeStep::init() setWorkingDirectory(workingDirectory); setCommand(program); setArguments(args); - setEnvironment(m_pro->environment(bc)); + setEnvironment(pro->environment(bc)); setBuildParser(ProjectExplorer::Constants::BUILD_PARSER_QMAKE); return AbstractMakeStep::init(); @@ -153,7 +156,9 @@ bool QMakeStep::init() void QMakeStep::run(QFutureInterface &fi) { - if (qobject_cast(project())->rootProjectNode()->projectType() == ScriptTemplate) { + //TODO + Qt4Project *pro = static_cast(buildConfiguration()->project()); + if (pro->rootProjectNode()->projectType() == ScriptTemplate) { fi.reportResult(true); return; } @@ -242,7 +247,7 @@ QMakeStepConfigWidget::QMakeStepConfigWidget(QMakeStep *step) connect(m_ui.buildConfigurationComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(buildConfigurationChanged())); connect(step, SIGNAL(changed()), this, SLOT(update())); - connect(step->project(), SIGNAL(qtVersionChanged(ProjectExplorer::BuildConfiguration *)), + connect(step->buildConfiguration()->project(), SIGNAL(qtVersionChanged(ProjectExplorer::BuildConfiguration *)), this, SLOT(qtVersionChanged(ProjectExplorer::BuildConfiguration *))); } @@ -261,7 +266,7 @@ void QMakeStepConfigWidget::qtVersionChanged(ProjectExplorer::BuildConfiguration void QMakeStepConfigWidget::updateTitleLabel() { - Qt4Project *qt4project = qobject_cast(m_step->project()); + Qt4Project *qt4project = static_cast(m_step->buildConfiguration()->project()); const QtVersion *qtVersion = qt4project->qtVersion(m_step->buildConfiguration()); if (!qtVersion) { m_summaryText = tr("QMake: No Qt version set. QMake can not be run."); @@ -271,9 +276,10 @@ void QMakeStepConfigWidget::updateTitleLabel() QStringList args = m_step->arguments(); // We don't want the full path to the .pro file - int index = args.indexOf(m_step->project()->file()->fileName()); + const QString projectFileName = m_step->buildConfiguration()->project()->file()->fileName(); + int index = args.indexOf(projectFileName); if (index != -1) - args[index] = QFileInfo(m_step->project()->file()->fileName()).fileName(); + args[index] = QFileInfo(projectFileName).fileName(); // And we only use the .pro filename not the full path QString program = QFileInfo(qtVersion->qmakeCommand()).fileName(); @@ -287,7 +293,7 @@ void QMakeStepConfigWidget::qmakeArgumentsLineEditTextEdited() m_step->setQMakeArguments( ProjectExplorer::Environment::parseCombinedArgString(m_ui.qmakeAdditonalArgumentsLineEdit->text())); - static_cast(m_step->project())->invalidateCachedTargetInformation(); + static_cast(m_step->buildConfiguration()->project())->invalidateCachedTargetInformation(); updateTitleLabel(); updateEffectiveQMakeCall(); } @@ -303,7 +309,7 @@ void QMakeStepConfigWidget::buildConfigurationChanged() buildConfiguration = buildConfiguration & ~QtVersion::DebugBuild; } bc->setValue("buildConfiguration", int(buildConfiguration)); - static_cast(m_step->project())->invalidateCachedTargetInformation(); + static_cast(m_step->buildConfiguration()->project())->invalidateCachedTargetInformation(); updateTitleLabel(); updateEffectiveQMakeCall(); // TODO if exact parsing is the default, we need to update the code model @@ -334,7 +340,7 @@ void QMakeStepConfigWidget::init() void QMakeStepConfigWidget::updateEffectiveQMakeCall() { - Qt4Project *qt4project = qobject_cast(m_step->project()); + Qt4Project *qt4project = static_cast(m_step->buildConfiguration()->project()); const QtVersion *qtVersion = qt4project->qtVersion(m_step->buildConfiguration()); if (qtVersion) { QString program = QFileInfo(qtVersion->qmakeCommand()).fileName(); @@ -361,10 +367,10 @@ bool QMakeStepFactory::canCreate(const QString & name) const return (name == Constants::QMAKESTEP); } -ProjectExplorer::BuildStep *QMakeStepFactory::create(ProjectExplorer::Project * pro, BuildConfiguration *bc, const QString & name) const +ProjectExplorer::BuildStep *QMakeStepFactory::create(BuildConfiguration *bc, const QString & name) const { Q_UNUSED(name) - return new QMakeStep(static_cast(pro), bc); + return new QMakeStep(bc); } ProjectExplorer::BuildStep *QMakeStepFactory::clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index 71ff893e793..05f17477298 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -52,7 +52,7 @@ public: QMakeStepFactory(); virtual ~QMakeStepFactory(); bool canCreate(const QString & name) const; - ProjectExplorer::BuildStep *create(ProjectExplorer::Project * pro, ProjectExplorer::BuildConfiguration *bc, const QString & name) const; + ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString & name) const; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; QStringList canCreateForProject(ProjectExplorer::Project *pro) const; QString displayNameForName(const QString &name) const; @@ -68,7 +68,7 @@ class QMakeStep : public ProjectExplorer::AbstractMakeStep friend class Qt4Project; // TODO remove // Currently used to access qmakeArgs public: - QMakeStep(Qt4Project * project, ProjectExplorer::BuildConfiguration *bc); + QMakeStep(ProjectExplorer::BuildConfiguration *bc); QMakeStep(QMakeStep *bs, ProjectExplorer::BuildConfiguration *bc); ~QMakeStep(); virtual bool init(); @@ -95,7 +95,6 @@ protected: virtual bool processFinished(int exitCode, QProcess::ExitStatus status); private: - Qt4Project *m_pro; // last values QStringList m_lastEnv; bool m_forced; diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index c7c5979614b..fdfa6ff5512 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -462,13 +462,13 @@ Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigu Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this, buildConfigurationName); addBuildConfiguration(bc); - QMakeStep *qmakeStep = new QMakeStep(this, bc); + QMakeStep *qmakeStep = new QMakeStep(bc); bc->insertBuildStep(0, qmakeStep); - MakeStep *makeStep = new MakeStep(this, bc); + MakeStep *makeStep = new MakeStep(bc); bc->insertBuildStep(1, makeStep); - MakeStep* cleanStep = new MakeStep(this, bc); + MakeStep* cleanStep = new MakeStep(bc); cleanStep->setClean(true); bc->insertCleanStep(0, cleanStep); if (!additionalArguments.isEmpty()) From 7904544b8426cd7b29af4ef891890a9c4aba42a7 Mon Sep 17 00:00:00 2001 From: dt Date: Tue, 24 Nov 2009 15:36:31 +0100 Subject: [PATCH 07/62] Remove BuildConfiguration::name() The pointers can be used to distinguish BuildConfigurations --- .../cmakebuildconfiguration.cpp | 8 +- .../cmakebuildconfiguration.h | 4 +- .../cmakebuildenvironmentwidget.cpp | 21 ++-- .../cmakebuildenvironmentwidget.h | 4 +- .../cmakeprojectmanager/cmakeproject.cpp | 34 +++--- .../cmakeprojectmanager/cmakeproject.h | 8 +- .../cmakerunconfiguration.cpp | 2 +- src/plugins/cmakeprojectmanager/makestep.cpp | 12 +- .../genericbuildconfiguration.cpp | 8 +- .../genericbuildconfiguration.h | 4 +- .../genericprojectmanager/genericproject.cpp | 24 ++-- .../genericprojectmanager/genericproject.h | 8 +- .../projectexplorer/buildconfiguration.cpp | 20 +--- .../projectexplorer/buildconfiguration.h | 20 +--- src/plugins/projectexplorer/buildmanager.cpp | 44 +++---- src/plugins/projectexplorer/buildmanager.h | 9 +- .../buildsettingspropertiespage.cpp | 85 ++++++------- .../buildsettingspropertiespage.h | 9 +- src/plugins/projectexplorer/buildstep.cpp | 2 +- src/plugins/projectexplorer/buildstep.h | 2 +- .../projectexplorer/buildstepspage.cpp | 21 ++-- src/plugins/projectexplorer/buildstepspage.h | 4 +- .../customexecutablerunconfiguration.cpp | 2 +- src/plugins/projectexplorer/project.cpp | 99 +++++++-------- src/plugins/projectexplorer/project.h | 11 +- .../projectexplorer/projectexplorer.cpp | 113 ++++++++---------- src/plugins/projectexplorer/projectexplorer.h | 2 +- src/plugins/projectexplorer/projectwindow.cpp | 37 +++--- src/plugins/projectexplorer/projectwindow.h | 9 +- .../qt4buildconfiguration.cpp | 8 +- .../qt4projectmanager/qt4buildconfiguration.h | 4 +- .../qt4buildenvironmentwidget.cpp | 21 ++-- .../qt4buildenvironmentwidget.h | 4 +- src/plugins/qt4projectmanager/qt4project.cpp | 17 +-- src/plugins/qt4projectmanager/qt4project.h | 4 +- .../qt4projectconfigwidget.cpp | 76 ++++++------ .../qt4projectconfigwidget.h | 6 +- .../qt4projectmanager/qt4runconfiguration.cpp | 2 +- 38 files changed, 343 insertions(+), 425 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 4cf0a743919..76c260b40ac 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -33,14 +33,14 @@ using namespace CMakeProjectManager; using namespace Internal; -CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeProject *pro, const QString &name) - : BuildConfiguration(pro, name) +CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeProject *pro) + : BuildConfiguration(pro) { } -CMakeBuildConfiguration::CMakeBuildConfiguration(const QString &name, BuildConfiguration *source) - : BuildConfiguration(name, source) +CMakeBuildConfiguration::CMakeBuildConfiguration(BuildConfiguration *source) + : BuildConfiguration(source) { } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 2152b8bb238..3eb71600779 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -40,8 +40,8 @@ class CMakeProject; class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - CMakeBuildConfiguration(CMakeProject *pro, const QString &name); - CMakeBuildConfiguration(const QString &name, BuildConfiguration *source); + CMakeBuildConfiguration(CMakeProject *pro); + CMakeBuildConfiguration(BuildConfiguration *source); }; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp index ecae63b8411..5aa29db2732 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp @@ -41,7 +41,7 @@ using namespace CMakeProjectManager; using namespace CMakeProjectManager::Internal; CMakeBuildEnvironmentWidget::CMakeBuildEnvironmentWidget(CMakeProject *project) - : BuildConfigWidget(), m_pro(project) + : BuildConfigWidget(), m_pro(project), m_buildConfiguration(0) { QVBoxLayout *vbox = new QVBoxLayout(this); vbox->setMargin(0); @@ -63,29 +63,26 @@ QString CMakeBuildEnvironmentWidget::displayName() const return tr("Build Environment"); } -void CMakeBuildEnvironmentWidget::init(const QString &buildConfigurationName) +void CMakeBuildEnvironmentWidget::init(ProjectExplorer::BuildConfiguration *bc) { if (debug) qDebug() << "Qt4BuildConfigWidget::init()"; - m_buildConfiguration = buildConfigurationName; + m_buildConfiguration = bc; - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(buildConfigurationName); - m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(bc)); - m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(bc)); - m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(bc)); + m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(m_buildConfiguration)); + m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration)); + m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(m_buildConfiguration)); m_buildEnvironmentWidget->updateButtons(); } void CMakeBuildEnvironmentWidget::environmentModelUserChangesUpdated() { - m_pro->setUserEnvironmentChanges( - m_pro->buildConfiguration(m_buildConfiguration), m_buildEnvironmentWidget->userChanges()); + m_pro->setUserEnvironmentChanges(m_buildConfiguration, m_buildEnvironmentWidget->userChanges()); } void CMakeBuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked) { - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); - m_pro->setUseSystemEnvironment(bc, !checked); - m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(bc)); + m_pro->setUseSystemEnvironment(m_buildConfiguration, !checked); + m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration)); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.h b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.h index e059783849a..c732044b9d4 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.h @@ -51,7 +51,7 @@ public: CMakeBuildEnvironmentWidget(CMakeProject *project); QString displayName() const; - void init(const QString &buildConfiguration); + void init(ProjectExplorer::BuildConfiguration *bc); private slots: void environmentModelUserChangesUpdated(); @@ -61,7 +61,7 @@ private: ProjectExplorer::EnvironmentWidget *m_buildEnvironmentWidget; QCheckBox *m_clearSystemEnvironmentCheckBox; CMakeProject *m_pro; - QString m_buildConfiguration; + ProjectExplorer::BuildConfiguration *m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 9c42cbf1b12..08ea3b45e99 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -104,7 +104,8 @@ BuildConfiguration *CMakeBuildConfigurationFactory::create(const QString &type) &ok); if (!ok || buildConfigurationName.isEmpty()) return false; - BuildConfiguration *bc = new CMakeBuildConfiguration(m_project, buildConfigurationName); + BuildConfiguration *bc = new CMakeBuildConfiguration(m_project); + bc->setDisplayName(buildConfigurationName); MakeStep *makeStep = new MakeStep(bc); bc->insertBuildStep(0, makeStep); @@ -133,17 +134,17 @@ BuildConfiguration *CMakeBuildConfigurationFactory::create(const QString &type) return bc; } -BuildConfiguration *CMakeBuildConfigurationFactory::clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const +BuildConfiguration *CMakeBuildConfigurationFactory::clone(ProjectExplorer::BuildConfiguration *source) const { CMakeBuildConfiguration *old = static_cast(source); - CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(name, old); + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(old); m_project->addBuildConfiguration(bc); return bc; } -BuildConfiguration *CMakeBuildConfigurationFactory::restore(const QString &name) const +BuildConfiguration *CMakeBuildConfigurationFactory::restore() const { - CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(m_project, name); + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(m_project); return bc; } @@ -590,7 +591,7 @@ void CMakeProject::setUseSystemEnvironment(BuildConfiguration *configuration, bo if (b == useSystemEnvironment(configuration)) return; configuration->setValue("clearSystemEnvironment", !b); - emit environmentChanged(configuration->name()); + emit environmentChanged(configuration); } bool CMakeProject::useSystemEnvironment(BuildConfiguration *configuration) const @@ -611,7 +612,7 @@ void CMakeProject::setUserEnvironmentChanges(BuildConfiguration *configuration, if (list == configuration->value("userEnvironmentChanges")) return; configuration->setValue("userEnvironmentChanges", list); - emit environmentChanged(configuration->name()); + emit environmentChanged(configuration); } QString CMakeProject::buildDirectory(BuildConfiguration *configuration) const @@ -664,7 +665,8 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader if (copw.exec() != QDialog::Accepted) return false; - CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(this, "all"); + CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(this); + bc->setDisplayName("all"); addBuildConfiguration(bc); bc->setValue("msvcVersion", copw.msvcVersion()); if (!copw.buildDirectory().isEmpty()) @@ -792,7 +794,7 @@ void CMakeFile::modified(ReloadBehavior *behavior) } CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeProject *project) - : m_project(project) + : m_project(project), m_buildConfiguration(0) { QFormLayout *fl = new QFormLayout(this); fl->setContentsMargins(20, -1, 0, -1); @@ -821,10 +823,9 @@ QString CMakeBuildSettingsWidget::displayName() const return "CMake"; } -void CMakeBuildSettingsWidget::init(const QString &buildConfigurationName) +void CMakeBuildSettingsWidget::init(BuildConfiguration *bc) { - m_buildConfiguration = buildConfigurationName; - BuildConfiguration *bc = m_project->buildConfiguration(buildConfigurationName); + m_buildConfiguration = bc; m_pathLineEdit->setText(m_project->buildDirectory(bc)); if (m_project->buildDirectory(bc) == m_project->sourceDirectory()) m_changeButton->setEnabled(false); @@ -834,14 +835,13 @@ void CMakeBuildSettingsWidget::init(const QString &buildConfigurationName) void CMakeBuildSettingsWidget::openChangeBuildDirectoryDialog() { - BuildConfiguration *bc = m_project->buildConfiguration(m_buildConfiguration); CMakeOpenProjectWizard copw(m_project->projectManager(), m_project->sourceDirectory(), - m_project->buildDirectory(bc), - m_project->environment(bc)); + m_project->buildDirectory(m_buildConfiguration), + m_project->environment(m_buildConfiguration)); if (copw.exec() == QDialog::Accepted) { - m_project->changeBuildDirectory(bc, copw.buildDirectory()); - m_pathLineEdit->setText(m_project->buildDirectory(bc)); + m_project->changeBuildDirectory(m_buildConfiguration, copw.buildDirectory()); + m_pathLineEdit->setText(m_project->buildDirectory(m_buildConfiguration)); } } diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 6e61e7889f8..f9e694dc6af 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -74,8 +74,8 @@ public: QString displayNameForType(const QString &type) const; ProjectExplorer::BuildConfiguration *create(const QString &type) const; - ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; - ProjectExplorer::BuildConfiguration *restore(const QString &name) const; + ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore() const; private: CMakeProject *m_project; @@ -232,14 +232,14 @@ public: // This is called to set up the config widget before showing it // buildConfiguration is QString::null for the non buildConfiguration specific page - virtual void init(const QString &buildConfiguration); + virtual void init(ProjectExplorer::BuildConfiguration *bc); private slots: void openChangeBuildDirectoryDialog(); private: CMakeProject *m_project; QLineEdit *m_pathLineEdit; QPushButton *m_changeButton; - QString m_buildConfiguration; + ProjectExplorer::BuildConfiguration *m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index da290d66a71..fc4c5868ade 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -58,7 +58,7 @@ CMakeRunConfiguration::CMakeRunConfiguration(CMakeProject *pro, const QString &t connect(pro, SIGNAL(activeBuildConfigurationChanged()), this, SIGNAL(baseEnvironmentChanged())); - connect(pro, SIGNAL(environmentChanged(QString)), + connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), this, SIGNAL(baseEnvironmentChanged())); } diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index e0ea03b4f92..7e49f180c2d 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -202,7 +202,8 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) fl->addRow(tr("Targets:"), m_targetsList); // TODO update this list also on rescans of the CMakeLists.txt - CMakeProject *pro = m_makeStep->project(); + // TODO shouldn't be accessing project + CMakeProject *pro = static_cast(m_makeStep->buildConfiguration()->project()); foreach(const QString& target, pro->targets()) { QListWidgetItem *item = new QListWidgetItem(target, m_targetsList); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); @@ -251,11 +252,10 @@ void MakeStepConfigWidget::updateDetails() { QStringList arguments = m_makeStep->m_buildTargets; arguments << m_makeStep->additionalArguments(); - m_summaryText = tr("Make: %1 %2") - .arg(m_makeStep->project()->toolChain( - m_makeStep->buildConfiguration()) - ->makeCommand(), - arguments.join(" ")); + + BuildConfiguration *bc = m_makeStep->buildConfiguration(); + CMakeProject *pro = static_cast(bc->project()); + m_summaryText = tr("Make: %1 %2").arg(pro->toolChain(bc)->makeCommand(), arguments.join(" ")); emit updateSummary(); } diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 9e1f05a7ea5..7a64c538536 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -34,14 +34,14 @@ using namespace GenericProjectManager; using namespace GenericProjectManager::Internal; using ProjectExplorer::BuildConfiguration; -GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro, const QString &name) - : BuildConfiguration(pro, name) +GenericBuildConfiguration::GenericBuildConfiguration(GenericProject *pro) + : BuildConfiguration(pro) { } -GenericBuildConfiguration::GenericBuildConfiguration(const QString &name, GenericBuildConfiguration *source) - : BuildConfiguration(name, source) +GenericBuildConfiguration::GenericBuildConfiguration(GenericBuildConfiguration *source) + : BuildConfiguration(source) { } diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index 5cfd664032d..aa812c396d5 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -41,8 +41,8 @@ class GenericProject; class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - GenericBuildConfiguration(GenericProject *pro, const QString &name); - GenericBuildConfiguration(const QString &name, GenericBuildConfiguration *source); + GenericBuildConfiguration(GenericProject *pro); + GenericBuildConfiguration(GenericBuildConfiguration *source); }; } // namespace GenericProjectManager diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 676636e0020..fcbc50e7667 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -146,7 +146,8 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type &ok); if (!ok || buildConfigurationName.isEmpty()) return false; - GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, buildConfigurationName); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project); + bc->setDisplayName(buildConfigurationName); m_project->addBuildConfiguration(bc); // also makes the name unique... GenericMakeStep *makeStep = new GenericMakeStep(bc); @@ -155,17 +156,17 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type return bc; } -BuildConfiguration *GenericBuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const +BuildConfiguration *GenericBuildConfigurationFactory::clone(BuildConfiguration *source) const { // TODO - GenericBuildConfiguration *bc = new GenericBuildConfiguration(name, static_cast(source)); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(static_cast(source)); m_project->addBuildConfiguration(bc); return bc; } -BuildConfiguration *GenericBuildConfigurationFactory::restore(const QString &name) const +BuildConfiguration *GenericBuildConfigurationFactory::restore() const { - GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project, name); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(m_project); return bc; } @@ -533,7 +534,8 @@ bool GenericProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsRead Project::restoreSettingsImpl(reader); if (buildConfigurations().isEmpty()) { - GenericBuildConfiguration *bc = new GenericBuildConfiguration(this, "all"); + GenericBuildConfiguration *bc = new GenericBuildConfiguration(this); + bc->setDisplayName("all"); addBuildConfiguration(bc); GenericMakeStep *makeStep = new GenericMakeStep(bc); @@ -589,7 +591,7 @@ void GenericProject::saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter //////////////////////////////////////////////////////////////////////////////////// GenericBuildSettingsWidget::GenericBuildSettingsWidget(GenericProject *project) - : m_project(project) + : m_project(project), m_buildConfiguration(0) { QFormLayout *fl = new QFormLayout(this); fl->setContentsMargins(0, -1, 0, -1); @@ -625,15 +627,15 @@ GenericBuildSettingsWidget::~GenericBuildSettingsWidget() QString GenericBuildSettingsWidget::displayName() const { return tr("Generic Manager"); } -void GenericBuildSettingsWidget::init(const QString &buildConfigurationName) +void GenericBuildSettingsWidget::init(BuildConfiguration *bc) { - m_buildConfiguration = buildConfigurationName; - m_pathChooser->setPath(m_project->buildDirectory(m_project->buildConfiguration(buildConfigurationName))); + m_buildConfiguration = bc; + m_pathChooser->setPath(m_project->buildDirectory(bc)); } void GenericBuildSettingsWidget::buildDirectoryChanged() { - m_project->buildConfiguration(m_buildConfiguration)->setValue("buildDirectory", m_pathChooser->path()); + m_buildConfiguration->setValue("buildDirectory", m_pathChooser->path()); } void GenericBuildSettingsWidget::toolChainSelected(int index) diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index 6ad13b2bda8..cba88fc4abe 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -67,8 +67,8 @@ public: QString displayNameForType(const QString &type) const; ProjectExplorer::BuildConfiguration *create(const QString &type) const; - ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; - ProjectExplorer::BuildConfiguration *restore(const QString &name) const; + ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore() const; private: GenericProject *m_project; @@ -195,7 +195,7 @@ public: virtual QString displayName() const; - virtual void init(const QString &buildConfiguration); + virtual void init(ProjectExplorer::BuildConfiguration *bc); private Q_SLOTS: void buildDirectoryChanged(); @@ -204,7 +204,7 @@ private Q_SLOTS: private: GenericProject *m_project; Utils::PathChooser *m_pathChooser; - QString m_buildConfiguration; + ProjectExplorer::BuildConfiguration *m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index 3c80b43b5d5..fe3b32f05bc 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -44,14 +44,14 @@ IBuildStepFactory *findFactory(const QString &name) return 0; } -BuildConfiguration::BuildConfiguration(Project *pro, const QString &name) - : m_name(name), m_project(pro) +BuildConfiguration::BuildConfiguration(Project *pro) + : m_project(pro) { - setDisplayName(name); + } -BuildConfiguration::BuildConfiguration(const QString &name, BuildConfiguration *source) - : m_values(source->m_values), m_name(name), m_project(source->m_project) +BuildConfiguration::BuildConfiguration(BuildConfiguration *source) + : m_values(source->m_values), m_project(source->m_project) { foreach(BuildStep *originalbs, source->buildSteps()) { IBuildStepFactory *factory = findFactory(originalbs->name()); @@ -71,16 +71,6 @@ BuildConfiguration::~BuildConfiguration() qDeleteAll(m_cleanSteps); } -void BuildConfiguration::setName(const QString &name) -{ - m_name = name; -} - -QString BuildConfiguration::name() const -{ - return m_name; -} - QString BuildConfiguration::displayName() const { QVariant v = value("ProjectExplorer.BuildConfiguration.DisplayName"); diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 2f7f05c1cfc..40cb5a4a787 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -53,7 +53,6 @@ public: // ctors are protected virtual ~BuildConfiguration(); - QString name() const; QString displayName() const; void setDisplayName(const QString &name); @@ -77,19 +76,15 @@ public: Project *project() const; protected: - BuildConfiguration(Project * project, const QString &name); - BuildConfiguration(const QString &name, BuildConfiguration *source); + BuildConfiguration(Project * project); + BuildConfiguration(BuildConfiguration *source); private: - void setName(const QString &name); - QList m_buildSteps; QList m_cleanSteps; QHash m_values; - QString m_name; Project *m_project; - friend class Project; // for setName }; class PROJECTEXPLORER_EXPORT IBuildConfigurationFactory : public QObject @@ -110,24 +105,21 @@ public: virtual BuildConfiguration *create(const QString &type) const = 0; // clones a given BuildConfiguration and adds it to the project - virtual BuildConfiguration *clone(const QString &name, BuildConfiguration *source) const = 0; + virtual BuildConfiguration *clone(BuildConfiguration *source) const = 0; // restores a BuildConfiguration with the name and adds it to the project - virtual BuildConfiguration *restore(const QString &name) const = 0; + virtual BuildConfiguration *restore() const = 0; // TODO All those methods make the internal name (and display name) unique, // but in different ways - -// to come: -// restore -// clone - signals: void availableCreationTypesChanged(); }; } // namespace ProjectExplorer +Q_DECLARE_METATYPE(ProjectExplorer::BuildConfiguration *); + #endif // BUILDCONFIGURATION_H diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp index 4f5a27a0192..dde844b1fb3 100644 --- a/src/plugins/projectexplorer/buildmanager.cpp +++ b/src/plugins/projectexplorer/buildmanager.cpp @@ -351,20 +351,12 @@ void BuildManager::buildQueueAppend(BuildStep * bs) incrementActiveBuildSteps(bs->buildConfiguration()->project()); } -void BuildManager::buildProjects(const QList &projects, const QList &configurations) +void BuildManager::buildProjects(const QList &configurations) { - Q_ASSERT(projects.count() == configurations.count()); - QList::const_iterator cit = configurations.constBegin(); - QList::const_iterator it, end; - end = projects.constEnd(); - - for (it = projects.constBegin(); it != end; ++it, ++cit) { - if (*cit != QString::null) { - BuildConfiguration *bc = (*it)->buildConfiguration(*cit); - QList buildSteps = bc->buildSteps(); - foreach (BuildStep *bs, buildSteps) { - buildQueueAppend(bs); - } + foreach(BuildConfiguration *bc, configurations) { + QList buildSteps = bc->buildSteps(); + foreach (BuildStep *bs, buildSteps) { + buildQueueAppend(bs); } } if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput) @@ -372,20 +364,12 @@ void BuildManager::buildProjects(const QList &projects, const QList &projects, const QList &configurations) +void BuildManager::cleanProjects(const QList &configurations) { - Q_ASSERT(projects.count() == configurations.count()); - QList::const_iterator cit = configurations.constBegin(); - QList::const_iterator it, end; - end = projects.constEnd(); - - for (it = projects.constBegin(); it != end; ++it, ++cit) { - if (*cit != QString::null) { - BuildConfiguration *bc = (*it)->buildConfiguration(*cit); - QList cleanSteps = bc->cleanSteps(); - foreach (BuildStep *bs, cleanSteps) { - buildQueueAppend(bs); - } + foreach(BuildConfiguration *bc, configurations) { + QList cleanSteps = bc->cleanSteps(); + foreach (BuildStep *bs, cleanSteps) { + buildQueueAppend(bs); } } if (ProjectExplorerPlugin::instance()->projectExplorerSettings().showCompilerOutput) @@ -393,14 +377,14 @@ void BuildManager::cleanProjects(const QList &projects, const QList() << p, QList() << configuration); + buildProjects(QList() << configuration); } -void BuildManager::cleanProject(Project *p, const QString &configuration) +void BuildManager::cleanProject(BuildConfiguration *configuration) { - cleanProjects(QList() << p, QList() << configuration); + cleanProjects(QList() << configuration); } void BuildManager::appendStep(BuildStep *step) diff --git a/src/plugins/projectexplorer/buildmanager.h b/src/plugins/projectexplorer/buildmanager.h index 1d2da54b5ec..47e59ec42b3 100644 --- a/src/plugins/projectexplorer/buildmanager.h +++ b/src/plugins/projectexplorer/buildmanager.h @@ -49,6 +49,7 @@ namespace Internal { class BuildStep; class Project; class ProjectExplorerPlugin; +class BuildConfiguration; class PROJECTEXPLORER_EXPORT BuildManager : public QObject @@ -70,10 +71,10 @@ public: void gotoTaskWindow(); //TODO these should take buildconfiguration object - void buildProject(Project *p, const QString &configuration); - void buildProjects(const QList &projects, const QList &configurations); - void cleanProject(Project *p, const QString &configuration); - void cleanProjects(const QList &projects, const QList &configurations); + void buildProject(BuildConfiguration *bc); + void buildProjects(const QList &configurations); + void cleanProject(BuildConfiguration *configuration); + void cleanProjects(const QList &configurations); bool isBuilding(Project *p); // Append any build step to the list of build steps (currently only used to add the QMakeStep) diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index bf2fcf13fd0..d73e2c97904 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -153,7 +153,7 @@ BuildSettingsWidget::~BuildSettingsWidget() } BuildSettingsWidget::BuildSettingsWidget(Project *project) - : m_project(project) + : m_project(project), m_buildConfiguration(0) { QVBoxLayout *vbox = new QVBoxLayout(this); vbox->setContentsMargins(0, -1, 0, -1); @@ -189,7 +189,7 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) m_addButton->setMenu(m_addButtonMenu); updateAddButtonMenu(); - m_buildConfiguration = m_project->activeBuildConfiguration()->name(); + m_buildConfiguration = m_project->activeBuildConfiguration(); connect(m_makeActiveLabel, SIGNAL(linkActivated(QString)), this, SLOT(makeActive())); @@ -200,8 +200,8 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) connect(m_removeButton, SIGNAL(clicked()), this, SLOT(deleteConfiguration())); - connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(const QString &)), - this, SLOT(buildConfigurationDisplayNameChanged(const QString &))); + connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)), + this, SLOT(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *))); connect(m_project, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(checkMakeActiveLabel())); @@ -214,7 +214,7 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) void BuildSettingsWidget::makeActive() { - m_project->setActiveBuildConfiguration(m_project->buildConfiguration(m_buildConfiguration)); + m_project->setActiveBuildConfiguration(m_buildConfiguration); } void BuildSettingsWidget::updateAddButtonMenu() @@ -231,11 +231,11 @@ void BuildSettingsWidget::updateAddButtonMenu() } } -void BuildSettingsWidget::buildConfigurationDisplayNameChanged(const QString &buildConfiguration) +void BuildSettingsWidget::buildConfigurationDisplayNameChanged(BuildConfiguration *bc) { for (int i=0; icount(); ++i) { - if (m_buildConfigurationComboBox->itemData(i).toString() == buildConfiguration) { - m_buildConfigurationComboBox->setItemText(i, m_project->buildConfiguration(buildConfiguration)->displayName()); + if (m_buildConfigurationComboBox->itemData(i).value() == bc) { + m_buildConfigurationComboBox->setItemText(i, bc->displayName()); break; } } @@ -267,8 +267,8 @@ void BuildSettingsWidget::updateBuildSettings() // Add tree items foreach (const BuildConfiguration *bc, m_project->buildConfigurations()) { - m_buildConfigurationComboBox->addItem(bc->displayName(), bc->name()); - if (bc->name() == m_buildConfiguration) + m_buildConfigurationComboBox->addItem(bc->displayName(), bc); + if (bc == m_buildConfiguration) m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1); } @@ -281,14 +281,14 @@ void BuildSettingsWidget::updateBuildSettings() void BuildSettingsWidget::currentIndexChanged(int index) { - m_buildConfiguration = m_buildConfigurationComboBox->itemData(index).toString(); + m_buildConfiguration = (BuildConfiguration *) m_buildConfigurationComboBox->itemData(index).value(); activeBuildConfigurationChanged(); } void BuildSettingsWidget::activeBuildConfigurationChanged() { for (int i = 0; i < m_buildConfigurationComboBox->count(); ++i) { - if (m_buildConfigurationComboBox->itemData(i).toString() == m_buildConfiguration) { + if (m_buildConfigurationComboBox->itemData(i).value() == m_buildConfiguration) { m_buildConfigurationComboBox->setCurrentIndex(i); break; } @@ -304,10 +304,8 @@ void BuildSettingsWidget::activeBuildConfigurationChanged() void BuildSettingsWidget::checkMakeActiveLabel() { m_makeActiveLabel->setVisible(false); - if (!m_project->activeBuildConfiguration() || m_project->activeBuildConfiguration()->name() != m_buildConfiguration) { - BuildConfiguration *bc = m_project->buildConfiguration(m_buildConfiguration); - QTC_ASSERT(bc, return); - m_makeActiveLabel->setText(tr("Make %1 active.").arg(bc->displayName())); + if (!m_project->activeBuildConfiguration() || m_project->activeBuildConfiguration() != m_buildConfiguration) { + m_makeActiveLabel->setText(tr("Make %1 active.").arg(m_buildConfiguration->displayName())); m_makeActiveLabel->setVisible(true); } } @@ -316,64 +314,55 @@ void BuildSettingsWidget::createConfiguration() { QAction *action = qobject_cast(sender()); const QString &type = action->data().toString(); - if (m_project->buildConfigurationFactory()->create(type)) { - // TODO switching to last buildconfiguration in list might not be what we want - m_buildConfiguration = m_project->buildConfigurations().last()->name(); + BuildConfiguration *bc = m_project->buildConfigurationFactory()->create(type); + if (bc) { + m_buildConfiguration = bc; updateBuildSettings(); } } void BuildSettingsWidget::cloneConfiguration() { - const QString configuration = m_buildConfigurationComboBox->itemData(m_buildConfigurationComboBox->currentIndex()).toString(); - cloneConfiguration(configuration); + int index = m_buildConfigurationComboBox->currentIndex(); + BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value(); + cloneConfiguration(bc); } void BuildSettingsWidget::deleteConfiguration() { - const QString configuration = m_buildConfigurationComboBox->itemData(m_buildConfigurationComboBox->currentIndex()).toString(); - deleteConfiguration(configuration); + int index = m_buildConfigurationComboBox->currentIndex(); + BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value(); + deleteConfiguration(bc); } -void BuildSettingsWidget::cloneConfiguration(const QString &sourceConfiguration) +void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfiguration) { - if (sourceConfiguration.isEmpty()) + if (!sourceConfiguration) return; - QString newBuildConfiguration = QInputDialog::getText(this, tr("Clone configuration"), tr("New Configuration Name:")); - if (newBuildConfiguration.isEmpty()) + QString newDisplayName = QInputDialog::getText(this, tr("Clone configuration"), tr("New Configuration Name:")); + if (newDisplayName.isEmpty()) return; - QString newDisplayName = newBuildConfiguration; QStringList buildConfigurationDisplayNames; foreach(BuildConfiguration *bc, m_project->buildConfigurations()) buildConfigurationDisplayNames << bc->displayName(); newDisplayName = Project::makeUnique(newDisplayName, buildConfigurationDisplayNames); - QStringList buildConfigurationNames; - foreach(BuildConfiguration *bc, m_project->buildConfigurations()) - buildConfigurationNames << bc->name(); + m_buildConfiguration = m_project->buildConfigurationFactory()->clone(sourceConfiguration); + m_project->setDisplayNameFor(m_buildConfiguration, newDisplayName); - newBuildConfiguration = Project::makeUnique(newBuildConfiguration, buildConfigurationNames); - - BuildConfiguration *sourceBc = m_project->buildConfiguration(sourceConfiguration); - - m_project->buildConfigurationFactory()->clone(newBuildConfiguration, sourceBc); - - m_project->setDisplayNameFor(m_project->buildConfiguration(newBuildConfiguration), newDisplayName); - - m_buildConfiguration = newBuildConfiguration; updateBuildSettings(); } -void BuildSettingsWidget::deleteConfiguration(const QString &deleteConfiguration) +void BuildSettingsWidget::deleteConfiguration(BuildConfiguration *deleteConfiguration) { - if (deleteConfiguration.isEmpty() || m_project->buildConfigurations().size() <= 1) + if (!deleteConfiguration || m_project->buildConfigurations().size() <= 1) return; - if (m_project->activeBuildConfiguration()->name() == deleteConfiguration) { + if (m_project->activeBuildConfiguration() == deleteConfiguration) { foreach (BuildConfiguration *bc, m_project->buildConfigurations()) { - if (bc->name() != deleteConfiguration) { + if (bc != deleteConfiguration) { m_project->setActiveBuildConfiguration(bc); break; } @@ -381,15 +370,15 @@ void BuildSettingsWidget::deleteConfiguration(const QString &deleteConfiguration } if (m_buildConfiguration == deleteConfiguration) { - foreach (const BuildConfiguration *bc, m_project->buildConfigurations()) { - if (bc->name() != deleteConfiguration) { - m_buildConfiguration = bc->name(); + foreach (BuildConfiguration *bc, m_project->buildConfigurations()) { + if (bc != deleteConfiguration) { + m_buildConfiguration = bc; break; } } } - m_project->removeBuildConfiguration(m_project->buildConfiguration(deleteConfiguration)); + m_project->removeBuildConfiguration(deleteConfiguration); updateBuildSettings(); } diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h index 169feeedf7e..0026553b77e 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.h +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h @@ -42,6 +42,7 @@ namespace ProjectExplorer { class IBuildStepFactory; +class BuildConfiguration; namespace Internal { @@ -93,7 +94,7 @@ public: ~BuildSettingsWidget(); private slots: - void buildConfigurationDisplayNameChanged(const QString &buildConfiguration); + void buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *bc); void updateBuildSettings(); void currentIndexChanged(int index); void activeBuildConfigurationChanged(); @@ -106,15 +107,15 @@ private slots: void makeActive(); private: - void cloneConfiguration(const QString &toClone); - void deleteConfiguration(const QString &toDelete); + void cloneConfiguration(ProjectExplorer::BuildConfiguration *toClone); + void deleteConfiguration(ProjectExplorer::BuildConfiguration *toDelete); Project *m_project; QPushButton *m_addButton; QPushButton *m_removeButton; QComboBox *m_buildConfigurationComboBox; BuildSettingsSubWidgets *m_subWidgets; - QString m_buildConfiguration; + BuildConfiguration *m_buildConfiguration; QMenu *m_addButtonMenu; QLabel *m_makeActiveLabel; }; diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index 360ad3dc4b2..9fd6925b516 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -44,7 +44,7 @@ BuildStep::BuildStep(BuildConfiguration *bc) BuildStep::BuildStep(BuildStep *bs, BuildConfiguration *bc) : m_buildConfiguration(bc) { - + Q_UNUSED(bs); } BuildStep::~BuildStep() diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index f8a481a556a..c210f6af019 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -155,7 +155,7 @@ public: virtual QString displayName() const = 0; // This is called to set up the config widget before showing it - virtual void init(const QString &buildConfiguration) = 0; + virtual void init(BuildConfiguration *bc) = 0; }; class PROJECTEXPLORER_EXPORT BuildStepConfigWidget diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index 35d3ba8c264..fc1416000e6 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -110,7 +110,7 @@ QString BuildStepsPage::displayName() const return m_clean ? tr("Clean Steps") : tr("Build Steps"); } -void BuildStepsPage::init(const QString &buildConfiguration) +void BuildStepsPage::init(BuildConfiguration *bc) { foreach(BuildStepsWidgetStruct s, m_buildSteps) { delete s.widget; @@ -118,8 +118,7 @@ void BuildStepsPage::init(const QString &buildConfiguration) } m_buildSteps.clear(); - m_configuration = buildConfiguration; - BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); + m_configuration = bc; const QList &steps = m_clean ? bc->cleanSteps() : bc->buildSteps(); int i = 0; @@ -214,7 +213,7 @@ void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step) void BuildStepsPage::addBuildStep() { if (QAction *action = qobject_cast(sender())) { - BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); + BuildConfiguration *bc = m_configuration; QPair pair = m_addBuildStepHash.value(action); BuildStep *newStep = pair.second->create(bc, pair.first); int pos = m_clean ? bc->cleanSteps().count() : bc->buildSteps().count(); @@ -232,8 +231,7 @@ void BuildStepsPage::updateRemoveBuildStepMenu() { QMenu *menu = m_removeButton->menu(); menu->clear(); - BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); - const QList &steps = m_clean ? bc->cleanSteps() : bc->buildSteps(); + const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); foreach(BuildStep *step, steps) { QAction *action = menu->addAction(step->displayName()); if (step->immutable()) @@ -248,8 +246,7 @@ void BuildStepsPage::removeBuildStep() QAction *action = qobject_cast(sender()); if (action) { int pos = m_removeButton->menu()->actions().indexOf(action); - BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); - const QList &steps = m_clean ? bc->cleanSteps() : bc->buildSteps(); + const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); if (steps.at(pos)->immutable()) return; @@ -257,7 +254,7 @@ void BuildStepsPage::removeBuildStep() delete s.widget; delete s.detailsWidget; m_buildSteps.removeAt(pos); - m_clean ? bc->removeCleanStep(pos) : bc->removeBuildStep(pos); + m_clean ? m_configuration->removeCleanStep(pos) : m_configuration->removeBuildStep(pos); } updateBuildStepButtonsState(); } @@ -304,8 +301,7 @@ void BuildStepsPage::downBuildStep() void BuildStepsPage::stepMoveUp(int pos) { - BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); - m_clean ? bc->moveCleanStepUp(pos) : bc->moveBuildStepUp(pos); + m_clean ? m_configuration->moveCleanStepUp(pos) : m_configuration->moveBuildStepUp(pos); m_vbox->insertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget); @@ -316,8 +312,7 @@ void BuildStepsPage::stepMoveUp(int pos) void BuildStepsPage::updateBuildStepButtonsState() { - BuildConfiguration *bc = m_pro->buildConfiguration(m_configuration); - const QList &steps = m_clean ? bc->cleanSteps() : bc->buildSteps(); + const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); for(int i=0; isetEnabled((i>0) && !(steps.at(i)->immutable() && steps.at(i - 1))); diff --git a/src/plugins/projectexplorer/buildstepspage.h b/src/plugins/projectexplorer/buildstepspage.h index b6c7e0ac099..92e8180218b 100644 --- a/src/plugins/projectexplorer/buildstepspage.h +++ b/src/plugins/projectexplorer/buildstepspage.h @@ -71,7 +71,7 @@ public: virtual ~BuildStepsPage(); QString displayName() const; - void init(const QString &buildConfiguration); + void init(BuildConfiguration *bc); private slots: void updateAddBuildStepMenu(); @@ -88,7 +88,7 @@ private: void addBuildStepWidget(int pos, BuildStep *step); Project *m_pro; - QString m_configuration; + BuildConfiguration *m_configuration; QHash > m_addBuildStepHash; bool m_clean; diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index 8d6852d90b8..dc9caecf699 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -251,7 +251,7 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Project *pro) connect(pro, SIGNAL(activeBuildConfigurationChanged()), this, SIGNAL(baseEnvironmentChanged())); - connect(pro, SIGNAL(environmentChanged(QString)), + connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), this, SIGNAL(baseEnvironmentChanged())); } diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index a70faf4519b..6a05b9264dd 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -74,15 +74,6 @@ QString Project::makeUnique(const QString &preferedName, const QStringList &used void Project::addBuildConfiguration(BuildConfiguration *configuration) { - QStringList buildConfigurationNames; - foreach (const BuildConfiguration *bc, buildConfigurations()) - buildConfigurationNames << bc->name(); - - // Check that the internal name is not taken and use a different one otherwise - QString configurationName = configuration->name(); - configurationName = makeUnique(configurationName, buildConfigurationNames); - configuration->setName(configurationName); - // Check that we don't have a configuration with the same displayName QString configurationDisplayName = configuration->displayName(); QStringList displayNames; @@ -94,7 +85,7 @@ void Project::addBuildConfiguration(BuildConfiguration *configuration) // add it m_buildConfigurationValues.push_back(configuration); - emit addedBuildConfiguration(this, configuration->name()); + emit addedBuildConfiguration(this, configuration); } void Project::removeBuildConfiguration(BuildConfiguration *configuration) @@ -105,7 +96,7 @@ void Project::removeBuildConfiguration(BuildConfiguration *configuration) m_buildConfigurationValues.removeOne(configuration); - emit removedBuildConfiguration(this, configuration->name()); + emit removedBuildConfiguration(this, configuration); delete configuration; } @@ -133,7 +124,7 @@ bool Project::restoreSettings() if (!restoreSettingsImpl(reader)) return false; - if (m_activeBuildConfiguration.isEmpty() && !m_buildConfigurationValues.isEmpty()) + if (m_activeBuildConfiguration && !m_buildConfigurationValues.isEmpty()) setActiveBuildConfiguration(m_buildConfigurationValues.at(0)); if (!m_activeRunConfiguration && !m_runConfigurations.isEmpty()) @@ -148,47 +139,50 @@ QList Project::subConfigWidgets() void Project::saveSettingsImpl(PersistentSettingsWriter &writer) { - writer.saveValue("activebuildconfiguration", m_activeBuildConfiguration); + const QList bcs = buildConfigurations(); + + // For compability with older versions the "name" is saved as a string instead of a number + writer.saveValue("activebuildconfiguration", QString::number(bcs.indexOf(m_activeBuildConfiguration))); //save m_values writer.saveValue("project", m_values); //save buildsettings QStringList buildConfigurationNames; - foreach (const BuildConfiguration *bc, buildConfigurations()) { - QMap temp = bc->toMap(); - writer.saveValue("buildConfiguration-" + bc->name(), temp); - buildConfigurationNames << bc->name(); + for(int i=0; i < bcs.size(); ++i) { + QMap temp = bcs.at(i)->toMap(); + writer.saveValue("buildConfiguration-" + QString::number(i), temp); + buildConfigurationNames << QString::number(i); } writer.saveValue("buildconfigurations", buildConfigurationNames); // save each buildstep/buildConfiguration combination - foreach (const BuildConfiguration *bc, buildConfigurations()) { + for(int i=0; i < bcs.size(); ++i) { QStringList buildStepNames; - foreach (BuildStep *buildStep, bc->buildSteps()) + foreach (BuildStep *buildStep, bcs.at(i)->buildSteps()) buildStepNames << buildStep->name(); - writer.saveValue("buildconfiguration-" + bc->name() + "-buildsteps", buildStepNames); + writer.saveValue("buildconfiguration-" + QString::number(i) + "-buildsteps", buildStepNames); int buildstepnr = 0; - foreach (BuildStep *buildStep, bc->buildSteps()) { + foreach (BuildStep *buildStep, bcs.at(i)->buildSteps()) { QMap temp; buildStep->storeIntoLocalMap(temp); - writer.saveValue("buildconfiguration-" + bc->name() + "-buildstep" + QString().setNum(buildstepnr), temp); + writer.saveValue("buildconfiguration-" + QString::number(i) + "-buildstep" + QString().setNum(buildstepnr), temp); ++buildstepnr; } } // save each cleanstep/buildConfiguration combination - foreach (const BuildConfiguration *bc, buildConfigurations()) { + for(int i=0; i < bcs.size(); ++i) { QStringList cleanStepNames; - foreach (BuildStep *cleanStep, bc->cleanSteps()) + foreach (BuildStep *cleanStep, bcs.at(i)->cleanSteps()) cleanStepNames << cleanStep->name(); - writer.saveValue("buildconfiguration-" + bc->name() + "-cleansteps", cleanStepNames); + writer.saveValue("buildconfiguration-" + QString::number(i) + "-cleansteps", cleanStepNames); int cleanstepnr = 0; - foreach (BuildStep *cleanStep, bc->cleanSteps()) { + foreach (BuildStep *cleanStep, bcs.at(i)->cleanSteps()) { QMap temp; cleanStep->storeIntoLocalMap(temp); - writer.saveValue("buildconfiguration-" + bc->name() + "-cleanstep" + QString().setNum(cleanstepnr), temp); + writer.saveValue("buildconfiguration-" + QString::number(i) + "-cleanstep" + QString().setNum(cleanstepnr), temp); ++cleanstepnr; } } @@ -212,8 +206,6 @@ void Project::saveSettingsImpl(PersistentSettingsWriter &writer) bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) { - m_activeBuildConfiguration = reader.restoreValue("activebuildconfiguration").toString(); - m_values = reader.restoreValue("project").toMap(); const QList buildStepFactories = @@ -221,15 +213,16 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) // restoring BuldConfigurations from settings const QStringList buildConfigurationNames = reader.restoreValue("buildconfigurations").toStringList(); + foreach (const QString &buildConfigurationName, buildConfigurationNames) { - BuildConfiguration *bc = buildConfigurationFactory()->restore(buildConfigurationName); + BuildConfiguration *bc = buildConfigurationFactory()->restore(); QMap temp = reader.restoreValue("buildConfiguration-" + buildConfigurationName).toMap(); bc->setValuesFromMap(temp); // Restore build steps - QVariant buildStepsValueVariant = reader.restoreValue("buildconfiguration-" + bc->name() + "-buildsteps"); + QVariant buildStepsValueVariant = reader.restoreValue("buildconfiguration-" + buildConfigurationName + "-buildsteps"); if(buildStepsValueVariant.isValid()) { int pos = 0; QStringList buildStepNames = buildStepsValueVariant.toStringList(); @@ -248,7 +241,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) QMap buildStepValues = reader.restoreValue("buildstep" + QString().setNum(buildstepnr)).toMap(); buildStep->restoreFromGlobalMap(buildStepValues); buildStepValues = - reader.restoreValue("buildconfiguration-" + bc->name() + "-buildstep" + QString().setNum(buildstepnr)).toMap(); + reader.restoreValue("buildconfiguration-" + buildConfigurationName + "-buildstep" + QString().setNum(buildstepnr)).toMap(); buildStep->restoreFromLocalMap(buildStepValues); bc->insertBuildStep(pos, buildStep); ++pos; @@ -256,7 +249,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) } } // Restore clean steps - QVariant cleanStepsValueVariant = reader.restoreValue("buildconfiguration-" + bc->name() + "-cleansteps"); + QVariant cleanStepsValueVariant = reader.restoreValue("buildconfiguration-" + buildConfigurationName + "-cleansteps"); if(cleanStepsValueVariant.isValid()) { int pos = 0; QStringList cleanStepNames = cleanStepsValueVariant.toStringList(); @@ -275,7 +268,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) QMap buildStepValues = reader.restoreValue("cleanstep" + QString().setNum(cleanstepnr)).toMap(); cleanStep->restoreFromGlobalMap(buildStepValues); buildStepValues = - reader.restoreValue("buildconfiguration-" + bc->name() + "-cleanstep" + QString().setNum(cleanstepnr)).toMap(); + reader.restoreValue("buildconfiguration-" + buildConfigurationName + "-cleanstep" + QString().setNum(cleanstepnr)).toMap(); cleanStep->restoreFromLocalMap(buildStepValues); bc->insertCleanStep(pos, cleanStep); ++pos; @@ -284,6 +277,10 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) } } + // Set Active Configuration + QString activeConfigurationName = reader.restoreValue("activebuildconfiguration").toString(); + m_activeBuildConfiguration = buildConfigurations().at(buildConfigurationNames.indexOf(activeConfigurationName)); + //Build Settings QVariant buildStepsVariant = reader.restoreValue("buildsteps"); if (buildStepsVariant.isValid()) { @@ -302,13 +299,14 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) } } if (factory) { - foreach(BuildConfiguration *bc, buildConfigurations()) { - buildStep = factory->create(bc, buildStepName); - bc->insertBuildStep(pos, buildStep); + const QList &bcs = buildConfigurations(); + for(int i = 0; i < bcs.size(); ++i) { + buildStep = factory->create(bcs.at(i), buildStepName); + bcs.at(i)->insertBuildStep(pos, buildStep); QMap buildStepValues = reader.restoreValue("buildstep" + QString().setNum(buildstepnr)).toMap(); buildStep->restoreFromGlobalMap(buildStepValues); buildStepValues = - reader.restoreValue("buildconfiguration-" + bc->name() + "-buildstep" + QString().setNum(buildstepnr)).toMap(); + reader.restoreValue("buildconfiguration-" + QString::number(i) + "-buildstep" + QString().setNum(buildstepnr)).toMap(); buildStep->restoreFromLocalMap(buildStepValues); } ++pos; @@ -334,13 +332,14 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) } if (factory) { - foreach(BuildConfiguration *bc, buildConfigurations()) { - cleanStep = factory->create(bc, cleanStepName); - bc->insertCleanStep(pos, cleanStep); + const QList &bcs = buildConfigurations(); + for (int i = 0; i < bcs.size(); ++i) { + cleanStep = factory->create(bcs.at(i), cleanStepName); + bcs.at(i)->insertCleanStep(pos, cleanStep); QMap cleanStepValues = reader.restoreValue("cleanstep" + QString().setNum(cleanstepnr)).toMap(); cleanStep->restoreFromGlobalMap(cleanStepValues); QMap buildStepValues = - reader.restoreValue("buildconfiguration-" + bc->name() + "-cleanstep" + QString().setNum(cleanstepnr)).toMap(); + reader.restoreValue("buildconfiguration-" + QString::number(i) + "-cleanstep" + QString().setNum(cleanstepnr)).toMap(); cleanStep->restoreFromLocalMap(buildStepValues); } ++pos; @@ -396,23 +395,15 @@ QVariant Project::value(const QString &name) const return QVariant(); } -BuildConfiguration *Project::buildConfiguration(const QString &name) const -{ - for (int i = 0; i != m_buildConfigurationValues.size(); ++i) - if (m_buildConfigurationValues.at(i)->name() == name) - return m_buildConfigurationValues.at(i); - return 0; -} - BuildConfiguration *Project::activeBuildConfiguration() const { - return buildConfiguration(m_activeBuildConfiguration); //TODO + return m_activeBuildConfiguration; //TODO } void Project::setActiveBuildConfiguration(BuildConfiguration *configuration) { - if (m_activeBuildConfiguration != configuration->name() && m_buildConfigurationValues.contains(configuration)) { - m_activeBuildConfiguration = configuration->name(); + if (m_activeBuildConfiguration != configuration && m_buildConfigurationValues.contains(configuration)) { + m_activeBuildConfiguration = configuration; emit activeBuildConfigurationChanged(); } } @@ -486,7 +477,7 @@ void Project::setDisplayNameFor(BuildConfiguration *configuration, const QString configuration->setDisplayName(displayName); - emit buildConfigurationDisplayNameChanged(configuration->name()); + emit buildConfigurationDisplayNameChanged(configuration); } QByteArray Project::predefinedMacros(const QString &) const diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 2e7e43a6972..f999527703f 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -87,7 +87,6 @@ public: void addBuildConfiguration(BuildConfiguration *configuration); void removeBuildConfiguration(BuildConfiguration *configuration); - BuildConfiguration *buildConfiguration(const QString & name) const; QList buildConfigurations() const; // remove and add "QString uniqueConfigurationDisplayName(const QString &proposedName) const" instead void setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName); @@ -146,12 +145,12 @@ signals: void removedRunConfiguration(ProjectExplorer::Project *p, const QString &name); void addedRunConfiguration(ProjectExplorer::Project *p, const QString &name); - void removedBuildConfiguration(ProjectExplorer::Project *p, const QString &name); - void addedBuildConfiguration(ProjectExplorer::Project *p, const QString &name); + void removedBuildConfiguration(ProjectExplorer::Project *p, BuildConfiguration *bc); + void addedBuildConfiguration(ProjectExplorer::Project *p, BuildConfiguration *bc); // This signal is jut there for updating the tree list in the buildsettings wizard - void buildConfigurationDisplayNameChanged(const QString &buildConfiguration); - void environmentChanged(const QString &buildConfiguration); + void buildConfigurationDisplayNameChanged(BuildConfiguration *bc); + void environmentChanged(BuildConfiguration *bc); protected: /* This method is called when the project .user file is saved. Simply call @@ -175,7 +174,7 @@ protected: private: QMap m_values; QList m_buildConfigurationValues; - QString m_activeBuildConfiguration; + BuildConfiguration *m_activeBuildConfiguration; QList m_runConfigurations; RunConfiguration* m_activeRunConfiguration; EditorConfiguration *m_editorConfiguration; diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 1693c398df7..2f2da8c6e0a 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -1424,20 +1424,7 @@ void ProjectExplorerPlugin::buildProjectOnly() qDebug() << "ProjectExplorerPlugin::buildProjectOnly"; if (saveModifiedFiles()) - buildManager()->buildProject(d->m_currentProject, d->m_currentProject->activeBuildConfiguration()->name()); -} - -static QStringList configurations(const QList &projects) -{ - QStringList result; - foreach (const Project * pro, projects) { - if (BuildConfiguration *bc = pro->activeBuildConfiguration()) { - result << bc->name(); - } else { - result << QString::null; - } - } - return result; + buildManager()->buildProject(d->m_currentProject->activeBuildConfiguration()); } void ProjectExplorerPlugin::buildProject() @@ -1446,8 +1433,11 @@ void ProjectExplorerPlugin::buildProject() qDebug() << "ProjectExplorerPlugin::buildProject"; if (saveModifiedFiles()) { - const QList & projects = d->m_session->projectOrder(d->m_currentProject); - d->m_buildManager->buildProjects(projects, configurations(projects)); + QList configurations; + foreach (Project *pro, d->m_session->projectOrder(d->m_currentProject)) + configurations << pro->activeBuildConfiguration(); + + d->m_buildManager->buildProjects(configurations); } } @@ -1457,8 +1447,10 @@ void ProjectExplorerPlugin::buildSession() qDebug() << "ProjectExplorerPlugin::buildSession"; if (saveModifiedFiles()) { - const QList & projects = d->m_session->projectOrder(); - d->m_buildManager->buildProjects(projects, configurations(projects)); + QList configurations; + foreach (Project *pro, d->m_session->projectOrder()) + configurations << pro->activeBuildConfiguration(); + d->m_buildManager->buildProjects(configurations); } } @@ -1468,8 +1460,8 @@ void ProjectExplorerPlugin::rebuildProjectOnly() qDebug() << "ProjectExplorerPlugin::rebuildProjectOnly"; if (saveModifiedFiles()) { - d->m_buildManager->cleanProject(d->m_currentProject, d->m_currentProject->activeBuildConfiguration()->name()); - d->m_buildManager->buildProject(d->m_currentProject, d->m_currentProject->activeBuildConfiguration()->name()); + d->m_buildManager->cleanProject(d->m_currentProject->activeBuildConfiguration()); + d->m_buildManager->buildProject(d->m_currentProject->activeBuildConfiguration()); } } @@ -1479,11 +1471,13 @@ void ProjectExplorerPlugin::rebuildProject() qDebug() << "ProjectExplorerPlugin::rebuildProject"; if (saveModifiedFiles()) { - const QList & projects = d->m_session->projectOrder(d->m_currentProject); - const QStringList configs = configurations(projects); + const QList &projects = d->m_session->projectOrder(d->m_currentProject); + QList configurations; + foreach (Project *pro, projects) + configurations << pro->activeBuildConfiguration(); - d->m_buildManager->cleanProjects(projects, configs); - d->m_buildManager->buildProjects(projects, configs); + d->m_buildManager->cleanProjects(configurations); + d->m_buildManager->buildProjects(configurations); } } @@ -1494,10 +1488,12 @@ void ProjectExplorerPlugin::rebuildSession() if (saveModifiedFiles()) { const QList & projects = d->m_session->projectOrder(); - const QStringList configs = configurations(projects); + QList configurations; + foreach (Project *pro, projects) + configurations << pro->activeBuildConfiguration(); - d->m_buildManager->cleanProjects(projects, configs); - d->m_buildManager->buildProjects(projects, configs); + d->m_buildManager->cleanProjects(configurations); + d->m_buildManager->buildProjects(configurations); } } @@ -1507,7 +1503,7 @@ void ProjectExplorerPlugin::cleanProjectOnly() qDebug() << "ProjectExplorerPlugin::cleanProjectOnly"; if (saveModifiedFiles()) - d->m_buildManager->cleanProject(d->m_currentProject, d->m_currentProject->activeBuildConfiguration()->name()); + d->m_buildManager->cleanProject(d->m_currentProject->activeBuildConfiguration()); } void ProjectExplorerPlugin::cleanProject() @@ -1517,7 +1513,10 @@ void ProjectExplorerPlugin::cleanProject() if (saveModifiedFiles()) { const QList & projects = d->m_session->projectOrder(d->m_currentProject); - d->m_buildManager->cleanProjects(projects, configurations(projects)); + QList configurations; + foreach (Project *pro, projects) + configurations << pro->activeBuildConfiguration(); + d->m_buildManager->cleanProjects(configurations); } } @@ -1528,21 +1527,24 @@ void ProjectExplorerPlugin::cleanSession() if (saveModifiedFiles()) { const QList & projects = d->m_session->projectOrder(); - d->m_buildManager->cleanProjects(projects, configurations(projects)); + QList configurations; + foreach (Project *pro, projects) + configurations << pro->activeBuildConfiguration(); + d->m_buildManager->cleanProjects(configurations); } } void ProjectExplorerPlugin::runProject() { - runProjectImpl(startupProject()); + runProjectImpl(startupProject(), ProjectExplorer::Constants::RUNMODE); } void ProjectExplorerPlugin::runProjectContextMenu() { - runProjectImpl(d->m_currentProject); + runProjectImpl(d->m_currentProject, ProjectExplorer::Constants::RUNMODE); } -void ProjectExplorerPlugin::runProjectImpl(Project *pro) +void ProjectExplorerPlugin::runProjectImpl(Project *pro, QString mode) { if (!pro) return; @@ -1553,16 +1555,21 @@ void ProjectExplorerPlugin::runProjectImpl(Project *pro) return; } if (saveModifiedFiles()) { - d->m_runMode = ProjectExplorer::Constants::RUNMODE; + d->m_runMode = mode; d->m_delayedRunConfiguration = pro->activeRunConfiguration(); const QList & projects = d->m_session->projectOrder(pro); - d->m_buildManager->buildProjects(projects, configurations(projects)); + QList configurations; + foreach(Project *pro, projects) + configurations << pro->activeBuildConfiguration(); + d->m_buildManager->buildProjects(configurations); + + updateRunAction(); } } else { // TODO this ignores RunConfiguration::isEnabled() if (saveModifiedFiles()) - executeRunConfiguration(pro->activeRunConfiguration(), ProjectExplorer::Constants::RUNMODE); + executeRunConfiguration(pro->activeRunConfiguration(), mode); } } @@ -1572,25 +1579,7 @@ void ProjectExplorerPlugin::debugProject() if (!pro || d->m_debuggingRunControl ) return; - if (d->m_projectExplorerSettings.buildBeforeRun && pro->hasBuildSettings()) { - if (!pro->activeRunConfiguration()->isEnabled()) { - if (!showBuildConfigDialog()) - return; - } - if (saveModifiedFiles()) { - d->m_runMode = ProjectExplorer::Constants::DEBUGMODE; - d->m_delayedRunConfiguration = pro->activeRunConfiguration(); - - const QList & projects = d->m_session->projectOrder(pro); - d->m_buildManager->buildProjects(projects, configurations(projects)); - - updateRunAction(); - } - } else { - // TODO this ignores RunConfiguration::isEnabled() - if (saveModifiedFiles()) - executeRunConfiguration(pro->activeRunConfiguration(), ProjectExplorer::Constants::DEBUGMODE); - } + runProjectImpl(pro, ProjectExplorer::Constants::DEBUGMODE); } bool ProjectExplorerPlugin::showBuildConfigDialog() @@ -1965,14 +1954,14 @@ void ProjectExplorerPlugin::populateBuildConfigurationMenu() d->m_buildConfigurationMenu->clear(); if (Project *pro = d->m_currentProject) { const BuildConfiguration *activeBC = pro->activeBuildConfiguration(); - foreach (const BuildConfiguration *bc, pro->buildConfigurations()) { + foreach (BuildConfiguration *bc, pro->buildConfigurations()) { QString displayName = bc->displayName(); QAction *act = new QAction(displayName, d->m_buildConfigurationActionGroup); if (debug) - qDebug() << "BuildConfiguration " << bc->name() << "active: " << activeBC->name(); + qDebug() << "BuildConfiguration " << bc->displayName() << "active: " << activeBC->displayName(); act->setCheckable(true); act->setChecked(bc == activeBC); - act->setData(bc->name()); + act->setData(QVariant::fromValue(bc)); d->m_buildConfigurationMenu->addAction(act); } d->m_buildConfigurationMenu->setEnabled(true); @@ -1986,8 +1975,7 @@ void ProjectExplorerPlugin::buildConfigurationMenuTriggered(QAction *action) if (debug) qDebug() << "ProjectExplorerPlugin::buildConfigurationMenuTriggered"; - d->m_currentProject->setActiveBuildConfiguration(d->m_currentProject->buildConfiguration( - action->data().toString())); + d->m_currentProject->setActiveBuildConfiguration(action->data().value()); } void ProjectExplorerPlugin::populateRunConfigurationMenu() @@ -2136,9 +2124,6 @@ Internal::ProjectExplorerSettings ProjectExplorerPlugin::projectExplorerSettings return d->m_projectExplorerSettings; } -// ---------- BuildConfigDialog ----------- -Q_DECLARE_METATYPE(BuildConfiguration*); - BuildConfigDialog::BuildConfigDialog(Project *project, QWidget *parent) : QDialog(parent), m_project(project) @@ -2173,7 +2158,7 @@ BuildConfigDialog::BuildConfigDialog(Project *project, QWidget *parent) RunConfiguration *activeRun = m_project->activeRunConfiguration(); foreach (BuildConfiguration *config, m_project->buildConfigurations()) { if (activeRun->isEnabled(config)) { - m_configCombo->addItem(config->name(), qVariantFromValue(config)); + m_configCombo->addItem(config->displayName(), QVariant::fromValue(config)); } } if (m_configCombo->count() == 0) { diff --git a/src/plugins/projectexplorer/projectexplorer.h b/src/plugins/projectexplorer/projectexplorer.h index b8ea2d8d8b8..10dc691e737 100644 --- a/src/plugins/projectexplorer/projectexplorer.h +++ b/src/plugins/projectexplorer/projectexplorer.h @@ -215,7 +215,7 @@ private slots: void currentModeChanged(Core::IMode *mode); private: - void runProjectImpl(Project *pro); + void runProjectImpl(Project *pro, QString mode); void executeRunConfiguration(RunConfiguration *, const QString &mode); bool showBuildConfigDialog(); diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index 5fc16bafc32..b67f6be4f30 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -512,7 +512,7 @@ BuildConfigurationComboBox::BuildConfigurationComboBox(Project *p, QWidget *pare //m_comboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); foreach(const BuildConfiguration *buildConfiguration, p->buildConfigurations()) - m_comboBox->addItem(buildConfiguration->displayName(), buildConfiguration->name()); + m_comboBox->addItem(buildConfiguration->displayName(), buildConfiguration); if (p->buildConfigurations().count() == 1) { m_label->setText(m_comboBox->itemText(0)); setCurrentWidget(m_label); @@ -522,14 +522,14 @@ BuildConfigurationComboBox::BuildConfigurationComboBox(Project *p, QWidget *pare if (index != -1) m_comboBox->setCurrentIndex(index); - connect(p, SIGNAL(buildConfigurationDisplayNameChanged(QString)), - this, SLOT(nameChanged(QString))); + connect(p, SIGNAL(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)), + this, SLOT(nameChanged(ProjectExplorer::BuildConfiguration *))); connect(p, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(activeConfigurationChanged())); - connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::Project *, QString)), - this, SLOT(addedBuildConfiguration(ProjectExplorer::Project *, QString))); - connect(p, SIGNAL(removedBuildConfiguration(ProjectExplorer::Project *, QString)), - this, SLOT(removedBuildConfiguration(ProjectExplorer::Project *, QString))); + connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *)), + this, SLOT(addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *))); + connect(p, SIGNAL(removedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *)), + this, SLOT(removedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *))); connect(m_comboBox, SIGNAL(activated(int)), this, SLOT(changedIndex(int))); } @@ -539,28 +539,28 @@ BuildConfigurationComboBox::~BuildConfigurationComboBox() } -void BuildConfigurationComboBox::nameChanged(const QString &buildConfiguration) +void BuildConfigurationComboBox::nameChanged(BuildConfiguration *bc) { - int index = nameToIndex(buildConfiguration); + int index = nameToIndex(bc); if (index == -1) return; - const QString &displayName = m_project->buildConfiguration(buildConfiguration)->displayName(); + const QString &displayName = bc->displayName(); m_comboBox->setItemText(index, displayName); if (m_comboBox->count() == 1) m_label->setText(displayName); } -int BuildConfigurationComboBox::nameToIndex(const QString &buildConfiguration) +int BuildConfigurationComboBox::nameToIndex(BuildConfiguration *bc) { for (int i=0; i < m_comboBox->count(); ++i) - if (m_comboBox->itemData(i) == buildConfiguration) + if (m_comboBox->itemData(i).value() == bc) return i; return -1; } void BuildConfigurationComboBox::activeConfigurationChanged() { - int index = nameToIndex(m_project->activeBuildConfiguration()->name()); + int index = nameToIndex(m_project->activeBuildConfiguration()); if (index == -1) return; ignoreIndexChange = true; @@ -568,20 +568,20 @@ void BuildConfigurationComboBox::activeConfigurationChanged() ignoreIndexChange = false; } -void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Project *,const QString &buildConfiguration) +void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Project *,BuildConfiguration *bc) { ignoreIndexChange = true; - m_comboBox->addItem(m_project->buildConfiguration(buildConfiguration)->displayName(), buildConfiguration); + m_comboBox->addItem(bc->displayName(), QVariant::fromValue(bc)); if (m_comboBox->count() == 2) setCurrentWidget(m_comboBox); ignoreIndexChange = false; } -void BuildConfigurationComboBox::removedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration) +void BuildConfigurationComboBox::removedBuildConfiguration(ProjectExplorer::Project *, BuildConfiguration *bc) { ignoreIndexChange = true; - int index = nameToIndex(buildConfiguration); + int index = nameToIndex(bc); m_comboBox->removeItem(index); if (m_comboBox->count() == 1) { m_label->setText(m_comboBox->itemText(0)); @@ -594,8 +594,7 @@ void BuildConfigurationComboBox::changedIndex(int newIndex) { if (newIndex == -1) return; - m_project->setActiveBuildConfiguration( - m_project->buildConfiguration(m_comboBox->itemData(newIndex).toString())); + m_project->setActiveBuildConfiguration(m_comboBox->itemData(newIndex).value()); } /// diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h index a99e9fb66c6..70c58890b9c 100644 --- a/src/plugins/projectexplorer/projectwindow.h +++ b/src/plugins/projectexplorer/projectwindow.h @@ -56,6 +56,7 @@ class IPropertiesPanel; class Project; class ProjectExplorerPlugin; class SessionManager; +class BuildConfiguration; namespace Internal { @@ -100,13 +101,13 @@ public: BuildConfigurationComboBox(ProjectExplorer::Project *p, QWidget *parent = 0); ~BuildConfigurationComboBox(); private slots: - void nameChanged(const QString &buildConfiguration); + void nameChanged(ProjectExplorer::BuildConfiguration *bc); void activeConfigurationChanged(); - void addedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration); - void removedBuildConfiguration(ProjectExplorer::Project *, const QString &buildConfiguration); + void addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *bc); + void removedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *bc); void changedIndex(int newIndex); private: - int nameToIndex(const QString &buildConfiguration); + int nameToIndex(ProjectExplorer::BuildConfiguration *bc); bool ignoreIndexChange; ProjectExplorer::Project *m_project; QComboBox *m_comboBox; diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 05d90274633..91e4846f987 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -34,14 +34,14 @@ using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; using ProjectExplorer::BuildConfiguration; -Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Project *pro, const QString &name) - : BuildConfiguration(pro, name) +Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Project *pro) + : BuildConfiguration(pro) { } -Qt4BuildConfiguration::Qt4BuildConfiguration(const QString &name, Qt4BuildConfiguration *source) - : BuildConfiguration(name, source) +Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4BuildConfiguration *source) + : BuildConfiguration(source) { } diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index 8ea2cd81160..ad66b4f177f 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -41,9 +41,9 @@ namespace Internal { class Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration { public: - Qt4BuildConfiguration(Qt4Project *pro, const QString &name); + Qt4BuildConfiguration(Qt4Project *pro); // copy ctor - Qt4BuildConfiguration(const QString &name, Qt4BuildConfiguration *source); + Qt4BuildConfiguration(Qt4BuildConfiguration *source); ~Qt4BuildConfiguration(); }; diff --git a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp index 2edd8cfeb77..16d64842ae7 100644 --- a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp @@ -42,7 +42,7 @@ using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; Qt4BuildEnvironmentWidget::Qt4BuildEnvironmentWidget(Qt4Project *project) - : BuildConfigWidget(), m_pro(project) + : BuildConfigWidget(), m_pro(project), m_buildConfiguration(0) { QVBoxLayout *vbox = new QVBoxLayout(this); vbox->setMargin(0); @@ -65,28 +65,25 @@ QString Qt4BuildEnvironmentWidget::displayName() const return tr("Build Environment"); } -void Qt4BuildEnvironmentWidget::init(const QString &buildConfiguration) +void Qt4BuildEnvironmentWidget::init(ProjectExplorer::BuildConfiguration *bc) { if (debug) qDebug() << "Qt4BuildConfigWidget::init()"; - m_buildConfiguration = buildConfiguration; - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(buildConfiguration); - m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(bc)); - m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(bc)); - m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(bc)); + m_buildConfiguration = bc; + m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(m_buildConfiguration)); + m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration)); + m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(m_buildConfiguration)); m_buildEnvironmentWidget->updateButtons(); } void Qt4BuildEnvironmentWidget::environmentModelUserChangesUpdated() { - m_pro->setUserEnvironmentChanges(m_pro->buildConfiguration(m_buildConfiguration), - m_buildEnvironmentWidget->userChanges()); + m_pro->setUserEnvironmentChanges(m_buildConfiguration, m_buildEnvironmentWidget->userChanges()); } void Qt4BuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked) { - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); - m_pro->setUseSystemEnvironment(bc, !checked); - m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(bc)); + m_pro->setUseSystemEnvironment(m_buildConfiguration, !checked); + m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration)); } diff --git a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.h b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.h index c6c9d259e00..7f565e73a28 100644 --- a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.h +++ b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.h @@ -53,7 +53,7 @@ public: Qt4BuildEnvironmentWidget(Qt4Project *project); QString displayName() const; - void init(const QString &buildConfiguration); + void init(ProjectExplorer::BuildConfiguration *bc); private slots: void environmentModelUserChangesUpdated(); @@ -63,7 +63,7 @@ private: ProjectExplorer::EnvironmentWidget *m_buildEnvironmentWidget; QCheckBox *m_clearSystemEnvironmentCheckBox; Qt4Project *m_pro; - QString m_buildConfiguration; + ProjectExplorer::BuildConfiguration *m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index fdfa6ff5512..d5f986e9dd8 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -297,17 +297,17 @@ BuildConfiguration *Qt4BuildConfigurationFactory::create(const QString &type) co return bc; } -BuildConfiguration *Qt4BuildConfigurationFactory::clone(const QString &name, BuildConfiguration *source) const +BuildConfiguration *Qt4BuildConfigurationFactory::clone(BuildConfiguration *source) const { Qt4BuildConfiguration *oldbc = static_cast(source); - Qt4BuildConfiguration *newbc = new Qt4BuildConfiguration(name, oldbc); + Qt4BuildConfiguration *newbc = new Qt4BuildConfiguration(oldbc); m_project->addBuildConfiguration(newbc); return newbc; } -BuildConfiguration *Qt4BuildConfigurationFactory::restore(const QString &name) const +BuildConfiguration *Qt4BuildConfigurationFactory::restore() const { - Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(m_project, name); + Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(m_project); return bc; } @@ -459,7 +459,8 @@ Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigu bool debug = qmakeBuildConfiguration & QtVersion::DebugBuild; // Add the buildconfiguration - Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this, buildConfigurationName); + Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this); + bc->setDisplayName(buildConfigurationName); addBuildConfiguration(bc); QMakeStep *qmakeStep = new QMakeStep(bc); @@ -890,7 +891,7 @@ void Qt4Project::setUseSystemEnvironment(BuildConfiguration *configuration, bool if (useSystemEnvironment(configuration) == b) return; configuration->setValue("clearSystemEnvironment", !b); - emit environmentChanged(configuration->name()); + emit environmentChanged(configuration); } bool Qt4Project::useSystemEnvironment(BuildConfiguration *configuration) const @@ -911,7 +912,7 @@ void Qt4Project::setUserEnvironmentChanges(BuildConfiguration *configuration, co if (list == configuration->value("userEnvironmentChanges").toStringList()) return; configuration->setValue("userEnvironmentChanges", list); - emit environmentChanged(configuration->name()); + emit environmentChanged(configuration); } QString Qt4Project::qtDir(BuildConfiguration *configuration) const @@ -931,7 +932,7 @@ int Qt4Project::qtVersionId(BuildConfiguration *configuration) const { QtVersionManager *vm = QtVersionManager::instance(); if (debug) - qDebug()<<"Looking for qtVersion ID of "<name(); + qDebug()<<"Looking for qtVersion ID of "<displayName(); int id = 0; QVariant vid = configuration->value(KEY_QT_VERSION_ID); if (vid.isValid()) { diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index e0faac766c3..78494cde3f8 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -132,8 +132,8 @@ public: QString displayNameForType(const QString &type) const; ProjectExplorer::BuildConfiguration *create(const QString &type) const; - ProjectExplorer::BuildConfiguration *clone(const QString &name, ProjectExplorer::BuildConfiguration *source) const; - ProjectExplorer::BuildConfiguration *restore(const QString &name) const; + ProjectExplorer::BuildConfiguration *clone(ProjectExplorer::BuildConfiguration *source) const; + ProjectExplorer::BuildConfiguration *restore() const; void update(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index fdafc76416f..1a80dc1f1a7 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -53,7 +53,8 @@ using namespace Qt4ProjectManager::Internal; Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) : BuildConfigWidget(), - m_pro(project) + m_pro(project), + m_buildConfiguration(0) { QVBoxLayout *vbox = new QVBoxLayout(this); vbox->setMargin(0); @@ -111,10 +112,9 @@ Qt4ProjectConfigWidget::~Qt4ProjectConfigWidget() void Qt4ProjectConfigWidget::updateDetails() { - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); - QtVersion *version = m_pro->qtVersion(bc); + QtVersion *version = m_pro->qtVersion(m_buildConfiguration); QString versionString; - if (m_pro->qtVersionId(bc) == 0) { + if (m_pro->qtVersionId(m_buildConfiguration) == 0) { versionString = tr("Default Qt Version (%1)").arg(version->name()); } else if(version){ versionString = version->name(); @@ -126,8 +126,8 @@ void Qt4ProjectConfigWidget::updateDetails() "with tool chain %2
" "building in %3") .arg(versionString, - ProjectExplorer::ToolChain::toolChainName(m_pro->toolChainType(bc)), - QDir::toNativeSeparators(m_pro->buildDirectory(bc)))); + ProjectExplorer::ToolChain::toolChainName(m_pro->toolChainType(m_buildConfiguration)), + QDir::toNativeSeparators(m_pro->buildDirectory(m_buildConfiguration)))); } void Qt4ProjectConfigWidget::manageQtVersions() @@ -142,22 +142,21 @@ QString Qt4ProjectConfigWidget::displayName() const return tr("General"); } -void Qt4ProjectConfigWidget::init(const QString &buildConfiguration) +void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) { if (debug) - qDebug() << "Qt4ProjectConfigWidget::init() for"<displayName(); - m_buildConfiguration = buildConfiguration; - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(buildConfiguration); - m_ui->nameLineEdit->setText(bc->displayName()); + m_buildConfiguration = bc; + m_ui->nameLineEdit->setText(m_buildConfiguration->displayName()); setupQtVersionsComboBox(); - bool shadowBuild = bc->value("useShadowBuild").toBool(); + bool shadowBuild = m_buildConfiguration->value("useShadowBuild").toBool(); m_ui->shadowBuildCheckBox->setChecked(shadowBuild); m_ui->shadowBuildDirEdit->setEnabled(shadowBuild); m_browseButton->setEnabled(shadowBuild); - m_ui->shadowBuildDirEdit->setPath(m_pro->buildDirectory(bc)); + m_ui->shadowBuildDirEdit->setPath(m_pro->buildDirectory(m_buildConfiguration)); updateImportLabel(); updateToolChainCombo(); updateDetails(); @@ -165,12 +164,12 @@ void Qt4ProjectConfigWidget::init(const QString &buildConfiguration) void Qt4ProjectConfigWidget::changeConfigName(const QString &newName) { - m_pro->setDisplayNameFor(m_pro->buildConfiguration(m_buildConfiguration), newName); + m_pro->setDisplayNameFor(m_buildConfiguration, newName); } void Qt4ProjectConfigWidget::setupQtVersionsComboBox() { - if (m_buildConfiguration.isEmpty()) // not yet initialized + if (!m_buildConfiguration) // not yet initialized return; disconnect(m_ui->qtVersionComboBox, SIGNAL(currentIndexChanged(QString)), @@ -181,7 +180,7 @@ void Qt4ProjectConfigWidget::setupQtVersionsComboBox() m_ui->qtVersionComboBox->clear(); m_ui->qtVersionComboBox->addItem(tr("Default Qt Version (%1)").arg(vm->defaultVersion()->name()), 0); - int qtVersionId = m_pro->qtVersionId(m_pro->buildConfiguration(m_buildConfiguration)); + int qtVersionId = m_pro->qtVersionId(m_buildConfiguration); if (qtVersionId == 0) { m_ui->qtVersionComboBox->setCurrentIndex(0); @@ -215,12 +214,11 @@ void Qt4ProjectConfigWidget::shadowBuildCheckBoxClicked(bool checked) m_ui->shadowBuildDirEdit->setEnabled(checked); m_browseButton->setEnabled(checked); bool b = m_ui->shadowBuildCheckBox->isChecked(); - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); - bc->setValue("useShadowBuild", b); + m_buildConfiguration->setValue("useShadowBuild", b); if (b) - bc->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path()); + m_buildConfiguration->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path()); else - bc->setValue("buildDirectory", QVariant(QString::null)); + m_buildConfiguration->setValue("buildDirectory", QVariant(QString::null)); updateDetails(); m_pro->invalidateCachedTargetInformation(); updateImportLabel(); @@ -231,10 +229,9 @@ void Qt4ProjectConfigWidget::updateImportLabel() bool visible = false; // we only show if we actually have a qmake and makestep - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); - if (m_pro->qmakeStep(bc) && m_pro->makeStep(bc)) { - QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(m_pro->buildDirectory(bc)); - QtVersion *version = m_pro->qtVersion(bc); + if (m_pro->qmakeStep(m_buildConfiguration) && m_pro->makeStep(m_buildConfiguration)) { + QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(m_pro->buildDirectory(m_buildConfiguration)); + QtVersion *version = m_pro->qtVersion(m_buildConfiguration); // check that there's a makefile if (!qmakePath.isEmpty()) { // and that the qmake path is different from the current version @@ -243,7 +240,7 @@ void Qt4ProjectConfigWidget::updateImportLabel() visible = true; } else { // check that the qmake flags, arguments match - visible = !m_pro->compareBuildConfigurationToImportFrom(bc, m_pro->buildDirectory(bc)); + visible = !m_pro->compareBuildConfigurationToImportFrom(m_buildConfiguration, m_pro->buildDirectory(m_buildConfiguration)); } } else { visible = false; @@ -255,10 +252,9 @@ void Qt4ProjectConfigWidget::updateImportLabel() void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged() { - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); - if (bc->value("buildDirectory").toString() == m_ui->shadowBuildDirEdit->path()) + if (m_buildConfiguration->value("buildDirectory").toString() == m_ui->shadowBuildDirEdit->path()) return; - bc->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path()); + m_buildConfiguration->setValue("buildDirectory", m_ui->shadowBuildDirEdit->path()); // if the directory already exists // check if we have a build in there and // offer to import it @@ -270,10 +266,9 @@ void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged() void Qt4ProjectConfigWidget::importLabelClicked() { - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); - if (!m_pro->qmakeStep(bc) || !m_pro->makeStep(bc)) + if (!m_pro->qmakeStep(m_buildConfiguration) || !m_pro->makeStep(m_buildConfiguration)) return; - QString directory = m_pro->buildDirectory(bc); + QString directory = m_pro->buildDirectory(m_buildConfiguration); if (!directory.isEmpty()) { QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(directory); if (!qmakePath.isEmpty()) { @@ -298,14 +293,14 @@ void Qt4ProjectConfigWidget::importLabelClicked() } // So we got all the information now apply it... - m_pro->setQtVersion(bc, version->uniqueId()); + m_pro->setQtVersion(m_buildConfiguration, version->uniqueId()); // Combo box will be updated at the end - QMakeStep *qmakeStep = m_pro->qmakeStep(bc); + QMakeStep *qmakeStep = m_pro->qmakeStep(m_buildConfiguration); qmakeStep->setQMakeArguments(additionalArguments); - MakeStep *makeStep = m_pro->makeStep(bc); + MakeStep *makeStep = m_pro->makeStep(m_buildConfiguration); - bc->setValue("buildConfiguration", int(qmakeBuildConfig)); + m_buildConfiguration->setValue("buildConfiguration", int(qmakeBuildConfig)); // Adjust command line arguments, this is ugly as hell // If we are switching to BuildAll we want "release" in there and no "debug" // or "debug" in there and no "release" @@ -340,8 +335,8 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString QtVersionManager *vm = QtVersionManager::instance(); bool isValid = vm->version(newQtVersion)->isValid(); m_ui->invalidQtWarningLabel->setVisible(!isValid); - if (newQtVersion != m_pro->qtVersionId(m_pro->buildConfiguration(m_buildConfiguration))) { - m_pro->setQtVersion(m_pro->buildConfiguration(m_buildConfiguration), newQtVersion); + if (newQtVersion != m_pro->qtVersionId(m_buildConfiguration)) { + m_pro->setQtVersion(m_buildConfiguration, newQtVersion); updateToolChainCombo(); m_pro->update(); } @@ -351,14 +346,13 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString void Qt4ProjectConfigWidget::updateToolChainCombo() { m_ui->toolChainComboBox->clear(); - ProjectExplorer::BuildConfiguration *bc = m_pro->buildConfiguration(m_buildConfiguration); - QList toolchains = m_pro->qtVersion(bc)->possibleToolChainTypes(); + QList toolchains = m_pro->qtVersion(m_buildConfiguration)->possibleToolChainTypes(); using namespace ProjectExplorer; foreach (ToolChain::ToolChainType toolchain, toolchains) { m_ui->toolChainComboBox->addItem(ToolChain::toolChainName(toolchain), qVariantFromValue(toolchain)); } m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1); - setToolChain(toolchains.indexOf(m_pro->toolChainType(bc))); + setToolChain(toolchains.indexOf(m_pro->toolChainType(m_buildConfiguration))); } void Qt4ProjectConfigWidget::selectToolChain(int index) @@ -372,7 +366,7 @@ void Qt4ProjectConfigWidget::setToolChain(int index) ProjectExplorer::ToolChain::ToolChainType selectedToolChainType = m_ui->toolChainComboBox->itemData(index, Qt::UserRole).value(); - m_pro->setToolChainType(m_pro->buildConfiguration(m_buildConfiguration), selectedToolChainType); + m_pro->setToolChainType(m_buildConfiguration, selectedToolChainType); if (m_ui->toolChainComboBox->currentIndex() != index) m_ui->toolChainComboBox->setCurrentIndex(index); updateDetails(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h index 5590c29fd64..4abbee93ed8 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h @@ -52,7 +52,7 @@ public: ~Qt4ProjectConfigWidget(); QString displayName() const; - void init(const QString &buildConfiguration); + void init(ProjectExplorer::BuildConfiguration *bc); private slots: void changeConfigName(const QString &newName); @@ -72,8 +72,8 @@ private: void setToolChain(int index); Ui::Qt4ProjectConfigWidget *m_ui; QAbstractButton *m_browseButton; - Qt4Project *m_pro; - QString m_buildConfiguration; + Qt4Project *m_pro; // TODO remove + ProjectExplorer::BuildConfiguration *m_buildConfiguration; Utils::DetailsWidget *m_detailsContainer; }; diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 40759947d64..8994ee9bd2e 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -80,7 +80,7 @@ Qt4RunConfiguration::Qt4RunConfiguration(Qt4Project *pro, const QString &proFile connect(pro, SIGNAL(activeBuildConfigurationChanged()), this, SIGNAL(baseEnvironmentChanged())); - connect(pro, SIGNAL(environmentChanged(QString)), + connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), this, SIGNAL(baseEnvironmentChanged())); } From 7949d93a1ab80f6173d6de1ab146378ce6256c88 Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 25 Nov 2009 18:49:59 +0100 Subject: [PATCH 08/62] Add missing Q_OBJECT macros to BuildConfiguration --- src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h | 1 + src/plugins/genericprojectmanager/genericbuildconfiguration.h | 1 + src/plugins/qt4projectmanager/qt4buildconfiguration.h | 1 + 3 files changed, 3 insertions(+) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index 3eb71600779..785dff704cc 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -39,6 +39,7 @@ class CMakeProject; class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration { + Q_OBJECT public: CMakeBuildConfiguration(CMakeProject *pro); CMakeBuildConfiguration(BuildConfiguration *source); diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index aa812c396d5..132cd17b587 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -40,6 +40,7 @@ class GenericProject; class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration { + Q_OBJECT public: GenericBuildConfiguration(GenericProject *pro); GenericBuildConfiguration(GenericBuildConfiguration *source); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index ad66b4f177f..d633527285b 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -40,6 +40,7 @@ namespace Internal { class Qt4BuildConfiguration : public ProjectExplorer::BuildConfiguration { + Q_OBJECT public: Qt4BuildConfiguration(Qt4Project *pro); // copy ctor From a312206306e85258e2ee9ac649a9b5ae00a92ef6 Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 25 Nov 2009 18:50:20 +0100 Subject: [PATCH 09/62] Move most of the BuildConfiguration specific functions Note: I didn't fix all the connects and there are a few missing things. This compiles, more work is coming. --- .../cmakebuildconfiguration.cpp | 117 ++++++- .../cmakebuildconfiguration.h | 19 ++ .../cmakebuildenvironmentwidget.cpp | 15 +- .../cmakebuildenvironmentwidget.h | 3 +- .../cmakeprojectmanager/cmakeproject.cpp | 154 ++------- .../cmakeprojectmanager/cmakeproject.h | 19 +- .../cmakerunconfiguration.cpp | 8 +- src/plugins/cmakeprojectmanager/makestep.cpp | 18 +- src/plugins/debugger/debuggerrunner.cpp | 3 +- .../genericbuildconfiguration.cpp | 19 ++ .../genericbuildconfiguration.h | 3 + .../genericprojectmanager/genericmakestep.cpp | 10 +- .../genericprojectmanager/genericproject.cpp | 23 +- .../genericprojectmanager/genericproject.h | 6 +- .../projectexplorer/buildconfiguration.cpp | 1 + .../projectexplorer/buildconfiguration.h | 12 +- .../customexecutablerunconfiguration.cpp | 7 +- src/plugins/projectexplorer/processstep.cpp | 4 +- src/plugins/projectexplorer/project.h | 8 +- src/plugins/qmlprojectmanager/qmlproject.cpp | 18 -- src/plugins/qmlprojectmanager/qmlproject.h | 4 - .../qt4projectmanager/externaleditors.cpp | 4 +- src/plugins/qt4projectmanager/makestep.cpp | 32 +- src/plugins/qt4projectmanager/qmakestep.cpp | 27 +- src/plugins/qt4projectmanager/qmakestep.h | 3 - .../qt-maemo/maemorunconfiguration.cpp | 37 +-- .../qt-s60/s60devicerunconfiguration.cpp | 38 +-- .../qt-s60/s60emulatorrunconfiguration.cpp | 16 +- .../qt4buildconfiguration.cpp | 264 +++++++++++++++- .../qt4projectmanager/qt4buildconfiguration.h | 51 +++ .../qt4buildenvironmentwidget.cpp | 15 +- .../qt4buildenvironmentwidget.h | 4 +- src/plugins/qt4projectmanager/qt4nodes.cpp | 7 +- src/plugins/qt4projectmanager/qt4project.cpp | 291 ++---------------- src/plugins/qt4projectmanager/qt4project.h | 51 +-- .../qt4projectconfigwidget.cpp | 57 ++-- .../qt4projectconfigwidget.h | 4 +- .../qt4projectmanager/qt4runconfiguration.cpp | 31 +- .../qtuicodemodelsupport.cpp | 6 +- 39 files changed, 714 insertions(+), 695 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 76c260b40ac..f90146b0d7b 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -29,19 +29,132 @@ #include "cmakebuildconfiguration.h" #include "cmakeproject.h" +#include using namespace CMakeProjectManager; using namespace Internal; CMakeBuildConfiguration::CMakeBuildConfiguration(CMakeProject *pro) - : BuildConfiguration(pro) + : BuildConfiguration(pro), m_toolChain(0) { } CMakeBuildConfiguration::CMakeBuildConfiguration(BuildConfiguration *source) - : BuildConfiguration(source) + : BuildConfiguration(source), m_toolChain(0) { } +CMakeBuildConfiguration::~CMakeBuildConfiguration() +{ + delete m_toolChain; +} + +ProjectExplorer::Environment CMakeBuildConfiguration::baseEnvironment() const +{ + ProjectExplorer::Environment env = useSystemEnvironment() ? + ProjectExplorer::Environment(QProcess::systemEnvironment()) : + ProjectExplorer::Environment(); + return env; +} + +ProjectExplorer::Environment CMakeBuildConfiguration::environment() const +{ + ProjectExplorer::Environment env = baseEnvironment(); + env.modify(userEnvironmentChanges()); + return env; +} + +void CMakeBuildConfiguration::setUseSystemEnvironment(bool b) +{ + if (b == useSystemEnvironment()) + return; + setValue("clearSystemEnvironment", !b); + emit environmentChanged(); +} + +bool CMakeBuildConfiguration::useSystemEnvironment() const +{ + bool b = !(value("clearSystemEnvironment").isValid() && + value("clearSystemEnvironment").toBool()); + return b; +} + +QList CMakeBuildConfiguration::userEnvironmentChanges() const +{ + return ProjectExplorer::EnvironmentItem::fromStringList(value("userEnvironmentChanges").toStringList()); +} + +void CMakeBuildConfiguration::setUserEnvironmentChanges(const QList &diff) +{ + QStringList list = ProjectExplorer::EnvironmentItem::toStringList(diff); + if (list == value("userEnvironmentChanges")) + return; + setValue("userEnvironmentChanges", list); + emit environmentChanged(); +} + +QString CMakeBuildConfiguration::buildDirectory() const +{ + QString buildDirectory = value("buildDirectory").toString(); + if (buildDirectory.isEmpty()) + buildDirectory = static_cast(project())->sourceDirectory() + "/qtcreator-build"; + return buildDirectory; +} + +QString CMakeBuildConfiguration::buildParser() const +{ + // TODO this is actually slightly wrong, but do i care? + // this should call toolchain(configuration) + if (!m_toolChain) + return QString::null; + if (m_toolChain->type() == ProjectExplorer::ToolChain::GCC + //|| m_toolChain->type() == ProjectExplorer::ToolChain::LinuxICC + || m_toolChain->type() == ProjectExplorer::ToolChain::MinGW) { + return ProjectExplorer::Constants::BUILD_PARSER_GCC; + } else if (m_toolChain->type() == ProjectExplorer::ToolChain::MSVC + || m_toolChain->type() == ProjectExplorer::ToolChain::WINCE) { + return ProjectExplorer::Constants::BUILD_PARSER_MSVC; + } + return QString::null; +} + +ProjectExplorer::ToolChain::ToolChainType CMakeBuildConfiguration::toolChainType() const +{ + if (m_toolChain) + return m_toolChain->type(); + return ProjectExplorer::ToolChain::UNKNOWN; +} + +ProjectExplorer::ToolChain *CMakeBuildConfiguration::toolChain() const +{ + return m_toolChain; +} + +void CMakeBuildConfiguration::updateToolChain(const QString &compiler) +{ + //qDebug()<<"CodeBlocks Compilername"< +#include namespace CMakeProjectManager { namespace Internal { @@ -43,6 +44,24 @@ class CMakeBuildConfiguration : public ProjectExplorer::BuildConfiguration public: CMakeBuildConfiguration(CMakeProject *pro); CMakeBuildConfiguration(BuildConfiguration *source); + ~CMakeBuildConfiguration(); + + ProjectExplorer::Environment environment() const; + ProjectExplorer::Environment baseEnvironment() const; + void setUserEnvironmentChanges(const QList &diff); + QList userEnvironmentChanges() const; + bool useSystemEnvironment() const; + void setUseSystemEnvironment(bool b); + + virtual QString buildDirectory() const; + QString buildParser() const; + + ProjectExplorer::ToolChain::ToolChainType toolChainType() const; + ProjectExplorer::ToolChain *toolChain() const; + + void updateToolChain(const QString &compiler); +private: + ProjectExplorer::ToolChain *m_toolChain; }; diff --git a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp index 5aa29db2732..887c0d40b29 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp @@ -29,6 +29,7 @@ #include "cmakebuildenvironmentwidget.h" #include "cmakeproject.h" +#include "cmakebuildconfiguration.h" #include #include #include @@ -68,21 +69,21 @@ void CMakeBuildEnvironmentWidget::init(ProjectExplorer::BuildConfiguration *bc) if (debug) qDebug() << "Qt4BuildConfigWidget::init()"; - m_buildConfiguration = bc; + m_buildConfiguration = static_cast(bc); - m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(m_buildConfiguration)); - m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration)); - m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(m_buildConfiguration)); + m_clearSystemEnvironmentCheckBox->setChecked(!m_buildConfiguration->useSystemEnvironment()); + m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment()); + m_buildEnvironmentWidget->setUserChanges(m_buildConfiguration->userEnvironmentChanges()); m_buildEnvironmentWidget->updateButtons(); } void CMakeBuildEnvironmentWidget::environmentModelUserChangesUpdated() { - m_pro->setUserEnvironmentChanges(m_buildConfiguration, m_buildEnvironmentWidget->userChanges()); + m_buildConfiguration->setUserEnvironmentChanges(m_buildEnvironmentWidget->userChanges()); } void CMakeBuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked) { - m_pro->setUseSystemEnvironment(m_buildConfiguration, !checked); - m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration)); + m_buildConfiguration->setUseSystemEnvironment(!checked); + m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment()); } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.h b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.h index c732044b9d4..ee910b261d0 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.h @@ -42,6 +42,7 @@ class EnvironmentWidget; namespace CMakeProjectManager { namespace Internal { class CMakeProject; +class CMakeBuildConfiguration; class CMakeBuildEnvironmentWidget : public ProjectExplorer::BuildConfigWidget { @@ -61,7 +62,7 @@ private: ProjectExplorer::EnvironmentWidget *m_buildEnvironmentWidget; QCheckBox *m_clearSystemEnvironmentCheckBox; CMakeProject *m_pro; - ProjectExplorer::BuildConfiguration *m_buildConfiguration; + CMakeBuildConfiguration *m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 08ea3b45e99..a40c0625624 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -116,8 +116,8 @@ BuildConfiguration *CMakeBuildConfigurationFactory::create(const QString &type) CMakeOpenProjectWizard copw(m_project->projectManager(), m_project->sourceDirectory(), - m_project->buildDirectory(bc), - m_project->environment(bc)); + bc->buildDirectory(), + bc->environment()); if (copw.exec() != QDialog::Accepted) { delete bc; return false; @@ -156,7 +156,6 @@ CMakeProject::CMakeProject(CMakeManager *manager, const QString &fileName) m_fileName(fileName), m_buildConfigurationFactory(new CMakeBuildConfigurationFactory(this)), m_rootNode(new CMakeProjectNode(m_fileName)), - m_toolChain(0), m_insideFileChanged(false) { m_file = new CMakeFile(this, fileName); @@ -165,7 +164,6 @@ CMakeProject::CMakeProject(CMakeManager *manager, const QString &fileName) CMakeProject::~CMakeProject() { delete m_rootNode; - delete m_toolChain; } IBuildConfigurationFactory *CMakeProject::buildConfigurationFactory() const @@ -179,7 +177,7 @@ void CMakeProject::slotActiveBuildConfiguration() // Pop up a dialog asking the user to rerun cmake QFileInfo sourceFileInfo(m_fileName); - QString cbpFile = CMakeManager::findCbpFile(QDir(buildDirectory(activeBC))); + QString cbpFile = CMakeManager::findCbpFile(QDir(activeBC->buildDirectory())); QFileInfo cbpFileFi(cbpFile); CMakeOpenProjectWizard::Mode mode = CMakeOpenProjectWizard::Nothing; if (!cbpFileFi.exists()) { @@ -196,9 +194,9 @@ void CMakeProject::slotActiveBuildConfiguration() if (mode != CMakeOpenProjectWizard::Nothing) { CMakeOpenProjectWizard copw(m_manager, sourceFileInfo.absolutePath(), - buildDirectory(activeBC), + activeBC->buildDirectory(), mode, - environment(activeBC)); + activeBC->environment()); copw.exec(); activeBC->setValue("msvcVersion", copw.msvcVersion()); } @@ -216,39 +214,6 @@ void CMakeProject::fileChanged(const QString &fileName) m_insideFileChanged = false; } -void CMakeProject::updateToolChain(const QString &compiler) -{ - //qDebug()<<"CodeBlocks Compilername"<value("msvcVersion").toString(), false); - } else { - // TODO other toolchains - qDebug()<<"Not implemented yet!!! Qt Creator doesn't know which toolchain to use for"<setValue("buildDirectory", newBuildDirectory); @@ -263,7 +228,8 @@ QString CMakeProject::sourceDirectory() const bool CMakeProject::parseCMakeLists() { // Find cbp file - QString cbpFile = CMakeManager::findCbpFile(buildDirectory(activeBuildConfiguration())); + CMakeBuildConfiguration *activeCmakeBuildConfiguration = static_cast(activeBuildConfiguration()); + QString cbpFile = CMakeManager::findCbpFile(activeCmakeBuildConfiguration->buildDirectory()); // setFolderName m_rootNode->setFolderName(QFileInfo(cbpFile).completeBaseName()); @@ -272,7 +238,7 @@ bool CMakeProject::parseCMakeLists() //qDebug()<<"Parsing file "<updateToolChain(cbpparser.compilerName()); m_projectName = cbpparser.projectName(); m_rootNode->setFolderName(cbpparser.projectName()); @@ -325,7 +291,7 @@ bool CMakeProject::parseCMakeLists() QStringList allIncludePaths; QStringList allFrameworkPaths; - QList allHeaderPaths = m_toolChain->systemHeaderPaths(); + QList allHeaderPaths = activeCmakeBuildConfiguration->toolChain()->systemHeaderPaths(); foreach (ProjectExplorer::HeaderPath headerPath, allHeaderPaths) { if (headerPath.kind() == ProjectExplorer::HeaderPath::FrameworkHeaderPath) allFrameworkPaths.append(headerPath.path()); @@ -341,12 +307,12 @@ bool CMakeProject::parseCMakeLists() CppTools::CppModelManagerInterface::ProjectInfo pinfo = modelmanager->projectInfo(this); if (pinfo.includePaths != allIncludePaths || pinfo.sourceFiles != m_files - || pinfo.defines != m_toolChain->predefinedMacros() + || pinfo.defines != activeCmakeBuildConfiguration->toolChain()->predefinedMacros() || pinfo.frameworkPaths != allFrameworkPaths) { pinfo.includePaths = allIncludePaths; // TODO we only want C++ files, not all other stuff that might be in the project pinfo.sourceFiles = m_files; - pinfo.defines = m_toolChain->predefinedMacros(); // TODO this is to simplistic + pinfo.defines = activeCmakeBuildConfiguration->toolChain()->predefinedMacros(); // TODO this is to simplistic pinfo.frameworkPaths = allFrameworkPaths; modelmanager->updateProjectInfo(pinfo); modelmanager->updateSourceFiles(pinfo.sourceFiles); @@ -404,31 +370,12 @@ bool CMakeProject::parseCMakeLists() } else { // TODO report error qDebug()<<"Parsing failed"; - delete m_toolChain; - m_toolChain = 0; + activeCmakeBuildConfiguration->updateToolChain(QString::null); return false; } return true; } -QString CMakeProject::buildParser(BuildConfiguration *configuration) const -{ - Q_UNUSED(configuration) - // TODO this is actually slightly wrong, but do i care? - // this should call toolchain(configuration) - if (!m_toolChain) - return QString::null; - if (m_toolChain->type() == ProjectExplorer::ToolChain::GCC - //|| m_toolChain->type() == ProjectExplorer::ToolChain::LinuxICC - || m_toolChain->type() == ProjectExplorer::ToolChain::MinGW) { - return ProjectExplorer::Constants::BUILD_PARSER_GCC; - } else if (m_toolChain->type() == ProjectExplorer::ToolChain::MSVC - || m_toolChain->type() == ProjectExplorer::ToolChain::WINCE) { - return ProjectExplorer::Constants::BUILD_PARSER_MSVC; - } - return QString::null; -} - QStringList CMakeProject::targets() const { QStringList results; @@ -551,8 +498,6 @@ QString CMakeProject::name() const return m_projectName; } - - Core::IFile *CMakeProject::file() const { return m_file; @@ -573,56 +518,6 @@ bool CMakeProject::isApplication() const return true; } -ProjectExplorer::Environment CMakeProject::baseEnvironment(BuildConfiguration *configuration) const -{ - Environment env = useSystemEnvironment(configuration) ? Environment(QProcess::systemEnvironment()) : Environment(); - return env; -} - -ProjectExplorer::Environment CMakeProject::environment(BuildConfiguration *configuration) const -{ - Environment env = baseEnvironment(configuration); - env.modify(userEnvironmentChanges(configuration)); - return env; -} - -void CMakeProject::setUseSystemEnvironment(BuildConfiguration *configuration, bool b) -{ - if (b == useSystemEnvironment(configuration)) - return; - configuration->setValue("clearSystemEnvironment", !b); - emit environmentChanged(configuration); -} - -bool CMakeProject::useSystemEnvironment(BuildConfiguration *configuration) const -{ - bool b = !(configuration->value("clearSystemEnvironment").isValid() && - configuration->value("clearSystemEnvironment").toBool()); - return b; -} - -QList CMakeProject::userEnvironmentChanges(BuildConfiguration *configuration) const -{ - return EnvironmentItem::fromStringList(configuration->value("userEnvironmentChanges").toStringList()); -} - -void CMakeProject::setUserEnvironmentChanges(BuildConfiguration *configuration, const QList &diff) -{ - QStringList list = EnvironmentItem::toStringList(diff); - if (list == configuration->value("userEnvironmentChanges")) - return; - configuration->setValue("userEnvironmentChanges", list); - emit environmentChanged(configuration); -} - -QString CMakeProject::buildDirectory(BuildConfiguration *configuration) const -{ - QString buildDirectory = configuration->value("buildDirectory").toString(); - if (buildDirectory.isEmpty()) - buildDirectory = sourceDirectory() + "/qtcreator-build"; - return buildDirectory; -} - ProjectExplorer::BuildConfigWidget *CMakeProject::createConfigWidget() { return new CMakeBuildSettingsWidget(this); @@ -686,7 +581,7 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader // or simply run createXml with the saved settings QFileInfo sourceFileInfo(m_fileName); BuildConfiguration *activeBC = activeBuildConfiguration(); - QString cbpFile = CMakeManager::findCbpFile(QDir(buildDirectory(activeBC))); + QString cbpFile = CMakeManager::findCbpFile(QDir(activeBC->buildDirectory())); QFileInfo cbpFileFi(cbpFile); CMakeOpenProjectWizard::Mode mode = CMakeOpenProjectWizard::Nothing; @@ -698,9 +593,9 @@ bool CMakeProject::restoreSettingsImpl(ProjectExplorer::PersistentSettingsReader if (mode != CMakeOpenProjectWizard::Nothing) { CMakeOpenProjectWizard copw(m_manager, sourceFileInfo.absolutePath(), - buildDirectory(activeBC), + activeBC->buildDirectory(), mode, - environment(activeBC)); + activeBC->environment()); if (copw.exec() != QDialog::Accepted) return false; activeBC->setValue("msvcVersion", copw.msvcVersion()); @@ -729,13 +624,6 @@ CMakeTarget CMakeProject::targetForTitle(const QString &title) return CMakeTarget(); } -ProjectExplorer::ToolChain::ToolChainType CMakeProject::toolChainType() const -{ - if (m_toolChain) - return m_toolChain->type(); - return ProjectExplorer::ToolChain::UNKNOWN; -} - // CMakeFile CMakeFile::CMakeFile(CMakeProject *parent, QString fileName) @@ -825,9 +713,9 @@ QString CMakeBuildSettingsWidget::displayName() const void CMakeBuildSettingsWidget::init(BuildConfiguration *bc) { - m_buildConfiguration = bc; - m_pathLineEdit->setText(m_project->buildDirectory(bc)); - if (m_project->buildDirectory(bc) == m_project->sourceDirectory()) + m_buildConfiguration = static_cast(bc); + m_pathLineEdit->setText(m_buildConfiguration->buildDirectory()); + if (m_buildConfiguration->buildDirectory() == m_project->sourceDirectory()) m_changeButton->setEnabled(false); else m_changeButton->setEnabled(true); @@ -837,11 +725,11 @@ void CMakeBuildSettingsWidget::openChangeBuildDirectoryDialog() { CMakeOpenProjectWizard copw(m_project->projectManager(), m_project->sourceDirectory(), - m_project->buildDirectory(m_buildConfiguration), - m_project->environment(m_buildConfiguration)); + m_buildConfiguration->buildDirectory(), + m_buildConfiguration->environment()); if (copw.exec() == QDialog::Accepted) { m_project->changeBuildDirectory(m_buildConfiguration, copw.buildDirectory()); - m_pathLineEdit->setText(m_project->buildDirectory(m_buildConfiguration)); + m_pathLineEdit->setText(m_buildConfiguration->buildDirectory()); } } diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index f9e694dc6af..ffe0c25e7b7 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -32,6 +32,7 @@ #include "cmakeprojectmanager.h" #include "cmakeprojectnodes.h" +#include "cmakebuildconfiguration.h" #include "makestep.h" #include @@ -99,16 +100,6 @@ public: virtual bool isApplication() const; - //building environment - ProjectExplorer::Environment environment(ProjectExplorer::BuildConfiguration *configuration) const; - ProjectExplorer::Environment baseEnvironment(ProjectExplorer::BuildConfiguration *configuration) const; - void setUserEnvironmentChanges(ProjectExplorer::BuildConfiguration *configuration, const QList &diff); - QList userEnvironmentChanges(ProjectExplorer::BuildConfiguration *configuration) const; - bool useSystemEnvironment(ProjectExplorer::BuildConfiguration *configuration) const; - void setUseSystemEnvironment(ProjectExplorer::BuildConfiguration *configuration, bool b); - - virtual QString buildDirectory(ProjectExplorer::BuildConfiguration *configuration) const; - virtual ProjectExplorer::BuildConfigWidget *createConfigWidget(); virtual QList subConfigWidgets(); @@ -116,12 +107,10 @@ public: virtual QStringList files(FilesMode fileMode) const; QStringList targets() const; - QString buildParser(ProjectExplorer::BuildConfiguration *configuration) const; + CMakeTarget targetForTitle(const QString &title); QString sourceDirectory() const; - ProjectExplorer::ToolChain::ToolChainType toolChainType() const; - ProjectExplorer::ToolChain *toolChain(ProjectExplorer::BuildConfiguration *configuration) const; protected: virtual void saveSettingsImpl(ProjectExplorer::PersistentSettingsWriter &writer); @@ -136,7 +125,6 @@ private slots: private: bool parseCMakeLists(); - void updateToolChain(const QString &compiler); void buildTree(CMakeProjectNode *rootNode, QList list); void gatherFileNodes(ProjectExplorer::FolderNode *parent, QList &list); @@ -152,7 +140,6 @@ private: CMakeProjectNode *m_rootNode; QStringList m_files; QList m_targets; - ProjectExplorer::ToolChain *m_toolChain; ProjectExplorer::FileWatcher *m_watcher; bool m_insideFileChanged; QSet m_watchedFiles; @@ -239,7 +226,7 @@ private: CMakeProject *m_project; QLineEdit *m_pathLineEdit; QPushButton *m_changeButton; - ProjectExplorer::BuildConfiguration *m_buildConfiguration; + CMakeBuildConfiguration *m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index fc4c5868ade..89f97ee555e 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -30,6 +30,7 @@ #include "cmakerunconfiguration.h" #include "cmakeproject.h" +#include "cmakebuildconfiguration.h" #include "cmakeprojectconstants.h" #include @@ -58,6 +59,7 @@ CMakeRunConfiguration::CMakeRunConfiguration(CMakeProject *pro, const QString &t connect(pro, SIGNAL(activeBuildConfigurationChanged()), this, SIGNAL(baseEnvironmentChanged())); + // TODO connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), this, SIGNAL(baseEnvironmentChanged())); } @@ -186,7 +188,7 @@ ProjectExplorer::Environment CMakeRunConfiguration::baseEnvironment() const } else if (m_baseEnvironmentBase == CMakeRunConfiguration::SystemEnvironmentBase) { env = ProjectExplorer::Environment::systemEnvironment(); } else if (m_baseEnvironmentBase == CMakeRunConfiguration::BuildEnvironmentBase) { - env = project()->environment(project()->activeBuildConfiguration()); + env = environment(); } return env; } @@ -226,8 +228,8 @@ void CMakeRunConfiguration::setUserEnvironmentChanges(const QList(project()); - return pro->toolChainType(); + CMakeBuildConfiguration *bc = static_cast(project()->activeBuildConfiguration()); + return bc->toolChainType(); } // Configuration widget diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 7e49f180c2d..4fe313e6a58 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -29,6 +29,7 @@ #include "makestep.h" #include "cmakeprojectconstants.h" #include "cmakeproject.h" +#include "cmakebuildconfiguration.h" #include @@ -95,20 +96,20 @@ void MakeStep::storeIntoLocalMap(QMap &map) bool MakeStep::init() { - BuildConfiguration *bc = buildConfiguration(); + CMakeBuildConfiguration *bc = static_cast(buildConfiguration()); // TODO, we should probably have a member cmakeBuildConfiguration(); - CMakeProject *pro = static_cast(buildConfiguration()->project()); - setBuildParser(pro->buildParser(bc)); + + setBuildParser(bc->buildParser()); setEnabled(true); - setWorkingDirectory(pro->buildDirectory(bc)); + setWorkingDirectory(bc->buildDirectory()); - setCommand(pro->toolChain(bc)->makeCommand()); + setCommand(bc->toolChain()->makeCommand()); QStringList arguments = m_buildTargets; arguments << additionalArguments(); setArguments(arguments); - setEnvironment(pro->environment(bc)); + setEnvironment(bc->environment()); setIgnoreReturnValue(m_clean); return AbstractMakeStep::init(); @@ -253,9 +254,8 @@ void MakeStepConfigWidget::updateDetails() QStringList arguments = m_makeStep->m_buildTargets; arguments << m_makeStep->additionalArguments(); - BuildConfiguration *bc = m_makeStep->buildConfiguration(); - CMakeProject *pro = static_cast(bc->project()); - m_summaryText = tr("Make: %1 %2").arg(pro->toolChain(bc)->makeCommand(), arguments.join(" ")); + CMakeBuildConfiguration *bc = static_cast(m_makeStep->buildConfiguration()); + m_summaryText = tr("Make: %1 %2").arg(bc->toolChain()->makeCommand(), arguments.join(" ")); emit updateSummary(); } diff --git a/src/plugins/debugger/debuggerrunner.cpp b/src/plugins/debugger/debuggerrunner.cpp index 077f03dfc6f..d0713e8c355 100644 --- a/src/plugins/debugger/debuggerrunner.cpp +++ b/src/plugins/debugger/debuggerrunner.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -131,7 +132,7 @@ DebuggerRunControl::DebuggerRunControl(DebuggerManager *manager, } if (const ProjectExplorer::Project *project = runConfiguration->project()) { m_startParameters->buildDir = - project->buildDirectory(project->activeBuildConfiguration()); + project->activeBuildConfiguration()->buildDirectory(); } m_startParameters->useTerminal = runConfiguration->runMode() == LocalApplicationRunConfiguration::Console; diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 7a64c538536..5e6e1553ea6 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -45,3 +45,22 @@ GenericBuildConfiguration::GenericBuildConfiguration(GenericBuildConfiguration * { } + +ProjectExplorer::Environment GenericBuildConfiguration::environment() const +{ + return ProjectExplorer::Environment::systemEnvironment(); +} + +QString GenericBuildConfiguration::buildDirectory() const +{ + QString buildDirectory = value("buildDirectory").toString(); + + if (buildDirectory.isEmpty()) { + QFileInfo fileInfo(project()->file()->fileName()); + + buildDirectory = fileInfo.absolutePath(); + } + + return buildDirectory; +} + diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index 132cd17b587..82ad2746a59 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -44,6 +44,9 @@ class GenericBuildConfiguration : public ProjectExplorer::BuildConfiguration public: GenericBuildConfiguration(GenericProject *pro); GenericBuildConfiguration(GenericBuildConfiguration *source); + + virtual ProjectExplorer::Environment environment() const; + virtual QString buildDirectory() const; }; } // namespace GenericProjectManager diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index eb1debd8f47..54dd056d867 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -31,6 +31,7 @@ #include "genericprojectconstants.h" #include "genericproject.h" #include "ui_genericmakestep.h" +#include "genericbuildconfiguration.h" #include #include @@ -66,22 +67,21 @@ GenericMakeStep::~GenericMakeStep() bool GenericMakeStep::init() { - ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); + GenericBuildConfiguration *bc = static_cast(buildConfiguration()); //TODO - GenericProject *pro = static_cast(buildConfiguration()->project()); - const QString buildParser = pro->buildParser(bc); + const QString buildParser = static_cast(bc->project())->buildParser(bc); setBuildParser(buildParser); setEnabled(true); Core::VariableManager *vm = Core::VariableManager::instance(); - const QString rawBuildDir = buildConfiguration()->project()->buildDirectory(bc); + const QString rawBuildDir = bc->buildDirectory(); const QString buildDir = vm->resolve(rawBuildDir); setWorkingDirectory(buildDir); setCommand(makeCommand()); setArguments(replacedArguments()); - setEnvironment(buildConfiguration()->project()->environment(bc)); + setEnvironment(bc->environment()); return AbstractMakeStep::init(); } diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index fcbc50e7667..461915b0c68 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -481,25 +481,6 @@ bool GenericProject::isApplication() const return true; } -ProjectExplorer::Environment GenericProject::environment(BuildConfiguration *configuration) const -{ - Q_UNUSED(configuration) - return ProjectExplorer::Environment::systemEnvironment(); -} - -QString GenericProject::buildDirectory(BuildConfiguration *configuration) const -{ - QString buildDirectory = configuration->value("buildDirectory").toString(); - - if (buildDirectory.isEmpty()) { - QFileInfo fileInfo(m_fileName); - - buildDirectory = fileInfo.absolutePath(); - } - - return buildDirectory; -} - ProjectExplorer::BuildConfigWidget *GenericProject::createConfigWidget() { return new GenericBuildSettingsWidget(this); @@ -629,8 +610,8 @@ QString GenericBuildSettingsWidget::displayName() const void GenericBuildSettingsWidget::init(BuildConfiguration *bc) { - m_buildConfiguration = bc; - m_pathChooser->setPath(m_project->buildDirectory(bc)); + m_buildConfiguration = static_cast(bc); + m_pathChooser->setPath(m_buildConfiguration->buildDirectory()); } void GenericBuildSettingsWidget::buildDirectoryChanged() diff --git a/src/plugins/genericprojectmanager/genericproject.h b/src/plugins/genericprojectmanager/genericproject.h index cba88fc4abe..eb828b683c6 100644 --- a/src/plugins/genericprojectmanager/genericproject.h +++ b/src/plugins/genericprojectmanager/genericproject.h @@ -54,6 +54,7 @@ namespace Internal { class GenericProject; class GenericMakeStep; class GenericProjectFile; +class GenericBuildConfiguration; class GenericBuildConfigurationFactory : public ProjectExplorer::IBuildConfigurationFactory { @@ -95,9 +96,6 @@ public: virtual bool isApplication() const; - virtual ProjectExplorer::Environment environment(ProjectExplorer::BuildConfiguration *configuration) const; - virtual QString buildDirectory(ProjectExplorer::BuildConfiguration *configuration) const; - virtual ProjectExplorer::BuildConfigWidget *createConfigWidget(); virtual QList subConfigWidgets(); @@ -204,7 +202,7 @@ private Q_SLOTS: private: GenericProject *m_project; Utils::PathChooser *m_pathChooser; - ProjectExplorer::BuildConfiguration *m_buildConfiguration; + GenericBuildConfiguration *m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index fe3b32f05bc..ed279970d50 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -167,6 +167,7 @@ Project *BuildConfiguration::project() const return m_project; } + /// // IBuildConfigurationFactory /// diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 40cb5a4a787..477087cdb57 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -31,6 +31,7 @@ #define BUILDCONFIGURATION_H #include "projectexplorer_export.h" +#include "environment.h" #include #include @@ -75,6 +76,13 @@ public: Project *project() const; + virtual Environment environment() const = 0; + virtual QString buildDirectory() const = 0; + +signals: + void environmentChanged(); + void buildDirectoryChanged(); + protected: BuildConfiguration(Project * project); BuildConfiguration(BuildConfiguration *source); @@ -111,8 +119,8 @@ public: virtual BuildConfiguration *restore() const = 0; - // TODO All those methods make the internal name (and display name) unique, - // but in different ways + // TODO display name unique, in different ways + signals: void availableCreationTypesChanged(); diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index dc9caecf699..dd8abc9c64e 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -35,6 +35,7 @@ #include #include +#include #include #include @@ -279,7 +280,7 @@ QString CustomExecutableRunConfiguration::executable() const { QString exec; if (QDir::isRelativePath(m_executable)) { - Environment env = project()->environment(project()->activeBuildConfiguration()); + Environment env = project()->activeBuildConfiguration()->environment(); exec = env.searchInPath(m_executable); } else { exec = m_executable; @@ -328,7 +329,7 @@ QString CustomExecutableRunConfiguration::baseWorkingDirectory() const QString CustomExecutableRunConfiguration::workingDirectory() const { QString wd = m_workingDirectory; - QString bd = project()->buildDirectory(project()->activeBuildConfiguration()); + QString bd = project()->activeBuildConfiguration()->buildDirectory(); return wd.replace("$BUILDDIR", QDir::cleanPath(bd)); } @@ -345,7 +346,7 @@ ProjectExplorer::Environment CustomExecutableRunConfiguration::baseEnvironment() } else if (m_baseEnvironmentBase == CustomExecutableRunConfiguration::SystemEnvironmentBase) { env = ProjectExplorer::Environment::systemEnvironment(); } else if (m_baseEnvironmentBase == CustomExecutableRunConfiguration::BuildEnvironmentBase) { - env = project()->environment(project()->activeBuildConfiguration()); + env = project()->activeBuildConfiguration()->environment(); } return env; } diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index 0add381c24d..e442fc14d6c 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -65,12 +65,12 @@ ProcessStep::ProcessStep(ProcessStep *bs, BuildConfiguration *bc) bool ProcessStep::init() { - setEnvironment(buildConfiguration()->project()->environment(buildConfiguration())); + setEnvironment(buildConfiguration()->environment()); QString wd = workingDirectory(); if (wd.isEmpty()) wd = "$BUILDDIR"; - AbstractProcessStep::setWorkingDirectory(wd.replace("$BUILDDIR", buildConfiguration()->project()->buildDirectory(buildConfiguration()))); + AbstractProcessStep::setWorkingDirectory(wd.replace("$BUILDDIR", buildConfiguration()->buildDirectory())); AbstractProcessStep::setCommand(m_command); AbstractProcessStep::setEnabled(m_enabled); AbstractProcessStep::setArguments(m_arguments); diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index f999527703f..4c543169ec5 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -88,7 +88,9 @@ public: void removeBuildConfiguration(BuildConfiguration *configuration); QList buildConfigurations() const; + // remove and add "QString uniqueConfigurationDisplayName(const QString &proposedName) const" instead + // move into BuildConfiguration * void setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName); BuildConfiguration *activeBuildConfiguration() const; void setActiveBuildConfiguration(BuildConfiguration *configuration); @@ -108,9 +110,6 @@ public: EditorConfiguration *editorConfiguration() const; - virtual Environment environment(BuildConfiguration *configuration) const = 0; - virtual QString buildDirectory(BuildConfiguration *configuration) const = 0; - void saveSettings(); bool restoreSettings(); @@ -131,7 +130,6 @@ public: static QString makeUnique(const QString &preferedName, const QStringList &usedNames); signals: void fileListChanged(); - void buildDirectoryChanged(); // TODO clean up signal names // might be better to also have @@ -150,7 +148,7 @@ signals: // This signal is jut there for updating the tree list in the buildsettings wizard void buildConfigurationDisplayNameChanged(BuildConfiguration *bc); - void environmentChanged(BuildConfiguration *bc); + protected: /* This method is called when the project .user file is saved. Simply call diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index d8df516d888..89ebeaf584c 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -162,12 +162,6 @@ QStringList QmlProject::convertToAbsoluteFiles(const QStringList &paths) const QStringList QmlProject::files() const { return m_files; } -QString QmlProject::buildParser(BuildConfiguration *configuration) const -{ - Q_UNUSED(configuration) - return QString(); -} - QString QmlProject::name() const { return m_projectName; @@ -198,18 +192,6 @@ bool QmlProject::hasBuildSettings() const return false; } -ProjectExplorer::Environment QmlProject::environment(BuildConfiguration *configuration) const -{ - Q_UNUSED(configuration) - return ProjectExplorer::Environment::systemEnvironment(); -} - -QString QmlProject::buildDirectory(BuildConfiguration *configuration) const -{ - Q_UNUSED(configuration) - return QString(); -} - ProjectExplorer::BuildConfigWidget *QmlProject::createConfigWidget() { return 0; diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h index 1a8e660daeb..9cbb23a37eb 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.h +++ b/src/plugins/qmlprojectmanager/qmlproject.h @@ -71,9 +71,6 @@ public: virtual bool isApplication() const; virtual bool hasBuildSettings() const; - virtual ProjectExplorer::Environment environment(ProjectExplorer::BuildConfiguration *configuration) const; - virtual QString buildDirectory(ProjectExplorer::BuildConfiguration *configuration) const; - virtual ProjectExplorer::BuildConfigWidget *createConfigWidget(); virtual QList subConfigWidgets(); @@ -81,7 +78,6 @@ public: virtual QStringList files(FilesMode fileMode) const; QStringList targets() const; - QString buildParser(ProjectExplorer::BuildConfiguration *configuration) const; enum RefreshOptions { Files = 0x01, diff --git a/src/plugins/qt4projectmanager/externaleditors.cpp b/src/plugins/qt4projectmanager/externaleditors.cpp index 142bef7f501..f1b0b68f3de 100644 --- a/src/plugins/qt4projectmanager/externaleditors.cpp +++ b/src/plugins/qt4projectmanager/externaleditors.cpp @@ -2,6 +2,7 @@ #include "qt4project.h" #include "qt4projectmanagerconstants.h" #include "qtversionmanager.h" +#include "qt4buildconfiguration.h" #include #include @@ -99,7 +100,8 @@ bool ExternalQtEditor::getEditorLaunchData(const QString &fileName, const Qt4Project *project = qt4ProjectFor(fileName); // Get the binary either from the current Qt version of the project or Path if (project) { - const QtVersion *qtVersion= project->qtVersion(project->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = static_cast(project->activeBuildConfiguration()); + const QtVersion *qtVersion= qt4bc->qtVersion(); data->binary = (qtVersion->*commandAccessor)(); data->workingDirectory = QFileInfo(project->file()->fileName()).absolutePath(); } else { diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 66e2c0a7532..4f2aba4aa15 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -30,6 +30,7 @@ #include "makestep.h" #include "qt4project.h" +#include "qt4buildconfiguration.h" #include "qt4projectmanagerconstants.h" #include @@ -96,16 +97,15 @@ void MakeStep::storeIntoLocalMap(QMap &map) bool MakeStep::init() { - ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); - Environment environment = buildConfiguration()->project()->environment(bc); + Qt4BuildConfiguration *bc = static_cast(buildConfiguration()); + Environment environment = bc->environment(); setEnvironment(environment); //TODO - Qt4Project *qt4project = static_cast(buildConfiguration()->project()); - QString workingDirectory = qt4project->buildDirectory(bc); + QString workingDirectory = bc->buildDirectory(); setWorkingDirectory(workingDirectory); - QString makeCmd = qt4project->makeCommand(bc); + QString makeCmd = bc->makeCommand(); if (!m_makeCmd.isEmpty()) makeCmd = m_makeCmd; if (!QFileInfo(makeCmd).isAbsolute()) { @@ -126,15 +126,15 @@ bool MakeStep::init() setIgnoreReturnValue(m_clean); QStringList args = m_makeargs; if (!m_clean) { - if (!qt4project->defaultMakeTarget(bc).isEmpty()) - args << qt4project->defaultMakeTarget(bc); + if (!bc->defaultMakeTarget().isEmpty()) + args << bc->defaultMakeTarget(); } // -w option enables "Enter"/"Leaving directory" messages, which we need for detecting the // absolute file path // FIXME doing this without the user having a way to override this is rather bad // so we only do it for unix and if the user didn't override the make command // but for now this is the least invasive change - ProjectExplorer::ToolChain *toolchain = qt4project->toolChain(bc); + ProjectExplorer::ToolChain *toolchain = bc->toolChain(); ProjectExplorer::ToolChain::ToolChainType type = ProjectExplorer::ToolChain::UNKNOWN; if (toolchain) @@ -225,22 +225,20 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) void MakeStepConfigWidget::updateMakeOverrideLabel() { - Qt4Project *qt4project = static_cast(m_makeStep->buildConfiguration()->project()); - m_ui.makeLabel->setText(tr("Override %1:").arg(qt4project-> - makeCommand(m_makeStep->buildConfiguration()))); + Qt4BuildConfiguration *qt4bc = static_cast(m_makeStep->buildConfiguration()); + m_ui.makeLabel->setText(tr("Override %1:").arg(qt4bc->makeCommand())); } void MakeStepConfigWidget::updateDetails() { - Qt4Project *pro = static_cast(m_makeStep->buildConfiguration()->project()); - ProjectExplorer::BuildConfiguration *bc = m_makeStep->buildConfiguration(); - QString workingDirectory = pro->buildDirectory(bc); + Qt4BuildConfiguration *bc = static_cast(m_makeStep->buildConfiguration()); + QString workingDirectory = bc->buildDirectory(); - QString makeCmd = pro->makeCommand(bc); + QString makeCmd = bc->makeCommand(); if (!m_makeStep->m_makeCmd.isEmpty()) makeCmd = m_makeStep->m_makeCmd; if (!QFileInfo(makeCmd).isAbsolute()) { - Environment environment = pro->environment(bc); + Environment environment = bc->environment(); // Try to detect command in environment QString tmp = environment.searchInPath(makeCmd); if (tmp == QString::null) { @@ -257,7 +255,7 @@ void MakeStepConfigWidget::updateDetails() // but for now this is the least invasive change QStringList args = m_makeStep->makeArguments(); ProjectExplorer::ToolChain::ToolChainType t = ProjectExplorer::ToolChain::UNKNOWN; - ProjectExplorer::ToolChain *toolChain = pro->toolChain(bc); + ProjectExplorer::ToolChain *toolChain = bc->toolChain(); if (toolChain) t = toolChain->type(); if (t != ProjectExplorer::ToolChain::MSVC && t != ProjectExplorer::ToolChain::WINCE) { diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 79efdeea8ac..9a8181e9641 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -34,6 +34,7 @@ #include "qt4projectmanager.h" #include "makestep.h" #include "qtversionmanager.h" +#include "qt4buildconfiguration.h" #include #include @@ -69,15 +70,14 @@ QMakeStep::~QMakeStep() QStringList QMakeStep::arguments() { QStringList additonalArguments = m_qmakeArgs; - ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); + Qt4BuildConfiguration *bc = static_cast(buildConfiguration()); QStringList arguments; arguments << buildConfiguration()->project()->file()->fileName(); arguments << "-r"; // TODO - Qt4Project *pro = static_cast(buildConfiguration()->project()); if (!additonalArguments.contains("-spec")) - arguments << "-spec" << pro->qtVersion(bc)->mkspec(); + arguments << "-spec" << bc->qtVersion()->mkspec(); #ifdef Q_OS_WIN ToolChain::ToolChainType type = pro->toolChainType(bc); @@ -87,7 +87,7 @@ QStringList QMakeStep::arguments() if (bc->value("buildConfiguration").isValid()) { QStringList configarguments; - QtVersion::QmakeBuildConfigs defaultBuildConfiguration = pro->qtVersion(bc)->defaultBuildConfig(); + QtVersion::QmakeBuildConfigs defaultBuildConfiguration = bc->qtVersion()->defaultBuildConfig(); QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(bc->value("buildConfiguration").toInt()); if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) configarguments << "CONFIG-=debug_and_release"; @@ -111,10 +111,9 @@ QStringList QMakeStep::arguments() bool QMakeStep::init() { - ProjectExplorer::BuildConfiguration *bc = buildConfiguration(); // TODO - Qt4Project *pro = static_cast(buildConfiguration()->project()); - const QtVersion *qtVersion = pro->qtVersion(bc); + Qt4BuildConfiguration *qt4bc = static_cast(buildConfiguration()); + const QtVersion *qtVersion = qt4bc->qtVersion(); if (!qtVersion->isValid()) { #if defined(Q_WS_MAC) @@ -126,7 +125,7 @@ bool QMakeStep::init() } QStringList args = arguments(); - QString workingDirectory = pro->buildDirectory(bc); + QString workingDirectory = qt4bc->buildDirectory(); QString program = qtVersion->qmakeCommand(); @@ -135,7 +134,7 @@ bool QMakeStep::init() if (QDir(workingDirectory).exists(QLatin1String("Makefile"))) { QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(workingDirectory); if (qtVersion->qmakeCommand() == qmakePath) { - m_needToRunQMake = !pro->compareBuildConfigurationToImportFrom(bc, workingDirectory); + m_needToRunQMake = !qt4bc->compareBuildConfigurationToImportFrom(workingDirectory); } } @@ -148,7 +147,7 @@ bool QMakeStep::init() setWorkingDirectory(workingDirectory); setCommand(program); setArguments(args); - setEnvironment(pro->environment(bc)); + setEnvironment(qt4bc->environment()); setBuildParser(ProjectExplorer::Constants::BUILD_PARSER_QMAKE); return AbstractMakeStep::init(); @@ -266,8 +265,8 @@ void QMakeStepConfigWidget::qtVersionChanged(ProjectExplorer::BuildConfiguration void QMakeStepConfigWidget::updateTitleLabel() { - Qt4Project *qt4project = static_cast(m_step->buildConfiguration()->project()); - const QtVersion *qtVersion = qt4project->qtVersion(m_step->buildConfiguration()); + Qt4BuildConfiguration *qt4bc = static_cast(m_step->buildConfiguration()); + const QtVersion *qtVersion = qt4bc->qtVersion(); if (!qtVersion) { m_summaryText = tr("QMake: No Qt version set. QMake can not be run."); emit updateSummary(); @@ -340,8 +339,8 @@ void QMakeStepConfigWidget::init() void QMakeStepConfigWidget::updateEffectiveQMakeCall() { - Qt4Project *qt4project = static_cast(m_step->buildConfiguration()->project()); - const QtVersion *qtVersion = qt4project->qtVersion(m_step->buildConfiguration()); + Qt4BuildConfiguration *qt4bc = static_cast(m_step->buildConfiguration()); + const QtVersion *qtVersion = qt4bc->qtVersion(); if (qtVersion) { QString program = QFileInfo(qtVersion->qmakeCommand()).fileName(); m_ui.qmakeArgumentsEdit->setPlainText(program + QLatin1Char(' ') + ProjectExplorer::Environment::joinArgumentList(m_step->arguments())); diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index 05f17477298..2e08953e246 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -61,12 +61,9 @@ public: class Qt4Project; - class QMakeStep : public ProjectExplorer::AbstractMakeStep { Q_OBJECT - friend class Qt4Project; // TODO remove - // Currently used to access qmakeArgs public: QMakeStep(ProjectExplorer::BuildConfiguration *bc); QMakeStep(QMakeStep *bs, ProjectExplorer::BuildConfiguration *bc); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 6382ab51c5c..67cba594f55 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -28,11 +28,11 @@ **************************************************************************/ #include "maemorunconfiguration.h" - #include "maemomanager.h" #include "maemotoolchain.h" #include "profilereader.h" #include "qt4project.h" +#include "qt4buildconfiguration.h" #include #include @@ -322,10 +322,9 @@ Qt4Project *MaemoRunConfiguration::project() const bool MaemoRunConfiguration::isEnabled() const { - Qt4Project *qt4Project = qobject_cast(project()); - QTC_ASSERT(qt4Project, return false); - ToolChain::ToolChainType type = - qt4Project->toolChainType(qt4Project->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + QTC_ASSERT(qt4bc, return false); + ToolChain::ToolChainType type = qt4bc->toolChainType(); return type == ToolChain::GCC_MAEMO; } @@ -412,8 +411,8 @@ void MaemoRunConfiguration::wasDeployed() bool MaemoRunConfiguration::hasDebuggingHelpers() const { - return project()->qtVersion(project()->activeBuildConfiguration()) - ->hasDebuggingHelper(); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + return qt4bc->qtVersion()->hasDebuggingHelper(); } bool MaemoRunConfiguration::debuggingHelpersNeedDeployment() const @@ -482,10 +481,10 @@ const QString MaemoRunConfiguration::cmd(const QString &cmdName) const const MaemoToolChain *MaemoRunConfiguration::toolchain() const { - Qt4Project *qt4Project = qobject_cast(project()); - QTC_ASSERT(qt4Project != 0, return 0); + Qt4BuildConfiguration *qt4bc = qobject_cast(project()->activeBuildConfiguration()); + QTC_ASSERT(qt4bc, return 0); MaemoToolChain *tc = dynamic_cast( - qt4Project->toolChain(qt4Project->activeBuildConfiguration()) ); + qt4bc->toolChain() ); QTC_ASSERT(tc != 0, return 0); return tc; } @@ -518,8 +517,8 @@ const QStringList MaemoRunConfiguration::arguments() const const QString MaemoRunConfiguration::dumperLib() const { - return project()->qtVersion(project()->activeBuildConfiguration())-> - debuggingHelperLibrary(); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + return qt4bc->qtVersion()->debuggingHelperLibrary(); } QString MaemoRunConfiguration::executable() const @@ -668,6 +667,7 @@ void MaemoRunConfiguration::updateTarget() m_cachedTargetInformationValid = true; if (Qt4Project *qt4Project = static_cast(project())) { + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); Qt4PriFileNode * priFileNode = qt4Project->rootProjectNode() ->findProFileFor(m_proFilePath); if (!priFileNode) { @@ -675,8 +675,7 @@ void MaemoRunConfiguration::updateTarget() return; } - QtVersion *qtVersion = - qt4Project->qtVersion(qt4Project->activeBuildConfiguration()); + QtVersion *qtVersion = qt4bc->qtVersion(); ProFileReader *reader = priFileNode->createProFileReader(); reader->setCumulative(false); reader->setQtVersion(qtVersion); @@ -724,8 +723,7 @@ void MaemoRunConfiguration::updateTarget() QFileInfo(project()->file()->fileName()).absoluteDir(); QString relSubDir = baseProjectDirectory.relativeFilePath(QFileInfo(m_proFilePath).path()); - QDir baseBuildDirectory = - project()->buildDirectory(project()->activeBuildConfiguration()); + QDir baseBuildDirectory = qt4bc->buildDirectory(); QString baseDir = baseBuildDirectory.absoluteFilePath(relSubDir); if (!reader->contains("DESTDIR")) { @@ -1324,11 +1322,10 @@ const QString AbstractMaemoRunControl::targetCmdLinePrefix() const bool AbstractMaemoRunControl::setProcessEnvironment(QProcess &process) { QTC_ASSERT(runConfig, return false); - Qt4Project *qt4Project = qobject_cast(runConfig->project()); - QTC_ASSERT(qt4Project, return false); + Qt4BuildConfiguration *qt4bc = qobject_cast(runConfig->project()->activeBuildConfiguration()); + QTC_ASSERT(qt4bc, return false); Environment env = Environment::systemEnvironment(); - qt4Project->toolChain(qt4Project->activeBuildConfiguration()) - ->addToEnvironment(env); + qt4bc->toolChain()->addToEnvironment(env); process.setEnvironment(env.toStringList()); return true; diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index 58e4b625a29..daf08c2ad97 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -37,6 +37,7 @@ #include "s60runconfigbluetoothstarter.h" #include "bluetoothlistener_gui.h" #include "serialdevicelister.h" +#include "qt4buildconfiguration.h" #include #include @@ -106,21 +107,22 @@ QString S60DeviceRunConfiguration::type() const ProjectExplorer::ToolChain::ToolChainType S60DeviceRunConfiguration::toolChainType( ProjectExplorer::BuildConfiguration *configuration) const { - if (const Qt4Project *pro = qobject_cast(project())) - return pro->toolChainType(configuration); + if (Qt4BuildConfiguration *bc = qobject_cast(configuration)) + return bc->toolChainType(); return ProjectExplorer::ToolChain::INVALID; } ProjectExplorer::ToolChain::ToolChainType S60DeviceRunConfiguration::toolChainType() const { - if (const Qt4Project *pro = qobject_cast(project())) - return pro->toolChainType(pro->activeBuildConfiguration()); + if (Qt4BuildConfiguration *bc = qobject_cast(project()->activeBuildConfiguration())) + return bc->toolChainType(); return ProjectExplorer::ToolChain::INVALID; } bool S60DeviceRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configuration) const { - const ToolChain::ToolChainType type = toolChainType(configuration); + Qt4BuildConfiguration *qt4bc = static_cast(configuration); + const ToolChain::ToolChainType type = qt4bc->toolChainType(); return type == ToolChain::GCCE || type == ToolChain::RVCT_ARMV5 || type == ToolChain::RVCT_ARMV6; } @@ -243,9 +245,8 @@ QString S60DeviceRunConfiguration::packageFileName() const QString S60DeviceRunConfiguration::localExecutableFileName() const { - Qt4Project *qt4project = qobject_cast(project()); - S60Devices::Device device = S60Manager::instance()->deviceForQtVersion( - qt4project->qtVersion(qt4project->activeBuildConfiguration())); + Qt4BuildConfiguration *qt4bc = qobject_cast(project()->activeBuildConfiguration()); + S60Devices::Device device = S60Manager::instance()->deviceForQtVersion(qt4bc->qtVersion()); QString localExecutable = device.epocRoot; localExecutable += QString::fromLatin1("/epoc32/release/%1/%2/%3.exe") @@ -258,7 +259,7 @@ void S60DeviceRunConfiguration::updateTarget() { if (m_cachedTargetInformationValid) return; - Qt4Project *pro = static_cast(project()); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); Qt4PriFileNode * priFileNode = static_cast(project())->rootProjectNode()->findProFileFor(m_proFilePath); if (!priFileNode) { m_baseFileName = QString::null; @@ -266,7 +267,7 @@ void S60DeviceRunConfiguration::updateTarget() emit targetInformationChanged(); return; } - QtVersion *qtVersion = pro->qtVersion(pro->activeBuildConfiguration()); + QtVersion *qtVersion = qt4bc->qtVersion(); ProFileReader *reader = priFileNode->createProFileReader(); reader->setCumulative(false); reader->setQtVersion(qtVersion); @@ -274,7 +275,7 @@ void S60DeviceRunConfiguration::updateTarget() // Find out what flags we pass on to qmake, this code is duplicated in the qmake step QtVersion::QmakeBuildConfigs defaultBuildConfiguration = qtVersion->defaultBuildConfig(); QtVersion::QmakeBuildConfigs projectBuildConfiguration = - QtVersion::QmakeBuildConfigs(pro->activeBuildConfiguration()->value("buildConfiguration").toInt()); + QtVersion::QmakeBuildConfigs(qt4bc->value("buildConfiguration").toInt()); QStringList addedUserConfigArguments; QStringList removedUserConfigArguments; if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) @@ -297,7 +298,7 @@ void S60DeviceRunConfiguration::updateTarget() // Extract data const QDir baseProjectDirectory = QFileInfo(project()->file()->fileName()).absoluteDir(); const QString relSubDir = baseProjectDirectory.relativeFilePath(QFileInfo(m_proFilePath).path()); - const QDir baseBuildDirectory = project()->buildDirectory(project()->activeBuildConfiguration()); + const QDir baseBuildDirectory = qt4bc->buildDirectory(); const QString baseDir = baseBuildDirectory.absoluteFilePath(relSubDir); // Directory @@ -319,7 +320,7 @@ void S60DeviceRunConfiguration::updateTarget() m_packageTemplateFileName = QDir::cleanPath( m_workingDir + QLatin1Char('/') + m_targetName + QLatin1String("_template.pkg")); - switch (pro->toolChainType(pro->activeBuildConfiguration())) { + switch (qt4bc->toolChainType()) { case ToolChain::GCCE: case ToolChain::GCCE_GNUPOC: m_platform = QLatin1String("gcce"); @@ -417,8 +418,8 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat connect(m_makesis, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(makesisProcessFinished())); - Qt4Project *project = qobject_cast(runConfiguration->project()); - QTC_ASSERT(project, return); + Qt4BuildConfiguration *activeBuildConf = + static_cast(runConfiguration->project()->activeBuildConfiguration()); S60DeviceRunConfiguration *s60runConfig = qobject_cast(runConfiguration); QTC_ASSERT(s60runConfig, return); @@ -432,18 +433,17 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat m_symbianTarget = s60runConfig->symbianTarget(); m_packageTemplateFile = s60runConfig->packageTemplateFileName(); m_workingDirectory = QFileInfo(m_baseFileName).absolutePath(); - m_qtDir = project->qtVersion(project->activeBuildConfiguration())->versionInfo().value("QT_INSTALL_DATA"); + m_qtDir = activeBuildConf->qtVersion()->versionInfo().value("QT_INSTALL_DATA"); m_useCustomSignature = (s60runConfig->signingMode() == S60DeviceRunConfiguration::SignCustom); m_customSignaturePath = s60runConfig->customSignaturePath(); m_customKeyPath = s60runConfig->customKeyPath(); - ProjectExplorer::BuildConfiguration *const activeBuildConf = project->activeBuildConfiguration(); - const S60Devices::Device device = S60Manager::instance()->deviceForQtVersion(project->qtVersion(activeBuildConf)); + const S60Devices::Device device = S60Manager::instance()->deviceForQtVersion(activeBuildConf->qtVersion()); switch (m_toolChain) { case ProjectExplorer::ToolChain::GCCE_GNUPOC: case ProjectExplorer::ToolChain::RVCT_ARMV6_GNUPOC: { // 'sis' is a make target here. Set up with correct environment - ProjectExplorer::ToolChain *toolchain = project->toolChain(activeBuildConf); + ProjectExplorer::ToolChain *toolchain = activeBuildConf->toolChain(); m_makesisTool = toolchain->makeCommand(); m_toolsDirectory = device.epocRoot + QLatin1String("/epoc32/tools"); ProjectExplorer::Environment env = ProjectExplorer::Environment::systemEnvironment(); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp index 5c3c2c48023..59fc165d361 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp @@ -34,6 +34,7 @@ #include "profilereader.h" #include "s60manager.h" #include "s60devices.h" +#include "qt4buildconfiguration.h" #include #include @@ -78,9 +79,9 @@ QString S60EmulatorRunConfiguration::type() const bool S60EmulatorRunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configuration) const { - Qt4Project *pro = qobject_cast(project()); - QTC_ASSERT(pro, return false); - ToolChain::ToolChainType type = pro->toolChainType(configuration); + Qt4BuildConfiguration *qt4bc = qobject_cast(configuration); + QTC_ASSERT(qt4bc, return false); + ToolChain::ToolChainType type = qt4bc->toolChainType(); return type == ToolChain::WINSCW; } @@ -113,7 +114,7 @@ void S60EmulatorRunConfiguration::updateTarget() { if (m_cachedTargetInformationValid) return; - Qt4Project *pro = static_cast(project()); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); Qt4PriFileNode * priFileNode = static_cast(project())->rootProjectNode()->findProFileFor(m_proFilePath); if (!priFileNode) { m_executable = QString::null; @@ -121,15 +122,14 @@ void S60EmulatorRunConfiguration::updateTarget() emit targetInformationChanged(); return; } - QtVersion *qtVersion = pro->qtVersion(pro->activeBuildConfiguration()); + QtVersion *qtVersion = qt4bc->qtVersion(); ProFileReader *reader = priFileNode->createProFileReader(); reader->setCumulative(false); reader->setQtVersion(qtVersion); // Find out what flags we pass on to qmake, this code is duplicated in the qmake step QtVersion::QmakeBuildConfigs defaultBuildConfiguration = qtVersion->defaultBuildConfig(); - QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(pro->activeBuildConfiguration() - ->value("buildConfiguration").toInt()); + QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(qt4bc->value("buildConfiguration").toInt()); QStringList addedUserConfigArguments; QStringList removedUserConfigArguments; if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) @@ -283,7 +283,7 @@ S60EmulatorRunControl::S60EmulatorRunControl(S60EmulatorRunConfiguration *runCon // stuff like the EPOCROOT and EPOCDEVICE env variable Environment env = Environment::systemEnvironment(); Project *project = runConfiguration->project(); - static_cast(project)->toolChain(project->activeBuildConfiguration())->addToEnvironment(env); + static_cast(project->activeBuildConfiguration())->toolChain()->addToEnvironment(env); m_applicationLauncher.setEnvironment(env.toStringList()); m_executable = runConfiguration->executable(); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 91e4846f987..2916badccb2 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -32,7 +32,15 @@ using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; -using ProjectExplorer::BuildConfiguration; +using namespace ProjectExplorer; + +namespace { + bool debug = false; +} + +namespace { + const char * const KEY_QT_VERSION_ID = "QtVersionId"; +} Qt4BuildConfiguration::Qt4BuildConfiguration(Qt4Project *pro) : BuildConfiguration(pro) @@ -50,3 +58,257 @@ Qt4BuildConfiguration::~Qt4BuildConfiguration() { } + +ProjectExplorer::Environment Qt4BuildConfiguration::baseEnvironment() const +{ + Environment env = useSystemEnvironment() ? Environment::systemEnvironment() : Environment(); + qtVersion()->addToEnvironment(env); + ToolChain *tc = toolChain(); + if (tc) + tc->addToEnvironment(env); + return env; +} + +ProjectExplorer::Environment Qt4BuildConfiguration::environment() const +{ + Environment env = baseEnvironment(); + env.modify(userEnvironmentChanges()); + return env; +} + +void Qt4BuildConfiguration::setUseSystemEnvironment(bool b) +{ + if (useSystemEnvironment() == b) + return; + setValue("clearSystemEnvironment", !b); + emit environmentChanged(); +} + +bool Qt4BuildConfiguration::useSystemEnvironment() const +{ + bool b = !(value("clearSystemEnvironment").isValid() + && value("clearSystemEnvironment").toBool()); + return b; +} + +QList Qt4BuildConfiguration::userEnvironmentChanges() const +{ + return EnvironmentItem::fromStringList(value("userEnvironmentChanges").toStringList()); +} + +void Qt4BuildConfiguration::setUserEnvironmentChanges(const QList &diff) +{ + QStringList list = EnvironmentItem::toStringList(diff); + if (list == value("userEnvironmentChanges").toStringList()) + return; + setValue("userEnvironmentChanges", list); + emit environmentChanged(); +} + +QString Qt4BuildConfiguration::buildDirectory() const +{ + QString workingDirectory; + if (value("useShadowBuild").toBool()) + workingDirectory = value("buildDirectory").toString(); + if (workingDirectory.isEmpty()) + workingDirectory = QFileInfo(project()->file()->fileName()).absolutePath(); + return workingDirectory; +} + +ProjectExplorer::ToolChain *Qt4BuildConfiguration::toolChain() const +{ + ToolChain::ToolChainType tct = toolChainType(); + return qtVersion()->toolChain(tct); +} + +QString Qt4BuildConfiguration::makeCommand() const +{ + ToolChain *tc = toolChain(); + return tc ? tc->makeCommand() : "make"; +} + +#ifdef QTCREATOR_WITH_S60 +static inline QString symbianMakeTarget(QtVersion::QmakeBuildConfig buildConfig, + const QString &type) +{ + QString rc = (buildConfig & QtVersion::DebugBuild) ? + QLatin1String("debug-") : QLatin1String("release-"); + rc += type; + return rc; +} +#endif + +QString Qt4BuildConfiguration::defaultMakeTarget() const +{ +#ifdef QTCREATOR_WITH_S60 + ToolChain *tc = toolChain(); + if (!tc) + return QString::null; + const QtVersion::QmakeBuildConfig buildConfig + = QtVersion::QmakeBuildConfig(value("buildConfiguration").toInt()); + + switch (tc->type()) { + case ToolChain::GCCE: + case ToolChain::GCCE_GNUPOC: + return symbianMakeTarget(buildConfig, QLatin1String("gcce")); + case ToolChain::RVCT_ARMV5: + return symbianMakeTarget(buildConfig, QLatin1String("armv5")); + case ToolChain::RVCT_ARMV6: + case ToolChain::RVCT_ARMV6_GNUPOC: + return symbianMakeTarget(buildConfig, QLatin1String("armv6")); + default: + break; + } +#else + +#endif + return QString::null; +} + +QString Qt4BuildConfiguration::qtDir() const +{ + QtVersion *version = qtVersion(); + if (version) + return version->versionInfo().value("QT_INSTALL_DATA"); + return QString::null; +} + +QtVersion *Qt4BuildConfiguration::qtVersion() const +{ + return QtVersionManager::instance()->version(qtVersionId()); +} + +int Qt4BuildConfiguration::qtVersionId() const +{ + QtVersionManager *vm = QtVersionManager::instance(); + if (debug) + qDebug()<<"Looking for qtVersion ID of "<version(id)->isValid()) { + return id; + } else { + const_cast(this)->setValue(KEY_QT_VERSION_ID, 0); + return 0; + } + } else { + // Backward compatibilty, we might have just the name: + QString vname = value("QtVersion").toString(); + if (debug) + qDebug()<<" Backward compatibility reading QtVersion"< &versions = vm->versions(); + foreach (const QtVersion * const version, versions) { + if (version->name() == vname) { + if (debug) + qDebug()<<"found name in versions"; + const_cast(this)->setValue(KEY_QT_VERSION_ID, version->uniqueId()); + return version->uniqueId(); + } + } + } + } + if (debug) + qDebug()<<" using qtversion with id ="<(this)->setValue(KEY_QT_VERSION_ID, id); + return id; +} + +void Qt4BuildConfiguration::setQtVersion(int id) +{ + setValue(KEY_QT_VERSION_ID, id); + emit qtVersionChanged(); + static_cast(project())->updateActiveRunConfiguration(); +} + +void Qt4BuildConfiguration::setToolChainType(ProjectExplorer::ToolChain::ToolChainType type) +{ + setValue("ToolChain", (int)type); + static_cast(project())->updateActiveRunConfiguration(); +} + +ProjectExplorer::ToolChain::ToolChainType Qt4BuildConfiguration::toolChainType() const +{ + ToolChain::ToolChainType originalType = ToolChain::ToolChainType(value("ToolChain").toInt()); + ToolChain::ToolChainType type = originalType; + const QtVersion *version = qtVersion(); + if (!version->possibleToolChainTypes().contains(type)) { + // Oh no the saved type is not valid for this qt version + // use default tool chain + type = version->defaultToolchainType(); + const_cast(this)->setToolChainType(type); + } + return type; +} + + +QMakeStep *Qt4BuildConfiguration::qmakeStep() const +{ + QMakeStep *qs = 0; + foreach(BuildStep *bs, buildSteps()) + if ((qs = qobject_cast(bs)) != 0) + return qs; + return 0; +} + +MakeStep *Qt4BuildConfiguration::makeStep() const +{ + MakeStep *qs = 0; + foreach(BuildStep *bs, buildSteps()) + if ((qs = qobject_cast(bs)) != 0) + return qs; + return 0; +} + +// returns true if both are equal +bool Qt4BuildConfiguration::compareBuildConfigurationToImportFrom(const QString &workingDirectory) +{ + QMakeStep *qs = qmakeStep(); + if (QDir(workingDirectory).exists(QLatin1String("Makefile")) && qs) { + QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(workingDirectory); + QtVersion *version = qtVersion(); + if (version->qmakeCommand() == qmakePath) { + // same qtversion + QPair result = + QtVersionManager::scanMakeFile(workingDirectory, version->defaultBuildConfig()); + if (QtVersion::QmakeBuildConfig(value("buildConfiguration").toInt()) == result.first) { + // The QMake Build Configuration are the same, + // now compare arguments lists + // we have to compare without the spec/platform cmd argument + // and compare that on its own + QString actualSpec = Qt4Project::extractSpecFromArgumentList(qs->qmakeArguments(), workingDirectory, version); + if (actualSpec.isEmpty()) { + // Easy one the user has choosen not to override the settings + actualSpec = version->mkspec(); + } + + + QString parsedSpec = Qt4Project::extractSpecFromArgumentList(result.second, workingDirectory, version); + QStringList actualArgs = Qt4Project::removeSpecFromArgumentList(qs->qmakeArguments()); + QStringList parsedArgs = Qt4Project::removeSpecFromArgumentList(result.second); + + if (debug) { + qDebug()<<"Actual args:"<mkspec(); + if ((actualSpec == version->mkspec() || actualSpec == "default") + && (parsedSpec == version->mkspec() || parsedSpec == "default" || parsedSpec.isEmpty())) + return true; + } + } + } + } + return false; +} diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index d633527285b..f74aed9df43 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -31,10 +31,14 @@ #define QT4BUILDCONFIGURATION_H #include +#include namespace Qt4ProjectManager { class Qt4Project; +class QtVersion; +class QMakeStep; +class MakeStep; namespace Internal { @@ -46,6 +50,53 @@ public: // copy ctor Qt4BuildConfiguration(Qt4BuildConfiguration *source); ~Qt4BuildConfiguration(); + + ProjectExplorer::Environment environment() const; + ProjectExplorer::Environment baseEnvironment() const; + void setUserEnvironmentChanges(const QList &diff); + QList userEnvironmentChanges() const; + bool useSystemEnvironment() const; + void setUseSystemEnvironment(bool b); + + virtual QString buildDirectory() const; + + // returns the qtdir (depends on the current QtVersion) + QString qtDir() const; + //returns the qtVersion, if the project is set to use the default qt version, then + // that is returned + // to check wheter the project uses the default qt version use qtVersionId + QtVersion *qtVersion() const; + + // returns the id of the qt version, if the project is using the default qt version + // this function returns 0 + int qtVersionId() const; + //returns the name of the qt version, might be QString::Null, which means default qt version + // qtVersion is in general the better method to use + QString qtVersionName() const; + + void setQtVersion(int id); + + ProjectExplorer::ToolChain *toolChain() const; + void setToolChainType(ProjectExplorer::ToolChain::ToolChainType type); + ProjectExplorer::ToolChain::ToolChainType toolChainType() const; + + + // Those functions are used in a few places. + // The drawback is that we shouldn't actually depend on them beeing always there + // That is generally the stuff that is asked should normally be transfered to + // Qt4Project * + // So that we can later enable people to build qt4projects the way they would like + QMakeStep *qmakeStep() const; + MakeStep *makeStep() const; + + QString makeCommand() const; + QString defaultMakeTarget() const; + + // TODO rename + bool compareBuildConfigurationToImportFrom(const QString &workingDirectory); + +signals: + void qtVersionChanged(); }; } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp index 16d64842ae7..998ae3591bf 100644 --- a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp @@ -29,6 +29,7 @@ #include "qt4buildenvironmentwidget.h" #include "qt4project.h" +#include "qt4buildconfiguration.h" #include @@ -70,20 +71,20 @@ void Qt4BuildEnvironmentWidget::init(ProjectExplorer::BuildConfiguration *bc) if (debug) qDebug() << "Qt4BuildConfigWidget::init()"; - m_buildConfiguration = bc; - m_clearSystemEnvironmentCheckBox->setChecked(!m_pro->useSystemEnvironment(m_buildConfiguration)); - m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration)); - m_buildEnvironmentWidget->setUserChanges(m_pro->userEnvironmentChanges(m_buildConfiguration)); + m_buildConfiguration = static_cast(bc); + m_clearSystemEnvironmentCheckBox->setChecked(!m_buildConfiguration->useSystemEnvironment()); + m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment()); + m_buildEnvironmentWidget->setUserChanges(m_buildConfiguration->userEnvironmentChanges()); m_buildEnvironmentWidget->updateButtons(); } void Qt4BuildEnvironmentWidget::environmentModelUserChangesUpdated() { - m_pro->setUserEnvironmentChanges(m_buildConfiguration, m_buildEnvironmentWidget->userChanges()); + m_buildConfiguration->setUserEnvironmentChanges(m_buildEnvironmentWidget->userChanges()); } void Qt4BuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool checked) { - m_pro->setUseSystemEnvironment(m_buildConfiguration, !checked); - m_buildEnvironmentWidget->setBaseEnvironment(m_pro->baseEnvironment(m_buildConfiguration)); + m_buildConfiguration->setUseSystemEnvironment(!checked); + m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment()); } diff --git a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.h b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.h index 7f565e73a28..304649c0449 100644 --- a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.h +++ b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.h @@ -45,6 +45,8 @@ namespace Qt4ProjectManager { class Qt4Project; namespace Internal { +class Qt4BuildConfiguration; + class Qt4BuildEnvironmentWidget : public ProjectExplorer::BuildConfigWidget { Q_OBJECT @@ -63,7 +65,7 @@ private: ProjectExplorer::EnvironmentWidget *m_buildEnvironmentWidget; QCheckBox *m_clearSystemEnvironmentCheckBox; Qt4Project *m_pro; - ProjectExplorer::BuildConfiguration *m_buildConfiguration; + Qt4BuildConfiguration *m_buildConfiguration; }; } // namespace Internal diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index 70c7029251c..7276f950eb6 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -35,6 +35,7 @@ #include "qt4project.h" #include "qt4projectmanager.h" #include "qtuicodemodelsupport.h" +#include "qt4buildconfiguration.h" #include #include @@ -1101,7 +1102,9 @@ ProFileReader *Qt4PriFileNode::createProFileReader() const connect(reader, SIGNAL(errorFound(QString)), m_project, SLOT(proFileParseError(QString))); - QtVersion *version = m_project->qtVersion(m_project->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = static_cast(m_project->activeBuildConfiguration()); + + QtVersion *version = qt4bc->qtVersion(); if (version->isValid()) reader->setQtVersion(version); @@ -1202,7 +1205,7 @@ QString Qt4PriFileNode::buildDir() const { const QDir srcDirRoot = QFileInfo(m_project->rootProjectNode()->path()).absoluteDir(); const QString relativeDir = srcDirRoot.relativeFilePath(m_projectDir); - return QDir(m_project->buildDirectory(m_project->activeBuildConfiguration())).absoluteFilePath(relativeDir); + return QDir(m_project->activeBuildConfiguration()->buildDirectory()).absoluteFilePath(relativeDir); } /* diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index d5f986e9dd8..40b494e72e0 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -42,6 +42,7 @@ #include "projectloadwizard.h" #include "qtversionmanager.h" #include "qt4buildconfiguration.h" +#include "qt4buildconfiguration.h" #ifdef QTCREATOR_WITH_S60 #include "qt-s60/gccetoolchain.h" @@ -68,10 +69,6 @@ using namespace ProjectExplorer; enum { debug = 0 }; -namespace { - const char * const KEY_QT_VERSION_ID = "QtVersionId"; -} - namespace Qt4ProjectManager { namespace Internal { @@ -341,7 +338,7 @@ Qt4Project::~Qt4Project() void Qt4Project::defaultQtVersionChanged() { - if (qtVersionId(activeBuildConfiguration()) == 0) + if (static_cast(activeBuildConfiguration())->qtVersionId() == 0) m_rootProjectNode->update(); } @@ -349,9 +346,10 @@ void Qt4Project::qtVersionsChanged() { QtVersionManager *vm = QtVersionManager::instance(); foreach (BuildConfiguration *bc, buildConfigurations()) { - if (!vm->version(qtVersionId(bc))->isValid()) { - setQtVersion(bc, 0); - if (bc == activeBuildConfiguration()) + Qt4BuildConfiguration *qt4bc = static_cast(bc); + if (!vm->version(qt4bc->qtVersionId())->isValid()) { + qt4bc->setQtVersion(0); + if (qt4bc == activeBuildConfiguration()) m_rootProjectNode->update(); } } @@ -381,8 +379,9 @@ bool Qt4Project::restoreSettingsImpl(PersistentSettingsReader &settingsReader) // or if not, is reset to the default foreach (BuildConfiguration *bc, buildConfigurations()) { - qtVersionId(bc); - toolChainType(bc); + Qt4BuildConfiguration *qt4bc = static_cast(bc); + qt4bc->qtVersionId(); + qt4bc->toolChainType(); } m_rootProjectNode = new Qt4ProFileNode(this, m_fileInfo->fileName(), this); @@ -473,7 +472,7 @@ Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigu cleanStep->setClean(true); bc->insertCleanStep(0, cleanStep); if (!additionalArguments.isEmpty()) - qmakeStep->m_qmakeArgs = additionalArguments; + qmakeStep->setQMakeArguments(additionalArguments); // set some options for qmake and make if (qmakeBuildConfiguration & QtVersion::BuildAll) // debug_and_release => explicit targets @@ -484,9 +483,9 @@ Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigu // Finally set the qt version bool defaultQtVersion = (qtversion == 0); if (defaultQtVersion) - setQtVersion(bc, 0); + bc->setQtVersion(0); else - setQtVersion(bc, qtversion->uniqueId()); + bc->setQtVersion(qtversion->uniqueId()); return bc; } @@ -517,61 +516,13 @@ void Qt4Project::scheduleUpdateCodeModel(Qt4ProjectManager::Internal::Qt4ProFile m_proFilesForCodeModelUpdate.append(pro); } -ProjectExplorer::ToolChain *Qt4Project::toolChain(BuildConfiguration *configuration) const -{ - ToolChain::ToolChainType tct = toolChainType(configuration); - return qtVersion(configuration)->toolChain(tct); -} - -QString Qt4Project::makeCommand(BuildConfiguration *configuration) const -{ - ToolChain *tc = toolChain(configuration); - return tc ? tc->makeCommand() : "make"; -} - -#ifdef QTCREATOR_WITH_S60 -static inline QString symbianMakeTarget(QtVersion::QmakeBuildConfig buildConfig, - const QString &type) -{ - QString rc = (buildConfig & QtVersion::DebugBuild) ? - QLatin1String("debug-") : QLatin1String("release-"); - rc += type; - return rc; -} -#endif - -QString Qt4Project::defaultMakeTarget(BuildConfiguration *configuration) const -{ -#ifdef QTCREATOR_WITH_S60 - ToolChain *tc = toolChain(configuration); - if (!tc) - return QString::null; - const QtVersion::QmakeBuildConfig buildConfig - = QtVersion::QmakeBuildConfig(activeBuildConfiguration()->value("buildConfiguration").toInt()); - - switch (tc->type()) { - case ToolChain::GCCE: - case ToolChain::GCCE_GNUPOC: - return symbianMakeTarget(buildConfig, QLatin1String("gcce")); - case ToolChain::RVCT_ARMV5: - return symbianMakeTarget(buildConfig, QLatin1String("armv5")); - case ToolChain::RVCT_ARMV6: - case ToolChain::RVCT_ARMV6_GNUPOC: - return symbianMakeTarget(buildConfig, QLatin1String("armv6")); - default: - break; - } -#else - Q_UNUSED(configuration); -#endif - return QString::null; -} - void Qt4Project::updateCodeModel() { if (debug) qDebug()<<"Qt4Project::updateCodeModel()"; + Qt4BuildConfiguration *activeQt4BuildConfiguration = static_cast(activeBuildConfiguration()); + CppTools::CppModelManagerInterface *modelmanager = ExtensionSystem::PluginManager::instance() ->getObject(); @@ -583,7 +534,7 @@ void Qt4Project::updateCodeModel() QStringList predefinedFrameworkPaths; QByteArray predefinedMacros; - ToolChain *tc = toolChain(activeBuildConfiguration()); + ToolChain *tc = activeQt4BuildConfiguration->toolChain(); QList allHeaderPaths; if (tc) { predefinedMacros = tc->predefinedMacros(); @@ -602,7 +553,7 @@ void Qt4Project::updateCodeModel() predefinedIncludePaths.append(headerPath.path()); } - const QHash versionInfo = qtVersion(activeBuildConfiguration())->versionInfo(); + const QHash versionInfo = activeQt4BuildConfiguration->qtVersion()->versionInfo(); const QString newQtIncludePath = versionInfo.value(QLatin1String("QT_INSTALL_HEADERS")); predefinedIncludePaths.append(newQtIncludePath); @@ -687,7 +638,7 @@ void Qt4Project::updateCodeModel() } // Add mkspec directory - info.includes.append(qtVersion(activeBuildConfiguration())->mkspecPath()); + info.includes.append(activeQt4BuildConfiguration->qtVersion()->mkspecPath()); info.frameworkPaths = allFrameworkPaths; @@ -701,7 +652,7 @@ void Qt4Project::updateCodeModel() } // Add mkspec directory - allIncludePaths.append(qtVersion(activeBuildConfiguration())->mkspecPath()); + allIncludePaths.append(activeQt4BuildConfiguration->qtVersion()->mkspecPath()); // Dump things out // This is debugging output... @@ -784,7 +735,6 @@ QStringList Qt4Project::frameworkPaths(const QString &fileName) const // */ void Qt4Project::update() { - // TODO Maybe remove this method completely? m_rootProjectNode->update(); //updateCodeModel(); } @@ -859,126 +809,6 @@ Qt4ProFileNode *Qt4Project::rootProjectNode() const return m_rootProjectNode; } -QString Qt4Project::buildDirectory(BuildConfiguration *configuration) const -{ - QString workingDirectory; - if (configuration->value("useShadowBuild").toBool()) - workingDirectory = configuration->value("buildDirectory").toString(); - if (workingDirectory.isEmpty()) - workingDirectory = QFileInfo(file()->fileName()).absolutePath(); - return workingDirectory; -} - -ProjectExplorer::Environment Qt4Project::baseEnvironment(BuildConfiguration *configuration) const -{ - Environment env = useSystemEnvironment(configuration) ? Environment::systemEnvironment() : Environment(); - qtVersion(configuration)->addToEnvironment(env); - ToolChain *tc = toolChain(configuration); - if (tc) - tc->addToEnvironment(env); - return env; -} - -ProjectExplorer::Environment Qt4Project::environment(BuildConfiguration *configuration) const -{ - Environment env = baseEnvironment(configuration); - env.modify(userEnvironmentChanges(configuration)); - return env; -} - -void Qt4Project::setUseSystemEnvironment(BuildConfiguration *configuration, bool b) -{ - if (useSystemEnvironment(configuration) == b) - return; - configuration->setValue("clearSystemEnvironment", !b); - emit environmentChanged(configuration); -} - -bool Qt4Project::useSystemEnvironment(BuildConfiguration *configuration) const -{ - bool b = !(configuration->value("clearSystemEnvironment").isValid() - && configuration->value("clearSystemEnvironment").toBool()); - return b; -} - -QList Qt4Project::userEnvironmentChanges(BuildConfiguration *configuration) const -{ - return EnvironmentItem::fromStringList(configuration->value("userEnvironmentChanges").toStringList()); -} - -void Qt4Project::setUserEnvironmentChanges(BuildConfiguration *configuration, const QList &diff) -{ - QStringList list = EnvironmentItem::toStringList(diff); - if (list == configuration->value("userEnvironmentChanges").toStringList()) - return; - configuration->setValue("userEnvironmentChanges", list); - emit environmentChanged(configuration); -} - -QString Qt4Project::qtDir(BuildConfiguration *configuration) const -{ - QtVersion *version = qtVersion(configuration); - if (version) - return version->versionInfo().value("QT_INSTALL_DATA"); - return QString::null; -} - -QtVersion *Qt4Project::qtVersion(BuildConfiguration *configuration) const -{ - return QtVersionManager::instance()->version(qtVersionId(configuration)); -} - -int Qt4Project::qtVersionId(BuildConfiguration *configuration) const -{ - QtVersionManager *vm = QtVersionManager::instance(); - if (debug) - qDebug()<<"Looking for qtVersion ID of "<displayName(); - int id = 0; - QVariant vid = configuration->value(KEY_QT_VERSION_ID); - if (vid.isValid()) { - id = vid.toInt(); - if (vm->version(id)->isValid()) { - return id; - } else { - configuration->setValue(KEY_QT_VERSION_ID, 0); - return 0; - } - } else { - // Backward compatibilty, we might have just the name: - QString vname = configuration->value("QtVersion").toString(); - if (debug) - qDebug()<<" Backward compatibility reading QtVersion"< &versions = vm->versions(); - foreach (const QtVersion * const version, versions) { - if (version->name() == vname) { - if (debug) - qDebug()<<"found name in versions"; - configuration->setValue(KEY_QT_VERSION_ID, version->uniqueId()); - return version->uniqueId(); - } - } - } - } - if (debug) - qDebug()<<" using qtversion with id ="<setValue(KEY_QT_VERSION_ID, id); - return id; -} - -void Qt4Project::setQtVersion(BuildConfiguration *configuration, int id) -{ - configuration->setValue(KEY_QT_VERSION_ID, id); - emit qtVersionChanged(configuration); - updateActiveRunConfiguration(); -} - -void Qt4Project::setToolChainType(BuildConfiguration *configuration, ProjectExplorer::ToolChain::ToolChainType type) -{ - configuration->setValue("ToolChain", (int)type); - updateActiveRunConfiguration(); -} void Qt4Project::updateActiveRunConfiguration() { @@ -986,18 +816,6 @@ void Qt4Project::updateActiveRunConfiguration() emit targetInformationChanged(); } -ProjectExplorer::ToolChain::ToolChainType Qt4Project::toolChainType(BuildConfiguration *configuration) const -{ - ToolChain::ToolChainType originalType = ToolChain::ToolChainType(configuration->value("ToolChain").toInt()); - ToolChain::ToolChainType type = originalType; - const QtVersion *version = qtVersion(configuration); - if (!version->possibleToolChainTypes().contains(type)) // use default tool chain - type = version->defaultToolchainType(); - if (type != originalType) - const_cast(this)->setToolChainType(configuration, type); - return type; -} - QString Qt4Project::extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version) { int index = list.indexOf("-spec"); @@ -1185,24 +1003,6 @@ void Qt4Project::proFileUpdated(Qt4ProjectManager::Internal::Qt4ProFileNode *nod } } -QMakeStep *Qt4Project::qmakeStep(ProjectExplorer::BuildConfiguration *bc) const -{ - QMakeStep *qs = 0; - foreach(BuildStep *bs, bc->buildSteps()) - if ((qs = qobject_cast(bs)) != 0) - return qs; - return 0; -} - -MakeStep *Qt4Project::makeStep(ProjectExplorer::BuildConfiguration *bc) const -{ - MakeStep *qs = 0; - foreach(BuildStep *bs, bc->buildSteps()) - if ((qs = qobject_cast(bs)) != 0) - return qs; - return 0; -} - bool Qt4Project::hasSubNode(Qt4PriFileNode *root, const QString &path) { if (root->path() == path) @@ -1243,11 +1043,6 @@ void Qt4Project::invalidateCachedTargetInformation() emit targetInformationChanged(); } -void Qt4Project::emitBuildDirectoryChanged() -{ - emit buildDirectoryChanged(); -} - // We match -spec and -platfrom separetly // We ignore -cache, because qmake contained a bug that it didn't // mention the -cache in the Makefile @@ -1274,56 +1069,6 @@ QStringList Qt4Project::removeSpecFromArgumentList(const QStringList &old) return newList; } -// returns true if both are equal -bool Qt4Project::compareBuildConfigurationToImportFrom(BuildConfiguration *bc, const QString &workingDirectory) -{ - QMakeStep *qs = qmakeStep(bc); - if (QDir(workingDirectory).exists(QLatin1String("Makefile")) && qs) { - QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(workingDirectory); - QtVersion *version = qtVersion(bc); - if (version->qmakeCommand() == qmakePath) { - // same qtversion - QPair result = - QtVersionManager::scanMakeFile(workingDirectory, version->defaultBuildConfig()); - if (QtVersion::QmakeBuildConfig(bc->value("buildConfiguration").toInt()) == result.first) { - // The QMake Build Configuration are the same, - // now compare arguments lists - // we have to compare without the spec/platform cmd argument - // and compare that on its own - QString actualSpec = extractSpecFromArgumentList(qs->m_qmakeArgs, workingDirectory, version); - if (actualSpec.isEmpty()) { - // Easy one the user has choosen not to override the settings - actualSpec = version->mkspec(); - } - - - QString parsedSpec = extractSpecFromArgumentList(result.second, workingDirectory, version); - QStringList actualArgs = removeSpecFromArgumentList(qs->m_qmakeArgs); - QStringList parsedArgs = removeSpecFromArgumentList(result.second); - - if (debug) { - qDebug()<<"Actual args:"<mkspec(); - if ((actualSpec == version->mkspec() || actualSpec == "default") - && (parsedSpec == version->mkspec() || parsedSpec == "default" || parsedSpec.isEmpty())) - return true; - } - } - } - } - return false; -} - /*! Handle special case were a subproject of the qt directory is opened, and diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 78494cde3f8..cff0723018d 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -178,70 +178,34 @@ public: virtual QStringList files(FilesMode fileMode) const; - //building environment - ProjectExplorer::Environment environment(ProjectExplorer::BuildConfiguration *configuration) const; - ProjectExplorer::Environment baseEnvironment(ProjectExplorer::BuildConfiguration *configuration) const; - void setUserEnvironmentChanges(ProjectExplorer::BuildConfiguration *configuration, const QList &diff); - QList userEnvironmentChanges(ProjectExplorer::BuildConfiguration *configuration) const; - bool useSystemEnvironment(ProjectExplorer::BuildConfiguration *configuration) const; - void setUseSystemEnvironment(ProjectExplorer::BuildConfiguration *configuration, bool b); - - virtual QString buildDirectory(ProjectExplorer::BuildConfiguration *configuration) const; // returns the CONFIG variable from the .pro file QStringList qmakeConfig() const; - // returns the qtdir (depends on the current QtVersion) - QString qtDir(ProjectExplorer::BuildConfiguration *configuration) const; - //returns the qtVersion, if the project is set to use the default qt version, then - // that is returned - // to check wheter the project uses the default qt version use qtVersionId - QtVersion *qtVersion(ProjectExplorer::BuildConfiguration *configuration) const; - - // returns the id of the qt version, if the project is using the default qt version - // this function returns 0 - int qtVersionId(ProjectExplorer::BuildConfiguration *configuration) const; - //returns the name of the qt version, might be QString::Null, which means default qt version - // qtVersion is in general the better method to use - QString qtVersionName(ProjectExplorer::BuildConfiguration *configuration) const; - - ProjectExplorer::ToolChain *toolChain(ProjectExplorer::BuildConfiguration *configuration) const; - void setToolChainType(ProjectExplorer::BuildConfiguration *configuration, ProjectExplorer::ToolChain::ToolChainType type); - ProjectExplorer::ToolChain::ToolChainType toolChainType(ProjectExplorer::BuildConfiguration *configuration) const; ProjectExplorer::BuildConfigWidget *createConfigWidget(); QList subConfigWidgets(); - void setQtVersion(ProjectExplorer::BuildConfiguration *configuration, int id); - QList applicationProFiles() const; - // Those functions are used in a few places. - // The drawback is that we shouldn't actually depend on them beeing always there - // That is generally the stuff that is asked should normally be transfered to - // Qt4Project * - // So that we can later enable people to build qt4projects the way they would like - QMakeStep *qmakeStep(ProjectExplorer::BuildConfiguration *bc) const; - MakeStep *makeStep(ProjectExplorer::BuildConfiguration *bc) const; void notifyChanged(const QString &name); - QString makeCommand(ProjectExplorer::BuildConfiguration *configuration) const; - QString defaultMakeTarget(ProjectExplorer::BuildConfiguration *configuration) const; - // Is called by qmakestep qt4configurationwidget if the settings change // Informs all Qt4RunConfigurations that their cached values are now invalid // the Qt4RunConfigurations will update as soon as asked + + // TODO remove void invalidateCachedTargetInformation(); virtual QByteArray predefinedMacros(const QString &fileName) const; virtual QStringList includePaths(const QString &fileName) const; virtual QStringList frameworkPaths(const QString &fileName) const; - bool compareBuildConfigurationToImportFrom(ProjectExplorer::BuildConfiguration *configuration, const QString &workingDirectory); - static QStringList removeSpecFromArgumentList(const QStringList &old); static QString extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version); + + // TODO can i remove this? + void updateActiveRunConfiguration(); signals: void targetInformationChanged(); - void qtVersionChanged(ProjectExplorer::BuildConfiguration *); public slots: void update(); @@ -271,17 +235,12 @@ private: static void findProFile(const QString& fileName, Internal::Qt4ProFileNode *root, QList &list); static bool hasSubNode(Internal::Qt4PriFileNode *root, const QString &path); - // called by Qt4ProjectConfigWidget - // TODO remove once there's a setBuildDirectory call - void emitBuildDirectoryChanged(); - QList m_applicationProFileChange; ProjectExplorer::ProjectExplorerPlugin *projectExplorer() const; void addDefaultBuild(); static QString qmakeVarName(ProjectExplorer::FileType type); - void updateActiveRunConfiguration(); Qt4Manager *m_manager; Internal::Qt4ProFileNode *m_rootProjectNode; diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 1a80dc1f1a7..b069c09a44c 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -34,6 +34,7 @@ #include "qt4project.h" #include "qt4projectmanagerconstants.h" #include "qt4projectmanager.h" +#include "qt4buildconfiguration.h" #include "ui_qt4projectconfigwidget.h" #include @@ -53,9 +54,9 @@ using namespace Qt4ProjectManager::Internal; Qt4ProjectConfigWidget::Qt4ProjectConfigWidget(Qt4Project *project) : BuildConfigWidget(), - m_pro(project), m_buildConfiguration(0) { + Q_UNUSED(project); QVBoxLayout *vbox = new QVBoxLayout(this); vbox->setMargin(0); m_detailsContainer = new Utils::DetailsWidget(this); @@ -112,9 +113,9 @@ Qt4ProjectConfigWidget::~Qt4ProjectConfigWidget() void Qt4ProjectConfigWidget::updateDetails() { - QtVersion *version = m_pro->qtVersion(m_buildConfiguration); + QtVersion *version = m_buildConfiguration->qtVersion(); QString versionString; - if (m_pro->qtVersionId(m_buildConfiguration) == 0) { + if (m_buildConfiguration->qtVersionId() == 0) { versionString = tr("Default Qt Version (%1)").arg(version->name()); } else if(version){ versionString = version->name(); @@ -126,8 +127,8 @@ void Qt4ProjectConfigWidget::updateDetails() "with tool chain %2
" "building in %3") .arg(versionString, - ProjectExplorer::ToolChain::toolChainName(m_pro->toolChainType(m_buildConfiguration)), - QDir::toNativeSeparators(m_pro->buildDirectory(m_buildConfiguration)))); + ProjectExplorer::ToolChain::toolChainName(m_buildConfiguration->toolChainType()), + QDir::toNativeSeparators(m_buildConfiguration->buildDirectory()))); } void Qt4ProjectConfigWidget::manageQtVersions() @@ -147,7 +148,7 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) if (debug) qDebug() << "Qt4ProjectConfigWidget::init() for"<displayName(); - m_buildConfiguration = bc; + m_buildConfiguration = static_cast(bc); m_ui->nameLineEdit->setText(m_buildConfiguration->displayName()); setupQtVersionsComboBox(); @@ -156,7 +157,7 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) m_ui->shadowBuildCheckBox->setChecked(shadowBuild); m_ui->shadowBuildDirEdit->setEnabled(shadowBuild); m_browseButton->setEnabled(shadowBuild); - m_ui->shadowBuildDirEdit->setPath(m_pro->buildDirectory(m_buildConfiguration)); + m_ui->shadowBuildDirEdit->setPath(m_buildConfiguration->buildDirectory()); updateImportLabel(); updateToolChainCombo(); updateDetails(); @@ -164,7 +165,7 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) void Qt4ProjectConfigWidget::changeConfigName(const QString &newName) { - m_pro->setDisplayNameFor(m_buildConfiguration, newName); + m_buildConfiguration->project()->setDisplayNameFor(m_buildConfiguration, newName); } void Qt4ProjectConfigWidget::setupQtVersionsComboBox() @@ -180,7 +181,7 @@ void Qt4ProjectConfigWidget::setupQtVersionsComboBox() m_ui->qtVersionComboBox->clear(); m_ui->qtVersionComboBox->addItem(tr("Default Qt Version (%1)").arg(vm->defaultVersion()->name()), 0); - int qtVersionId = m_pro->qtVersionId(m_buildConfiguration); + int qtVersionId = m_buildConfiguration->qtVersionId(); if (qtVersionId == 0) { m_ui->qtVersionComboBox->setCurrentIndex(0); @@ -204,7 +205,7 @@ void Qt4ProjectConfigWidget::setupQtVersionsComboBox() void Qt4ProjectConfigWidget::onBeforeBeforeShadowBuildDirBrowsed() { - QString initialDirectory = QFileInfo(m_pro->file()->fileName()).absolutePath(); + QString initialDirectory = QFileInfo(m_buildConfiguration->project()->file()->fileName()).absolutePath(); if (!initialDirectory.isEmpty()) m_ui->shadowBuildDirEdit->setInitialBrowsePathBackup(initialDirectory); } @@ -220,7 +221,7 @@ void Qt4ProjectConfigWidget::shadowBuildCheckBoxClicked(bool checked) else m_buildConfiguration->setValue("buildDirectory", QVariant(QString::null)); updateDetails(); - m_pro->invalidateCachedTargetInformation(); + static_cast(m_buildConfiguration->project())->invalidateCachedTargetInformation(); updateImportLabel(); } @@ -229,9 +230,9 @@ void Qt4ProjectConfigWidget::updateImportLabel() bool visible = false; // we only show if we actually have a qmake and makestep - if (m_pro->qmakeStep(m_buildConfiguration) && m_pro->makeStep(m_buildConfiguration)) { - QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(m_pro->buildDirectory(m_buildConfiguration)); - QtVersion *version = m_pro->qtVersion(m_buildConfiguration); + if (m_buildConfiguration->qmakeStep() && m_buildConfiguration->makeStep()) { + QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(m_buildConfiguration->buildDirectory()); + QtVersion *version = m_buildConfiguration->qtVersion(); // check that there's a makefile if (!qmakePath.isEmpty()) { // and that the qmake path is different from the current version @@ -240,7 +241,7 @@ void Qt4ProjectConfigWidget::updateImportLabel() visible = true; } else { // check that the qmake flags, arguments match - visible = !m_pro->compareBuildConfigurationToImportFrom(m_buildConfiguration, m_pro->buildDirectory(m_buildConfiguration)); + visible = !m_buildConfiguration->compareBuildConfigurationToImportFrom(m_buildConfiguration->buildDirectory()); } } else { visible = false; @@ -260,15 +261,15 @@ void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged() // offer to import it updateImportLabel(); - m_pro->invalidateCachedTargetInformation(); + static_cast(m_buildConfiguration->project())->invalidateCachedTargetInformation(); updateDetails(); } void Qt4ProjectConfigWidget::importLabelClicked() { - if (!m_pro->qmakeStep(m_buildConfiguration) || !m_pro->makeStep(m_buildConfiguration)) + if (!m_buildConfiguration->qmakeStep() || !m_buildConfiguration->makeStep()) return; - QString directory = m_pro->buildDirectory(m_buildConfiguration); + QString directory = m_buildConfiguration->buildDirectory(); if (!directory.isEmpty()) { QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(directory); if (!qmakePath.isEmpty()) { @@ -293,12 +294,12 @@ void Qt4ProjectConfigWidget::importLabelClicked() } // So we got all the information now apply it... - m_pro->setQtVersion(m_buildConfiguration, version->uniqueId()); + m_buildConfiguration->setQtVersion(version->uniqueId()); // Combo box will be updated at the end - QMakeStep *qmakeStep = m_pro->qmakeStep(m_buildConfiguration); + QMakeStep *qmakeStep = m_buildConfiguration->qmakeStep(); qmakeStep->setQMakeArguments(additionalArguments); - MakeStep *makeStep = m_pro->makeStep(m_buildConfiguration); + MakeStep *makeStep = m_buildConfiguration->makeStep(); m_buildConfiguration->setValue("buildConfiguration", int(qmakeBuildConfig)); // Adjust command line arguments, this is ugly as hell @@ -335,10 +336,10 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString QtVersionManager *vm = QtVersionManager::instance(); bool isValid = vm->version(newQtVersion)->isValid(); m_ui->invalidQtWarningLabel->setVisible(!isValid); - if (newQtVersion != m_pro->qtVersionId(m_buildConfiguration)) { - m_pro->setQtVersion(m_buildConfiguration, newQtVersion); + if (newQtVersion != m_buildConfiguration->qtVersionId()) { + m_buildConfiguration->setQtVersion(newQtVersion); updateToolChainCombo(); - m_pro->update(); + static_cast(m_buildConfiguration->project())->update(); } updateDetails(); } @@ -346,19 +347,19 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString void Qt4ProjectConfigWidget::updateToolChainCombo() { m_ui->toolChainComboBox->clear(); - QList toolchains = m_pro->qtVersion(m_buildConfiguration)->possibleToolChainTypes(); + QList toolchains = m_buildConfiguration->qtVersion()->possibleToolChainTypes(); using namespace ProjectExplorer; foreach (ToolChain::ToolChainType toolchain, toolchains) { m_ui->toolChainComboBox->addItem(ToolChain::toolChainName(toolchain), qVariantFromValue(toolchain)); } m_ui->toolChainComboBox->setEnabled(toolchains.size() > 1); - setToolChain(toolchains.indexOf(m_pro->toolChainType(m_buildConfiguration))); + setToolChain(toolchains.indexOf(m_buildConfiguration->toolChainType())); } void Qt4ProjectConfigWidget::selectToolChain(int index) { setToolChain(index); - m_pro->update(); + static_cast(m_buildConfiguration->project())->update(); } void Qt4ProjectConfigWidget::setToolChain(int index) @@ -366,7 +367,7 @@ void Qt4ProjectConfigWidget::setToolChain(int index) ProjectExplorer::ToolChain::ToolChainType selectedToolChainType = m_ui->toolChainComboBox->itemData(index, Qt::UserRole).value(); - m_pro->setToolChainType(m_buildConfiguration, selectedToolChainType); + m_buildConfiguration->setToolChainType(selectedToolChainType); if (m_ui->toolChainComboBox->currentIndex() != index) m_ui->toolChainComboBox->setCurrentIndex(index); updateDetails(); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h index 4abbee93ed8..2f6171a9ad7 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.h +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.h @@ -39,6 +39,7 @@ namespace Qt4ProjectManager { class Qt4Project; namespace Internal { +class Qt4BuildConfiguration; namespace Ui { class Qt4ProjectConfigWidget; @@ -72,8 +73,7 @@ private: void setToolChain(int index); Ui::Qt4ProjectConfigWidget *m_ui; QAbstractButton *m_browseButton; - Qt4Project *m_pro; // TODO remove - ProjectExplorer::BuildConfiguration *m_buildConfiguration; + Qt4BuildConfiguration *m_buildConfiguration; Utils::DetailsWidget *m_detailsContainer; }; diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 8994ee9bd2e..93dcffe431f 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -33,6 +33,7 @@ #include "profilereader.h" #include "qt4nodes.h" #include "qt4project.h" +#include "qt4buildconfiguration.h" #include #include @@ -96,9 +97,9 @@ QString Qt4RunConfiguration::type() const bool Qt4RunConfiguration::isEnabled(ProjectExplorer::BuildConfiguration *configuration) const { #if defined(QTCREATOR_WITH_S60) || defined(QTCREATOR_WITH_MAEMO) - Qt4Project *pro = qobject_cast(project()); - QTC_ASSERT(pro, return false); - ProjectExplorer::ToolChain::ToolChainType type = pro->toolChainType(configuration); + Qt4BuildConfiguration *qt4bc = qobject_cast(configuration); + QTC_ASSERT(qt4bc, return false); + ProjectExplorer::ToolChain::ToolChainType type = qt4bc->toolChainType(); #ifdef QTCREATOR_WITH_S60 if (type == ProjectExplorer::ToolChain::WINSCW || type == ProjectExplorer::ToolChain::GCCE @@ -479,7 +480,7 @@ ProjectExplorer::Environment Qt4RunConfiguration::baseEnvironment() const } else if (m_baseEnvironmentBase == Qt4RunConfiguration::SystemEnvironmentBase) { env = ProjectExplorer::Environment::systemEnvironment(); } else if (m_baseEnvironmentBase == Qt4RunConfiguration::BuildEnvironmentBase) { - env = project()->environment(project()->activeBuildConfiguration()); + env = project()->activeBuildConfiguration()->environment(); } if (m_isUsingDyldImageSuffix) { env.set("DYLD_IMAGE_SUFFIX", "_debug"); @@ -554,7 +555,7 @@ void Qt4RunConfiguration::updateTarget() if (m_cachedTargetInformationValid) return; //qDebug()<<"updateTarget"; - Qt4Project *pro = static_cast(project()); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); Qt4PriFileNode * priFileNode = static_cast(project())->rootProjectNode()->findProFileFor(m_proFilePath); if (!priFileNode) { m_workingDir = QString::null; @@ -565,11 +566,11 @@ void Qt4RunConfiguration::updateTarget() } ProFileReader *reader = priFileNode->createProFileReader(); reader->setCumulative(false); - reader->setQtVersion(pro->qtVersion(pro->activeBuildConfiguration())); + reader->setQtVersion(qt4bc->qtVersion()); // Find out what flags we pass on to qmake, this code is duplicated in the qmake step - QtVersion::QmakeBuildConfigs defaultBuildConfiguration = pro->qtVersion(pro->activeBuildConfiguration())->defaultBuildConfig(); - QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(pro->activeBuildConfiguration()->value("buildConfiguration").toInt()); + QtVersion::QmakeBuildConfigs defaultBuildConfiguration = qt4bc->qtVersion()->defaultBuildConfig(); + QtVersion::QmakeBuildConfigs projectBuildConfiguration = QtVersion::QmakeBuildConfig(qt4bc->value("buildConfiguration").toInt()); QStringList addedUserConfigArguments; QStringList removedUserConfigArguments; if ((defaultBuildConfiguration & QtVersion::BuildAll) && !(projectBuildConfiguration & QtVersion::BuildAll)) @@ -592,7 +593,7 @@ void Qt4RunConfiguration::updateTarget() // Extract data QDir baseProjectDirectory = QFileInfo(project()->file()->fileName()).absoluteDir(); QString relSubDir = baseProjectDirectory.relativeFilePath(QFileInfo(m_proFilePath).path()); - QDir baseBuildDirectory = project()->buildDirectory(project()->activeBuildConfiguration()); + QDir baseBuildDirectory = project()->activeBuildConfiguration()->buildDirectory(); QString baseDir = baseBuildDirectory.absoluteFilePath(relSubDir); //qDebug()<(project()); - QtVersion *version = pro->qtVersion(pro->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + QtVersion *version = qt4bc->qtVersion(); if (version) return version->debuggingHelperLibrary(); else @@ -663,8 +664,8 @@ QString Qt4RunConfiguration::dumperLibrary() const QStringList Qt4RunConfiguration::dumperLibraryLocations() const { - Qt4Project *pro = qobject_cast(project()); - QtVersion *version = pro->qtVersion(pro->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + QtVersion *version = qt4bc->qtVersion(); if (version) return version->debuggingHelperLibraryLocations(); else @@ -685,8 +686,8 @@ Qt4RunConfiguration::BaseEnvironmentBase Qt4RunConfiguration::baseEnvironmentBas } ProjectExplorer::ToolChain::ToolChainType Qt4RunConfiguration::toolChainType() const { - Qt4Project *pro = qobject_cast(project()); - return pro->toolChainType(pro->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + return qt4bc->toolChainType(); } /// diff --git a/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp b/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp index 62a0f175535..14b5982ca45 100644 --- a/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp +++ b/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp @@ -1,4 +1,5 @@ #include "qtuicodemodelsupport.h" +#include "qt4buildconfiguration.h" #include "qt4project.h" #include @@ -88,9 +89,10 @@ void Qt4UiCodeModelSupport::setFileName(const QString &name) bool Qt4UiCodeModelSupport::runUic(const QString &ui) const { + Qt4BuildConfiguration *qt4bc = static_cast(m_project->activeBuildConfiguration()); QProcess uic; - uic.setEnvironment(m_project->environment(m_project->activeBuildConfiguration()).toStringList()); - uic.start(m_project->qtVersion(m_project->activeBuildConfiguration())->uicCommand(), QStringList(), QIODevice::ReadWrite); + uic.setEnvironment(m_project->activeBuildConfiguration()->environment().toStringList()); + uic.start(qt4bc->qtVersion()->uicCommand(), QStringList(), QIODevice::ReadWrite); uic.waitForStarted(); uic.write(ui.toUtf8()); uic.closeWriteChannel(); From a7a7e4d00213b33ca75ddb60e2a4fbd7b68e2144 Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 25 Nov 2009 19:39:52 +0100 Subject: [PATCH 10/62] Change IBuildStepFactory::canCreate to take a BuildConfiguration instead of a Project. Since BuildSteps "should" only care about the BuildConfiguration not the Project. (Not 100% doable, but still.) --- src/plugins/cmakeprojectmanager/makestep.cpp | 2 +- src/plugins/cmakeprojectmanager/makestep.h | 2 +- src/plugins/genericprojectmanager/genericmakestep.cpp | 2 +- src/plugins/genericprojectmanager/genericmakestep.h | 2 +- src/plugins/projectexplorer/buildstep.h | 4 +--- src/plugins/projectexplorer/buildstepspage.cpp | 3 +-- src/plugins/projectexplorer/buildstepspage.h | 1 - src/plugins/projectexplorer/processstep.cpp | 4 ++-- src/plugins/projectexplorer/processstep.h | 2 +- src/plugins/qt4projectmanager/makestep.cpp | 4 ++-- src/plugins/qt4projectmanager/makestep.h | 2 +- src/plugins/qt4projectmanager/qmakestep.cpp | 6 ++++-- src/plugins/qt4projectmanager/qmakestep.h | 2 +- 13 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 4fe313e6a58..6cbb7bc72ef 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -284,7 +284,7 @@ BuildStep *MakeStepFactory::clone(BuildStep *bs, BuildConfiguration *bc) const return new MakeStep(static_cast(bs), bc); } -QStringList MakeStepFactory::canCreateForProject(Project * /* pro */) const +QStringList MakeStepFactory::canCreateForProject(BuildConfiguration * /* pro */) const { return QStringList(); } diff --git a/src/plugins/cmakeprojectmanager/makestep.h b/src/plugins/cmakeprojectmanager/makestep.h index f01bb1d6141..6bb2a9b5569 100644 --- a/src/plugins/cmakeprojectmanager/makestep.h +++ b/src/plugins/cmakeprojectmanager/makestep.h @@ -107,7 +107,7 @@ class MakeStepFactory : public ProjectExplorer::IBuildStepFactory virtual bool canCreate(const QString &name) const; virtual ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString &name) const; virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; - virtual QStringList canCreateForProject(ProjectExplorer::Project *pro) const; + virtual QStringList canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const; virtual QString displayNameForName(const QString &name) const; }; diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index 54dd056d867..2d7f82de09d 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -292,7 +292,7 @@ ProjectExplorer::BuildStep *GenericMakeStepFactory::clone(ProjectExplorer::Build return new GenericMakeStep(static_cast(bs), bc); } -QStringList GenericMakeStepFactory::canCreateForProject(ProjectExplorer::Project * /* pro */) const +QStringList GenericMakeStepFactory::canCreateForProject(ProjectExplorer::BuildConfiguration * /* pro */) const { return QStringList(); } diff --git a/src/plugins/genericprojectmanager/genericmakestep.h b/src/plugins/genericprojectmanager/genericmakestep.h index c8c059a3501..d5eb0ccc979 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.h +++ b/src/plugins/genericprojectmanager/genericmakestep.h @@ -107,7 +107,7 @@ class GenericMakeStepFactory : public ProjectExplorer::IBuildStepFactory const QString &name) const; virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; - virtual QStringList canCreateForProject(ProjectExplorer::Project *pro) const; + virtual QStringList canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const; virtual QString displayNameForName(const QString &name) const; }; diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index c210f6af019..78c715495db 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -37,8 +37,6 @@ #include namespace ProjectExplorer { -// TODO remove this -class Project; class BuildConfiguration; /* @@ -135,7 +133,7 @@ public: virtual BuildStep *create(BuildConfiguration *bc, const QString &name) const = 0; /// Called by the add BuildStep action to check which BuildSteps could be added /// to the project by this factory, should return a list of names - virtual QStringList canCreateForProject(Project *pro) const = 0; + virtual QStringList canCreateForProject(BuildConfiguration *bc) const = 0; /// Called to convert an internal name to a displayName /// Called to clone a BuildStep diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index fc1416000e6..c95b9b32d2a 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -47,7 +47,6 @@ using namespace ProjectExplorer::Internal; BuildStepsPage::BuildStepsPage(Project *project, bool clean) : BuildConfigWidget(), - m_pro(project), m_clean(clean) { m_vbox = new QVBoxLayout(this); @@ -144,7 +143,7 @@ void BuildStepsPage::updateAddBuildStepMenu() //Build up a list of possible steps and save map the display names to the (internal) name and factories. QList factories = ExtensionSystem::PluginManager::instance()->getObjects(); foreach (IBuildStepFactory * factory, factories) { - QStringList names = factory->canCreateForProject(m_pro); + QStringList names = factory->canCreateForProject(m_configuration); foreach (const QString &name, names) { map.insert(factory->displayNameForName(name), QPair(name, factory)); } diff --git a/src/plugins/projectexplorer/buildstepspage.h b/src/plugins/projectexplorer/buildstepspage.h index 92e8180218b..1e716d4d215 100644 --- a/src/plugins/projectexplorer/buildstepspage.h +++ b/src/plugins/projectexplorer/buildstepspage.h @@ -87,7 +87,6 @@ private: void updateBuildStepButtonsState(); void addBuildStepWidget(int pos, BuildStep *step); - Project *m_pro; BuildConfiguration *m_configuration; QHash > m_addBuildStepHash; bool m_clean; diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index e442fc14d6c..fac4255c4c4 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -212,9 +212,9 @@ BuildStep *ProcessStepFactory::clone(BuildStep *bs, BuildConfiguration *bc) cons return new ProcessStep(static_cast(bs), bc); } -QStringList ProcessStepFactory::canCreateForProject(Project *pro) const +QStringList ProcessStepFactory::canCreateForProject(BuildConfiguration *bc) const { - Q_UNUSED(pro) + Q_UNUSED(bc) return QStringList()<<"projectexplorer.processstep"; } QString ProcessStepFactory::displayNameForName(const QString &name) const diff --git a/src/plugins/projectexplorer/processstep.h b/src/plugins/projectexplorer/processstep.h index e7e74d0267b..2dc0398ad78 100644 --- a/src/plugins/projectexplorer/processstep.h +++ b/src/plugins/projectexplorer/processstep.h @@ -47,7 +47,7 @@ public: virtual bool canCreate(const QString &name) const; virtual BuildStep *create(BuildConfiguration *bc, const QString &name) const; virtual BuildStep *clone(BuildStep *bs, BuildConfiguration *bc) const; - virtual QStringList canCreateForProject(Project *pro) const; + virtual QStringList canCreateForProject(BuildConfiguration *pro) const; virtual QString displayNameForName(const QString &name) const; }; diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 4f2aba4aa15..77280b2498b 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -335,9 +335,9 @@ ProjectExplorer::BuildStep *MakeStepFactory::clone(ProjectExplorer::BuildStep *b return new MakeStep(static_cast(bs), bc); } -QStringList MakeStepFactory::canCreateForProject(ProjectExplorer::Project *pro) const +QStringList MakeStepFactory::canCreateForProject(ProjectExplorer::BuildConfiguration *pro) const { - if (qobject_cast(pro)) + if (qobject_cast(pro)) return QStringList() << Constants::MAKESTEP; else return QStringList(); diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h index 471316897de..8040d98c2cb 100644 --- a/src/plugins/qt4projectmanager/makestep.h +++ b/src/plugins/qt4projectmanager/makestep.h @@ -54,7 +54,7 @@ public: bool canCreate(const QString & name) const; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString & name) const; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; - QStringList canCreateForProject(ProjectExplorer::Project *pro) const; + QStringList canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const; QString displayNameForName(const QString &name) const; }; } diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 9a8181e9641..c5c914c031e 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -377,9 +377,11 @@ ProjectExplorer::BuildStep *QMakeStepFactory::clone(ProjectExplorer::BuildStep * return new QMakeStep(static_cast(bs), bc); } -QStringList QMakeStepFactory::canCreateForProject(ProjectExplorer::Project *) const +QStringList QMakeStepFactory::canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const { - return QStringList() << Constants::QMAKESTEP; + if (qobject_cast(bc)) + return QStringList() << Constants::QMAKESTEP; + return QStringList(); } QString QMakeStepFactory::displayNameForName(const QString &name) const diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index 2e08953e246..fd249756f3f 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -54,7 +54,7 @@ public: bool canCreate(const QString & name) const; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString & name) const; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; - QStringList canCreateForProject(ProjectExplorer::Project *pro) const; + QStringList canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const; QString displayNameForName(const QString &name) const; }; } From 0e4e35f8765b743a597692c3e27881f2a586d521 Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 25 Nov 2009 20:00:28 +0100 Subject: [PATCH 11/62] Rename method to the more correct canCreateForBuildConfiguration --- src/plugins/cmakeprojectmanager/makestep.cpp | 2 +- src/plugins/cmakeprojectmanager/makestep.h | 2 +- src/plugins/genericprojectmanager/genericmakestep.cpp | 2 +- src/plugins/genericprojectmanager/genericmakestep.h | 2 +- src/plugins/projectexplorer/buildstep.h | 2 +- src/plugins/projectexplorer/buildstepspage.cpp | 2 +- src/plugins/projectexplorer/processstep.cpp | 2 +- src/plugins/projectexplorer/processstep.h | 2 +- src/plugins/qt4projectmanager/makestep.cpp | 2 +- src/plugins/qt4projectmanager/makestep.h | 2 +- src/plugins/qt4projectmanager/qmakestep.cpp | 2 +- src/plugins/qt4projectmanager/qmakestep.h | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 6cbb7bc72ef..7b876d7d7c8 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -284,7 +284,7 @@ BuildStep *MakeStepFactory::clone(BuildStep *bs, BuildConfiguration *bc) const return new MakeStep(static_cast(bs), bc); } -QStringList MakeStepFactory::canCreateForProject(BuildConfiguration * /* pro */) const +QStringList MakeStepFactory::canCreateForBuildConfiguration(BuildConfiguration * /* pro */) const { return QStringList(); } diff --git a/src/plugins/cmakeprojectmanager/makestep.h b/src/plugins/cmakeprojectmanager/makestep.h index 6bb2a9b5569..1fa3ff36a99 100644 --- a/src/plugins/cmakeprojectmanager/makestep.h +++ b/src/plugins/cmakeprojectmanager/makestep.h @@ -107,7 +107,7 @@ class MakeStepFactory : public ProjectExplorer::IBuildStepFactory virtual bool canCreate(const QString &name) const; virtual ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString &name) const; virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; - virtual QStringList canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const; + virtual QStringList canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) const; virtual QString displayNameForName(const QString &name) const; }; diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index 2d7f82de09d..bb9fdc1f814 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -292,7 +292,7 @@ ProjectExplorer::BuildStep *GenericMakeStepFactory::clone(ProjectExplorer::Build return new GenericMakeStep(static_cast(bs), bc); } -QStringList GenericMakeStepFactory::canCreateForProject(ProjectExplorer::BuildConfiguration * /* pro */) const +QStringList GenericMakeStepFactory::canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration * /* pro */) const { return QStringList(); } diff --git a/src/plugins/genericprojectmanager/genericmakestep.h b/src/plugins/genericprojectmanager/genericmakestep.h index d5eb0ccc979..98b2a8018e7 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.h +++ b/src/plugins/genericprojectmanager/genericmakestep.h @@ -107,7 +107,7 @@ class GenericMakeStepFactory : public ProjectExplorer::IBuildStepFactory const QString &name) const; virtual ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; - virtual QStringList canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const; + virtual QStringList canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) const; virtual QString displayNameForName(const QString &name) const; }; diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index 78c715495db..09fcbf55441 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -133,7 +133,7 @@ public: virtual BuildStep *create(BuildConfiguration *bc, const QString &name) const = 0; /// Called by the add BuildStep action to check which BuildSteps could be added /// to the project by this factory, should return a list of names - virtual QStringList canCreateForProject(BuildConfiguration *bc) const = 0; + virtual QStringList canCreateForBuildConfiguration(BuildConfiguration *bc) const = 0; /// Called to convert an internal name to a displayName /// Called to clone a BuildStep diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index c95b9b32d2a..2804ec414f9 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -143,7 +143,7 @@ void BuildStepsPage::updateAddBuildStepMenu() //Build up a list of possible steps and save map the display names to the (internal) name and factories. QList factories = ExtensionSystem::PluginManager::instance()->getObjects(); foreach (IBuildStepFactory * factory, factories) { - QStringList names = factory->canCreateForProject(m_configuration); + QStringList names = factory->canCreateForBuildConfiguration(m_configuration); foreach (const QString &name, names) { map.insert(factory->displayNameForName(name), QPair(name, factory)); } diff --git a/src/plugins/projectexplorer/processstep.cpp b/src/plugins/projectexplorer/processstep.cpp index fac4255c4c4..d579ebe9511 100644 --- a/src/plugins/projectexplorer/processstep.cpp +++ b/src/plugins/projectexplorer/processstep.cpp @@ -212,7 +212,7 @@ BuildStep *ProcessStepFactory::clone(BuildStep *bs, BuildConfiguration *bc) cons return new ProcessStep(static_cast(bs), bc); } -QStringList ProcessStepFactory::canCreateForProject(BuildConfiguration *bc) const +QStringList ProcessStepFactory::canCreateForBuildConfiguration(BuildConfiguration *bc) const { Q_UNUSED(bc) return QStringList()<<"projectexplorer.processstep"; diff --git a/src/plugins/projectexplorer/processstep.h b/src/plugins/projectexplorer/processstep.h index 2dc0398ad78..801ba258945 100644 --- a/src/plugins/projectexplorer/processstep.h +++ b/src/plugins/projectexplorer/processstep.h @@ -47,7 +47,7 @@ public: virtual bool canCreate(const QString &name) const; virtual BuildStep *create(BuildConfiguration *bc, const QString &name) const; virtual BuildStep *clone(BuildStep *bs, BuildConfiguration *bc) const; - virtual QStringList canCreateForProject(BuildConfiguration *pro) const; + virtual QStringList canCreateForBuildConfiguration(BuildConfiguration *pro) const; virtual QString displayNameForName(const QString &name) const; }; diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 77280b2498b..0079f4fcb73 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -335,7 +335,7 @@ ProjectExplorer::BuildStep *MakeStepFactory::clone(ProjectExplorer::BuildStep *b return new MakeStep(static_cast(bs), bc); } -QStringList MakeStepFactory::canCreateForProject(ProjectExplorer::BuildConfiguration *pro) const +QStringList MakeStepFactory::canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *pro) const { if (qobject_cast(pro)) return QStringList() << Constants::MAKESTEP; diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h index 8040d98c2cb..5c674cf7dd7 100644 --- a/src/plugins/qt4projectmanager/makestep.h +++ b/src/plugins/qt4projectmanager/makestep.h @@ -54,7 +54,7 @@ public: bool canCreate(const QString & name) const; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString & name) const; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; - QStringList canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const; + QStringList canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) const; QString displayNameForName(const QString &name) const; }; } diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index c5c914c031e..11672a43f9d 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -377,7 +377,7 @@ ProjectExplorer::BuildStep *QMakeStepFactory::clone(ProjectExplorer::BuildStep * return new QMakeStep(static_cast(bs), bc); } -QStringList QMakeStepFactory::canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const +QStringList QMakeStepFactory::canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) const { if (qobject_cast(bc)) return QStringList() << Constants::QMAKESTEP; diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index fd249756f3f..867c938c0dc 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -54,7 +54,7 @@ public: bool canCreate(const QString & name) const; ProjectExplorer::BuildStep *create(ProjectExplorer::BuildConfiguration *bc, const QString & name) const; ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStep *bs, ProjectExplorer::BuildConfiguration *bc) const; - QStringList canCreateForProject(ProjectExplorer::BuildConfiguration *bc) const; + QStringList canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) const; QString displayNameForName(const QString &name) const; }; } From 88e432cd6c3a31a4244190869af6d7387330f55c Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 25 Nov 2009 20:01:50 +0100 Subject: [PATCH 12/62] Update documentation --- src/plugins/projectexplorer/buildconfiguration.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 477087cdb57..09950668b2d 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -109,7 +109,8 @@ public: virtual QString displayNameForType(const QString &type) const = 0; // creates build configuration(s) for given type and adds them to project - // returns true if build configuration(s) actually have been added + // if successfull returns the BuildConfiguration that should be shown in the + // project mode for editing virtual BuildConfiguration *create(const QString &type) const = 0; // clones a given BuildConfiguration and adds it to the project @@ -118,10 +119,8 @@ public: // restores a BuildConfiguration with the name and adds it to the project virtual BuildConfiguration *restore() const = 0; - // TODO display name unique, in different ways - signals: void availableCreationTypesChanged(); }; From 4c28a2ea0c7381e16cc27139eae3d0fc29a407cd Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 25 Nov 2009 20:02:06 +0100 Subject: [PATCH 13/62] Fix connects, the signal moved --- src/plugins/qt4projectmanager/makestep.cpp | 2 +- src/plugins/qt4projectmanager/qmakestep.cpp | 2 +- src/plugins/qt4projectmanager/qmakestep.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 0079f4fcb73..7c9026a6f11 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -214,7 +214,7 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) connect(makeStep, SIGNAL(changed()), this, SLOT(update())); - connect(makeStep->buildConfiguration()->project(), SIGNAL(buildDirectoryChanged()), + connect(makeStep->buildConfiguration(), SIGNAL(buildDirectoryChanged()), this, SLOT(updateDetails())); connect(ProjectExplorer::ProjectExplorerPlugin::instance(), SIGNAL(settingsChanged()), diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 11672a43f9d..7f03c24ab4e 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -246,7 +246,7 @@ QMakeStepConfigWidget::QMakeStepConfigWidget(QMakeStep *step) connect(m_ui.buildConfigurationComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(buildConfigurationChanged())); connect(step, SIGNAL(changed()), this, SLOT(update())); - connect(step->buildConfiguration()->project(), SIGNAL(qtVersionChanged(ProjectExplorer::BuildConfiguration *)), + connect(step->buildConfiguration(), SIGNAL(qtVersionChanged(ProjectExplorer::BuildConfiguration *)), this, SLOT(qtVersionChanged(ProjectExplorer::BuildConfiguration *))); } diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index 867c938c0dc..ef0176c47c5 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -43,8 +43,8 @@ class Project; } namespace Qt4ProjectManager { - namespace Internal { + class QMakeStepFactory : public ProjectExplorer::IBuildStepFactory { Q_OBJECT From d9a1769542638ef4f96c3ccef8d0efea5424c47f Mon Sep 17 00:00:00 2001 From: dt Date: Wed, 25 Nov 2009 20:08:39 +0100 Subject: [PATCH 14/62] Remove unneeded code --- src/plugins/qt4projectmanager/qmakestep.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 7f03c24ab4e..e08bef33ee0 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -257,10 +257,8 @@ QString QMakeStepConfigWidget::summaryText() const void QMakeStepConfigWidget::qtVersionChanged(ProjectExplorer::BuildConfiguration *bc) { - if (bc == m_step->buildConfiguration()) { - updateTitleLabel(); - updateEffectiveQMakeCall(); - } + updateTitleLabel(); + updateEffectiveQMakeCall(); } void QMakeStepConfigWidget::updateTitleLabel() From 801e9948f5ffcec068bbc378e2fbbb248d671132 Mon Sep 17 00:00:00 2001 From: dt Date: Thu, 26 Nov 2009 14:43:27 +0100 Subject: [PATCH 15/62] Hide static cast in accessor methods --- .../cmakebuildconfiguration.cpp | 7 +++++- .../cmakebuildconfiguration.h | 2 ++ .../cmakeprojectmanager/cmakeproject.cpp | 19 ++++++++++------ .../cmakeprojectmanager/cmakeproject.h | 2 ++ .../cmakerunconfiguration.cpp | 8 ++++++- .../cmakerunconfiguration.h | 2 ++ src/plugins/cmakeprojectmanager/makestep.cpp | 11 +++++++--- src/plugins/cmakeprojectmanager/makestep.h | 5 ++++- .../genericbuildconfiguration.cpp | 5 +++++ .../genericbuildconfiguration.h | 2 ++ .../genericprojectmanager/genericmakestep.cpp | 13 +++++++---- .../genericprojectmanager/genericmakestep.h | 4 +++- .../qt4projectmanager/externaleditors.cpp | 2 +- src/plugins/qt4projectmanager/makestep.cpp | 13 +++++++---- src/plugins/qt4projectmanager/makestep.h | 8 +++++-- src/plugins/qt4projectmanager/qmakestep.cpp | 22 +++++++++++-------- src/plugins/qt4projectmanager/qmakestep.h | 8 +++++-- .../qt-maemo/maemorunconfiguration.cpp | 10 ++++----- .../qt-s60/s60devicerunconfiguration.cpp | 16 +++++++++----- .../qt-s60/s60devicerunconfiguration.h | 4 ++++ .../qt-s60/s60emulatorrunconfiguration.cpp | 13 +++++++---- .../qt-s60/s60emulatorrunconfiguration.h | 4 ++++ .../qt4buildconfiguration.cpp | 9 ++++++-- .../qt4projectmanager/qt4buildconfiguration.h | 2 ++ src/plugins/qt4projectmanager/qt4nodes.cpp | 2 +- src/plugins/qt4projectmanager/qt4project.cpp | 15 ++++++++----- src/plugins/qt4projectmanager/qt4project.h | 2 ++ .../qt4projectconfigwidget.cpp | 8 +++---- .../qt4projectmanager/qt4runconfiguration.cpp | 17 ++++++++------ .../qt4projectmanager/qt4runconfiguration.h | 2 ++ .../qtuicodemodelsupport.cpp | 2 +- 31 files changed, 169 insertions(+), 70 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index f90146b0d7b..8af44707c45 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -51,6 +51,11 @@ CMakeBuildConfiguration::~CMakeBuildConfiguration() delete m_toolChain; } +CMakeProject *CMakeBuildConfiguration::cmakeProject() const +{ + return static_cast(project()); +} + ProjectExplorer::Environment CMakeBuildConfiguration::baseEnvironment() const { ProjectExplorer::Environment env = useSystemEnvironment() ? @@ -99,7 +104,7 @@ QString CMakeBuildConfiguration::buildDirectory() const { QString buildDirectory = value("buildDirectory").toString(); if (buildDirectory.isEmpty()) - buildDirectory = static_cast(project())->sourceDirectory() + "/qtcreator-build"; + buildDirectory = cmakeProject()->sourceDirectory() + "/qtcreator-build"; return buildDirectory; } diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h index b662b81a945..6078ac577d3 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h @@ -46,6 +46,8 @@ public: CMakeBuildConfiguration(BuildConfiguration *source); ~CMakeBuildConfiguration(); + CMakeProject *cmakeProject() const; + ProjectExplorer::Environment environment() const; ProjectExplorer::Environment baseEnvironment() const; void setUserEnvironmentChanges(const QList &diff); diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index a40c0625624..45b78955d36 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -166,6 +166,11 @@ CMakeProject::~CMakeProject() delete m_rootNode; } +CMakeBuildConfiguration *CMakeProject::activeCMakeBuildConfiguration() const +{ + return static_cast(activeBuildConfiguration()); +} + IBuildConfigurationFactory *CMakeProject::buildConfigurationFactory() const { return m_buildConfigurationFactory; @@ -228,8 +233,8 @@ QString CMakeProject::sourceDirectory() const bool CMakeProject::parseCMakeLists() { // Find cbp file - CMakeBuildConfiguration *activeCmakeBuildConfiguration = static_cast(activeBuildConfiguration()); - QString cbpFile = CMakeManager::findCbpFile(activeCmakeBuildConfiguration->buildDirectory()); + CMakeBuildConfiguration *activeBC = activeCMakeBuildConfiguration(); + QString cbpFile = CMakeManager::findCbpFile(activeBC->buildDirectory()); // setFolderName m_rootNode->setFolderName(QFileInfo(cbpFile).completeBaseName()); @@ -238,7 +243,7 @@ bool CMakeProject::parseCMakeLists() //qDebug()<<"Parsing file "<updateToolChain(cbpparser.compilerName()); + activeBC->updateToolChain(cbpparser.compilerName()); m_projectName = cbpparser.projectName(); m_rootNode->setFolderName(cbpparser.projectName()); @@ -291,7 +296,7 @@ bool CMakeProject::parseCMakeLists() QStringList allIncludePaths; QStringList allFrameworkPaths; - QList allHeaderPaths = activeCmakeBuildConfiguration->toolChain()->systemHeaderPaths(); + QList allHeaderPaths = activeBC->toolChain()->systemHeaderPaths(); foreach (ProjectExplorer::HeaderPath headerPath, allHeaderPaths) { if (headerPath.kind() == ProjectExplorer::HeaderPath::FrameworkHeaderPath) allFrameworkPaths.append(headerPath.path()); @@ -307,12 +312,12 @@ bool CMakeProject::parseCMakeLists() CppTools::CppModelManagerInterface::ProjectInfo pinfo = modelmanager->projectInfo(this); if (pinfo.includePaths != allIncludePaths || pinfo.sourceFiles != m_files - || pinfo.defines != activeCmakeBuildConfiguration->toolChain()->predefinedMacros() + || pinfo.defines != activeBC->toolChain()->predefinedMacros() || pinfo.frameworkPaths != allFrameworkPaths) { pinfo.includePaths = allIncludePaths; // TODO we only want C++ files, not all other stuff that might be in the project pinfo.sourceFiles = m_files; - pinfo.defines = activeCmakeBuildConfiguration->toolChain()->predefinedMacros(); // TODO this is to simplistic + pinfo.defines = activeBC->toolChain()->predefinedMacros(); // TODO this is to simplistic pinfo.frameworkPaths = allFrameworkPaths; modelmanager->updateProjectInfo(pinfo); modelmanager->updateSourceFiles(pinfo.sourceFiles); @@ -370,7 +375,7 @@ bool CMakeProject::parseCMakeLists() } else { // TODO report error qDebug()<<"Parsing failed"; - activeCmakeBuildConfiguration->updateToolChain(QString::null); + activeBC->updateToolChain(QString::null); return false; } return true; diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index ffe0c25e7b7..1693faca7a8 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -91,6 +91,8 @@ public: CMakeProject(CMakeManager *manager, const QString &filename); ~CMakeProject(); + CMakeBuildConfiguration *activeCMakeBuildConfiguration() const; + virtual QString name() const; virtual Core::IFile *file() const; virtual ProjectExplorer::IBuildConfigurationFactory *buildConfigurationFactory() const; diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index 89f97ee555e..a6ac74ec982 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -66,6 +66,12 @@ CMakeRunConfiguration::CMakeRunConfiguration(CMakeProject *pro, const QString &t CMakeRunConfiguration::~CMakeRunConfiguration() { + +} + +CMakeProject *CMakeRunConfiguration::cmakeProject() const +{ + return static_cast(project()); } QString CMakeRunConfiguration::type() const @@ -228,7 +234,7 @@ void CMakeRunConfiguration::setUserEnvironmentChanges(const QList(project()->activeBuildConfiguration()); + CMakeBuildConfiguration *bc = cmakeProject()->activeCMakeBuildConfiguration(); return bc->toolChainType(); } diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h index 385232d3f40..189b5830b4c 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h @@ -53,6 +53,8 @@ class CMakeRunConfiguration : public ProjectExplorer::LocalApplicationRunConfigu public: CMakeRunConfiguration(CMakeProject *pro, const QString &target, const QString &workingDirectory, const QString &title); virtual ~CMakeRunConfiguration(); + CMakeProject *cmakeProject() const; + virtual QString type() const; virtual QString executable() const; virtual RunMode runMode() const; diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 7b876d7d7c8..68e97354b3a 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -64,6 +64,11 @@ MakeStep::~MakeStep() } +CMakeBuildConfiguration *MakeStep::cmakeBuildConfiguration() const +{ + return static_cast(buildConfiguration()); +} + void MakeStep::setClean(bool clean) { m_clean = clean; @@ -96,7 +101,7 @@ void MakeStep::storeIntoLocalMap(QMap &map) bool MakeStep::init() { - CMakeBuildConfiguration *bc = static_cast(buildConfiguration()); + CMakeBuildConfiguration *bc = cmakeBuildConfiguration(); // TODO, we should probably have a member cmakeBuildConfiguration(); setBuildParser(bc->buildParser()); @@ -204,7 +209,7 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) // TODO update this list also on rescans of the CMakeLists.txt // TODO shouldn't be accessing project - CMakeProject *pro = static_cast(m_makeStep->buildConfiguration()->project()); + CMakeProject *pro = m_makeStep->cmakeBuildConfiguration()->cmakeProject(); foreach(const QString& target, pro->targets()) { QListWidgetItem *item = new QListWidgetItem(target, m_targetsList); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); @@ -254,7 +259,7 @@ void MakeStepConfigWidget::updateDetails() QStringList arguments = m_makeStep->m_buildTargets; arguments << m_makeStep->additionalArguments(); - CMakeBuildConfiguration *bc = static_cast(m_makeStep->buildConfiguration()); + CMakeBuildConfiguration *bc = m_makeStep->cmakeBuildConfiguration(); m_summaryText = tr("Make: %1 %2").arg(bc->toolChain()->makeCommand(), arguments.join(" ")); emit updateSummary(); } diff --git a/src/plugins/cmakeprojectmanager/makestep.h b/src/plugins/cmakeprojectmanager/makestep.h index 1fa3ff36a99..05b7e8ea9a0 100644 --- a/src/plugins/cmakeprojectmanager/makestep.h +++ b/src/plugins/cmakeprojectmanager/makestep.h @@ -41,7 +41,7 @@ QT_END_NAMESPACE namespace CMakeProjectManager { namespace Internal { -class CMakeProject; +class CMakeBuildConfiguration; class MakeStep : public ProjectExplorer::AbstractMakeStep { @@ -52,6 +52,9 @@ public: MakeStep(ProjectExplorer::BuildConfiguration *bc); MakeStep(MakeStep *bs, ProjectExplorer::BuildConfiguration *bc); ~MakeStep(); + + CMakeBuildConfiguration *cmakeBuildConfiguration() const; + virtual bool init(); virtual void run(QFutureInterface &fi); diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp index 5e6e1553ea6..3c1b38ec521 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.cpp @@ -64,3 +64,8 @@ QString GenericBuildConfiguration::buildDirectory() const return buildDirectory; } +GenericProject *GenericBuildConfiguration::genericProject() const +{ + return static_cast(project()); +} + diff --git a/src/plugins/genericprojectmanager/genericbuildconfiguration.h b/src/plugins/genericprojectmanager/genericbuildconfiguration.h index 82ad2746a59..b42d7ae062b 100644 --- a/src/plugins/genericprojectmanager/genericbuildconfiguration.h +++ b/src/plugins/genericprojectmanager/genericbuildconfiguration.h @@ -45,6 +45,8 @@ public: GenericBuildConfiguration(GenericProject *pro); GenericBuildConfiguration(GenericBuildConfiguration *source); + GenericProject *genericProject() const; + virtual ProjectExplorer::Environment environment() const; virtual QString buildDirectory() const; }; diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index bb9fdc1f814..b57a23e4c61 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -65,11 +65,16 @@ GenericMakeStep::~GenericMakeStep() { } +GenericBuildConfiguration *GenericMakeStep::genericBuildConfiguration() const +{ + return static_cast(buildConfiguration()); +} + bool GenericMakeStep::init() { - GenericBuildConfiguration *bc = static_cast(buildConfiguration()); + GenericBuildConfiguration *bc = genericBuildConfiguration(); //TODO - const QString buildParser = static_cast(bc->project())->buildParser(bc); + const QString buildParser = genericBuildConfiguration()->genericProject()->buildParser(bc); setBuildParser(buildParser); setEnabled(true); @@ -121,7 +126,7 @@ QString GenericMakeStep::makeCommand() const QString command = m_makeCommand; if (command.isEmpty()) { // TODO - GenericProject *pro = static_cast(buildConfiguration()->project()); + GenericProject *pro = genericBuildConfiguration()->genericProject(); if (ProjectExplorer::ToolChain *toolChain = pro->toolChain()) command = toolChain->makeCommand(); else @@ -183,7 +188,7 @@ GenericMakeStepConfigWidget::GenericMakeStepConfigWidget(GenericMakeStep *makeSt // TODO update this list also on rescans of the GenericLists.txt //TODO - GenericProject *pro = static_cast(m_makeStep->buildConfiguration()->project()); + GenericProject *pro = m_makeStep->genericBuildConfiguration()->genericProject(); foreach (const QString &target, pro->targets()) { QListWidgetItem *item = new QListWidgetItem(target, m_ui->targetsList); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); diff --git a/src/plugins/genericprojectmanager/genericmakestep.h b/src/plugins/genericprojectmanager/genericmakestep.h index 98b2a8018e7..57a8ee4a11a 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.h +++ b/src/plugins/genericprojectmanager/genericmakestep.h @@ -43,7 +43,7 @@ QT_END_NAMESPACE namespace GenericProjectManager { namespace Internal { -class GenericProject; +class GenericBuildConfiguration; class GenericMakeStepConfigWidget; struct GenericMakeStepSettings @@ -59,6 +59,8 @@ public: GenericMakeStep(ProjectExplorer::BuildConfiguration *bc); GenericMakeStep(GenericMakeStep *bs, ProjectExplorer::BuildConfiguration *bc); ~GenericMakeStep(); + GenericBuildConfiguration *genericBuildConfiguration() const; + virtual bool init(); virtual void run(QFutureInterface &fi); diff --git a/src/plugins/qt4projectmanager/externaleditors.cpp b/src/plugins/qt4projectmanager/externaleditors.cpp index f1b0b68f3de..b165315f5df 100644 --- a/src/plugins/qt4projectmanager/externaleditors.cpp +++ b/src/plugins/qt4projectmanager/externaleditors.cpp @@ -100,7 +100,7 @@ bool ExternalQtEditor::getEditorLaunchData(const QString &fileName, const Qt4Project *project = qt4ProjectFor(fileName); // Get the binary either from the current Qt version of the project or Path if (project) { - Qt4BuildConfiguration *qt4bc = static_cast(project->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = project->activeQt4BuildConfiguration(); const QtVersion *qtVersion= qt4bc->qtVersion(); data->binary = (qtVersion->*commandAccessor)(); data->workingDirectory = QFileInfo(project->file()->fileName()).absolutePath(); diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 7c9026a6f11..f3442a1a024 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -65,6 +65,11 @@ MakeStep::~MakeStep() } +Qt4BuildConfiguration *MakeStep::qt4BuildConfiguration() const +{ + return static_cast(buildConfiguration()); +} + void MakeStep::setClean(bool clean) { m_clean = clean; @@ -97,7 +102,7 @@ void MakeStep::storeIntoLocalMap(QMap &map) bool MakeStep::init() { - Qt4BuildConfiguration *bc = static_cast(buildConfiguration()); + Qt4BuildConfiguration *bc = qt4BuildConfiguration(); Environment environment = bc->environment(); setEnvironment(environment); @@ -164,7 +169,7 @@ bool MakeStep::init() void MakeStep::run(QFutureInterface & fi) { - if (static_cast(buildConfiguration()->project())->rootProjectNode()->projectType() == ScriptTemplate) { + if (qt4BuildConfiguration()->qt4Project()->rootProjectNode()->projectType() == ScriptTemplate) { fi.reportResult(true); return; } @@ -225,13 +230,13 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) void MakeStepConfigWidget::updateMakeOverrideLabel() { - Qt4BuildConfiguration *qt4bc = static_cast(m_makeStep->buildConfiguration()); + Qt4BuildConfiguration *qt4bc = m_makeStep->qt4BuildConfiguration(); m_ui.makeLabel->setText(tr("Override %1:").arg(qt4bc->makeCommand())); } void MakeStepConfigWidget::updateDetails() { - Qt4BuildConfiguration *bc = static_cast(m_makeStep->buildConfiguration()); + Qt4BuildConfiguration *bc = m_makeStep->qt4BuildConfiguration(); QString workingDirectory = bc->buildDirectory(); QString makeCmd = bc->makeCommand(); diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h index 5c674cf7dd7..8e670fa2f19 100644 --- a/src/plugins/qt4projectmanager/makestep.h +++ b/src/plugins/qt4projectmanager/makestep.h @@ -43,8 +43,9 @@ class Project; } namespace Qt4ProjectManager { - namespace Internal { +class Qt4BuildConfiguration; + class MakeStepFactory : public ProjectExplorer::IBuildStepFactory { Q_OBJECT @@ -57,7 +58,7 @@ public: QStringList canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) const; QString displayNameForName(const QString &name) const; }; -} +} //namespace Internal class Qt4Project; @@ -70,6 +71,9 @@ public: MakeStep(ProjectExplorer::BuildConfiguration *bc); MakeStep(MakeStep *bs, ProjectExplorer::BuildConfiguration *bc); ~MakeStep(); + + Internal::Qt4BuildConfiguration *qt4BuildConfiguration() const; + virtual bool init(); virtual void run(QFutureInterface &); virtual QString name(); diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index e08bef33ee0..5a9441b9db2 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -67,10 +67,15 @@ QMakeStep::~QMakeStep() { } +Qt4BuildConfiguration *QMakeStep::qt4BuildConfiguration() const +{ + return static_cast(buildConfiguration()); +} + QStringList QMakeStep::arguments() { QStringList additonalArguments = m_qmakeArgs; - Qt4BuildConfiguration *bc = static_cast(buildConfiguration()); + Qt4BuildConfiguration *bc = qt4BuildConfiguration(); QStringList arguments; arguments << buildConfiguration()->project()->file()->fileName(); arguments << "-r"; @@ -112,7 +117,7 @@ QStringList QMakeStep::arguments() bool QMakeStep::init() { // TODO - Qt4BuildConfiguration *qt4bc = static_cast(buildConfiguration()); + Qt4BuildConfiguration *qt4bc = qt4BuildConfiguration(); const QtVersion *qtVersion = qt4bc->qtVersion(); if (!qtVersion->isValid()) { @@ -155,8 +160,7 @@ bool QMakeStep::init() void QMakeStep::run(QFutureInterface &fi) { - //TODO - Qt4Project *pro = static_cast(buildConfiguration()->project()); + Qt4Project *pro = qt4BuildConfiguration()->qt4Project(); if (pro->rootProjectNode()->projectType() == ScriptTemplate) { fi.reportResult(true); return; @@ -263,7 +267,7 @@ void QMakeStepConfigWidget::qtVersionChanged(ProjectExplorer::BuildConfiguration void QMakeStepConfigWidget::updateTitleLabel() { - Qt4BuildConfiguration *qt4bc = static_cast(m_step->buildConfiguration()); + Qt4BuildConfiguration *qt4bc = m_step->qt4BuildConfiguration(); const QtVersion *qtVersion = qt4bc->qtVersion(); if (!qtVersion) { m_summaryText = tr("QMake: No Qt version set. QMake can not be run."); @@ -290,7 +294,7 @@ void QMakeStepConfigWidget::qmakeArgumentsLineEditTextEdited() m_step->setQMakeArguments( ProjectExplorer::Environment::parseCombinedArgString(m_ui.qmakeAdditonalArgumentsLineEdit->text())); - static_cast(m_step->buildConfiguration()->project())->invalidateCachedTargetInformation(); + m_step->qt4BuildConfiguration()->qt4Project()->invalidateCachedTargetInformation(); updateTitleLabel(); updateEffectiveQMakeCall(); } @@ -306,12 +310,12 @@ void QMakeStepConfigWidget::buildConfigurationChanged() buildConfiguration = buildConfiguration & ~QtVersion::DebugBuild; } bc->setValue("buildConfiguration", int(buildConfiguration)); - static_cast(m_step->buildConfiguration()->project())->invalidateCachedTargetInformation(); + m_step->qt4BuildConfiguration()->qt4Project()->invalidateCachedTargetInformation(); updateTitleLabel(); updateEffectiveQMakeCall(); // TODO if exact parsing is the default, we need to update the code model // and all the Qt4ProFileNodes - //static_cast(m_step->project())->update(); + // m_step->qt4Project()->update(); } QString QMakeStepConfigWidget::displayName() const @@ -337,7 +341,7 @@ void QMakeStepConfigWidget::init() void QMakeStepConfigWidget::updateEffectiveQMakeCall() { - Qt4BuildConfiguration *qt4bc = static_cast(m_step->buildConfiguration()); + Qt4BuildConfiguration *qt4bc = m_step->qt4BuildConfiguration(); const QtVersion *qtVersion = qt4bc->qtVersion(); if (qtVersion) { QString program = QFileInfo(qtVersion->qmakeCommand()).fileName(); diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index ef0176c47c5..d1b0ac6f696 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -43,7 +43,10 @@ class Project; } namespace Qt4ProjectManager { +class Qt4Project; + namespace Internal { +class Qt4BuildConfiguration; class QMakeStepFactory : public ProjectExplorer::IBuildStepFactory { @@ -57,9 +60,9 @@ public: QStringList canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) const; QString displayNameForName(const QString &name) const; }; -} -class Qt4Project; +} // namespace Internal + class QMakeStep : public ProjectExplorer::AbstractMakeStep { @@ -68,6 +71,7 @@ public: QMakeStep(ProjectExplorer::BuildConfiguration *bc); QMakeStep(QMakeStep *bs, ProjectExplorer::BuildConfiguration *bc); ~QMakeStep(); + Internal::Qt4BuildConfiguration *qt4BuildConfiguration() const; virtual bool init(); virtual void run(QFutureInterface &); virtual QString name(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 67cba594f55..3e329ef6589 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -322,7 +322,7 @@ Qt4Project *MaemoRunConfiguration::project() const bool MaemoRunConfiguration::isEnabled() const { - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = project()->activeQt4BuildConfiguration(); QTC_ASSERT(qt4bc, return false); ToolChain::ToolChainType type = qt4bc->toolChainType(); return type == ToolChain::GCC_MAEMO; @@ -411,7 +411,7 @@ void MaemoRunConfiguration::wasDeployed() bool MaemoRunConfiguration::hasDebuggingHelpers() const { - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = project()->activeQt4BuildConfiguration(); return qt4bc->qtVersion()->hasDebuggingHelper(); } @@ -517,7 +517,7 @@ const QStringList MaemoRunConfiguration::arguments() const const QString MaemoRunConfiguration::dumperLib() const { - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = project()->activeQt4BuildConfiguration(); return qt4bc->qtVersion()->debuggingHelperLibrary(); } @@ -666,8 +666,8 @@ void MaemoRunConfiguration::updateTarget() m_executable = QString::null; m_cachedTargetInformationValid = true; - if (Qt4Project *qt4Project = static_cast(project())) { - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + if (Qt4Project *qt4Project = project()) { + Qt4BuildConfiguration *qt4bc = qt4Project->activeQt4BuildConfiguration(); Qt4PriFileNode * priFileNode = qt4Project->rootProjectNode() ->findProFileFor(m_proFilePath); if (!priFileNode) { diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index daf08c2ad97..bcb257b11b9 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -55,6 +55,7 @@ #include using namespace ProjectExplorer; +using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; enum { debug = 0 }; @@ -99,6 +100,11 @@ S60DeviceRunConfiguration::~S60DeviceRunConfiguration() { } +Qt4Project *S60DeviceRunConfiguration::qt4Project() const +{ + return static_cast(project()); +} + QString S60DeviceRunConfiguration::type() const { return QLatin1String("Qt4ProjectManager.DeviceRunConfiguration"); @@ -259,8 +265,8 @@ void S60DeviceRunConfiguration::updateTarget() { if (m_cachedTargetInformationValid) return; - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); - Qt4PriFileNode * priFileNode = static_cast(project())->rootProjectNode()->findProFileFor(m_proFilePath); + Qt4BuildConfiguration *qt4bc = qt4Project()->activeQt4BuildConfiguration(); + Qt4PriFileNode * priFileNode = qt4Project()->rootProjectNode()->findProFileFor(m_proFilePath); if (!priFileNode) { m_baseFileName = QString::null; m_cachedTargetInformationValid = true; @@ -418,10 +424,10 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat connect(m_makesis, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(makesisProcessFinished())); - Qt4BuildConfiguration *activeBuildConf = - static_cast(runConfiguration->project()->activeBuildConfiguration()); - S60DeviceRunConfiguration *s60runConfig = qobject_cast(runConfiguration); + + Qt4BuildConfiguration *activeBuildConf = s60runConfig->qt4Project()->activeQt4BuildConfiguration(); + QTC_ASSERT(s60runConfig, return); m_toolChain = s60runConfig->toolChainType(); m_serialPortName = s60runConfig->serialPortName(); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h index 10464514ca6..c68dff066fc 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h @@ -47,6 +47,8 @@ namespace Debugger { } namespace Qt4ProjectManager { +class Qt4Project; + namespace Internal { class S60DeviceRunConfiguration : public ProjectExplorer::RunConfiguration @@ -61,6 +63,8 @@ public: explicit S60DeviceRunConfiguration(ProjectExplorer::Project *project, const QString &proFilePath); ~S60DeviceRunConfiguration(); + Qt4Project *qt4Project() const; + QString type() const; bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const; QWidget *configurationWidget(); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp index 59fc165d361..eb63185f30b 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.cpp @@ -48,6 +48,7 @@ #include using namespace ProjectExplorer; +using namespace Qt4ProjectManager; using namespace Qt4ProjectManager::Internal; // ======== S60EmulatorRunConfiguration @@ -72,6 +73,11 @@ S60EmulatorRunConfiguration::~S60EmulatorRunConfiguration() { } +Qt4Project *S60EmulatorRunConfiguration::qt4Project() const +{ + return static_cast(project()); +} + QString S60EmulatorRunConfiguration::type() const { return "Qt4ProjectManager.EmulatorRunConfiguration"; @@ -114,8 +120,8 @@ void S60EmulatorRunConfiguration::updateTarget() { if (m_cachedTargetInformationValid) return; - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); - Qt4PriFileNode * priFileNode = static_cast(project())->rootProjectNode()->findProFileFor(m_proFilePath); + Qt4BuildConfiguration *qt4bc = qt4Project()->activeQt4BuildConfiguration(); + Qt4PriFileNode * priFileNode = qt4Project()->rootProjectNode()->findProFileFor(m_proFilePath); if (!priFileNode) { m_executable = QString::null; m_cachedTargetInformationValid = true; @@ -282,8 +288,7 @@ S60EmulatorRunControl::S60EmulatorRunControl(S60EmulatorRunConfiguration *runCon { // stuff like the EPOCROOT and EPOCDEVICE env variable Environment env = Environment::systemEnvironment(); - Project *project = runConfiguration->project(); - static_cast(project->activeBuildConfiguration())->toolChain()->addToEnvironment(env); + runConfiguration->qt4Project()->activeQt4BuildConfiguration()->toolChain()->addToEnvironment(env); m_applicationLauncher.setEnvironment(env.toStringList()); m_executable = runConfiguration->executable(); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h index 1650a0e710d..64c8cdfce93 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h @@ -45,6 +45,8 @@ namespace Utils { } namespace Qt4ProjectManager { +class Qt4Project; + namespace Internal { class S60EmulatorRunConfiguration : public ProjectExplorer::RunConfiguration @@ -54,6 +56,8 @@ public: S60EmulatorRunConfiguration(ProjectExplorer::Project *project, const QString &proFilePath); ~S60EmulatorRunConfiguration(); + Qt4Project *qt4Project() const; + QString type() const; bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const; QWidget *configurationWidget(); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 2916badccb2..56498625bd1 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -59,6 +59,11 @@ Qt4BuildConfiguration::~Qt4BuildConfiguration() } +Qt4Project *Qt4BuildConfiguration::qt4Project() const +{ + return static_cast(project()); +} + ProjectExplorer::Environment Qt4BuildConfiguration::baseEnvironment() const { Environment env = useSystemEnvironment() ? Environment::systemEnvironment() : Environment(); @@ -221,13 +226,13 @@ void Qt4BuildConfiguration::setQtVersion(int id) { setValue(KEY_QT_VERSION_ID, id); emit qtVersionChanged(); - static_cast(project())->updateActiveRunConfiguration(); + qt4Project()->updateActiveRunConfiguration(); } void Qt4BuildConfiguration::setToolChainType(ProjectExplorer::ToolChain::ToolChainType type) { setValue("ToolChain", (int)type); - static_cast(project())->updateActiveRunConfiguration(); + qt4Project()->updateActiveRunConfiguration(); } ProjectExplorer::ToolChain::ToolChainType Qt4BuildConfiguration::toolChainType() const diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index f74aed9df43..bab8f0627b6 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -51,6 +51,8 @@ public: Qt4BuildConfiguration(Qt4BuildConfiguration *source); ~Qt4BuildConfiguration(); + Qt4Project *qt4Project() const; + ProjectExplorer::Environment environment() const; ProjectExplorer::Environment baseEnvironment() const; void setUserEnvironmentChanges(const QList &diff); diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index 7276f950eb6..550e7593772 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -1102,7 +1102,7 @@ ProFileReader *Qt4PriFileNode::createProFileReader() const connect(reader, SIGNAL(errorFound(QString)), m_project, SLOT(proFileParseError(QString))); - Qt4BuildConfiguration *qt4bc = static_cast(m_project->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = m_project->activeQt4BuildConfiguration(); QtVersion *version = qt4bc->qtVersion(); if (version->isValid()) diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 40b494e72e0..d3cb0ac77f7 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -336,6 +336,11 @@ Qt4Project::~Qt4Project() delete m_projectFiles; } +Qt4BuildConfiguration *Qt4Project::activeQt4BuildConfiguration() const +{ + return static_cast(activeBuildConfiguration()); +} + void Qt4Project::defaultQtVersionChanged() { if (static_cast(activeBuildConfiguration())->qtVersionId() == 0) @@ -521,7 +526,7 @@ void Qt4Project::updateCodeModel() if (debug) qDebug()<<"Qt4Project::updateCodeModel()"; - Qt4BuildConfiguration *activeQt4BuildConfiguration = static_cast(activeBuildConfiguration()); + Qt4BuildConfiguration *activeBC = activeQt4BuildConfiguration(); CppTools::CppModelManagerInterface *modelmanager = ExtensionSystem::PluginManager::instance() @@ -534,7 +539,7 @@ void Qt4Project::updateCodeModel() QStringList predefinedFrameworkPaths; QByteArray predefinedMacros; - ToolChain *tc = activeQt4BuildConfiguration->toolChain(); + ToolChain *tc = activeBC->toolChain(); QList allHeaderPaths; if (tc) { predefinedMacros = tc->predefinedMacros(); @@ -553,7 +558,7 @@ void Qt4Project::updateCodeModel() predefinedIncludePaths.append(headerPath.path()); } - const QHash versionInfo = activeQt4BuildConfiguration->qtVersion()->versionInfo(); + const QHash versionInfo = activeBC->qtVersion()->versionInfo(); const QString newQtIncludePath = versionInfo.value(QLatin1String("QT_INSTALL_HEADERS")); predefinedIncludePaths.append(newQtIncludePath); @@ -638,7 +643,7 @@ void Qt4Project::updateCodeModel() } // Add mkspec directory - info.includes.append(activeQt4BuildConfiguration->qtVersion()->mkspecPath()); + info.includes.append(activeBC->qtVersion()->mkspecPath()); info.frameworkPaths = allFrameworkPaths; @@ -652,7 +657,7 @@ void Qt4Project::updateCodeModel() } // Add mkspec directory - allIncludePaths.append(activeQt4BuildConfiguration->qtVersion()->mkspecPath()); + allIncludePaths.append(activeBC->qtVersion()->mkspecPath()); // Dump things out // This is debugging output... diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index cff0723018d..758ec630f8f 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -158,6 +158,8 @@ public: explicit Qt4Project(Qt4Manager *manager, const QString &proFile); virtual ~Qt4Project(); + Internal::Qt4BuildConfiguration *activeQt4BuildConfiguration() const; + QString name() const; Core::IFile *file() const; ProjectExplorer::IProjectManager *projectManager() const; diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index b069c09a44c..b155944af6a 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -221,7 +221,7 @@ void Qt4ProjectConfigWidget::shadowBuildCheckBoxClicked(bool checked) else m_buildConfiguration->setValue("buildDirectory", QVariant(QString::null)); updateDetails(); - static_cast(m_buildConfiguration->project())->invalidateCachedTargetInformation(); + m_buildConfiguration->qt4Project()->invalidateCachedTargetInformation(); updateImportLabel(); } @@ -261,7 +261,7 @@ void Qt4ProjectConfigWidget::shadowBuildLineEditTextChanged() // offer to import it updateImportLabel(); - static_cast(m_buildConfiguration->project())->invalidateCachedTargetInformation(); + m_buildConfiguration->qt4Project()->invalidateCachedTargetInformation(); updateDetails(); } @@ -339,7 +339,7 @@ void Qt4ProjectConfigWidget::qtVersionComboBoxCurrentIndexChanged(const QString if (newQtVersion != m_buildConfiguration->qtVersionId()) { m_buildConfiguration->setQtVersion(newQtVersion); updateToolChainCombo(); - static_cast(m_buildConfiguration->project())->update(); + m_buildConfiguration->qt4Project()->update(); } updateDetails(); } @@ -359,7 +359,7 @@ void Qt4ProjectConfigWidget::updateToolChainCombo() void Qt4ProjectConfigWidget::selectToolChain(int index) { setToolChain(index); - static_cast(m_buildConfiguration->project())->update(); + m_buildConfiguration->qt4Project()->update(); } void Qt4ProjectConfigWidget::setToolChain(int index) diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 93dcffe431f..5cd5c93eb34 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -89,6 +89,11 @@ Qt4RunConfiguration::~Qt4RunConfiguration() { } +Qt4Project *Qt4RunConfiguration::qt4Project() const +{ + return static_cast(project()); +} + QString Qt4RunConfiguration::type() const { return "Qt4ProjectManager.Qt4RunConfiguration"; @@ -555,8 +560,8 @@ void Qt4RunConfiguration::updateTarget() if (m_cachedTargetInformationValid) return; //qDebug()<<"updateTarget"; - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); - Qt4PriFileNode * priFileNode = static_cast(project())->rootProjectNode()->findProFileFor(m_proFilePath); + Qt4BuildConfiguration *qt4bc = qt4Project()->activeQt4BuildConfiguration(); + Qt4PriFileNode * priFileNode = qt4Project()->rootProjectNode()->findProFileFor(m_proFilePath); if (!priFileNode) { m_workingDir = QString::null; m_executable = QString::null; @@ -654,8 +659,7 @@ void Qt4RunConfiguration::invalidateCachedTargetInformation() QString Qt4RunConfiguration::dumperLibrary() const { - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); - QtVersion *version = qt4bc->qtVersion(); + QtVersion *version = qt4Project()->activeQt4BuildConfiguration()->qtVersion(); if (version) return version->debuggingHelperLibrary(); else @@ -664,8 +668,7 @@ QString Qt4RunConfiguration::dumperLibrary() const QStringList Qt4RunConfiguration::dumperLibraryLocations() const { - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); - QtVersion *version = qt4bc->qtVersion(); + QtVersion *version = qt4Project()->activeQt4BuildConfiguration()->qtVersion(); if (version) return version->debuggingHelperLibraryLocations(); else @@ -686,7 +689,7 @@ Qt4RunConfiguration::BaseEnvironmentBase Qt4RunConfiguration::baseEnvironmentBas } ProjectExplorer::ToolChain::ToolChainType Qt4RunConfiguration::toolChainType() const { - Qt4BuildConfiguration *qt4bc = static_cast(project()->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = qt4Project()->activeQt4BuildConfiguration(); return qt4bc->toolChainType(); } diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h index 9fddd5efa2e..ce16df7c16a 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h @@ -65,6 +65,8 @@ public: Qt4RunConfiguration(Qt4Project *pro, const QString &proFilePath); virtual ~Qt4RunConfiguration(); + Qt4Project *qt4Project() const; + virtual QString type() const; virtual bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const; virtual QWidget *configurationWidget(); diff --git a/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp b/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp index 14b5982ca45..029028a2542 100644 --- a/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp +++ b/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp @@ -89,7 +89,7 @@ void Qt4UiCodeModelSupport::setFileName(const QString &name) bool Qt4UiCodeModelSupport::runUic(const QString &ui) const { - Qt4BuildConfiguration *qt4bc = static_cast(m_project->activeBuildConfiguration()); + Qt4BuildConfiguration *qt4bc = m_project->activeQt4BuildConfiguration(); QProcess uic; uic.setEnvironment(m_project->activeBuildConfiguration()->environment().toStringList()); uic.start(qt4bc->qtVersion()->uicCommand(), QStringList(), QIODevice::ReadWrite); From 91198532830ca70d1af2c4b83bdd14b4e884d4e0 Mon Sep 17 00:00:00 2001 From: dt Date: Thu, 26 Nov 2009 15:53:38 +0100 Subject: [PATCH 16/62] Make setDisplayName easier and break displayName signals Fix for that will come later --- .../projectexplorer/buildconfiguration.cpp | 3 +++ .../projectexplorer/buildconfiguration.h | 1 + .../buildsettingspropertiespage.cpp | 16 ++-------------- .../buildsettingspropertiespage.h | 1 - src/plugins/projectexplorer/buildstepspage.cpp | 1 + src/plugins/projectexplorer/project.cpp | 17 ----------------- src/plugins/projectexplorer/project.h | 8 -------- src/plugins/qt4projectmanager/qt4project.cpp | 2 +- .../qt4projectconfigwidget.cpp | 2 +- 9 files changed, 9 insertions(+), 42 deletions(-) diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index ed279970d50..c2b2cb7d94c 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -80,7 +80,10 @@ QString BuildConfiguration::displayName() const void BuildConfiguration::setDisplayName(const QString &name) { + if (value("ProjectExplorer.BuildConfiguration.DisplayName").toString() == name) + return; setValue("ProjectExplorer.BuildConfiguration.DisplayName", name); + emit displayNameChanged(); } QVariant BuildConfiguration::value(const QString & key) const diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 09950668b2d..a54e7a6705b 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -82,6 +82,7 @@ public: signals: void environmentChanged(); void buildDirectoryChanged(); + void displayNameChanged(); protected: BuildConfiguration(Project * project); diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index d73e2c97904..45d939d5b03 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -200,8 +200,7 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) connect(m_removeButton, SIGNAL(clicked()), this, SLOT(deleteConfiguration())); - connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)), - this, SLOT(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *))); + // TODO update on displayNameChange connect(m_project, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(checkMakeActiveLabel())); @@ -231,17 +230,6 @@ void BuildSettingsWidget::updateAddButtonMenu() } } -void BuildSettingsWidget::buildConfigurationDisplayNameChanged(BuildConfiguration *bc) -{ - for (int i=0; icount(); ++i) { - if (m_buildConfigurationComboBox->itemData(i).value() == bc) { - m_buildConfigurationComboBox->setItemText(i, bc->displayName()); - break; - } - } -} - - void BuildSettingsWidget::updateBuildSettings() { // TODO save position, entry from combbox @@ -350,7 +338,7 @@ void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfigura newDisplayName = Project::makeUnique(newDisplayName, buildConfigurationDisplayNames); m_buildConfiguration = m_project->buildConfigurationFactory()->clone(sourceConfiguration); - m_project->setDisplayNameFor(m_buildConfiguration, newDisplayName); + m_buildConfiguration->setDisplayName(newDisplayName); updateBuildSettings(); } diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h index 0026553b77e..652f91e116f 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.h +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h @@ -94,7 +94,6 @@ public: ~BuildSettingsWidget(); private slots: - void buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *bc); void updateBuildSettings(); void currentIndexChanged(int index); void activeBuildConfigurationChanged(); diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index 2804ec414f9..0930901be9e 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -49,6 +49,7 @@ BuildStepsPage::BuildStepsPage(Project *project, bool clean) : BuildConfigWidget(), m_clean(clean) { + Q_UNUSED(project) m_vbox = new QVBoxLayout(this); m_vbox->setContentsMargins(0, 0, 0, 0); m_vbox->setSpacing(0); diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 6a05b9264dd..5d5bd9a3f71 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -463,23 +463,6 @@ EditorConfiguration *Project::editorConfiguration() const return m_editorConfiguration; } -void Project::setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName) -{ - if (configuration->displayName() == displayName) - return; - QString dn = displayName; - QStringList displayNames; - foreach (BuildConfiguration *bc, m_buildConfigurationValues) { - if (bc != configuration) - displayNames << bc->displayName(); - } - dn = makeUnique(displayName, displayNames); - - configuration->setDisplayName(displayName); - - emit buildConfigurationDisplayNameChanged(configuration); -} - QByteArray Project::predefinedMacros(const QString &) const { return QByteArray(); diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 4c543169ec5..3885725120e 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -88,10 +88,6 @@ public: void removeBuildConfiguration(BuildConfiguration *configuration); QList buildConfigurations() const; - - // remove and add "QString uniqueConfigurationDisplayName(const QString &proposedName) const" instead - // move into BuildConfiguration * - void setDisplayNameFor(BuildConfiguration *configuration, const QString &displayName); BuildConfiguration *activeBuildConfiguration() const; void setActiveBuildConfiguration(BuildConfiguration *configuration); @@ -146,10 +142,6 @@ signals: void removedBuildConfiguration(ProjectExplorer::Project *p, BuildConfiguration *bc); void addedBuildConfiguration(ProjectExplorer::Project *p, BuildConfiguration *bc); - // This signal is jut there for updating the tree list in the buildsettings wizard - void buildConfigurationDisplayNameChanged(BuildConfiguration *bc); - - protected: /* This method is called when the project .user file is saved. Simply call * writer.saveValue() for each value you want to save. Make sure to always diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index d3cb0ac77f7..3aff94f2a59 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -343,7 +343,7 @@ Qt4BuildConfiguration *Qt4Project::activeQt4BuildConfiguration() const void Qt4Project::defaultQtVersionChanged() { - if (static_cast(activeBuildConfiguration())->qtVersionId() == 0) + if (activeQt4BuildConfiguration()->qtVersionId() == 0) m_rootProjectNode->update(); } diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index b155944af6a..768e0c735a9 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -165,7 +165,7 @@ void Qt4ProjectConfigWidget::init(ProjectExplorer::BuildConfiguration *bc) void Qt4ProjectConfigWidget::changeConfigName(const QString &newName) { - m_buildConfiguration->project()->setDisplayNameFor(m_buildConfiguration, newName); + m_buildConfiguration->setDisplayName(newName); } void Qt4ProjectConfigWidget::setupQtVersionsComboBox() From 592c1fba65f40d5c2677810a5d4fcd4c47b452ec Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 13:57:41 +0100 Subject: [PATCH 17/62] Fix signal broken in the porting to new buildconfiguration --- src/plugins/qt4projectmanager/qmakestep.cpp | 6 +++--- src/plugins/qt4projectmanager/qmakestep.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 5a9441b9db2..6179ec57320 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -250,8 +250,8 @@ QMakeStepConfigWidget::QMakeStepConfigWidget(QMakeStep *step) connect(m_ui.buildConfigurationComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(buildConfigurationChanged())); connect(step, SIGNAL(changed()), this, SLOT(update())); - connect(step->buildConfiguration(), SIGNAL(qtVersionChanged(ProjectExplorer::BuildConfiguration *)), - this, SLOT(qtVersionChanged(ProjectExplorer::BuildConfiguration *))); + connect(step->buildConfiguration(), SIGNAL(qtVersionChanged()), + this, SLOT(qtVersionChanged())); } QString QMakeStepConfigWidget::summaryText() const @@ -259,7 +259,7 @@ QString QMakeStepConfigWidget::summaryText() const return m_summaryText; } -void QMakeStepConfigWidget::qtVersionChanged(ProjectExplorer::BuildConfiguration *bc) +void QMakeStepConfigWidget::qtVersionChanged() { updateTitleLabel(); updateEffectiveQMakeCall(); diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index d1b0ac6f696..28628aef3bf 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -116,7 +116,7 @@ private slots: void qmakeArgumentsLineEditTextEdited(); void buildConfigurationChanged(); void update(); - void qtVersionChanged(ProjectExplorer::BuildConfiguration *bc); + void qtVersionChanged(); private: void updateTitleLabel(); void updateEffectiveQMakeCall(); From fb1ef427a03ff82d1be0930e78ad5e44bd3c3509 Mon Sep 17 00:00:00 2001 From: dt Date: Thu, 26 Nov 2009 16:46:36 +0100 Subject: [PATCH 18/62] Remove setValue/value from Project --- src/plugins/projectexplorer/project.cpp | 19 ------------------- src/plugins/projectexplorer/project.h | 4 ---- src/plugins/qt4projectmanager/qmakestep.cpp | 1 + 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 5d5bd9a3f71..0ab59706c78 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -143,8 +143,6 @@ void Project::saveSettingsImpl(PersistentSettingsWriter &writer) // For compability with older versions the "name" is saved as a string instead of a number writer.saveValue("activebuildconfiguration", QString::number(bcs.indexOf(m_activeBuildConfiguration))); - //save m_values - writer.saveValue("project", m_values); //save buildsettings QStringList buildConfigurationNames; @@ -206,8 +204,6 @@ void Project::saveSettingsImpl(PersistentSettingsWriter &writer) bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) { - m_values = reader.restoreValue("project").toMap(); - const QList buildStepFactories = ExtensionSystem::PluginManager::instance()->getObjects(); @@ -380,21 +376,6 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) return true; } -void Project::setValue(const QString &name, const QVariant & value) -{ - m_values.insert(name, value); -} - -QVariant Project::value(const QString &name) const -{ - QMap::const_iterator it = - m_values.find(name); - if (it != m_values.constEnd()) - return it.value(); - else - return QVariant(); -} - BuildConfiguration *Project::activeBuildConfiguration() const { return m_activeBuildConfiguration; //TODO diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 3885725120e..8d35217e8d9 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -93,9 +93,6 @@ public: virtual IBuildConfigurationFactory *buildConfigurationFactory() const = 0; - void setValue(const QString &name, const QVariant &value); - QVariant value(const QString &name) const; - // Running QList runConfigurations() const; void addRunConfiguration(RunConfiguration* runConfiguration); @@ -162,7 +159,6 @@ protected: virtual bool restoreSettingsImpl(PersistentSettingsReader &reader); private: - QMap m_values; QList m_buildConfigurationValues; BuildConfiguration *m_activeBuildConfiguration; QList m_runConfigurations; diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 6179ec57320..2af67273224 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -261,6 +261,7 @@ QString QMakeStepConfigWidget::summaryText() const void QMakeStepConfigWidget::qtVersionChanged() { + Q_UNUSED(bc) updateTitleLabel(); updateEffectiveQMakeCall(); } From 6e01bf607055b2c8f62f6ee98e530885da11eabd Mon Sep 17 00:00:00 2001 From: dt Date: Thu, 26 Nov 2009 16:49:45 +0100 Subject: [PATCH 19/62] Move extractSpec and removeSpec to Qt4BuildConfiguration --- .../qt4projectmanager/projectloadwizard.cpp | 5 +- .../qt4buildconfiguration.cpp | 93 ++++++++++++++++++- .../qt4projectmanager/qt4buildconfiguration.h | 2 + src/plugins/qt4projectmanager/qt4project.cpp | 88 +----------------- src/plugins/qt4projectmanager/qt4project.h | 5 +- .../qt4projectconfigwidget.cpp | 4 +- 6 files changed, 99 insertions(+), 98 deletions(-) diff --git a/src/plugins/qt4projectmanager/projectloadwizard.cpp b/src/plugins/qt4projectmanager/projectloadwizard.cpp index 3eae813b041..04d46cb2ca5 100644 --- a/src/plugins/qt4projectmanager/projectloadwizard.cpp +++ b/src/plugins/qt4projectmanager/projectloadwizard.cpp @@ -33,6 +33,7 @@ #include "qt4projectmanager.h" #include "qmakestep.h" #include "makestep.h" +#include "qt4buildconfiguration.h" #include @@ -66,9 +67,9 @@ ProjectLoadWizard::ProjectLoadWizard(Qt4Project *project, QWidget *parent, Qt::W QPair result = QtVersionManager::scanMakeFile(directory, m_importVersion->defaultBuildConfig()); m_importBuildConfig = result.first; - m_additionalArguments = Qt4Project::removeSpecFromArgumentList(result.second); + m_additionalArguments = Qt4BuildConfiguration::removeSpecFromArgumentList(result.second); - QString parsedSpec = Qt4Project::extractSpecFromArgumentList(result.second, directory, m_importVersion); + QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArgumentList(result.second, directory, m_importVersion); QString versionSpec = m_importVersion->mkspec(); // Compare mkspecs and add to additional arguments diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 56498625bd1..fed1ed8e92b 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -284,16 +284,16 @@ bool Qt4BuildConfiguration::compareBuildConfigurationToImportFrom(const QString // now compare arguments lists // we have to compare without the spec/platform cmd argument // and compare that on its own - QString actualSpec = Qt4Project::extractSpecFromArgumentList(qs->qmakeArguments(), workingDirectory, version); + QString actualSpec = extractSpecFromArgumentList(qs->qmakeArguments(), workingDirectory, version); if (actualSpec.isEmpty()) { // Easy one the user has choosen not to override the settings actualSpec = version->mkspec(); } - QString parsedSpec = Qt4Project::extractSpecFromArgumentList(result.second, workingDirectory, version); - QStringList actualArgs = Qt4Project::removeSpecFromArgumentList(qs->qmakeArguments()); - QStringList parsedArgs = Qt4Project::removeSpecFromArgumentList(result.second); + QString parsedSpec = extractSpecFromArgumentList(result.second, workingDirectory, version); + QStringList actualArgs = removeSpecFromArgumentList(qs->qmakeArguments()); + QStringList parsedArgs = removeSpecFromArgumentList(result.second); if (debug) { qDebug()<<"Actual args:"<= list.length()) + return QString(); + + QString baseMkspecDir = version->versionInfo().value("QMAKE_MKSPECS"); + if (baseMkspecDir.isEmpty()) + baseMkspecDir = version->versionInfo().value("QT_INSTALL_DATA") + "/mkspecs"; + + QString parsedSpec = QDir::cleanPath(list.at(index)); +#ifdef Q_OS_WIN + baseMkspecDir = baseMkspecDir.toLower(); + parsedSpec = parsedSpec.toLower(); +#endif + // if the path is relative it can be + // relative to the working directory (as found in the Makefiles) + // or relatively to the mkspec directory + // if it is the former we need to get the canonical form + // for the other one we don't need to do anything + if (QFileInfo(parsedSpec).isRelative()) { + if(QFileInfo(directory + "/" + parsedSpec).exists()) { + parsedSpec = QDir::cleanPath(directory + "/" + parsedSpec); +#ifdef Q_OS_WIN + parsedSpec = parsedSpec.toLower(); +#endif + } else { + parsedSpec = baseMkspecDir + "/" + parsedSpec; + } + } + + QFileInfo f2(parsedSpec); + while (f2.isSymLink()) { + parsedSpec = f2.symLinkTarget(); + f2.setFile(parsedSpec); + } + + if (parsedSpec.startsWith(baseMkspecDir)) { + parsedSpec = parsedSpec.mid(baseMkspecDir.length() + 1); + } else { + QString sourceMkSpecPath = version->sourcePath() + "/mkspecs"; + if (parsedSpec.startsWith(sourceMkSpecPath)) { + parsedSpec = parsedSpec.mid(sourceMkSpecPath.length() + 1); + } + } +#ifdef Q_OS_WIN + parsedSpec = parsedSpec.toLower(); +#endif + return parsedSpec; + +} diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index bab8f0627b6..4cb40e4a533 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -96,6 +96,8 @@ public: // TODO rename bool compareBuildConfigurationToImportFrom(const QString &workingDirectory); + static QStringList removeSpecFromArgumentList(const QStringList &old); + static QString extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version); signals: void qtVersionChanged(); diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 3aff94f2a59..9bfbc47e178 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -456,7 +456,7 @@ ProjectExplorer::IBuildConfigurationFactory *Qt4Project::buildConfigurationFacto return m_buildConfigurationFactory; } -Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigurationName, QtVersion *qtversion, +Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString displayName, QtVersion *qtversion, QtVersion::QmakeBuildConfigs qmakeBuildConfiguration, QStringList additionalArguments) { @@ -464,7 +464,7 @@ Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString buildConfigu // Add the buildconfiguration Qt4BuildConfiguration *bc = new Qt4BuildConfiguration(this); - bc->setDisplayName(buildConfigurationName); + bc->setDisplayName(displayName); addBuildConfiguration(bc); QMakeStep *qmakeStep = new QMakeStep(bc); @@ -821,64 +821,7 @@ void Qt4Project::updateActiveRunConfiguration() emit targetInformationChanged(); } -QString Qt4Project::extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version) -{ - int index = list.indexOf("-spec"); - if (index == -1) - index = list.indexOf("-platform"); - if (index == -1) - return QString(); - ++index; - - if (index >= list.length()) - return QString(); - - QString baseMkspecDir = version->versionInfo().value("QMAKE_MKSPECS"); - if (baseMkspecDir.isEmpty()) - baseMkspecDir = version->versionInfo().value("QT_INSTALL_DATA") + "/mkspecs"; - - QString parsedSpec = QDir::cleanPath(list.at(index)); -#ifdef Q_OS_WIN - baseMkspecDir = baseMkspecDir.toLower(); - parsedSpec = parsedSpec.toLower(); -#endif - // if the path is relative it can be - // relative to the working directory (as found in the Makefiles) - // or relatively to the mkspec directory - // if it is the former we need to get the canonical form - // for the other one we don't need to do anything - if (QFileInfo(parsedSpec).isRelative()) { - if(QFileInfo(directory + "/" + parsedSpec).exists()) { - parsedSpec = QDir::cleanPath(directory + "/" + parsedSpec); -#ifdef Q_OS_WIN - parsedSpec = parsedSpec.toLower(); -#endif - } else { - parsedSpec = baseMkspecDir + "/" + parsedSpec; - } - } - - QFileInfo f2(parsedSpec); - while (f2.isSymLink()) { - parsedSpec = f2.symLinkTarget(); - f2.setFile(parsedSpec); - } - - if (parsedSpec.startsWith(baseMkspecDir)) { - parsedSpec = parsedSpec.mid(baseMkspecDir.length() + 1); - } else { - QString sourceMkSpecPath = version->sourcePath() + "/mkspecs"; - if (parsedSpec.startsWith(sourceMkSpecPath)) { - parsedSpec = parsedSpec.mid(sourceMkSpecPath.length() + 1); - } - } -#ifdef Q_OS_WIN - parsedSpec = parsedSpec.toLower(); -#endif - return parsedSpec; - -} BuildConfigWidget *Qt4Project::createConfigWidget() { @@ -1048,33 +991,6 @@ void Qt4Project::invalidateCachedTargetInformation() emit targetInformationChanged(); } -// We match -spec and -platfrom separetly -// We ignore -cache, because qmake contained a bug that it didn't -// mention the -cache in the Makefile -// That means changing the -cache option in the additional arguments -// does not automatically rerun qmake. Alas, we could try more -// intelligent matching for -cache, but i guess people rarely -// do use that. - -QStringList Qt4Project::removeSpecFromArgumentList(const QStringList &old) -{ - if (!old.contains("-spec") && !old.contains("-platform") && !old.contains("-cache")) - return old; - QStringList newList; - bool ignoreNext = false; - foreach(const QString &item, old) { - if (ignoreNext) { - ignoreNext = false; - } else if (item == "-spec" || item == "-platform" || item == "-cache") { - ignoreNext = true; - } else { - newList << item; - } - } - return newList; -} - - /*! Handle special case were a subproject of the qt directory is opened, and qt was configured to be built as a shadow build -> also build in the sub- diff --git a/src/plugins/qt4projectmanager/qt4project.h b/src/plugins/qt4projectmanager/qt4project.h index 758ec630f8f..189c999bc4f 100644 --- a/src/plugins/qt4projectmanager/qt4project.h +++ b/src/plugins/qt4projectmanager/qt4project.h @@ -166,7 +166,7 @@ public: Qt4Manager *qt4ProjectManager() const; ProjectExplorer::IBuildConfigurationFactory *buildConfigurationFactory() const; - Internal::Qt4BuildConfiguration *addQt4BuildConfiguration(QString buildConfigurationName, + Internal::Qt4BuildConfiguration *addQt4BuildConfiguration(QString displayName, QtVersion *qtversion, QtVersion::QmakeBuildConfigs qmakeBuildConfiguration, QStringList additionalArguments = QStringList()); @@ -201,9 +201,6 @@ public: virtual QStringList includePaths(const QString &fileName) const; virtual QStringList frameworkPaths(const QString &fileName) const; - static QStringList removeSpecFromArgumentList(const QStringList &old); - static QString extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version); - // TODO can i remove this? void updateActiveRunConfiguration(); signals: diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 768e0c735a9..47aacd9f693 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -283,8 +283,8 @@ void Qt4ProjectConfigWidget::importLabelClicked() QPair result = QtVersionManager::scanMakeFile(directory, version->defaultBuildConfig()); QtVersion::QmakeBuildConfigs qmakeBuildConfig = result.first; - QStringList additionalArguments = Qt4Project::removeSpecFromArgumentList(result.second); - QString parsedSpec = Qt4Project::extractSpecFromArgumentList(result.second, directory, version); + QStringList additionalArguments = Qt4BuildConfiguration::removeSpecFromArgumentList(result.second); + QString parsedSpec = Qt4BuildConfiguration::extractSpecFromArgumentList(result.second, directory, version); QString versionSpec = version->mkspec(); if (parsedSpec.isEmpty() || parsedSpec == versionSpec || parsedSpec == "default") { // using the default spec, don't modify additional arguments From cff2c1df6d00c07c74b33896c632229a4bb1197b Mon Sep 17 00:00:00 2001 From: dt Date: Thu, 26 Nov 2009 18:51:07 +0100 Subject: [PATCH 20/62] QMakeStep some API cleanup Rename arguments to allArguments(), qmakeArguments() to userArguments() --- .../projectexplorer/buildconfiguration.h | 2 -- src/plugins/qt4projectmanager/qmakestep.cpp | 24 +++++++++---------- src/plugins/qt4projectmanager/qmakestep.h | 6 ++--- .../qt4buildconfiguration.cpp | 4 ++-- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index a54e7a6705b..216c1a24db6 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -120,8 +120,6 @@ public: // restores a BuildConfiguration with the name and adds it to the project virtual BuildConfiguration *restore() const = 0; - // TODO display name unique, in different ways - signals: void availableCreationTypesChanged(); }; diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 2af67273224..bc13e7a2fbe 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -58,7 +58,7 @@ QMakeStep::QMakeStep(ProjectExplorer::BuildConfiguration *bc) QMakeStep::QMakeStep(QMakeStep *bs, ProjectExplorer::BuildConfiguration *bc) : AbstractMakeStep(bs, bc), m_forced(false), - m_qmakeArgs(bs->m_qmakeArgs) + m_userArgs(bs->m_userArgs) { } @@ -72,9 +72,9 @@ Qt4BuildConfiguration *QMakeStep::qt4BuildConfiguration() const return static_cast(buildConfiguration()); } -QStringList QMakeStep::arguments() +QStringList QMakeStep::allArguments() { - QStringList additonalArguments = m_qmakeArgs; + QStringList additonalArguments = m_userArgs; Qt4BuildConfiguration *bc = qt4BuildConfiguration(); QStringList arguments; arguments << buildConfiguration()->project()->file()->fileName(); @@ -129,7 +129,7 @@ bool QMakeStep::init() return false; } - QStringList args = arguments(); + QStringList args = allArguments(); QString workingDirectory = qt4bc->buildDirectory(); QString program = qtVersion->qmakeCommand(); @@ -220,24 +220,24 @@ bool QMakeStep::processFinished(int exitCode, QProcess::ExitStatus status) void QMakeStep::setQMakeArguments(const QStringList &arguments) { - m_qmakeArgs = arguments; + m_userArgs = arguments; emit changed(); } -QStringList QMakeStep::qmakeArguments() +QStringList QMakeStep::userArguments() { - return m_qmakeArgs; + return m_userArgs; } void QMakeStep::restoreFromLocalMap(const QMap &map) { - m_qmakeArgs = map.value("qmakeArgs").toStringList(); + m_userArgs = map.value("qmakeArgs").toStringList(); AbstractProcessStep::restoreFromLocalMap(map); } void QMakeStep::storeIntoLocalMap(QMap &map) { - map["qmakeArgs"] = m_qmakeArgs; + map["qmakeArgs"] = m_userArgs; AbstractProcessStep::storeIntoLocalMap(map); } @@ -276,7 +276,7 @@ void QMakeStepConfigWidget::updateTitleLabel() return; } - QStringList args = m_step->arguments(); + QStringList args = m_step->allArguments(); // We don't want the full path to the .pro file const QString projectFileName = m_step->buildConfiguration()->project()->file()->fileName(); int index = args.indexOf(projectFileName); @@ -331,7 +331,7 @@ void QMakeStepConfigWidget::update() void QMakeStepConfigWidget::init() { - QString qmakeArgs = ProjectExplorer::Environment::joinArgumentList(m_step->qmakeArguments()); + QString qmakeArgs = ProjectExplorer::Environment::joinArgumentList(m_step->userArguments()); m_ui.qmakeAdditonalArgumentsLineEdit->setText(qmakeArgs); ProjectExplorer::BuildConfiguration *bc = m_step->buildConfiguration(); bool debug = QtVersion::QmakeBuildConfig(bc->value("buildConfiguration").toInt()) & QtVersion::DebugBuild; @@ -346,7 +346,7 @@ void QMakeStepConfigWidget::updateEffectiveQMakeCall() const QtVersion *qtVersion = qt4bc->qtVersion(); if (qtVersion) { QString program = QFileInfo(qtVersion->qmakeCommand()).fileName(); - m_ui.qmakeArgumentsEdit->setPlainText(program + QLatin1Char(' ') + ProjectExplorer::Environment::joinArgumentList(m_step->arguments())); + m_ui.qmakeArgumentsEdit->setPlainText(program + QLatin1Char(' ') + ProjectExplorer::Environment::joinArgumentList(m_step->allArguments())); } else { m_ui.qmakeArgumentsEdit->setPlainText(tr("No valid Qt version set.")); } diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index 28628aef3bf..36df20026af 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -78,11 +78,11 @@ public: virtual QString displayName(); virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget(); virtual bool immutable() const; - QStringList arguments(); void setForced(bool b); bool forced(); - QStringList qmakeArguments(); + QStringList allArguments(); + QStringList userArguments(); void setQMakeArguments(const QStringList &arguments); virtual void restoreFromLocalMap(const QMap &map); @@ -100,7 +100,7 @@ private: QStringList m_lastEnv; bool m_forced; bool m_needToRunQMake; // set in init(), read in run() - QStringList m_qmakeArgs; + QStringList m_userArgs; }; diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index fed1ed8e92b..824d63654a4 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -284,7 +284,7 @@ bool Qt4BuildConfiguration::compareBuildConfigurationToImportFrom(const QString // now compare arguments lists // we have to compare without the spec/platform cmd argument // and compare that on its own - QString actualSpec = extractSpecFromArgumentList(qs->qmakeArguments(), workingDirectory, version); + QString actualSpec = extractSpecFromArgumentList(qs->userArguments(), workingDirectory, version); if (actualSpec.isEmpty()) { // Easy one the user has choosen not to override the settings actualSpec = version->mkspec(); @@ -292,7 +292,7 @@ bool Qt4BuildConfiguration::compareBuildConfigurationToImportFrom(const QString QString parsedSpec = extractSpecFromArgumentList(result.second, workingDirectory, version); - QStringList actualArgs = removeSpecFromArgumentList(qs->qmakeArguments()); + QStringList actualArgs = removeSpecFromArgumentList(qs->userArguments()); QStringList parsedArgs = removeSpecFromArgumentList(result.second); if (debug) { From 87e642a4b6133fd5ed2293e8d97afe6e6df0b0a6 Mon Sep 17 00:00:00 2001 From: dt Date: Fri, 27 Nov 2009 12:09:53 +0100 Subject: [PATCH 21/62] Fix bugs introduced by refactoring --- src/plugins/projectexplorer/buildsettingspropertiespage.cpp | 4 ++-- src/plugins/projectexplorer/project.cpp | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 45d939d5b03..12f8e13983f 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -254,8 +254,8 @@ void BuildSettingsWidget::updateBuildSettings() m_subWidgets->addWidget(subConfigWidget->displayName(), subConfigWidget); // Add tree items - foreach (const BuildConfiguration *bc, m_project->buildConfigurations()) { - m_buildConfigurationComboBox->addItem(bc->displayName(), bc); + foreach (BuildConfiguration *bc, m_project->buildConfigurations()) { + m_buildConfigurationComboBox->addItem(bc->displayName(), QVariant::fromValue(bc)); if (bc == m_buildConfiguration) m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1); } diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 0ab59706c78..7ab2c9591af 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -271,6 +271,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) } } } + addBuildConfiguration(bc); } // Set Active Configuration From d6d48fa23cea27f92e69b3d247ce87b80bf50da1 Mon Sep 17 00:00:00 2001 From: dt Date: Fri, 27 Nov 2009 13:47:27 +0100 Subject: [PATCH 22/62] Some cleanup after BuildConfiguration refactoring --- src/plugins/cmakeprojectmanager/makestep.cpp | 2 -- src/plugins/genericprojectmanager/genericmakestep.cpp | 2 -- src/plugins/genericprojectmanager/genericproject.cpp | 1 - src/plugins/projectexplorer/project.cpp | 2 +- src/plugins/qt4projectmanager/makestep.cpp | 1 - src/plugins/qt4projectmanager/qmakestep.cpp | 2 -- src/plugins/qt4projectmanager/qt4buildconfiguration.cpp | 2 +- src/plugins/qt4projectmanager/qt4buildconfiguration.h | 3 +-- src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp | 2 +- 9 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 68e97354b3a..41ca1a6bd10 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -102,8 +102,6 @@ void MakeStep::storeIntoLocalMap(QMap &map) bool MakeStep::init() { CMakeBuildConfiguration *bc = cmakeBuildConfiguration(); - // TODO, we should probably have a member cmakeBuildConfiguration(); - setBuildParser(bc->buildParser()); setEnabled(true); diff --git a/src/plugins/genericprojectmanager/genericmakestep.cpp b/src/plugins/genericprojectmanager/genericmakestep.cpp index b57a23e4c61..4f10924cce1 100644 --- a/src/plugins/genericprojectmanager/genericmakestep.cpp +++ b/src/plugins/genericprojectmanager/genericmakestep.cpp @@ -125,7 +125,6 @@ QString GenericMakeStep::makeCommand() const { QString command = m_makeCommand; if (command.isEmpty()) { - // TODO GenericProject *pro = genericBuildConfiguration()->genericProject(); if (ProjectExplorer::ToolChain *toolChain = pro->toolChain()) command = toolChain->makeCommand(); @@ -187,7 +186,6 @@ GenericMakeStepConfigWidget::GenericMakeStepConfigWidget(GenericMakeStep *makeSt m_ui->setupUi(this); // TODO update this list also on rescans of the GenericLists.txt - //TODO GenericProject *pro = m_makeStep->genericBuildConfiguration()->genericProject(); foreach (const QString &target, pro->targets()) { QListWidgetItem *item = new QListWidgetItem(target, m_ui->targetsList); diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 461915b0c68..9f149855597 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -158,7 +158,6 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type BuildConfiguration *GenericBuildConfigurationFactory::clone(BuildConfiguration *source) const { - // TODO GenericBuildConfiguration *bc = new GenericBuildConfiguration(static_cast(source)); m_project->addBuildConfiguration(bc); return bc; diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 7ab2c9591af..c4cdcd84fce 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -379,7 +379,7 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) BuildConfiguration *Project::activeBuildConfiguration() const { - return m_activeBuildConfiguration; //TODO + return m_activeBuildConfiguration; } void Project::setActiveBuildConfiguration(BuildConfiguration *configuration) diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index f3442a1a024..9642de569ac 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -106,7 +106,6 @@ bool MakeStep::init() Environment environment = bc->environment(); setEnvironment(environment); - //TODO QString workingDirectory = bc->buildDirectory(); setWorkingDirectory(workingDirectory); diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index bc13e7a2fbe..2110e15458a 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -80,7 +80,6 @@ QStringList QMakeStep::allArguments() arguments << buildConfiguration()->project()->file()->fileName(); arguments << "-r"; - // TODO if (!additonalArguments.contains("-spec")) arguments << "-spec" << bc->qtVersion()->mkspec(); @@ -116,7 +115,6 @@ QStringList QMakeStep::allArguments() bool QMakeStep::init() { - // TODO Qt4BuildConfiguration *qt4bc = qt4BuildConfiguration(); const QtVersion *qtVersion = qt4bc->qtVersion(); diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp index 824d63654a4..c12d4056a2f 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp @@ -269,7 +269,7 @@ MakeStep *Qt4BuildConfiguration::makeStep() const } // returns true if both are equal -bool Qt4BuildConfiguration::compareBuildConfigurationToImportFrom(const QString &workingDirectory) +bool Qt4BuildConfiguration::compareToImportFrom(const QString &workingDirectory) { QMakeStep *qs = qmakeStep(); if (QDir(workingDirectory).exists(QLatin1String("Makefile")) && qs) { diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h index 4cb40e4a533..378876ed930 100644 --- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h +++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h @@ -94,8 +94,7 @@ public: QString makeCommand() const; QString defaultMakeTarget() const; - // TODO rename - bool compareBuildConfigurationToImportFrom(const QString &workingDirectory); + bool compareToImportFrom(const QString &workingDirectory); static QStringList removeSpecFromArgumentList(const QStringList &old); static QString extractSpecFromArgumentList(const QStringList &list, QString directory, QtVersion *version); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index 47aacd9f693..f97ae476e5d 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -241,7 +241,7 @@ void Qt4ProjectConfigWidget::updateImportLabel() visible = true; } else { // check that the qmake flags, arguments match - visible = !m_buildConfiguration->compareBuildConfigurationToImportFrom(m_buildConfiguration->buildDirectory()); + visible = !m_buildConfiguration->compareToImportFrom(m_buildConfiguration->buildDirectory()); } } else { visible = false; From 99849441713819bafacdea987b4ef32f34796f0b Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 12:45:10 +0100 Subject: [PATCH 23/62] Fix compile --- src/plugins/qt4projectmanager/qmakestep.cpp | 2 +- .../qt4projectmanager/qt-maemo/maemorunconfiguration.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 2110e15458a..385cd1d7026 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -137,7 +137,7 @@ bool QMakeStep::init() if (QDir(workingDirectory).exists(QLatin1String("Makefile"))) { QString qmakePath = QtVersionManager::findQMakeBinaryFromMakefile(workingDirectory); if (qtVersion->qmakeCommand() == qmakePath) { - m_needToRunQMake = !qt4bc->compareBuildConfigurationToImportFrom(workingDirectory); + m_needToRunQMake = !qt4bc->compareToImportFrom(workingDirectory); } } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 3e329ef6589..f8e0b6a5488 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -506,7 +506,7 @@ QString MaemoRunConfiguration::maddeRoot() const const QString MaemoRunConfiguration::sysRoot() const { if (const MaemoToolChain *tc = toolchain()) - return toolchain()->sysrootRoot(); + return tc->sysrootRoot(); return QString(); } From 675e0b2e52c66c2a7e33f6518fcd0d089a56a94d Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 13:56:40 +0100 Subject: [PATCH 24/62] Disable connects that currently don't work --- src/plugins/projectexplorer/projectwindow.cpp | 5 +++-- src/plugins/qt4projectmanager/qt4runconfiguration.cpp | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index b67f6be4f30..69d514b1881 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -522,8 +522,9 @@ BuildConfigurationComboBox::BuildConfigurationComboBox(Project *p, QWidget *pare if (index != -1) m_comboBox->setCurrentIndex(index); - connect(p, SIGNAL(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)), - this, SLOT(nameChanged(ProjectExplorer::BuildConfiguration *))); + // TODO +// connect(p, SIGNAL(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)), +// this, SLOT(nameChanged(ProjectExplorer::BuildConfiguration *))); connect(p, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(activeConfigurationChanged())); connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *)), diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp index 5cd5c93eb34..c6ef301676f 100644 --- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp @@ -81,8 +81,9 @@ Qt4RunConfiguration::Qt4RunConfiguration(Qt4Project *pro, const QString &proFile connect(pro, SIGNAL(activeBuildConfigurationChanged()), this, SIGNAL(baseEnvironmentChanged())); - connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), - this, SIGNAL(baseEnvironmentChanged())); +// TODO +// connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), +// this, SIGNAL(baseEnvironmentChanged())); } Qt4RunConfiguration::~Qt4RunConfiguration() From 9a17d4410467c4db74beebcaef48132b1d4e9000 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 13:57:08 +0100 Subject: [PATCH 25/62] Full name in signal declaration --- src/plugins/projectexplorer/project.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 8d35217e8d9..8e1ea86383d 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -136,8 +136,8 @@ signals: void removedRunConfiguration(ProjectExplorer::Project *p, const QString &name); void addedRunConfiguration(ProjectExplorer::Project *p, const QString &name); - void removedBuildConfiguration(ProjectExplorer::Project *p, BuildConfiguration *bc); - void addedBuildConfiguration(ProjectExplorer::Project *p, BuildConfiguration *bc); + void removedBuildConfiguration(ProjectExplorer::Project *p, ProjectExplorer::BuildConfiguration *bc); + void addedBuildConfiguration(ProjectExplorer::Project *p, ProjectExplorer::BuildConfiguration *bc); protected: /* This method is called when the project .user file is saved. Simply call From 68dae8bcafcad53d2460de67564c33ab129cc7d5 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 13:58:06 +0100 Subject: [PATCH 26/62] Fix crash on creating new qt4projects --- src/plugins/projectexplorer/project.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index c4cdcd84fce..941cd1806fa 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -275,8 +275,16 @@ bool Project::restoreSettingsImpl(PersistentSettingsReader &reader) } // Set Active Configuration - QString activeConfigurationName = reader.restoreValue("activebuildconfiguration").toString(); - m_activeBuildConfiguration = buildConfigurations().at(buildConfigurationNames.indexOf(activeConfigurationName)); + { // Try restoring the active configuration + QString activeConfigurationName = reader.restoreValue("activebuildconfiguration").toString(); + int index = buildConfigurationNames.indexOf(activeConfigurationName); + if (index != -1) + m_activeBuildConfiguration = buildConfigurations().at(index); + else if (!buildConfigurations().isEmpty()) + m_activeBuildConfiguration = buildConfigurations().at(0); + else + m_activeBuildConfiguration = 0; + } //Build Settings QVariant buildStepsVariant = reader.restoreValue("buildsteps"); From a8c4505475bfe92b16983979bc581434c1263828 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 14:13:59 +0100 Subject: [PATCH 27/62] Disable currently not working connect --- src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp | 4 ++-- .../projectexplorer/customexecutablerunconfiguration.cpp | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index a6ac74ec982..a4f2813218d 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -60,8 +60,8 @@ CMakeRunConfiguration::CMakeRunConfiguration(CMakeProject *pro, const QString &t this, SIGNAL(baseEnvironmentChanged())); // TODO - connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), - this, SIGNAL(baseEnvironmentChanged())); +// connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), +// this, SIGNAL(baseEnvironmentChanged())); } CMakeRunConfiguration::~CMakeRunConfiguration() diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp index dd8abc9c64e..d48750f6e6e 100644 --- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp +++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp @@ -252,8 +252,9 @@ CustomExecutableRunConfiguration::CustomExecutableRunConfiguration(Project *pro) connect(pro, SIGNAL(activeBuildConfigurationChanged()), this, SIGNAL(baseEnvironmentChanged())); - connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), - this, SIGNAL(baseEnvironmentChanged())); +// TODO +// connect(pro, SIGNAL(environmentChanged(ProjectExplorer::BuildConfiguration *)), +// this, SIGNAL(baseEnvironmentChanged())); } From a741261f10bd9c5295d3e99736e49f31db43fa6f Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 14:45:09 +0100 Subject: [PATCH 28/62] Fist set the display name then addBuildConfiguration on clone --- src/plugins/cmakeprojectmanager/cmakeproject.cpp | 1 - src/plugins/genericprojectmanager/genericproject.cpp | 1 - src/plugins/projectexplorer/buildconfiguration.h | 2 +- src/plugins/projectexplorer/buildsettingspropertiespage.cpp | 1 + src/plugins/qt4projectmanager/qt4project.cpp | 1 - 5 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 45b78955d36..98258c13375 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -138,7 +138,6 @@ BuildConfiguration *CMakeBuildConfigurationFactory::clone(ProjectExplorer::Build { CMakeBuildConfiguration *old = static_cast(source); CMakeBuildConfiguration *bc = new CMakeBuildConfiguration(old); - m_project->addBuildConfiguration(bc); return bc; } diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 9f149855597..242e04c8c89 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -159,7 +159,6 @@ BuildConfiguration *GenericBuildConfigurationFactory::create(const QString &type BuildConfiguration *GenericBuildConfigurationFactory::clone(BuildConfiguration *source) const { GenericBuildConfiguration *bc = new GenericBuildConfiguration(static_cast(source)); - m_project->addBuildConfiguration(bc); return bc; } diff --git a/src/plugins/projectexplorer/buildconfiguration.h b/src/plugins/projectexplorer/buildconfiguration.h index 216c1a24db6..49a4215493a 100644 --- a/src/plugins/projectexplorer/buildconfiguration.h +++ b/src/plugins/projectexplorer/buildconfiguration.h @@ -114,7 +114,7 @@ public: // project mode for editing virtual BuildConfiguration *create(const QString &type) const = 0; - // clones a given BuildConfiguration and adds it to the project + // clones a given BuildConfiguration, should not add it to the project virtual BuildConfiguration *clone(BuildConfiguration *source) const = 0; // restores a BuildConfiguration with the name and adds it to the project diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 12f8e13983f..3978b744a35 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -339,6 +339,7 @@ void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfigura m_buildConfiguration = m_project->buildConfigurationFactory()->clone(sourceConfiguration); m_buildConfiguration->setDisplayName(newDisplayName); + m_project->addBuildConfiguration(m_buildConfiguration); updateBuildSettings(); } diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 9bfbc47e178..88d2afad297 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -298,7 +298,6 @@ BuildConfiguration *Qt4BuildConfigurationFactory::clone(BuildConfiguration *sour { Qt4BuildConfiguration *oldbc = static_cast(source); Qt4BuildConfiguration *newbc = new Qt4BuildConfiguration(oldbc); - m_project->addBuildConfiguration(newbc); return newbc; } From 70adf628f1575d23efffe67b5a065cb682b8bf25 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 14:53:58 +0100 Subject: [PATCH 29/62] Fix endless recursion, broken somewhere in the buildconfiguration port --- src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp index a4f2813218d..30d6f0f3220 100644 --- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp @@ -194,7 +194,7 @@ ProjectExplorer::Environment CMakeRunConfiguration::baseEnvironment() const } else if (m_baseEnvironmentBase == CMakeRunConfiguration::SystemEnvironmentBase) { env = ProjectExplorer::Environment::systemEnvironment(); } else if (m_baseEnvironmentBase == CMakeRunConfiguration::BuildEnvironmentBase) { - env = environment(); + env = project()->activeBuildConfiguration()->environment(); } return env; } From 808bbf6436470e8106b9c9d226633411fb6f9d62 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 15:21:42 +0100 Subject: [PATCH 30/62] Fix crash on adding cmake build configuration --- src/plugins/cmakeprojectmanager/makestep.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp index 41ca1a6bd10..11ae56e0a91 100644 --- a/src/plugins/cmakeprojectmanager/makestep.cpp +++ b/src/plugins/cmakeprojectmanager/makestep.cpp @@ -258,7 +258,11 @@ void MakeStepConfigWidget::updateDetails() arguments << m_makeStep->additionalArguments(); CMakeBuildConfiguration *bc = m_makeStep->cmakeBuildConfiguration(); - m_summaryText = tr("Make: %1 %2").arg(bc->toolChain()->makeCommand(), arguments.join(" ")); + ProjectExplorer::ToolChain *tc = bc->toolChain(); + if (tc) + m_summaryText = tr("Make: %1 %2").arg(tc->makeCommand(), arguments.join(" ")); + else + m_summaryText = tr("Unknown Toolchain"); emit updateSummary(); } From 01ce6f0e2e6e7e3c73a1d3be4ad94e4d2bbc7713 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 15:43:17 +0100 Subject: [PATCH 31/62] Rebase is bad --- src/plugins/qt4projectmanager/qmakestep.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 385cd1d7026..f5828a16fbe 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -259,7 +259,6 @@ QString QMakeStepConfigWidget::summaryText() const void QMakeStepConfigWidget::qtVersionChanged() { - Q_UNUSED(bc) updateTitleLabel(); updateEffectiveQMakeCall(); } From b4be611e1bb7c0a58dccf754c228174631a47512 Mon Sep 17 00:00:00 2001 From: con Date: Mon, 30 Nov 2009 15:45:16 +0100 Subject: [PATCH 32/62] Project name in new project wizard was not pre-selected. Instead of relying on magic in setFocus(TabFocusReason) use selectAll() Task-number: QTCREATORBUG-369 --- src/libs/utils/projectintropage.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libs/utils/projectintropage.cpp b/src/libs/utils/projectintropage.cpp index e6ee2921bff..3c77494b250 100644 --- a/src/libs/utils/projectintropage.cpp +++ b/src/libs/utils/projectintropage.cpp @@ -63,7 +63,7 @@ ProjectIntroPage::ProjectIntroPage(QWidget *parent) : m_d->m_ui.setupUi(this); hideStatusLabel(); m_d->m_ui.nameLineEdit->setInitialText(tr("")); - m_d->m_ui.nameLineEdit->setFocus(Qt::TabFocusReason); + m_d->m_ui.nameLineEdit->setFocus(); connect(m_d->m_ui.pathChooser, SIGNAL(changed(QString)), this, SLOT(slotChanged())); connect(m_d->m_ui.nameLineEdit, SIGNAL(textChanged(QString)), this, SLOT(slotChanged())); connect(m_d->m_ui.pathChooser, SIGNAL(returnPressed()), this, SLOT(slotActivated())); @@ -98,6 +98,7 @@ void ProjectIntroPage::setPath(const QString &path) void ProjectIntroPage::setName(const QString &name) { m_d->m_ui.nameLineEdit->setText(name); + m_d->m_ui.nameLineEdit->selectAll(); } QString ProjectIntroPage::description() const From 9c66c068201feab7035b5991b199b37fa8c9ddc2 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Mon, 30 Nov 2009 15:17:34 +0100 Subject: [PATCH 33/62] mi parser: don't construct dummy tuples, but parse lists directly --- src/plugins/debugger/gdb/gdbengine.cpp | 7 +++---- src/plugins/debugger/gdb/gdbmi.cpp | 7 +++++++ src/plugins/debugger/gdb/gdbmi.h | 2 +- src/plugins/debugger/watchutils.cpp | 14 ++++---------- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index b8fa6fa6747..7a2c00b12de 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -155,9 +155,8 @@ static bool parseConsoleStream(const GdbResponse &response, GdbMi *contents) out = out.left(out.lastIndexOf('"')); // optimization: dumper output never needs real C unquoting out.replace('\\', ""); - out = "dummy={" + out + "}"; - contents->fromString(out); + contents->fromStringMultiple(out); //qDebug() << "CONTENTS" << contents->toString(true); return contents->isValid(); } @@ -3584,8 +3583,8 @@ void GdbEngine::handleStackFrame(const GdbResponse &response) << out.left(pos); out = out.mid(pos); } - GdbMi all("[" + out + "]"); - //GdbMi all(out); + GdbMi all; + all.fromStringMultiple(out); //qDebug() << "\n\n\nALL: " << all.toString() << "\n"; GdbMi locals = all.findChild("locals"); diff --git a/src/plugins/debugger/gdb/gdbmi.cpp b/src/plugins/debugger/gdb/gdbmi.cpp index ffac5d76d15..639e698d36f 100644 --- a/src/plugins/debugger/gdb/gdbmi.cpp +++ b/src/plugins/debugger/gdb/gdbmi.cpp @@ -348,6 +348,13 @@ void GdbMi::fromString(const QByteArray &ba) parseResultOrValue(from, to); } +void GdbMi::fromStringMultiple(const QByteArray &ba) +{ + const char *from = ba.constBegin(); + const char *to = ba.constEnd(); + parseTuple_helper(from, to); +} + GdbMi GdbMi::findChild(const char *name) const { for (int i = 0; i < m_children.size(); ++i) diff --git a/src/plugins/debugger/gdb/gdbmi.h b/src/plugins/debugger/gdb/gdbmi.h index 24295afea66..a4ce8375030 100644 --- a/src/plugins/debugger/gdb/gdbmi.h +++ b/src/plugins/debugger/gdb/gdbmi.h @@ -91,7 +91,6 @@ class GdbMi { public: GdbMi() : m_type(Invalid) {} - explicit GdbMi(const QByteArray &str) { fromString(str); } QByteArray m_name; QByteArray m_data; @@ -126,6 +125,7 @@ public: QByteArray toString(bool multiline = false, int indent = 0) const; void fromString(const QByteArray &str); + void fromStringMultiple(const QByteArray &str); void setStreamOutput(const QByteArray &name, const QByteArray &content); private: diff --git a/src/plugins/debugger/watchutils.cpp b/src/plugins/debugger/watchutils.cpp index f5ef9250e7e..1c07ef499e3 100644 --- a/src/plugins/debugger/watchutils.cpp +++ b/src/plugins/debugger/watchutils.cpp @@ -975,11 +975,8 @@ bool QtDumperHelper::parseQuery(const GdbMi &contents, Debugger debugger) // parse a query bool QtDumperHelper::parseQuery(const char *data, Debugger debugger) { - QByteArray fullData = data; - fullData.insert(0, '{'); - fullData.append(data); - fullData.append('}'); - GdbMi root(fullData); + GdbMi root; + root.fromStringMultiple(QByteArray(data)); if (!root.isValid()) return false; return parseQuery(root, debugger); @@ -1475,11 +1472,8 @@ bool QtDumperHelper::parseValue(const char *data, QList *l) { l->clear(); - QByteArray fullData = data; - fullData.insert(0, '{'); - fullData.append(data); - fullData.append('}'); - GdbMi root(fullData); + GdbMi root; + root.fromStringMultiple(QByteArray(data)); if (!root.isValid()) return false; gbdMiToWatchData(root, GdbMiRecursionContext(), l); From 8151563f647fa1f1649e0849ed6494b6c6f8ea9b Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 15:56:42 +0100 Subject: [PATCH 34/62] Fix compile, remove embeddedpropertiespage --- .../embeddedpropertiespage.cpp | 141 ------------------ .../embeddedpropertiespage.h | 85 ----------- .../embeddedpropertiespage.ui | 46 ------ .../qt4projectmanager/qt4projectmanager.pro | 3 - .../qt4projectmanagerplugin.cpp | 1 - 5 files changed, 276 deletions(-) delete mode 100644 src/plugins/qt4projectmanager/embeddedpropertiespage.cpp delete mode 100644 src/plugins/qt4projectmanager/embeddedpropertiespage.h delete mode 100644 src/plugins/qt4projectmanager/embeddedpropertiespage.ui diff --git a/src/plugins/qt4projectmanager/embeddedpropertiespage.cpp b/src/plugins/qt4projectmanager/embeddedpropertiespage.cpp deleted file mode 100644 index 2fa903fe3ab..00000000000 --- a/src/plugins/qt4projectmanager/embeddedpropertiespage.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** Commercial Usage -** -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** 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. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** -**************************************************************************/ - -#include "embeddedpropertiespage.h" -#include "qt4project.h" - -#include -#include - -using namespace ProjectExplorer; -using namespace Qt4ProjectManager; -using namespace Qt4ProjectManager::Internal; - -/// -/// EmbeddedPropertiesPanelFactory -/// - -bool EmbeddedPropertiesPanelFactory::supports(Project *project) -{ -#ifdef Q_OS_WIN - Qt4Project *pro = qobject_cast(project); - if (pro) { - return true; - } -#else - Q_UNUSED(project) -#endif - return false; -} - -ProjectExplorer::IPropertiesPanel *EmbeddedPropertiesPanelFactory::createPanel( - ProjectExplorer::Project *project) -{ - return new EmbeddedPropertiesPanel(project); -} - -/// -/// EmbeddedPropertiesPanel -/// - -EmbeddedPropertiesPanel::EmbeddedPropertiesPanel(ProjectExplorer::Project *project) : - m_widget(new EmbeddedPropertiesWidget(project)), - m_icon(":/projectexplorer/images/rebuild.png") -{ -} - -EmbeddedPropertiesPanel::~EmbeddedPropertiesPanel() -{ - delete m_widget; -} - -QString EmbeddedPropertiesPanel::name() const -{ - return QApplication::tr("Embedded Linux"); -} - -QWidget *EmbeddedPropertiesPanel::widget() const -{ - return m_widget; -} - -QIcon EmbeddedPropertiesPanel::icon() const -{ - return m_icon; -} - -/// -/// EmbeddedPropertiesWidget -/// - -EmbeddedPropertiesWidget::EmbeddedPropertiesWidget(ProjectExplorer::Project *project) - : QWidget() -{ - m_ui.setupUi(this); - -#ifdef Q_OS_WIN - m_ui.virtualBoxCheckbox->setChecked(project->value("useVBOX").toBool()); - - // Find all skins - QString skin = QFileInfo(project->value("VNCSkin").toString()).fileName(); - QStringList skins; - - QDir skinDir = QApplication::applicationDirPath(); - skinDir.cdUp(); - if (skinDir.cd("qtembeddedtools") && skinDir.cd("qsimplevnc")) { - skins = skinDir.entryList( QDir::Dirs | QDir::NoDotAndDotDot ); - } - m_ui.skinComboBox->clear(); - m_ui.skinComboBox->addItems(skins); - if (!skin.isEmpty()) { - int index = m_ui.skinComboBox->findText(skin); - if (index != -1) - m_ui.skinComboBox->setCurrentIndex(index); - } -#else - Q_UNUSED(project) -#endif - //TODO readd finish code - /* - project->setValue("useVBOX", m_ui.virtualBoxCheckbox->isChecked()); - - //Skin - QDir skinDir = QApplication::applicationDirPath(); - skinDir.cdUp(); - skinDir.cd("qtembeddedtools"); - skinDir.cd("qsimplevnc"); - project->setValue("VNCSkin", skinDir.absolutePath() + "/" + m_ui.skinComboBox->currentText() + "/" + m_ui.skinComboBox->currentText()); - - */ -} - -EmbeddedPropertiesWidget::~EmbeddedPropertiesWidget() -{ -} - diff --git a/src/plugins/qt4projectmanager/embeddedpropertiespage.h b/src/plugins/qt4projectmanager/embeddedpropertiespage.h deleted file mode 100644 index 06342974c00..00000000000 --- a/src/plugins/qt4projectmanager/embeddedpropertiespage.h +++ /dev/null @@ -1,85 +0,0 @@ -/************************************************************************** -** -** This file is part of Qt Creator -** -** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -** -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** Commercial Usage -** -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** 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. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** -**************************************************************************/ - -#ifndef EMBEDDEDPROPERTIESPAGE_H -#define EMBEDDEDPROPERTIESPAGE_H - -#include "ui_embeddedpropertiespage.h" - -#include - -#include - -namespace ProjectExplorer { -class Project; -} - -namespace Qt4ProjectManager { - -namespace Internal { - -class EmbeddedPropertiesWidget; - -class EmbeddedPropertiesPanelFactory : public ProjectExplorer::IPanelFactory -{ -public: - virtual bool supports(ProjectExplorer::Project *project); - ProjectExplorer::IPropertiesPanel *createPanel(ProjectExplorer::Project *project); -}; - -class EmbeddedPropertiesPanel : public ProjectExplorer::IPropertiesPanel -{ -public: - EmbeddedPropertiesPanel(ProjectExplorer::Project *project); - ~EmbeddedPropertiesPanel(); - - QString name() const; - QWidget *widget() const; - QIcon icon() const; - -private: - EmbeddedPropertiesWidget *m_widget; - QIcon m_icon; -}; - -class EmbeddedPropertiesWidget : public QWidget -{ - Q_OBJECT -public: - EmbeddedPropertiesWidget(ProjectExplorer::Project *project); - virtual ~EmbeddedPropertiesWidget(); - private: - Ui_EmbeddedPropertiesPage m_ui; - ProjectExplorer::Project *m_pro; -}; - -} // namespace Internal -} // namespace Qt4ProjectManager - -#endif // EMBEDDEDPROPERTIESPAGE_H diff --git a/src/plugins/qt4projectmanager/embeddedpropertiespage.ui b/src/plugins/qt4projectmanager/embeddedpropertiespage.ui deleted file mode 100644 index f4f42aa80cb..00000000000 --- a/src/plugins/qt4projectmanager/embeddedpropertiespage.ui +++ /dev/null @@ -1,46 +0,0 @@ - - EmbeddedPropertiesPage - - - - 0 - 0 - 649 - 302 - - - - - - - QFormLayout::ExpandingFieldsGrow - - - - - Use Virtual Box -Note: This adds the toolchain to the build environment and runs the program inside a virtual machine. -It also automatically sets the correct Qt version. - - - - - - - Skin: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - - - - - - - diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index 556deeb6a14..d3847c1202b 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro @@ -28,7 +28,6 @@ HEADERS += qt4projectmanagerplugin.h \ qt4projectmanagerconstants.h \ makestep.h \ qmakestep.h \ - embeddedpropertiespage.h \ qt4runconfiguration.h \ qtmodulesinfo.h \ qt4projectconfigwidget.h \ @@ -64,7 +63,6 @@ SOURCES += qt4projectmanagerplugin.cpp \ wizards/qtwizard.cpp \ makestep.cpp \ qmakestep.cpp \ - embeddedpropertiespage.cpp \ qt4runconfiguration.cpp \ qtmodulesinfo.cpp \ qt4projectconfigwidget.cpp \ @@ -80,7 +78,6 @@ SOURCES += qt4projectmanagerplugin.cpp \ FORMS += makestep.ui \ qmakestep.ui \ qt4projectconfigwidget.ui \ - embeddedpropertiespage.ui \ qtversionmanager.ui \ showbuildlog.ui \ gettingstartedwelcomepagewidget.ui diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index 9471e3d1f30..a6fbe1c9806 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -38,7 +38,6 @@ #include "profileeditorfactory.h" #include "qt4projectmanagerconstants.h" #include "qt4project.h" -#include "embeddedpropertiespage.h" #include "qt4runconfiguration.h" #include "profilereader.h" #include "qtversionmanager.h" From 5fc8324b8bb72ed5156ce52db2e6e506e568b405 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 15:59:27 +0100 Subject: [PATCH 35/62] compile on windows --- src/plugins/qt4projectmanager/qmakestep.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index f5828a16fbe..6a7f03aaaa3 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -84,7 +84,7 @@ QStringList QMakeStep::allArguments() arguments << "-spec" << bc->qtVersion()->mkspec(); #ifdef Q_OS_WIN - ToolChain::ToolChainType type = pro->toolChainType(bc); + ToolChain::ToolChainType type = bc->toolChainType(); if (type == ToolChain::GCC_MAEMO) arguments << QLatin1String("-unix"); #endif From e87bd302dacc92817f7b432788028f5ba085d09e Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 30 Nov 2009 16:45:15 +0100 Subject: [PATCH 36/62] Debugger: Protect reloadRegisters against early calls. Check for correct state (InferiorStopped). --- src/plugins/debugger/cdb/cdbdebugengine.cpp | 2 ++ src/plugins/debugger/gdb/gdbengine.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/plugins/debugger/cdb/cdbdebugengine.cpp b/src/plugins/debugger/cdb/cdbdebugengine.cpp index 08c552dab8b..b538b7fe675 100644 --- a/src/plugins/debugger/cdb/cdbdebugengine.cpp +++ b/src/plugins/debugger/cdb/cdbdebugengine.cpp @@ -1588,6 +1588,8 @@ QList CdbDebugEngine::moduleSymbols(const QString &moduleName) void CdbDebugEngine::reloadRegisters() { + if (state() != InferiorStopped) + return; const int intBase = 10; if (debugCDB) qDebug() << Q_FUNC_INFO << intBase; diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp index 900c131fe8a..bd5d6c5ee71 100644 --- a/src/plugins/debugger/gdb/gdbengine.cpp +++ b/src/plugins/debugger/gdb/gdbengine.cpp @@ -2555,6 +2555,8 @@ void GdbEngine::handleStackListThreads(const GdbResponse &response) void GdbEngine::reloadRegisters() { + if (state() != InferiorStopped) + return; if (!m_registerNamesListed) { postCommand(_("-data-list-register-names"), CB(handleRegisterListNames)); m_registerNamesListed = true; From 527a9bd526d854d3f43b633a94af6dea642297db Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 30 Nov 2009 16:30:21 +0100 Subject: [PATCH 37/62] Inital support for Q_D/Q_Q declarations. --- src/libs/cplusplus/pp-engine.cpp | 4 +++ src/plugins/cppeditor/cppeditor.cpp | 44 ++++++++++++++++++------- src/plugins/cppeditor/cppeditor.h | 5 ++- src/shared/cplusplus/AST.cpp | 14 ++++++++ src/shared/cplusplus/AST.h | 20 +++++++++++ src/shared/cplusplus/ASTMatch0.cpp | 8 +++++ src/shared/cplusplus/ASTMatcher.cpp | 19 +++++++++++ src/shared/cplusplus/ASTMatcher.h | 1 + src/shared/cplusplus/ASTVisit.cpp | 8 +++++ src/shared/cplusplus/ASTVisitor.h | 2 ++ src/shared/cplusplus/ASTfwd.h | 1 + src/shared/cplusplus/CheckStatement.cpp | 33 +++++++++++++++++++ src/shared/cplusplus/CheckStatement.h | 1 + src/shared/cplusplus/Keywords.cpp | 12 ++++++- src/shared/cplusplus/Parser.cpp | 10 ++++++ src/shared/cplusplus/Token.cpp | 2 +- src/shared/cplusplus/Token.h | 4 ++- src/tools/cplusplus/Main.cpp | 26 +++++++-------- 18 files changed, 185 insertions(+), 29 deletions(-) diff --git a/src/libs/cplusplus/pp-engine.cpp b/src/libs/cplusplus/pp-engine.cpp index c2bb068bced..2341df2423d 100644 --- a/src/libs/cplusplus/pp-engine.cpp +++ b/src/libs/cplusplus/pp-engine.cpp @@ -1462,6 +1462,10 @@ bool Preprocessor::isQtReservedWord(const QByteArray ¯oId) const return true; else if (size == 6 && macroId.at(0) == 'Q' && macroId == "Q_SLOT") return true; + else if (size == 3 && macroId.at(0) == 'Q' && macroId == "Q_D") + return true; + else if (size == 3 && macroId.at(0) == 'Q' && macroId == "Q_Q") + return true; else if (size == 6 && macroId.at(0) == 'S' && macroId == "SIGNAL") return true; else if (size == 4 && macroId.at(0) == 'S' && macroId == "SLOT") diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 8e177406bc6..e87e533a639 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -186,19 +186,20 @@ private: } }; -class FindUses: protected ASTVisitor +class FindLocalUses: protected ASTVisitor { Scope *_functionScope; - FindScope findScope; public: - FindUses(TranslationUnit *translationUnit) - : ASTVisitor(translationUnit) + FindLocalUses(TranslationUnit *translationUnit) + : ASTVisitor(translationUnit), hasD(false), hasQ(false) { } // local and external uses. SemanticInfo::LocalUseMap localUses; + bool hasD; + bool hasQ; void operator()(FunctionDefinitionAST *ast) { @@ -357,6 +358,16 @@ protected: return false; } + virtual bool visit(QtMemberDeclarationAST *ast) + { + if (tokenKind(ast->q_token) == T_Q_D) + hasD = true; + else + hasQ = true; + + return true; + } + virtual bool visit(ExpressionOrDeclarationStatementAST *ast) { accept(ast->declaration); @@ -929,6 +940,7 @@ void CPPEditor::updateMethodBoxIndex() } void CPPEditor::highlightUses(const QList &uses, + const SemanticInfo &semanticInfo, QList *selections) { bool isUnused = false; @@ -951,6 +963,14 @@ void CPPEditor::highlightUses(const QList &uses, sel.cursor.setPosition(anchor); sel.cursor.setPosition(position, QTextCursor::KeepAnchor); + if (isUnused) { + if (semanticInfo.hasQ && sel.cursor.selectedText() == QLatin1String("q")) + continue; // skip q + + else if (semanticInfo.hasD && sel.cursor.selectedText() == QLatin1String("d")) + continue; // skip d + } + selections->append(sel); } } @@ -1953,14 +1973,12 @@ void CPPEditor::updateSemanticInfo(const SemanticInfo &semanticInfo) } } - if (uses.size() == 1) { + if (uses.size() == 1) // it's an unused declaration - highlightUses(uses, &unusedSelections); - } else if (good) { - QList selections; - highlightUses(uses, &selections); - m_renameSelections += selections; - } + highlightUses(uses, semanticInfo, &unusedSelections); + + else if (good && m_renameSelections.isEmpty()) + highlightUses(uses, semanticInfo, &m_renameSelections); } setExtraSelections(UnusedSymbolSelection, unusedSelections); @@ -2078,7 +2096,7 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source) FunctionDefinitionUnderCursor functionDefinitionUnderCursor(translationUnit); FunctionDefinitionAST *currentFunctionDefinition = functionDefinitionUnderCursor(ast, source.line, source.column); - FindUses useTable(translationUnit); + FindLocalUses useTable(translationUnit); useTable(currentFunctionDefinition); SemanticInfo semanticInfo; @@ -2086,6 +2104,8 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source) semanticInfo.snapshot = snapshot; semanticInfo.doc = doc; semanticInfo.localUses = useTable.localUses; + semanticInfo.hasQ = useTable.hasQ; + semanticInfo.hasD = useTable.hasD; return semanticInfo; } diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h index 16bf04f94ec..716240fd3c9 100644 --- a/src/plugins/cppeditor/cppeditor.h +++ b/src/plugins/cppeditor/cppeditor.h @@ -79,10 +79,12 @@ public: typedef QHashIterator > LocalUseIterator; SemanticInfo() - : revision(-1) + : revision(-1), hasQ(false), hasD(false) { } int revision; + bool hasQ: 1; + bool hasD: 1; CPlusPlus::Snapshot snapshot; CPlusPlus::Document::Ptr doc; LocalUseMap localUses; @@ -253,6 +255,7 @@ private: SemanticHighlighter::Source currentSource(bool force = false); void highlightUses(const QList &uses, + const SemanticInfo &semanticInfo, QList *selections); void createToolBar(CPPEditorEditable *editable); diff --git a/src/shared/cplusplus/AST.cpp b/src/shared/cplusplus/AST.cpp index b4b1f1a3efb..e901b67e92d 100644 --- a/src/shared/cplusplus/AST.cpp +++ b/src/shared/cplusplus/AST.cpp @@ -246,7 +246,21 @@ unsigned QtMethodAST::lastToken() const return method_token + 1; } +unsigned QtMemberDeclarationAST::firstToken() const +{ + return q_token; +} +unsigned QtMemberDeclarationAST::lastToken() const +{ + if (rparen_token) + return rparen_token + 1; + else if (type_id) + return type_id->lastToken(); + else if (lparen_token) + return lparen_token + 1; + return q_token + 1; +} unsigned BinaryExpressionAST::firstToken() const { diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h index eb647312816..3902fcb5c52 100644 --- a/src/shared/cplusplus/AST.h +++ b/src/shared/cplusplus/AST.h @@ -246,6 +246,7 @@ public: virtual PostfixDeclaratorAST *asPostfixDeclarator() { return 0; } virtual PostfixExpressionAST *asPostfixExpression() { return 0; } virtual PtrOperatorAST *asPtrOperator() { return 0; } + virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return 0; } virtual QtMethodAST *asQtMethod() { return 0; } virtual QualifiedNameAST *asQualifiedName() { return 0; } virtual ReferenceAST *asReference() { return 0; } @@ -582,6 +583,25 @@ protected: virtual bool match0(AST *, ASTMatcher *); }; +class CPLUSPLUS_EXPORT QtMemberDeclarationAST: public StatementAST +{ +public: + unsigned q_token; + unsigned lparen_token; + ExpressionAST *type_id; + unsigned rparen_token; + +public: + virtual QtMemberDeclarationAST *asQtMemberDeclaration() { return this; } + + virtual unsigned firstToken() const; + virtual unsigned lastToken() const; + +protected: + virtual void accept0(ASTVisitor *visitor); + virtual bool match0(AST *, ASTMatcher *); +}; + class CPLUSPLUS_EXPORT BinaryExpressionAST: public ExpressionAST { public: diff --git a/src/shared/cplusplus/ASTMatch0.cpp b/src/shared/cplusplus/ASTMatch0.cpp index 7c4ff19ae6e..e16c0788080 100644 --- a/src/shared/cplusplus/ASTMatch0.cpp +++ b/src/shared/cplusplus/ASTMatch0.cpp @@ -128,6 +128,14 @@ bool QtMethodAST::match0(AST *pattern, ASTMatcher *matcher) return false; } +bool QtMemberDeclarationAST::match0(AST *pattern, ASTMatcher *matcher) +{ + if (QtMemberDeclarationAST *_other = pattern->asQtMemberDeclaration()) + return matcher->match(this, _other); + + return false; +} + bool BinaryExpressionAST::match0(AST *pattern, ASTMatcher *matcher) { if (BinaryExpressionAST *_other = pattern->asBinaryExpression()) diff --git a/src/shared/cplusplus/ASTMatcher.cpp b/src/shared/cplusplus/ASTMatcher.cpp index 9ded92f8ef9..b7920f767f4 100644 --- a/src/shared/cplusplus/ASTMatcher.cpp +++ b/src/shared/cplusplus/ASTMatcher.cpp @@ -274,6 +274,25 @@ bool ASTMatcher::match(QtMethodAST *node, QtMethodAST *pattern) return true; } +bool ASTMatcher::match(QtMemberDeclarationAST *node, QtMemberDeclarationAST *pattern) +{ + (void) node; + (void) pattern; + + pattern->q_token = node->q_token; + + pattern->lparen_token = node->lparen_token; + + if (! pattern->type_id) + pattern->type_id = node->type_id; + else if (! AST::match(node->type_id, pattern->type_id, this)) + return false; + + pattern->rparen_token = node->rparen_token; + + return true; +} + bool ASTMatcher::match(BinaryExpressionAST *node, BinaryExpressionAST *pattern) { (void) node; diff --git a/src/shared/cplusplus/ASTMatcher.h b/src/shared/cplusplus/ASTMatcher.h index f299dc51bbd..c3490ac69be 100644 --- a/src/shared/cplusplus/ASTMatcher.h +++ b/src/shared/cplusplus/ASTMatcher.h @@ -135,6 +135,7 @@ public: virtual bool match(UsingDirectiveAST *node, UsingDirectiveAST *pattern); virtual bool match(WhileStatementAST *node, WhileStatementAST *pattern); virtual bool match(QtMethodAST *node, QtMethodAST *pattern); + virtual bool match(QtMemberDeclarationAST *node, QtMemberDeclarationAST *pattern); virtual bool match(ObjCClassDeclarationAST *node, ObjCClassDeclarationAST *pattern); virtual bool match(ObjCClassForwardDeclarationAST *node, ObjCClassForwardDeclarationAST *pattern); virtual bool match(ObjCProtocolDeclarationAST *node, ObjCProtocolDeclarationAST *pattern); diff --git a/src/shared/cplusplus/ASTVisit.cpp b/src/shared/cplusplus/ASTVisit.cpp index 6e26f772b24..877dd8df743 100644 --- a/src/shared/cplusplus/ASTVisit.cpp +++ b/src/shared/cplusplus/ASTVisit.cpp @@ -131,6 +131,14 @@ void QtMethodAST::accept0(ASTVisitor *visitor) visitor->endVisit(this); } +void QtMemberDeclarationAST::accept0(ASTVisitor *visitor) +{ + if (visitor->visit(this)) { + accept(type_id, visitor); + } + visitor->endVisit(this); +} + void BinaryExpressionAST::accept0(ASTVisitor *visitor) { if (visitor->visit(this)) { diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h index 0a42b6f4d4e..7d73ba3ed54 100644 --- a/src/shared/cplusplus/ASTVisitor.h +++ b/src/shared/cplusplus/ASTVisitor.h @@ -198,6 +198,7 @@ public: virtual bool visit(UsingDirectiveAST *) { return true; } virtual bool visit(WhileStatementAST *) { return true; } virtual bool visit(QtMethodAST *) { return true; } + virtual bool visit(QtMemberDeclarationAST *) { return true; } // ObjC++ virtual bool visit(ObjCClassDeclarationAST *) { return true; } @@ -323,6 +324,7 @@ public: virtual void endVisit(UsingDirectiveAST *) { } virtual void endVisit(WhileStatementAST *) { } virtual void endVisit(QtMethodAST *) { } + virtual void endVisit(QtMemberDeclarationAST *) { } // ObjC++ virtual void endVisit(ObjCClassDeclarationAST *) { } diff --git a/src/shared/cplusplus/ASTfwd.h b/src/shared/cplusplus/ASTfwd.h index 18f1987d5e9..cefdfdc3815 100644 --- a/src/shared/cplusplus/ASTfwd.h +++ b/src/shared/cplusplus/ASTfwd.h @@ -162,6 +162,7 @@ class PostfixAST; class PostfixDeclaratorAST; class PostfixExpressionAST; class PtrOperatorAST; +class QtMemberDeclarationAST; class QtMethodAST; class QualifiedNameAST; class ReferenceAST; diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp index 1273f816105..dec68b1ea4c 100644 --- a/src/shared/cplusplus/CheckStatement.cpp +++ b/src/shared/cplusplus/CheckStatement.cpp @@ -54,6 +54,9 @@ #include "CoreTypes.h" #include "Control.h" #include "Symbols.h" +#include "Names.h" +#include "Literals.h" +#include using namespace CPlusPlus; @@ -307,4 +310,34 @@ bool CheckStatement::visit(WhileStatementAST *ast) return false; } +bool CheckStatement::visit(QtMemberDeclarationAST *ast) +{ + Name *name = 0; + if (tokenKind(ast->q_token) == T_Q_D) + name = control()->nameId(control()->findOrInsertIdentifier("d")); + else + name = control()->nameId(control()->findOrInsertIdentifier("q")); + + FullySpecifiedType declTy = semantic()->check(ast->type_id, _scope); + + if (tokenKind(ast->q_token) == T_Q_D) { + if (NamedType *namedTy = declTy->asNamedType()) { + if (NameId *nameId = namedTy->name()->asNameId()) { + std::string privateClass; + privateClass += nameId->identifier()->chars(); + privateClass += "Private"; + + Name *privName = control()->nameId(control()->findOrInsertIdentifier(privateClass.c_str(), privateClass.size())); + declTy.setType(control()->namedType(privName)); + } + } + } + + Declaration *symbol = control()->newDeclaration(/*generated*/ 0, name); + symbol->setType(control()->pointerType(declTy)); + + _scope->enterSymbol(symbol); + + return false; +} diff --git a/src/shared/cplusplus/CheckStatement.h b/src/shared/cplusplus/CheckStatement.h index 6bd0c868ab9..e31d507a5ef 100644 --- a/src/shared/cplusplus/CheckStatement.h +++ b/src/shared/cplusplus/CheckStatement.h @@ -88,6 +88,7 @@ protected: virtual bool visit(TryBlockStatementAST *ast); virtual bool visit(CatchClauseAST *ast); virtual bool visit(WhileStatementAST *ast); + virtual bool visit(QtMemberDeclarationAST *ast); private: StatementAST *_statement; diff --git a/src/shared/cplusplus/Keywords.cpp b/src/shared/cplusplus/Keywords.cpp index 48af1244736..6da25125f7b 100644 --- a/src/shared/cplusplus/Keywords.cpp +++ b/src/shared/cplusplus/Keywords.cpp @@ -65,7 +65,7 @@ static inline int classify2(const char *s, bool) { return T_IDENTIFIER; } -static inline int classify3(const char *s, bool) { +static inline int classify3(const char *s, bool q) { if (s[0] == 'a') { if (s[1] == 's') { if (s[2] == 'm') { @@ -101,6 +101,16 @@ static inline int classify3(const char *s, bool) { } } } + else if (q && s[0] == 'Q') { + if (s[1] == '_') { + if (s[2] == 'D') { + return T_Q_D; + } + else if (s[2] == 'Q') { + return T_Q_Q; + } + } + } return T_IDENTIFIER; } diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 7e464b7d8ba..a4be22f5b4c 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -2104,6 +2104,16 @@ bool Parser::parseStatement(StatementAST *&node) if (objCEnabled()) return parseObjCSynchronizedStatement(node); + case T_Q_D: + case T_Q_Q: { + QtMemberDeclarationAST *ast = new (_pool) QtMemberDeclarationAST; + ast->q_token = consumeToken(); + match(T_LPAREN, &ast->lparen_token); + parseTypeId(ast->type_id); + match(T_RPAREN, &ast->rparen_token); + node = ast; + } return true; + default: if (LA() == T_IDENTIFIER && LA(2) == T_COLON) return parseLabeledStatement(node); diff --git a/src/shared/cplusplus/Token.cpp b/src/shared/cplusplus/Token.cpp index 48bf61354f0..ce661e43b05 100644 --- a/src/shared/cplusplus/Token.cpp +++ b/src/shared/cplusplus/Token.cpp @@ -91,7 +91,7 @@ static const char *token_names[] = { ("@protected"), ("@protocol"), ("@public"), ("@required"), ("@selector"), ("@synchronized"), ("@synthesize"), ("@throw"), ("@try"), - ("SIGNAL"), ("SLOT"), ("Q_SIGNAL"), ("Q_SLOT"), ("signals"), ("slots"), ("Q_FOREACH") + ("SIGNAL"), ("SLOT"), ("Q_SIGNAL"), ("Q_SLOT"), ("signals"), ("slots"), ("Q_FOREACH"), ("Q_D"), ("Q_Q") }; Token::Token() : diff --git a/src/shared/cplusplus/Token.h b/src/shared/cplusplus/Token.h index 3829baa651f..acbe3927ba2 100644 --- a/src/shared/cplusplus/Token.h +++ b/src/shared/cplusplus/Token.h @@ -236,8 +236,10 @@ enum Kind { T_Q_SIGNALS, T_Q_SLOTS, T_Q_FOREACH, + T_Q_D, + T_Q_Q, - T_LAST_KEYWORD = T_Q_FOREACH, + T_LAST_KEYWORD = T_Q_Q, // aliases T_OR = T_PIPE_PIPE, diff --git a/src/tools/cplusplus/Main.cpp b/src/tools/cplusplus/Main.cpp index 342c7751fd1..7c2e65d22df 100644 --- a/src/tools/cplusplus/Main.cpp +++ b/src/tools/cplusplus/Main.cpp @@ -100,7 +100,7 @@ class FindASTNodes: protected ASTVisitor { public: FindASTNodes(Document::Ptr doc, QTextDocument *document) - : ASTVisitor(doc->control()), document(document) + : ASTVisitor(doc->translationUnit()), document(document) { } @@ -159,8 +159,8 @@ class Accept0CG: protected ASTVisitor QTextStream *out; public: - Accept0CG(const QDir &cplusplusDir, Control *control) - : ASTVisitor(control), _cplusplusDir(cplusplusDir), out(0) + Accept0CG(const QDir &cplusplusDir, TranslationUnit *unit) + : ASTVisitor(unit), _cplusplusDir(cplusplusDir), out(0) { } void operator()(AST *ast) @@ -296,8 +296,8 @@ class Match0CG: protected ASTVisitor QTextStream *out; public: - Match0CG(const QDir &cplusplusDir, Control *control) - : ASTVisitor(control), _cplusplusDir(cplusplusDir), out(0) + Match0CG(const QDir &cplusplusDir, TranslationUnit *unit) + : ASTVisitor(unit), _cplusplusDir(cplusplusDir), out(0) { } void operator()(AST *ast) @@ -406,8 +406,8 @@ class MatcherCPPCG: protected ASTVisitor QTextStream *out; public: - MatcherCPPCG(const QDir &cplusplusDir, Control *control) - : ASTVisitor(control), _cplusplusDir(cplusplusDir), out(0) + MatcherCPPCG(const QDir &cplusplusDir, TranslationUnit *unit) + : ASTVisitor(unit), _cplusplusDir(cplusplusDir), out(0) { } void operator()(AST *ast) @@ -560,7 +560,7 @@ class RemoveCastMethods: protected ASTVisitor { public: RemoveCastMethods(Document::Ptr doc, QTextDocument *document) - : ASTVisitor(doc->control()), document(document) {} + : ASTVisitor(doc->translationUnit()), document(document) {} QList operator()(AST *ast) { @@ -666,13 +666,13 @@ QStringList generateAST_H(const Snapshot &snapshot, const QDir &cplusplusDir) out << document.toPlainText(); } - Accept0CG cg(cplusplusDir, AST_h_document->control()); + Accept0CG cg(cplusplusDir, AST_h_document->translationUnit()); cg(AST_h_document->translationUnit()->ast()); - Match0CG cg2(cplusplusDir, AST_h_document->control()); + Match0CG cg2(cplusplusDir, AST_h_document->translationUnit()); cg2(AST_h_document->translationUnit()->ast()); - MatcherCPPCG cg3(cplusplusDir, AST_h_document->control()); + MatcherCPPCG cg3(cplusplusDir, AST_h_document->translationUnit()); cg3(AST_h_document->translationUnit()->ast()); return astDerivedClasses; @@ -682,7 +682,7 @@ class FindASTForwards: protected ASTVisitor { public: FindASTForwards(Document::Ptr doc, QTextDocument *document) - : ASTVisitor(doc->control()), document(document) + : ASTVisitor(doc->translationUnit()), document(document) {} QList operator()(AST *ast) @@ -887,5 +887,5 @@ int main(int argc, char *argv[]) astDerivedClasses.sort(); generateASTFwd_h(snapshot, cplusplusDir, astDerivedClasses); - generateASTPatternBuilder_h(cplusplusDir); + //generateASTPatternBuilder_h(cplusplusDir); } From 16fcb82d088b7060cf4b4268b99e8a4b60ee3650 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 16:34:30 +0100 Subject: [PATCH 38/62] Fix signal names and also ensure that we don't reset the cursor position --- src/plugins/qt4projectmanager/qmakestep.cpp | 21 ++++++++++++------- src/plugins/qt4projectmanager/qmakestep.h | 7 ++++--- src/plugins/qt4projectmanager/qt4project.cpp | 2 +- .../qt4projectconfigwidget.cpp | 2 +- 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 6a7f03aaaa3..42ab6d24680 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -216,10 +216,10 @@ bool QMakeStep::processFinished(int exitCode, QProcess::ExitStatus status) return result; } -void QMakeStep::setQMakeArguments(const QStringList &arguments) +void QMakeStep::setUserArguments(const QStringList &arguments) { m_userArgs = arguments; - emit changed(); + emit userArgumentsChanged(); } QStringList QMakeStep::userArguments() @@ -240,14 +240,14 @@ void QMakeStep::storeIntoLocalMap(QMap &map) } QMakeStepConfigWidget::QMakeStepConfigWidget(QMakeStep *step) - : BuildStepConfigWidget(), m_step(step) + : BuildStepConfigWidget(), m_step(step), m_ignoreChange(false) { m_ui.setupUi(this); connect(m_ui.qmakeAdditonalArgumentsLineEdit, SIGNAL(textEdited(const QString&)), this, SLOT(qmakeArgumentsLineEditTextEdited())); connect(m_ui.buildConfigurationComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(buildConfigurationChanged())); - connect(step, SIGNAL(changed()), - this, SLOT(update())); + connect(step, SIGNAL(userArgumentsChanged()), + this, SLOT(userArgumentsChanged())); connect(step->buildConfiguration(), SIGNAL(qtVersionChanged()), this, SLOT(qtVersionChanged())); } @@ -289,8 +289,10 @@ void QMakeStepConfigWidget::updateTitleLabel() void QMakeStepConfigWidget::qmakeArgumentsLineEditTextEdited() { - m_step->setQMakeArguments( + m_ignoreChange = true; + m_step->setUserArguments( ProjectExplorer::Environment::parseCombinedArgString(m_ui.qmakeAdditonalArgumentsLineEdit->text())); + m_ignoreChange = false; m_step->qt4BuildConfiguration()->qt4Project()->invalidateCachedTargetInformation(); updateTitleLabel(); @@ -321,9 +323,12 @@ QString QMakeStepConfigWidget::displayName() const return m_step->displayName(); } -void QMakeStepConfigWidget::update() +void QMakeStepConfigWidget::userArgumentsChanged() { - init(); + if (m_ignoreChange) + return; + QString qmakeArgs = ProjectExplorer::Environment::joinArgumentList(m_step->userArguments()); + m_ui.qmakeAdditonalArgumentsLineEdit->setText(qmakeArgs); } void QMakeStepConfigWidget::init() diff --git a/src/plugins/qt4projectmanager/qmakestep.h b/src/plugins/qt4projectmanager/qmakestep.h index 36df20026af..c6a4a37b95d 100644 --- a/src/plugins/qt4projectmanager/qmakestep.h +++ b/src/plugins/qt4projectmanager/qmakestep.h @@ -83,13 +83,13 @@ public: QStringList allArguments(); QStringList userArguments(); - void setQMakeArguments(const QStringList &arguments); + void setUserArguments(const QStringList &arguments); virtual void restoreFromLocalMap(const QMap &map); virtual void storeIntoLocalMap(QMap &map); signals: - void changed(); + void userArgumentsChanged(); protected: virtual void processStartupFailed(); @@ -115,7 +115,7 @@ public: private slots: void qmakeArgumentsLineEditTextEdited(); void buildConfigurationChanged(); - void update(); + void userArgumentsChanged(); void qtVersionChanged(); private: void updateTitleLabel(); @@ -123,6 +123,7 @@ private: Ui::QMakeStep m_ui; QMakeStep *m_step; QString m_summaryText; + bool m_ignoreChange; }; } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 88d2afad297..9fafc02dd52 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -476,7 +476,7 @@ Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString displayName, cleanStep->setClean(true); bc->insertCleanStep(0, cleanStep); if (!additionalArguments.isEmpty()) - qmakeStep->setQMakeArguments(additionalArguments); + qmakeStep->setUserArguments(additionalArguments); // set some options for qmake and make if (qmakeBuildConfiguration & QtVersion::BuildAll) // debug_and_release => explicit targets diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index f97ae476e5d..fb9ba63807c 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -298,7 +298,7 @@ void Qt4ProjectConfigWidget::importLabelClicked() // Combo box will be updated at the end QMakeStep *qmakeStep = m_buildConfiguration->qmakeStep(); - qmakeStep->setQMakeArguments(additionalArguments); + qmakeStep->setUserArguments(additionalArguments); MakeStep *makeStep = m_buildConfiguration->makeStep(); m_buildConfiguration->setValue("buildConfiguration", int(qmakeBuildConfig)); From 32d0bc1ff212c08f463a5ad98fad35c29b7c8557 Mon Sep 17 00:00:00 2001 From: mae Date: Mon, 30 Nov 2009 17:23:31 +0100 Subject: [PATCH 39/62] some tuning of the layer extra selections Remove overlap. Add extra selection tooltips for the cpp hover handler. --- src/plugins/cppeditor/cppeditor.cpp | 4 +++ src/plugins/cppeditor/cpphoverhandler.cpp | 7 +++++ src/plugins/texteditor/basetexteditor.cpp | 15 ++++++++++ src/plugins/texteditor/basetexteditor.h | 1 + src/plugins/texteditor/fontsettingspage.cpp | 2 +- src/plugins/texteditor/texteditoroverlay.cpp | 30 ++++++++++++++------ 6 files changed, 50 insertions(+), 9 deletions(-) diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index e87e533a639..a5192acdf91 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1889,6 +1889,10 @@ void CPPEditor::setFontSettings(const TextEditor::FontSettings &fs) m_occurrencesFormat = fs.toTextCharFormat(QLatin1String(TextEditor::Constants::C_OCCURRENCES)); m_occurrencesUnusedFormat = fs.toTextCharFormat(QLatin1String(TextEditor::Constants::C_OCCURRENCES_UNUSED)); + m_occurrencesUnusedFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline); + m_occurrencesUnusedFormat.setUnderlineColor(m_occurrencesUnusedFormat.foreground().color()); + m_occurrencesUnusedFormat.clearForeground(); + m_occurrencesUnusedFormat.setToolTip(tr("Unused variable")); m_occurrenceRenameFormat = fs.toTextCharFormat(QLatin1String(TextEditor::Constants::C_OCCURRENCES_RENAME)); // only set the background, we do not want to modify foreground properties set by the syntax highlighter or the link diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp index 6c93ca8ffa5..46315187a07 100644 --- a/src/plugins/cppeditor/cpphoverhandler.cpp +++ b/src/plugins/cppeditor/cpphoverhandler.cpp @@ -272,8 +272,10 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in if (!doc) return; // nothing to do + QString formatTooltip = edit->extraSelectionTooltip(pos); QTextCursor tc(edit->document()); tc.setPosition(pos); + const unsigned lineNumber = tc.block().blockNumber() + 1; // Find the last symbol up to the cursor position @@ -392,6 +394,11 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in m_helpEngineNeedsSetup = false; } + + if (!formatTooltip.isEmpty()) { + m_toolTip = formatTooltip; + } + if (!m_toolTip.isEmpty()) m_toolTip = Qt::escape(m_toolTip); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 625bb8bee56..501ef46377d 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -4239,6 +4239,21 @@ QList BaseTextEditor::extraSelections(ExtraSelectionK return d->m_extraSelections[kind]; } +QString BaseTextEditor::extraSelectionTooltip(int pos) const +{ + QList all; + for (int i = 0; i < NExtraSelectionKinds; ++i) { + const QList &sel = d->m_extraSelections[i]; + for (int j = 0; j < sel.size(); ++j) { + const QTextEdit::ExtraSelection &s = sel.at(j); + if (s.cursor.selectionStart() <= pos + && s.cursor.selectionEnd() >= pos + && !s.format.toolTip().isEmpty()) + return s.format.toolTip(); + } + } + return QString(); +} // the blocks list must be sorted void BaseTextEditor::setIfdefedOutBlocks(const QList &blocks) diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 9a04cf6076f..0dc8eb005cd 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -478,6 +478,7 @@ public: }; void setExtraSelections(ExtraSelectionKind kind, const QList &selections); QList extraSelections(ExtraSelectionKind kind) const; + QString extraSelectionTooltip(int pos) const; struct BlockRange { diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp index 18880da65f6..0fb51ebd17f 100644 --- a/src/plugins/texteditor/fontsettingspage.cpp +++ b/src/plugins/texteditor/fontsettingspage.cpp @@ -258,7 +258,7 @@ QColor FormatDescription::foreground() const return m_format.foreground(); } } else if (m_name == QLatin1String(Constants::C_OCCURRENCES_UNUSED)) { - return Qt::lightGray; + return Qt::darkYellow; } else if (m_name == QLatin1String(Constants::C_PARENTHESES)) { return QColor(Qt::red); } diff --git a/src/plugins/texteditor/texteditoroverlay.cpp b/src/plugins/texteditor/texteditoroverlay.cpp index 5c9d621a836..9b76385efc9 100644 --- a/src/plugins/texteditor/texteditoroverlay.cpp +++ b/src/plugins/texteditor/texteditoroverlay.cpp @@ -159,6 +159,7 @@ void TextEditorOverlay::paintSelection(QPainter *painter, const QTextCursor &beg QVector points; const int margin = m_borderWidth/2; + const int extra = 0; points += (selection.at(0).topLeft() + selection.at(0).topRight()) / 2 + QPointF(0, -margin); points += selection.at(0).topRight() + QPointF(margin+1, -margin); @@ -178,8 +179,8 @@ void TextEditorOverlay::paintSelection(QPainter *painter, const QTextCursor &beg } points += selection.at(selection.count()-1).topRight() + QPointF(margin+1, 0); - points += selection.at(selection.count()-1).bottomRight() + QPointF(margin+1, margin+1); - points += selection.at(selection.count()-1).bottomLeft() + QPointF(-margin, margin+1); + points += selection.at(selection.count()-1).bottomRight() + QPointF(margin+1, margin+extra); + points += selection.at(selection.count()-1).bottomLeft() + QPointF(-margin, margin+extra); points += selection.at(selection.count()-1).topLeft() + QPointF(-margin, 0); for(int i = selection.count()-2; i > 0; --i) { @@ -188,11 +189,11 @@ void TextEditorOverlay::paintSelection(QPainter *painter, const QTextCursor &beg selection.at(i).left(), selection.at(i+1).left()) - margin; - points += QPointF(x, selection.at(i).bottom()+1); + points += QPointF(x, selection.at(i).bottom()+extra); points += QPointF(x, selection.at(i).top()); } - points += selection.at(0).bottomLeft() + QPointF(-margin, 1); + points += selection.at(0).bottomLeft() + QPointF(-margin, extra); points += selection.at(0).topLeft() + QPointF(-margin, -margin); @@ -225,15 +226,28 @@ void TextEditorOverlay::paintSelection(QPainter *painter, const QTextCursor &beg path.closeSubpath(); painter->save(); - QPen pen(color, m_borderWidth); + QColor penColor = color; + penColor.setAlpha(220); + QPen pen(penColor, m_borderWidth); painter->translate(-.5, -.5); - QColor brush = color; - brush.setAlpha(30); + + path.translate(offset); + QRectF pathRect = path.controlPointRect(); + + QLinearGradient linearGrad(pathRect.topLeft(), pathRect.bottomLeft()); + QColor col1 = color.lighter(150); + col1.setAlpha(20); + QColor col2 = color; + col2.setAlpha(80); + linearGrad.setColorAt(0, col1); + linearGrad.setColorAt(1, col2); + QBrush brush(linearGrad); + + painter->setRenderHint(QPainter::Antialiasing); pen.setJoinStyle(Qt::RoundJoin); painter->setPen(pen); painter->setBrush(brush); - path.translate(offset); painter->drawPath(path); painter->restore(); } From 4068957f8b3372e5cfbf2417163ed70108c29b6a Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 30 Nov 2009 17:37:08 +0100 Subject: [PATCH 40/62] Removed the usage of CPlusPlus::Array --- src/shared/cplusplus/Control.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp index 4e6ea089b8c..79eafaa0cff 100644 --- a/src/shared/cplusplus/Control.cpp +++ b/src/shared/cplusplus/Control.cpp @@ -66,16 +66,20 @@ static void delete_map_entries(_Iterator first, _Iterator last) delete first->second; } +template +static void delete_array_entries(_Iterator first, _Iterator last) +{ + for (; first != last; ++first) + delete *first; +} + template static void delete_map_entries(const _Map &m) { delete_map_entries(m.begin(), m.end()); } template static void delete_array_entries(const _Array &a) -{ - for (unsigned i = 0; i < a.size(); ++i) - delete a.at(i); -} +{ delete_array_entries(a.begin(), a.end()); } class Control::Data { @@ -515,16 +519,16 @@ public: // types VoidType voidType; - Array integerTypes; - Array floatTypes; - Array pointerToMemberTypes; - Array pointerTypes; - Array referenceTypes; - Array arrayTypes; - Array namedTypes; + std::vector integerTypes; + std::vector floatTypes; + std::vector pointerToMemberTypes; + std::vector pointerTypes; + std::vector referenceTypes; + std::vector arrayTypes; + std::vector namedTypes; // symbols - Array symbols; + std::vector symbols; // ObjC context keywords: Identifier *objcGetterId; From e6edf54a9c3e815507ccfcd4ea1325f964004797 Mon Sep 17 00:00:00 2001 From: con Date: Mon, 30 Nov 2009 17:55:08 +0100 Subject: [PATCH 41/62] Show Symbian deploy progress as real progress indicator. Task-number: QTCREATORBUG-364 --- .../qt-s60/s60devicerunconfiguration.cpp | 43 ++++++++++++++++++- .../qt-s60/s60devicerunconfiguration.h | 4 ++ src/shared/trk/launcher.cpp | 6 ++- src/shared/trk/launcher.h | 1 + 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp index bcb257b11b9..cefe094fab0 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp @@ -41,6 +41,7 @@ #include #include +#include #include #include #include @@ -60,6 +61,13 @@ using namespace Qt4ProjectManager::Internal; enum { debug = 0 }; +static const int PROGRESS_PACKAGECREATED = 100; +static const int PROGRESS_PACKAGESIGNED = 200; +static const int PROGRESS_DEPLOYBASE = 200; +static const int PROGRESS_PACKAGEDEPLOYED = 300; +static const int PROGRESS_PACKAGEINSTALLED = 400; +static const int PROGRESS_MAX = 400; + // Format information about a file static QString lsFile(const QString &f) { @@ -414,7 +422,10 @@ S60DeviceRunControlBase::S60DeviceRunControlBase(RunConfiguration *runConfigurat m_makesis(new QProcess(this)), m_signsis(0), m_launcher(0) -{ +{ + // connect for automatically reporting the "finished deploy" state to the progress manager + connect(this, SIGNAL(finished()), this, SLOT(reportDeployFinished())); + connect(m_makesis, SIGNAL(readyReadStandardError()), this, SLOT(readStandardError())); connect(m_makesis, SIGNAL(readyReadStandardOutput()), @@ -490,6 +501,13 @@ S60DeviceRunControlBase::~S60DeviceRunControlBase() void S60DeviceRunControlBase::start() { + m_deployProgress = new QFutureInterface; + Core::ICore::instance()->progressManager()->addTask(m_deployProgress->future(), + tr("Deploying"), + QLatin1String("Symbian.Deploy")); + m_deployProgress->setProgressRange(0, PROGRESS_MAX); + m_deployProgress->setProgressValue(0); + m_deployProgress->reportStarted(); emit started(); if (m_serialPortName.isEmpty()) { error(this, tr("There is no device plugged in.")); @@ -609,6 +627,7 @@ void S60DeviceRunControlBase::makesisProcessFinished() emit finished(); return; } + m_deployProgress->setProgressValue(PROGRESS_PACKAGECREATED); switch (m_toolChain) { case ProjectExplorer::ToolChain::GCCE_GNUPOC: case ProjectExplorer::ToolChain::RVCT_ARMV6_GNUPOC: @@ -650,6 +669,7 @@ void S60DeviceRunControlBase::signsisProcessFinished() stop(); emit finished(); } else { + m_deployProgress->setProgressValue(PROGRESS_PACKAGESIGNED); startDeployment(); } } @@ -665,6 +685,7 @@ void S60DeviceRunControlBase::startDeployment() connect(m_launcher, SIGNAL(canNotCloseFile(QString,QString)), this, SLOT(printCloseFileFailed(QString,QString))); connect(m_launcher, SIGNAL(installingStarted()), this, SLOT(printInstallingNotice())); connect(m_launcher, SIGNAL(canNotInstall(QString,QString)), this, SLOT(printInstallFailed(QString,QString))); + connect(m_launcher, SIGNAL(installingFinished()), this, SLOT(printInstallingFinished())); connect(m_launcher, SIGNAL(copyProgress(int)), this, SLOT(printCopyProgress(int))); connect(m_launcher, SIGNAL(stateChanged(int)), this, SLOT(slotLauncherStateChanged(int))); @@ -733,14 +754,23 @@ void S60DeviceRunControlBase::printCopyingNotice() void S60DeviceRunControlBase::printCopyProgress(int progress) { - emit addToOutputWindow(this, tr("%1% copied.").arg(progress)); + m_deployProgress->setProgressValue(PROGRESS_DEPLOYBASE + progress); } void S60DeviceRunControlBase::printInstallingNotice() { + m_deployProgress->setProgressValue(PROGRESS_PACKAGEDEPLOYED); emit addToOutputWindow(this, tr("Installing application...")); } +void S60DeviceRunControlBase::printInstallingFinished() +{ + m_deployProgress->setProgressValue(PROGRESS_PACKAGEINSTALLED); + m_deployProgress->reportFinished(); + delete m_deployProgress; + m_deployProgress = 0; +} + void S60DeviceRunControlBase::printInstallFailed(const QString &filename, const QString &errorMessage) { emit addToOutputWindow(this, tr("Could not install from package %1 on device: %2").arg(filename, errorMessage)); @@ -753,6 +783,15 @@ void S60DeviceRunControlBase::launcherFinished() handleLauncherFinished(); } +void S60DeviceRunControlBase::reportDeployFinished() +{ + if (m_deployProgress) { + m_deployProgress->reportFinished(); + delete m_deployProgress; + m_deployProgress = 0; + } +} + QMessageBox *S60DeviceRunControlBase::createTrkWaitingMessageBox(const QString &port, QWidget *parent) { const QString title = QCoreApplication::translate("Qt4ProjectManager::Internal::S60DeviceRunControlBase", diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h index c68dff066fc..8eac205640f 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h @@ -36,6 +36,7 @@ #include #include +#include QT_BEGIN_NAMESPACE class QMessageBox; @@ -176,9 +177,11 @@ private slots: void printCopyProgress(int progress); void printInstallingNotice(); void printInstallFailed(const QString &filename, const QString &errorMessage); + void printInstallingFinished(); void launcherFinished(); void slotLauncherStateChanged(int); void slotWaitingForTrkClosed(); + void reportDeployFinished(); private: bool createPackageFileFromTemplate(QString *errorMessage); @@ -207,6 +210,7 @@ private: QString m_makesisTool; QString m_packageFile; + QFutureInterface *m_deployProgress; trk::Launcher *m_launcher; }; diff --git a/src/shared/trk/launcher.cpp b/src/shared/trk/launcher.cpp index b9b5f04a159..62f015cd1ed 100644 --- a/src/shared/trk/launcher.cpp +++ b/src/shared/trk/launcher.cpp @@ -640,7 +640,11 @@ void Launcher::handleInstallPackageFinished(const TrkResult &result) if (result.errorCode()) { emit canNotInstall(d->m_installFileName, result.errorString()); disconnectTrk(); - } else if (d->m_startupActions & ActionRun) { + return; + } else { + emit installingFinished(); + } + if (d->m_startupActions & ActionRun) { startInferiorIfNeeded(); } else { disconnectTrk(); diff --git a/src/shared/trk/launcher.h b/src/shared/trk/launcher.h index 538d367e742..93a28217168 100644 --- a/src/shared/trk/launcher.h +++ b/src/shared/trk/launcher.h @@ -103,6 +103,7 @@ signals: void canNotCloseFile(const QString &filename, const QString &errorMessage); void installingStarted(); void canNotInstall(const QString &packageFilename, const QString &errorMessage); + void installingFinished(); void startingApplication(); void applicationRunning(uint pid); void canNotRun(const QString &errorMessage); From 522835ae01d869a999696e6912436e95ab570ed1 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Mon, 30 Nov 2009 18:13:08 +0100 Subject: [PATCH 42/62] Store the types in a set. --- src/shared/cplusplus/Control.cpp | 177 +++++++++++++++++-------------- src/shared/cplusplus/Type.h | 3 - 2 files changed, 95 insertions(+), 85 deletions(-) diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp index 79eafaa0cff..6a949cec7b5 100644 --- a/src/shared/cplusplus/Control.cpp +++ b/src/shared/cplusplus/Control.cpp @@ -55,10 +55,90 @@ #include "Names.h" #include "Array.h" #include "TypeMatcher.h" -#include // ### replace me with LiteralTable +#include +#include using namespace CPlusPlus; +namespace { + +template +struct Compare; + +template <> struct Compare +{ + bool operator()(const IntegerType &ty, const IntegerType &otherTy) const + { return ty.kind() < otherTy.kind(); } +}; + +template <> struct Compare +{ + bool operator()(const FloatType &ty, const FloatType &otherTy) const + { return ty.kind() < otherTy.kind(); } +}; + +template <> struct Compare +{ + bool operator()(const PointerToMemberType &ty, const PointerToMemberType &otherTy) const + { + if (ty.memberName() < otherTy.memberName()) + return true; + + else if (ty.memberName() == otherTy.memberName()) + return ty.elementType() < otherTy.elementType(); + + return false; + } +}; + +template <> struct Compare +{ + bool operator()(const PointerType &ty, const PointerType &otherTy) const + { + return ty.elementType() < otherTy.elementType(); + } +}; + +template <> struct Compare +{ + bool operator()(const ReferenceType &ty, const ReferenceType &otherTy) const + { + return ty.elementType() < otherTy.elementType(); + } +}; + +template <> struct Compare +{ + bool operator()(const NamedType &ty, const NamedType &otherTy) const + { + return ty.name() < otherTy.name(); + } +}; + +template <> struct Compare +{ + bool operator()(const ArrayType &ty, const ArrayType &otherTy) const + { + if (ty.size() < otherTy.size()) + return true; + + else if (ty.size() == otherTy.size()) + return ty.elementType() < otherTy.elementType(); + + return false; + } +}; + +template +class Table: public std::set<_Tp, Compare<_Tp> > +{ +public: + _Tp *intern(const _Tp &element) + { return const_cast<_Tp *>(&*insert(element).first); } +}; + +} // end of anonymous namespace + template static void delete_map_entries(_Iterator first, _Iterator last) { @@ -100,15 +180,6 @@ public: delete_map_entries(qualifiedNameIds); delete_map_entries(templateNameIds); - // types - delete_array_entries(integerTypes); - delete_array_entries(floatTypes); - delete_array_entries(pointerToMemberTypes); - delete_array_entries(pointerTypes); - delete_array_entries(referenceTypes); - delete_array_entries(arrayTypes); - delete_array_entries(namedTypes); - // symbols delete_array_entries(symbols); } @@ -193,95 +264,37 @@ public: IntegerType *findOrInsertIntegerType(int kind) { - for (unsigned i = 0; i < integerTypes.size(); ++i) { - IntegerType *ty = integerTypes.at(i); - - if (ty->kind() == kind) - return ty; - } - - IntegerType *ty = new IntegerType(kind); - integerTypes.push_back(ty); - return ty; + return integerTypes.intern(IntegerType(kind)); } FloatType *findOrInsertFloatType(int kind) { - for (unsigned i = 0; i < floatTypes.size(); ++i) { - FloatType *ty = floatTypes.at(i); - - if (ty->kind() == kind) - return ty; - } - - FloatType *ty = new FloatType(kind); - floatTypes.push_back(ty); - return ty; + return floatTypes.intern(FloatType(kind)); } PointerToMemberType *findOrInsertPointerToMemberType(Name *memberName, const FullySpecifiedType &elementType) { - for (unsigned i = 0; i < pointerToMemberTypes.size(); ++i) { - PointerToMemberType *ty = pointerToMemberTypes.at(i); - if (ty->elementType().match(elementType, &matcher) && matcher.isEqualTo(ty->memberName(), memberName)) - return ty; - } - - PointerToMemberType *ty = new PointerToMemberType(memberName, elementType); - pointerToMemberTypes.push_back(ty); - return ty; + return pointerToMemberTypes.intern(PointerToMemberType(memberName, elementType)); } PointerType *findOrInsertPointerType(const FullySpecifiedType &elementType) { - for (unsigned i = 0; i < pointerTypes.size(); ++i) { - PointerType *ty = pointerTypes.at(i); - if (ty->elementType().match(elementType, &matcher)) - return ty; - } - - PointerType *ty = new PointerType(elementType); - pointerTypes.push_back(ty); - return ty; + return pointerTypes.intern(PointerType(elementType)); } ReferenceType *findOrInsertReferenceType(const FullySpecifiedType &elementType) { - for (unsigned i = 0; i < referenceTypes.size(); ++i) { - ReferenceType *ty = referenceTypes.at(i); - if (ty->elementType().match(elementType, &matcher)) - return ty; - } - - ReferenceType *ty = new ReferenceType(elementType); - referenceTypes.push_back(ty); - return ty; + return referenceTypes.intern(ReferenceType(elementType)); } ArrayType *findOrInsertArrayType(const FullySpecifiedType &elementType, unsigned size) { - for (unsigned i = 0; i < arrayTypes.size(); ++i) { - ArrayType *ty = arrayTypes.at(i); - if (ty->size() == size && ty->elementType().match(elementType, &matcher)) - return ty; - } - - ArrayType *ty = new ArrayType(elementType, size); - arrayTypes.push_back(ty); - return ty; + return arrayTypes.intern(ArrayType(elementType, size)); } NamedType *findOrInsertNamedType(Name *name) { - for (unsigned i = 0; i < namedTypes.size(); ++i) { - NamedType *ty = namedTypes.at(i); - if (matcher.isEqualTo(ty->name(), name)) - return ty; - } - - NamedType *ty = new NamedType(name); - namedTypes.push_back(ty); - return ty; + return namedTypes.intern(NamedType(name)); } Declaration *newDeclaration(unsigned sourceLocation, Name *name) @@ -519,13 +532,13 @@ public: // types VoidType voidType; - std::vector integerTypes; - std::vector floatTypes; - std::vector pointerToMemberTypes; - std::vector pointerTypes; - std::vector referenceTypes; - std::vector arrayTypes; - std::vector namedTypes; + Table integerTypes; + Table floatTypes; + Table pointerToMemberTypes; + Table pointerTypes; + Table referenceTypes; + Table arrayTypes; + Table namedTypes; // symbols std::vector symbols; diff --git a/src/shared/cplusplus/Type.h b/src/shared/cplusplus/Type.h index a2e29bf56c0..a64a824d4eb 100644 --- a/src/shared/cplusplus/Type.h +++ b/src/shared/cplusplus/Type.h @@ -55,9 +55,6 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT Type { - Type(const Type &other); - void operator =(const Type &other); - public: Type(); virtual ~Type(); From 5bcff248fb85917f3ce668f0eec16b9c2bca7267 Mon Sep 17 00:00:00 2001 From: con Date: Mon, 30 Nov 2009 18:21:39 +0100 Subject: [PATCH 43/62] Some naming adaptions. --- doc/doxygen/Doxyfile | 2 +- src/plugins/cpptools/cppfindreferences.cpp | 2 +- src/plugins/cpptools/cppfindreferences.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/doxygen/Doxyfile b/doc/doxygen/Doxyfile index 5aca5dc1668..4897b584092 100644 --- a/doc/doxygen/Doxyfile +++ b/doc/doxygen/Doxyfile @@ -843,7 +843,7 @@ DOCSET_FEEDNAME = "Qt Creator API" # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. -DOCSET_BUNDLE_ID = com.qtsoftware.qt-creator +DOCSET_BUNDLE_ID = com.nokia.qt-creator # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 6d1c527bacd..22fecbfce29 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -23,7 +23,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. +** contact the sales department at http://qt.nokia.com/contact. ** **************************************************************************/ diff --git a/src/plugins/cpptools/cppfindreferences.h b/src/plugins/cpptools/cppfindreferences.h index 61ba876546f..2156a1fa6e6 100644 --- a/src/plugins/cpptools/cppfindreferences.h +++ b/src/plugins/cpptools/cppfindreferences.h @@ -23,7 +23,7 @@ ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. +** contact the sales department at http://qt.nokia.com/contact. ** **************************************************************************/ From d6e4a787d59298dcf8c139ec4891fc0208d48a09 Mon Sep 17 00:00:00 2001 From: mae Date: Mon, 30 Nov 2009 19:00:36 +0100 Subject: [PATCH 44/62] separate font zoom from font size Introduce "Reset Font Size" action, bound to Ctrl+0 --- src/plugins/help/helpplugin.cpp | 2 +- src/plugins/texteditor/basetexteditor.cpp | 15 +++--- src/plugins/texteditor/basetexteditor.h | 4 +- src/plugins/texteditor/fontsettings.cpp | 23 +++++++++- src/plugins/texteditor/fontsettings.h | 4 ++ src/plugins/texteditor/fontsettingspage.cpp | 8 ++++ src/plugins/texteditor/fontsettingspage.h | 1 + src/plugins/texteditor/fontsettingspage.ui | 46 ++++++++++++++++++- .../texteditor/texteditoractionhandler.cpp | 8 ++++ .../texteditor/texteditoractionhandler.h | 2 + src/plugins/texteditor/texteditorconstants.h | 1 + src/plugins/texteditor/texteditorsettings.cpp | 17 +++++-- src/plugins/texteditor/texteditorsettings.h | 3 +- 13 files changed, 116 insertions(+), 18 deletions(-) diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 9e5fd1a8054..625be439674 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -427,7 +427,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT); a = new QAction(tr("Reset Font Size"), this); - cmd = am->registerAction(a, QLatin1String("Help.ResetFontSize"), + cmd = am->registerAction(a, TextEditor::Constants::DECREASE_FONT_SIZE, modecontext); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+0"))); connect(a, SIGNAL(triggered()), m_centralWidget, SLOT(resetZoom())); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 501ef46377d..2e30a1487e8 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -3411,14 +3411,8 @@ void BaseTextEditor::wheelEvent(QWheelEvent *e) void BaseTextEditor::zoomIn(int range) { - d->clearVisibleCollapsedBlock(); - QFont f = font(); - const int newSize = f.pointSize() + range; - if (newSize <= 0) - return; - emit requestFontSize(newSize); -// f.setPointSize(newSize); -// setFont(f); + d->clearVisibleCollapsedBlock(); + emit requestFontZoom(range*10); } void BaseTextEditor::zoomOut(int range) @@ -3426,6 +3420,11 @@ void BaseTextEditor::zoomOut(int range) zoomIn(-range); } +void BaseTextEditor::zoomReset() +{ + emit requestZoomReset(); +} + bool BaseTextEditor::isElectricCharacter(const QChar &) const { return false; diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 0dc8eb005cd..092d6c7f4b8 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -382,6 +382,7 @@ public slots: void zoomIn(int range = 1); void zoomOut(int range = 1); + void zoomReset(); void cutLine(); void deleteLine(); @@ -579,7 +580,8 @@ protected slots: virtual void slotUpdateBlockNotify(const QTextBlock &); signals: - void requestFontSize(int pointSize); + void requestFontZoom(int zoom); + void requestZoomReset(); void requestBlockUpdate(const QTextBlock &); void requestAutoCompletion(TextEditor::ITextEditable *editor, bool forced); void requestQuickFix(TextEditor::ITextEditable *editor); diff --git a/src/plugins/texteditor/fontsettings.cpp b/src/plugins/texteditor/fontsettings.cpp index 8631645a485..cf14545c8f7 100644 --- a/src/plugins/texteditor/fontsettings.cpp +++ b/src/plugins/texteditor/fontsettings.cpp @@ -39,6 +39,7 @@ static const char *fontFamilyKey = "FontFamily"; static const char *fontSizeKey = "FontSize"; +static const char *fontZoomKey= "FontZoom"; static const char *antialiasKey = "FontAntialias"; static const char *schemeFileNameKey = "ColorScheme"; @@ -65,6 +66,7 @@ namespace TextEditor { FontSettings::FontSettings() : m_family(defaultFixedFontFamily()), m_fontSize(DEFAULT_FONT_SIZE), + m_fontZoom(100), m_antialias(DEFAULT_ANTIALIAS) { } @@ -73,6 +75,7 @@ void FontSettings::clear() { m_family = defaultFixedFontFamily(); m_fontSize = DEFAULT_FONT_SIZE; + m_fontZoom = 100; m_antialias = DEFAULT_ANTIALIAS; m_scheme.clear(); } @@ -87,6 +90,9 @@ void FontSettings::toSettings(const QString &category, if (m_fontSize != DEFAULT_FONT_SIZE || s->contains(QLatin1String(fontSizeKey))) s->setValue(QLatin1String(fontSizeKey), m_fontSize); + if (m_fontZoom!= 100 || s->contains(QLatin1String(fontZoomKey))) + s->setValue(QLatin1String(fontZoomKey), m_fontZoom); + if (m_antialias != DEFAULT_ANTIALIAS || s->contains(QLatin1String(antialiasKey))) s->setValue(QLatin1String(antialiasKey), m_antialias); @@ -110,6 +116,7 @@ bool FontSettings::fromSettings(const QString &category, m_family = s->value(group + QLatin1String(fontFamilyKey), defaultFixedFontFamily()).toString(); m_fontSize = s->value(group + QLatin1String(fontSizeKey), m_fontSize).toInt(); + m_fontZoom= s->value(group + QLatin1String(fontZoomKey), m_fontZoom).toInt(); m_antialias = s->value(group + QLatin1String(antialiasKey), DEFAULT_ANTIALIAS).toBool(); if (s->contains(group + QLatin1String(schemeFileNameKey))) { @@ -144,6 +151,7 @@ bool FontSettings::equals(const FontSettings &f) const return m_family == f.m_family && m_schemeFileName == f.m_schemeFileName && m_fontSize == f.m_fontSize + && m_fontZoom == f.m_fontZoom && m_antialias == f.m_antialias && m_scheme == f.m_scheme; } @@ -160,7 +168,7 @@ QTextCharFormat FontSettings::toTextCharFormat(const QString &category) const if (category == textCategory) { tf.setFontFamily(m_family); - tf.setFontPointSize(m_fontSize); + tf.setFontPointSize(m_fontSize * m_fontZoom / 100); tf.setFontStyleStrategy(m_antialias ? QFont::PreferAntialias : QFont::NoAntialias); } @@ -213,6 +221,19 @@ void FontSettings::setFontSize(int size) m_fontSize = size; } +/** + * Returns the configured font zoom factor in percent. + */ +int FontSettings::fontZoom() const +{ + return m_fontZoom; +} + +void FontSettings::setFontZoom(int zoom) +{ + m_fontZoom = zoom; +} + /** * Returns the configured antialiasing behavior. */ diff --git a/src/plugins/texteditor/fontsettings.h b/src/plugins/texteditor/fontsettings.h index 38ffa2d66e2..88f27883296 100644 --- a/src/plugins/texteditor/fontsettings.h +++ b/src/plugins/texteditor/fontsettings.h @@ -78,6 +78,9 @@ public: int fontSize() const; void setFontSize(int size); + int fontZoom() const; + void setFontZoom(int zoom); + QFont font() const { return QFont(family(), fontSize()); } @@ -105,6 +108,7 @@ private: QString m_family; QString m_schemeFileName; int m_fontSize; + int m_fontZoom; bool m_antialias; ColorScheme m_scheme; }; diff --git a/src/plugins/texteditor/fontsettingspage.cpp b/src/plugins/texteditor/fontsettingspage.cpp index 0fb51ebd17f..1795158a6eb 100644 --- a/src/plugins/texteditor/fontsettingspage.cpp +++ b/src/plugins/texteditor/fontsettingspage.cpp @@ -360,6 +360,7 @@ QWidget *FontSettingsPage::createPage(QWidget *parent) d_ptr->ui.familyComboBox->setCurrentIndex(idx); d_ptr->ui.antialias->setChecked(d_ptr->m_value.antialias()); + d_ptr->ui.zoomSpinBox->setValue(d_ptr->m_value.fontZoom()); d_ptr->ui.schemeEdit->setFormatDescriptions(d_ptr->m_descriptions); d_ptr->ui.schemeEdit->setBaseFont(d_ptr->m_value.font()); @@ -367,10 +368,12 @@ QWidget *FontSettingsPage::createPage(QWidget *parent) connect(d_ptr->ui.familyComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontFamilySelected(QString))); connect(d_ptr->ui.sizeComboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(fontSizeSelected(QString))); + connect(d_ptr->ui.zoomSpinBox, SIGNAL(valueChanged(int)), this, SLOT(fontZoomChanged())); connect(d_ptr->ui.schemeComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(colorSchemeSelected(int))); connect(d_ptr->ui.copyButton, SIGNAL(clicked()), this, SLOT(copyColorScheme())); connect(d_ptr->ui.deleteButton, SIGNAL(clicked()), this, SLOT(confirmDeleteColorScheme())); + updatePointSizes(); refreshColorSchemeList(); d_ptr->m_lastValue = d_ptr->m_value; @@ -421,6 +424,11 @@ void FontSettingsPage::fontSizeSelected(const QString &sizeString) } } +void FontSettingsPage::fontZoomChanged() +{ + d_ptr->m_value.setFontZoom(d_ptr->ui.zoomSpinBox->value()); +} + void FontSettingsPage::colorSchemeSelected(int index) { bool readOnly = true; diff --git a/src/plugins/texteditor/fontsettingspage.h b/src/plugins/texteditor/fontsettingspage.h index 89f4522fbdb..4e555c263be 100644 --- a/src/plugins/texteditor/fontsettingspage.h +++ b/src/plugins/texteditor/fontsettingspage.h @@ -111,6 +111,7 @@ private slots: void delayedChange(); void fontFamilySelected(const QString &family); void fontSizeSelected(const QString &sizeString); + void fontZoomChanged(); void colorSchemeSelected(int index); void copyColorScheme(); void copyColorScheme(const QString &name); diff --git a/src/plugins/texteditor/fontsettingspage.ui b/src/plugins/texteditor/fontsettingspage.ui index cb7f5d1fb6a..bef6cc789a9 100644 --- a/src/plugins/texteditor/fontsettingspage.ui +++ b/src/plugins/texteditor/fontsettingspage.ui @@ -6,7 +6,7 @@ 0 0 - 344 + 402 306 @@ -84,9 +84,12 @@ Qt::Horizontal + + QSizePolicy::Preferred + - 40 + 20 20 @@ -99,6 +102,45 @@ + + + + % + + + 10 + + + 300 + + + 10 + + + 100 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Zoom: + + + diff --git a/src/plugins/texteditor/texteditoractionhandler.cpp b/src/plugins/texteditor/texteditoractionhandler.cpp index 9da54ddc10c..e586a54cb3f 100644 --- a/src/plugins/texteditor/texteditoractionhandler.cpp +++ b/src/plugins/texteditor/texteditoractionhandler.cpp @@ -73,6 +73,7 @@ TextEditorActionHandler::TextEditorActionHandler(const QString &context, m_selectEncodingAction(0), m_increaseFontSizeAction(0), m_decreaseFontSizeAction(0), + m_resetFontSizeAction(0), m_gotoBlockStartAction(0), m_gotoBlockEndAction(0), m_gotoBlockStartWithSelectionAction(0), @@ -221,6 +222,12 @@ void TextEditorActionHandler::createActions() connect(m_decreaseFontSizeAction, SIGNAL(triggered()), this, SLOT(decreaseFontSize())); advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT); + m_resetFontSizeAction = new QAction(tr("Reset Font Size"), this); + command = am->registerAction(m_resetFontSizeAction, Constants::RESET_FONT_SIZE, m_contextId); + command->setDefaultKeySequence(QKeySequence(tr("Ctrl+0"))); + connect(m_resetFontSizeAction, SIGNAL(triggered()), this, SLOT(resetFontSize())); + advancedMenu->addAction(command, Core::Constants::G_EDIT_FONT); + m_gotoBlockStartAction = new QAction(tr("Goto Block Start"), this); command = am->registerAction(m_gotoBlockStartAction, Constants::GOTO_BLOCK_START, m_contextId); command->setDefaultKeySequence(QKeySequence(tr("Ctrl+["))); @@ -422,6 +429,7 @@ FUNCTION(collapse) FUNCTION(expand) FUNCTION2(increaseFontSize, zoomIn) FUNCTION2(decreaseFontSize, zoomOut) +FUNCTION2(resetFontSize, zoomReset) FUNCTION(selectEncoding) FUNCTION(gotoBlockStart) FUNCTION(gotoBlockEnd) diff --git a/src/plugins/texteditor/texteditoractionhandler.h b/src/plugins/texteditor/texteditoractionhandler.h index ca9a878ca1e..661932e98d2 100644 --- a/src/plugins/texteditor/texteditoractionhandler.h +++ b/src/plugins/texteditor/texteditoractionhandler.h @@ -104,6 +104,7 @@ private slots: void selectEncoding(); void increaseFontSize(); void decreaseFontSize(); + void resetFontSize(); void gotoBlockStart(); void gotoBlockEnd(); void gotoBlockStartWithSelection(); @@ -139,6 +140,7 @@ private: QAction *m_selectEncodingAction; QAction *m_increaseFontSizeAction; QAction *m_decreaseFontSizeAction; + QAction *m_resetFontSizeAction; QAction *m_gotoBlockStartAction; QAction *m_gotoBlockEndAction; QAction *m_gotoBlockStartWithSelectionAction; diff --git a/src/plugins/texteditor/texteditorconstants.h b/src/plugins/texteditor/texteditorconstants.h index c2818dd21f9..d21b4f8c2e1 100644 --- a/src/plugins/texteditor/texteditorconstants.h +++ b/src/plugins/texteditor/texteditorconstants.h @@ -49,6 +49,7 @@ const char * const UN_COLLAPSE_ALL = "TextEditor.UnCollapseAll"; const char * const AUTO_INDENT_SELECTION = "TextEditor.AutoIndentSelection"; const char * const INCREASE_FONT_SIZE = "TextEditor.IncreaseFontSize"; const char * const DECREASE_FONT_SIZE = "TextEditor.DecreaseFontSize"; +const char * const RESET_FONT_SIZE = "TextEditor.ResetFontSize"; const char * const GOTO_BLOCK_START = "TextEditor.GotoBlockStart"; const char * const GOTO_BLOCK_START_WITH_SELECTION = "TextEditor.GotoBlockStartWithSelection"; const char * const GOTO_BLOCK_END = "TextEditor.GotoBlockEnd"; diff --git a/src/plugins/texteditor/texteditorsettings.cpp b/src/plugins/texteditor/texteditorsettings.cpp index 66e71706a7a..52ab3bb24ad 100644 --- a/src/plugins/texteditor/texteditorsettings.cpp +++ b/src/plugins/texteditor/texteditorsettings.cpp @@ -170,8 +170,10 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor) connect(this, SIGNAL(displaySettingsChanged(TextEditor::DisplaySettings)), editor, SLOT(setDisplaySettings(TextEditor::DisplaySettings))); - connect(editor, SIGNAL(requestFontSize(int)), - this, SLOT(fontSizeRequested(int))); + connect(editor, SIGNAL(requestFontZoom(int)), + this, SLOT(fontZoomRequested(int))); + connect(editor, SIGNAL(requestZoomReset()), + this, SLOT(zoomResetRequested())); // Apply current settings (tab settings depend on font settings) editor->setFontSettings(fontSettings()); @@ -181,10 +183,17 @@ void TextEditorSettings::initializeEditor(BaseTextEditor *editor) } -void TextEditorSettings::fontSizeRequested(int pointSize) +void TextEditorSettings::fontZoomRequested(int zoom) { FontSettings &fs = const_cast(m_fontSettingsPage->fontSettings()); - fs.setFontSize(pointSize); + fs.setFontZoom(qMax(10, fs.fontZoom() + zoom)); + m_fontSettingsPage->saveSettings(); +} + +void TextEditorSettings::zoomResetRequested() +{ + FontSettings &fs = const_cast(m_fontSettingsPage->fontSettings()); + fs.setFontZoom(100); m_fontSettingsPage->saveSettings(); } diff --git a/src/plugins/texteditor/texteditorsettings.h b/src/plugins/texteditor/texteditorsettings.h index de3ff07bd2b..14912d69562 100644 --- a/src/plugins/texteditor/texteditorsettings.h +++ b/src/plugins/texteditor/texteditorsettings.h @@ -74,7 +74,8 @@ signals: void displaySettingsChanged(const TextEditor::DisplaySettings &); private slots: - void fontSizeRequested(int pointSize); + void fontZoomRequested(int pointSize); + void zoomResetRequested(); private: FontSettingsPage *m_fontSettingsPage; From c1a1cda9509aeb689d24614f88ec415bad64bd63 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 19:01:23 +0100 Subject: [PATCH 45/62] Remove duplicated signals --- .../qt4projectmanager/qt-maemo/maemorunconfiguration.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index f8e0b6a5488..471faf58f5d 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -286,11 +286,6 @@ MaemoRunConfiguration::MaemoRunConfiguration(Project *project, connect(project, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(invalidateCachedTargetInformation())); - connect(project, SIGNAL(targetInformationChanged()), this, - SLOT(invalidateCachedSimulatorInformation())); - connect(project, SIGNAL(activeBuildConfigurationChanged()), this, - SLOT(invalidateCachedSimulatorInformation())); - qemu = new QProcess(this); connect(qemu, SIGNAL(error(QProcess::ProcessError)), &dumper, SLOT(printToStream(QProcess::ProcessError))); From 994f8d5fbf4b5f6c961894ff53736ddeacc0b786 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 19:01:52 +0100 Subject: [PATCH 46/62] Don't allow adding a second qmakestep --- src/plugins/qt4projectmanager/qmakestep.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 42ab6d24680..c5447ce44a5 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -384,8 +384,9 @@ ProjectExplorer::BuildStep *QMakeStepFactory::clone(ProjectExplorer::BuildStep * QStringList QMakeStepFactory::canCreateForBuildConfiguration(ProjectExplorer::BuildConfiguration *bc) const { - if (qobject_cast(bc)) - return QStringList() << Constants::QMAKESTEP; + if (Qt4BuildConfiguration *qt4bc = qobject_cast(bc)) + if (!qt4bc->qmakeStep()) + return QStringList() << Constants::QMAKESTEP; return QStringList(); } From a21ebf54751a8e0cd32c1f6923ba9f144574de21 Mon Sep 17 00:00:00 2001 From: mae Date: Mon, 30 Nov 2009 19:09:04 +0100 Subject: [PATCH 47/62] zoom the search results as well (regression fix) --- src/plugins/texteditor/texteditorplugin.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/texteditorplugin.cpp b/src/plugins/texteditor/texteditorplugin.cpp index 5e6f5ae0919..ea2b6e0168f 100644 --- a/src/plugins/texteditor/texteditorplugin.cpp +++ b/src/plugins/texteditor/texteditorplugin.cpp @@ -187,7 +187,8 @@ void TextEditorPlugin::invokeQuickFix() void TextEditorPlugin::updateSearchResultsFont(const FontSettings &settings) { if (m_searchResultWindow) - m_searchResultWindow->setTextEditorFont(QFont(settings.family(), settings.fontSize())); + m_searchResultWindow->setTextEditorFont(QFont(settings.family(), + settings.fontSize() * settings.fontZoom() / 100)); } Q_EXPORT_PLUGIN(TextEditorPlugin) From b7635dda193d73d1192792c10a8467770944b03a Mon Sep 17 00:00:00 2001 From: mae Date: Mon, 30 Nov 2009 19:13:20 +0100 Subject: [PATCH 48/62] tune editor mouse cursor behaviour the fix makes the mouse cursor visible when the editor loses focus. This fixes an issue with the completion box, where on mac and windows no mouse cursor would be visible (it worked on X11 due to the way X11 does mouse grabbing for popup windows). --- src/plugins/help/helpplugin.cpp | 2 +- src/plugins/texteditor/basetexteditor.cpp | 8 ++++++++ src/plugins/texteditor/basetexteditor.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index 625be439674..d905a538fd9 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -427,7 +427,7 @@ bool HelpPlugin::initialize(const QStringList &arguments, QString *error) advancedMenu->addAction(cmd, Core::Constants::G_EDIT_FONT); a = new QAction(tr("Reset Font Size"), this); - cmd = am->registerAction(a, TextEditor::Constants::DECREASE_FONT_SIZE, + cmd = am->registerAction(a, TextEditor::Constants::RESET_FONT_SIZE, modecontext); cmd->setDefaultKeySequence(QKeySequence(tr("Ctrl+0"))); connect(a, SIGNAL(triggered()), m_centralWidget, SLOT(resetZoom())); diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 2e30a1487e8..2a20ed857c4 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -4179,6 +4179,14 @@ void BaseTextEditor::changeEvent(QEvent *e) } } +void BaseTextEditor::focusOutEvent(QFocusEvent *e) +{ + QPlainTextEdit::focusOutEvent(e); + if (viewport()->cursor().shape() == Qt::BlankCursor) + viewport()->setCursor(Qt::IBeamCursor); +} + + void BaseTextEditor::maybeSelectLine() { QTextCursor cursor = textCursor(); diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h index 092d6c7f4b8..6c135b86f3c 100644 --- a/src/plugins/texteditor/basetexteditor.h +++ b/src/plugins/texteditor/basetexteditor.h @@ -418,6 +418,7 @@ protected: void keyPressEvent(QKeyEvent *e); void wheelEvent(QWheelEvent *e); void changeEvent(QEvent *e); + void focusOutEvent(QFocusEvent *e); void showEvent(QShowEvent *); From 2de390cfdbb709a2278dd42f3cef22371e8165a4 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 19:16:00 +0100 Subject: [PATCH 49/62] Move QMakeParser to Qt4ProjectManager --- .../projectexplorer/buildparserfactory.cpp | 16 ----------- .../projectexplorer/buildparserfactory.h | 10 ------- .../projectexplorer/projectexplorer.cpp | 1 - .../projectexplorer/projectexplorer.pro | 2 -- .../projectexplorerconstants.h | 1 - .../qmakeparser.cpp | 28 +++++++++++++++---- .../qmakeparser.h | 17 +++++++++-- src/plugins/qt4projectmanager/qmakestep.cpp | 4 +-- .../qt4projectmanager/qt4projectmanager.pro | 6 ++-- .../qt4projectmanagerconstants.h | 3 ++ .../qt4projectmanagerplugin.cpp | 2 ++ 11 files changed, 48 insertions(+), 42 deletions(-) rename src/plugins/{projectexplorer => qt4projectmanager}/qmakeparser.cpp (71%) rename src/plugins/{projectexplorer => qt4projectmanager}/qmakeparser.h (79%) diff --git a/src/plugins/projectexplorer/buildparserfactory.cpp b/src/plugins/projectexplorer/buildparserfactory.cpp index cb9326d68ba..e4b8895eaee 100644 --- a/src/plugins/projectexplorer/buildparserfactory.cpp +++ b/src/plugins/projectexplorer/buildparserfactory.cpp @@ -32,7 +32,6 @@ #include "projectexplorerconstants.h" #include "gccparser.h" #include "msvcparser.h" -#include "qmakeparser.h" using namespace ProjectExplorer::Internal; @@ -65,18 +64,3 @@ ProjectExplorer::IBuildParser * MsvcParserFactory::create(const QString & name) Q_UNUSED(name) return new MsvcParser(); } - -QMakeParserFactory::~QMakeParserFactory() -{ -} - -bool QMakeParserFactory::canCreate(const QString & name) const -{ - return (name == Constants::BUILD_PARSER_QMAKE); -} - -ProjectExplorer::IBuildParser * QMakeParserFactory::create(const QString & name) const -{ - Q_UNUSED(name) - return new QMakeParser(); -} diff --git a/src/plugins/projectexplorer/buildparserfactory.h b/src/plugins/projectexplorer/buildparserfactory.h index f953d63ebf6..e29570f2baf 100644 --- a/src/plugins/projectexplorer/buildparserfactory.h +++ b/src/plugins/projectexplorer/buildparserfactory.h @@ -55,16 +55,6 @@ public: virtual ProjectExplorer::IBuildParser * create(const QString & name) const; }; -class QMakeParserFactory : public ProjectExplorer::IBuildParserFactory -{ - Q_OBJECT -public: - QMakeParserFactory() {} - virtual ~QMakeParserFactory(); - virtual bool canCreate(const QString & name) const; - virtual ProjectExplorer::IBuildParser * create(const QString & name) const; -}; - } // namespace Internal } // namespace ProjectExplorer diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index 2f2da8c6e0a..c15c303e3ae 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -307,7 +307,6 @@ bool ProjectExplorerPlugin::initialize(const QStringList &arguments, QString *er // Build parsers addAutoReleasedObject(new GccParserFactory); addAutoReleasedObject(new MsvcParserFactory); - addAutoReleasedObject(new QMakeParserFactory); // Settings page addAutoReleasedObject(new ProjectExplorerSettingsPage); diff --git a/src/plugins/projectexplorer/projectexplorer.pro b/src/plugins/projectexplorer/projectexplorer.pro index 8aaba10473a..325f624a321 100644 --- a/src/plugins/projectexplorer/projectexplorer.pro +++ b/src/plugins/projectexplorer/projectexplorer.pro @@ -66,7 +66,6 @@ HEADERS += projectexplorer.h \ projectexplorersettingspage.h \ projectwelcomepage.h \ projectwelcomepagewidget.h \ - qmakeparser.h \ baseprojectwizarddialog.h SOURCES += projectexplorer.cpp \ projectwindow.cpp \ @@ -121,7 +120,6 @@ SOURCES += projectexplorer.cpp \ projectwelcomepage.cpp \ projectwelcomepagewidget.cpp \ corelistenercheckingforrunningbuild.cpp \ - qmakeparser.cpp \ baseprojectwizarddialog.cpp FORMS += processstep.ui \ editorsettingspropertiespage.ui \ diff --git a/src/plugins/projectexplorer/projectexplorerconstants.h b/src/plugins/projectexplorer/projectexplorerconstants.h index 262cc513675..958391e6371 100644 --- a/src/plugins/projectexplorer/projectexplorerconstants.h +++ b/src/plugins/projectexplorer/projectexplorerconstants.h @@ -179,7 +179,6 @@ const char * const FORM_MIMETYPE = "application/x-designer"; const char * const RESOURCE_MIMETYPE = "application/vnd.nokia.xml.qt.resource"; // build parsers -const char * const BUILD_PARSER_QMAKE = "BuildParser.QMake"; const char * const BUILD_PARSER_MSVC = "BuildParser.MSVC"; const char * const BUILD_PARSER_GCC = "BuildParser.Gcc"; const char * const BUILD_PARSER_RVCT = "BuildParser.Rvct"; diff --git a/src/plugins/projectexplorer/qmakeparser.cpp b/src/plugins/qt4projectmanager/qmakeparser.cpp similarity index 71% rename from src/plugins/projectexplorer/qmakeparser.cpp rename to src/plugins/qt4projectmanager/qmakeparser.cpp index 4425835f4e7..767b86921af 100644 --- a/src/plugins/projectexplorer/qmakeparser.cpp +++ b/src/plugins/qt4projectmanager/qmakeparser.cpp @@ -28,10 +28,28 @@ **************************************************************************/ #include "qmakeparser.h" -#include "projectexplorerconstants.h" -#include "taskwindow.h" +#include "qt4projectmanagerconstants.h" +#include +#include -using namespace ProjectExplorer; +using namespace Qt4ProjectManager; +using namespace Qt4ProjectManager::Internal; +using ProjectExplorer::TaskWindow; + +QMakeParserFactory::~QMakeParserFactory() +{ +} + +bool QMakeParserFactory::canCreate(const QString & name) const +{ + return (name == Constants::BUILD_PARSER_QMAKE); +} + +ProjectExplorer::IBuildParser * QMakeParserFactory::create(const QString & name) const +{ + Q_UNUSED(name) + return new QMakeParser(); +} QMakeParser::QMakeParser() { @@ -39,7 +57,7 @@ QMakeParser::QMakeParser() QString QMakeParser::name() const { - return QLatin1String(ProjectExplorer::Constants::BUILD_PARSER_QMAKE); + return QLatin1String(Qt4ProjectManager::Constants::BUILD_PARSER_QMAKE); } void QMakeParser::stdOutput(const QString & line) @@ -57,7 +75,7 @@ void QMakeParser::stdError(const QString & line) lne /* description */, QString() /* filename */, -1 /* linenumber */, - Constants::TASK_CATEGORY_BUILDSYSTEM)); + ProjectExplorer::Constants::TASK_CATEGORY_BUILDSYSTEM)); return; } } diff --git a/src/plugins/projectexplorer/qmakeparser.h b/src/plugins/qt4projectmanager/qmakeparser.h similarity index 79% rename from src/plugins/projectexplorer/qmakeparser.h rename to src/plugins/qt4projectmanager/qmakeparser.h index 5d5a1b02bb7..e3bdf950a9d 100644 --- a/src/plugins/projectexplorer/qmakeparser.h +++ b/src/plugins/qt4projectmanager/qmakeparser.h @@ -30,11 +30,23 @@ #ifndef QMAKEPARSER_H #define QMAKEPARSER_H -#include "ibuildparser.h" +#include #include -namespace ProjectExplorer { +namespace Qt4ProjectManager { +namespace Internal { + +class QMakeParserFactory : public ProjectExplorer::IBuildParserFactory +{ + Q_OBJECT +public: + QMakeParserFactory() {} + virtual ~QMakeParserFactory(); + virtual bool canCreate(const QString & name) const; + virtual ProjectExplorer::IBuildParser * create(const QString & name) const; +}; + class QMakeParser : public ProjectExplorer::IBuildParser { @@ -48,6 +60,7 @@ public: private: }; +} // namesapce Interanal } // namespace ProjectExplorer #endif // QMAKEPARSER_H diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index c5447ce44a5..32325ec5666 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -39,8 +39,6 @@ #include #include -#include - #include #include #include @@ -152,7 +150,7 @@ bool QMakeStep::init() setArguments(args); setEnvironment(qt4bc->environment()); - setBuildParser(ProjectExplorer::Constants::BUILD_PARSER_QMAKE); + setBuildParser(Qt4ProjectManager::Constants::BUILD_PARSER_QMAKE); return AbstractMakeStep::init(); } diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.pro b/src/plugins/qt4projectmanager/qt4projectmanager.pro index d3847c1202b..aafdecbb6ae 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.pro +++ b/src/plugins/qt4projectmanager/qt4projectmanager.pro @@ -39,7 +39,8 @@ HEADERS += qt4projectmanagerplugin.h \ externaleditors.h \ gettingstartedwelcomepagewidget.h \ gettingstartedwelcomepage.h \ - qt4buildconfiguration.h + qt4buildconfiguration.h \ + qmakeparser.h SOURCES += qt4projectmanagerplugin.cpp \ qt4projectmanager.cpp \ qt4project.cpp \ @@ -74,7 +75,8 @@ SOURCES += qt4projectmanagerplugin.cpp \ externaleditors.cpp \ gettingstartedwelcomepagewidget.cpp \ gettingstartedwelcomepage.cpp \ - qt4buildconfiguration.cpp + qt4buildconfiguration.cpp \ + qmakeparser.cpp FORMS += makestep.ui \ qmakestep.ui \ qt4projectconfigwidget.ui \ diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h index 19c033a0eee..6af9bbb0f6a 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h +++ b/src/plugins/qt4projectmanager/qt4projectmanagerconstants.h @@ -77,6 +77,9 @@ const char * const QT_SETTINGS_CATEGORY = "L.Qt4"; const char * const QT_SETTINGS_TR_CATEGORY = QT_TRANSLATE_NOOP("Qt4ProjectManager", "Qt4"); const char * const QTVERSION_SETTINGS_PAGE_ID = "Qt Versions"; const char * const QTVERSION_SETTINGS_PAGE_NAME = QT_TRANSLATE_NOOP("Qt4ProjectManager", "Qt Versions"); + +// BuildParser +const char * const BUILD_PARSER_QMAKE = "BuildParser.QMake"; } // namespace Constants } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index a6fbe1c9806..040691c56a0 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -45,6 +45,7 @@ #include "externaleditors.h" #include "gettingstartedwelcomepage.h" #include "gettingstartedwelcomepagewidget.h" +#include "qmakeparser.h" #ifdef QTCREATOR_WITH_S60 #include "qt-s60/s60manager.h" @@ -149,6 +150,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * addAutoReleasedObject(new QMakeStepFactory); addAutoReleasedObject(new MakeStepFactory); + addAutoReleasedObject(new QMakeParserFactory); addAutoReleasedObject(new Qt4RunConfigurationFactory); From 3565fe4e82562557125a24493276aa58c0798fd2 Mon Sep 17 00:00:00 2001 From: dt Date: Mon, 30 Nov 2009 19:30:51 +0100 Subject: [PATCH 50/62] Fix always to end of line jumping cursor in MakeStepConfigWidget Also rename some methods/signal to make clearer that those only are relevevant for user changes not for all arguments. --- src/plugins/qt4projectmanager/makestep.cpp | 38 ++++++++++--------- src/plugins/qt4projectmanager/makestep.h | 11 +++--- src/plugins/qt4projectmanager/qmakestep.cpp | 2 + src/plugins/qt4projectmanager/qt4project.cpp | 2 +- .../qt4projectconfigwidget.cpp | 4 +- 5 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/plugins/qt4projectmanager/makestep.cpp b/src/plugins/qt4projectmanager/makestep.cpp index 9642de569ac..beb2fbc45e7 100644 --- a/src/plugins/qt4projectmanager/makestep.cpp +++ b/src/plugins/qt4projectmanager/makestep.cpp @@ -54,7 +54,7 @@ MakeStep::MakeStep(ProjectExplorer::BuildConfiguration *bc) MakeStep::MakeStep(MakeStep *bs, ProjectExplorer::BuildConfiguration *bc) : AbstractMakeStep(bs, bc), m_clean(bs->m_clean), - m_makeargs(bs->m_makeargs), + m_userArgs(bs->m_userArgs), m_makeCmd(bs->m_makeCmd) { @@ -84,7 +84,7 @@ void MakeStep::restoreFromGlobalMap(const QMap &map) void MakeStep::restoreFromLocalMap(const QMap &map) { - m_makeargs = map.value("makeargs").toStringList(); + m_userArgs = map.value("makeargs").toStringList(); m_makeCmd = map.value("makeCmd").toString(); if (map.value("clean").isValid() && map.value("clean").toBool()) m_clean = true; @@ -93,7 +93,7 @@ void MakeStep::restoreFromLocalMap(const QMap &map) void MakeStep::storeIntoLocalMap(QMap &map) { - map["makeargs"] = m_makeargs; + map["makeargs"] = m_userArgs; map["makeCmd"] = m_makeCmd; if (m_clean) map["clean"] = true; @@ -128,7 +128,7 @@ bool MakeStep::init() // we should stop the clean queue // That is mostly so that rebuild works on a alrady clean project setIgnoreReturnValue(m_clean); - QStringList args = m_makeargs; + QStringList args = m_userArgs; if (!m_clean) { if (!bc->defaultMakeTarget().isEmpty()) args << bc->defaultMakeTarget(); @@ -196,19 +196,19 @@ ProjectExplorer::BuildStepConfigWidget *MakeStep::createConfigWidget() return new MakeStepConfigWidget(this); } -QStringList MakeStep::makeArguments() +QStringList MakeStep::userArguments() { - return m_makeargs; + return m_userArgs; } -void MakeStep::setMakeArguments(const QStringList &arguments) +void MakeStep::setUserArguments(const QStringList &arguments) { - m_makeargs = arguments; - emit changed(); + m_userArgs = arguments; + emit userArgumentsChanged(); } MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) - : BuildStepConfigWidget(), m_makeStep(makeStep) + : BuildStepConfigWidget(), m_makeStep(makeStep), m_ignoreChange(false) { m_ui.setupUi(this); connect(m_ui.makeLineEdit, SIGNAL(textEdited(QString)), @@ -216,8 +216,8 @@ MakeStepConfigWidget::MakeStepConfigWidget(MakeStep *makeStep) connect(m_ui.makeArgumentsLineEdit, SIGNAL(textEdited(QString)), this, SLOT(makeArgumentsLineEditTextEdited())); - connect(makeStep, SIGNAL(changed()), - this, SLOT(update())); + connect(makeStep, SIGNAL(userArgumentsChanged()), + this, SLOT(userArgumentsChanged())); connect(makeStep->buildConfiguration(), SIGNAL(buildDirectoryChanged()), this, SLOT(updateDetails())); @@ -257,7 +257,7 @@ void MakeStepConfigWidget::updateDetails() // FIXME doing this without the user having a way to override this is rather bad // so we only do it for unix and if the user didn't override the make command // but for now this is the least invasive change - QStringList args = m_makeStep->makeArguments(); + QStringList args = m_makeStep->userArguments(); ProjectExplorer::ToolChain::ToolChainType t = ProjectExplorer::ToolChain::UNKNOWN; ProjectExplorer::ToolChain *toolChain = bc->toolChain(); if (toolChain) @@ -281,9 +281,11 @@ QString MakeStepConfigWidget::displayName() const return m_makeStep->displayName(); } -void MakeStepConfigWidget::update() +void MakeStepConfigWidget::userArgumentsChanged() { - init(); + const QStringList &makeArguments = m_makeStep->userArguments(); + m_ui.makeArgumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(makeArguments)); + updateDetails(); } void MakeStepConfigWidget::init() @@ -293,7 +295,7 @@ void MakeStepConfigWidget::init() const QString &makeCmd = m_makeStep->m_makeCmd; m_ui.makeLineEdit->setText(makeCmd); - const QStringList &makeArguments = m_makeStep->makeArguments(); + const QStringList &makeArguments = m_makeStep->userArguments(); m_ui.makeArgumentsLineEdit->setText(ProjectExplorer::Environment::joinArgumentList(makeArguments)); updateDetails(); } @@ -306,8 +308,10 @@ void MakeStepConfigWidget::makeLineEditTextEdited() void MakeStepConfigWidget::makeArgumentsLineEditTextEdited() { - m_makeStep->setMakeArguments( + m_ignoreChange = true; + m_makeStep->setUserArguments( ProjectExplorer::Environment::parseCombinedArgString(m_ui.makeArgumentsLineEdit->text())); + m_ignoreChange = false; updateDetails(); } diff --git a/src/plugins/qt4projectmanager/makestep.h b/src/plugins/qt4projectmanager/makestep.h index 8e670fa2f19..db70e16a0e0 100644 --- a/src/plugins/qt4projectmanager/makestep.h +++ b/src/plugins/qt4projectmanager/makestep.h @@ -80,8 +80,8 @@ public: virtual QString displayName(); virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget(); virtual bool immutable() const; - QStringList makeArguments(); - void setMakeArguments(const QStringList &arguments); + QStringList userArguments(); + void setUserArguments(const QStringList &arguments); virtual void restoreFromGlobalMap(const QMap &map); @@ -91,10 +91,10 @@ public: virtual void storeIntoLocalMap(QMap &map); signals: - void changed(); + void userArgumentsChanged(); private: bool m_clean; - QStringList m_makeargs; + QStringList m_userArgs; QString m_makeCmd; }; @@ -109,13 +109,14 @@ public: private slots: void makeLineEditTextEdited(); void makeArgumentsLineEditTextEdited(); - void update(); void updateMakeOverrideLabel(); void updateDetails(); + void userArgumentsChanged(); private: Ui::MakeStep m_ui; MakeStep *m_makeStep; QString m_summaryText; + bool m_ignoreChange; }; } // Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qmakestep.cpp b/src/plugins/qt4projectmanager/qmakestep.cpp index 32325ec5666..ab5d39075c2 100644 --- a/src/plugins/qt4projectmanager/qmakestep.cpp +++ b/src/plugins/qt4projectmanager/qmakestep.cpp @@ -327,6 +327,8 @@ void QMakeStepConfigWidget::userArgumentsChanged() return; QString qmakeArgs = ProjectExplorer::Environment::joinArgumentList(m_step->userArguments()); m_ui.qmakeAdditonalArgumentsLineEdit->setText(qmakeArgs); + updateTitleLabel(); + updateEffectiveQMakeCall(); } void QMakeStepConfigWidget::init() diff --git a/src/plugins/qt4projectmanager/qt4project.cpp b/src/plugins/qt4projectmanager/qt4project.cpp index 9fafc02dd52..78f830c9b1c 100644 --- a/src/plugins/qt4projectmanager/qt4project.cpp +++ b/src/plugins/qt4projectmanager/qt4project.cpp @@ -480,7 +480,7 @@ Qt4BuildConfiguration *Qt4Project::addQt4BuildConfiguration(QString displayName, // set some options for qmake and make if (qmakeBuildConfiguration & QtVersion::BuildAll) // debug_and_release => explicit targets - makeStep->setMakeArguments(QStringList() << (debug ? "debug" : "release")); + makeStep->setUserArguments(QStringList() << (debug ? "debug" : "release")); bc->setValue("buildConfiguration", int(qmakeBuildConfiguration)); diff --git a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp index fb9ba63807c..13ac7cb6d6c 100644 --- a/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp +++ b/src/plugins/qt4projectmanager/qt4projectconfigwidget.cpp @@ -306,7 +306,7 @@ void Qt4ProjectConfigWidget::importLabelClicked() // If we are switching to BuildAll we want "release" in there and no "debug" // or "debug" in there and no "release" // If we are switching to not BuildAl we want neither "release" nor "debug" in there - QStringList makeCmdArguments = makeStep->makeArguments(); + QStringList makeCmdArguments = makeStep->userArguments(); bool debug = qmakeBuildConfig & QtVersion::DebugBuild; if (qmakeBuildConfig & QtVersion::BuildAll) { makeCmdArguments.removeAll(debug ? "release" : "debug"); @@ -316,7 +316,7 @@ void Qt4ProjectConfigWidget::importLabelClicked() makeCmdArguments.removeAll("debug"); makeCmdArguments.removeAll("release"); } - makeStep->setMakeArguments(makeCmdArguments); + makeStep->setUserArguments(makeCmdArguments); } } setupQtVersionsComboBox(); From 275146afdfc2e75dcdc74f5737e65c315ea5851a Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Mon, 30 Nov 2009 19:38:02 +0100 Subject: [PATCH 51/62] Implement ProgressManager's progress-bar-on-icon on Windows 7. Allow compiling with older Windows SDKs, link ole32 explictly. If you want this feature to work, you need to compile and test it on Windows 7. Task-Number: QTCREATORBUG-252 --- src/plugins/coreplugin/coreplugin.pro | 1 + .../progressmanager/progressmanager.cpp | 5 +- .../progressmanager/progressmanager_mac.mm | 8 ++ .../progressmanager/progressmanager_p.h | 1 + .../progressmanager/progressmanager_win.cpp | 86 +++++++++++++++++++ .../progressmanager/progressmanager_x11.cpp | 8 ++ 6 files changed, 105 insertions(+), 4 deletions(-) diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro index 791aa816714..ba45a0699c0 100644 --- a/src/plugins/coreplugin/coreplugin.pro +++ b/src/plugins/coreplugin/coreplugin.pro @@ -168,6 +168,7 @@ RESOURCES += core.qrc \ win32 { SOURCES += progressmanager/progressmanager_win.cpp + LIBS += -lole32 } else:macx { OBJECTIVE_SOURCES += progressmanager/progressmanager_mac.mm diff --git a/src/plugins/coreplugin/progressmanager/progressmanager.cpp b/src/plugins/coreplugin/progressmanager/progressmanager.cpp index 7418de8cf1b..fce083bf60e 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager.cpp @@ -50,10 +50,7 @@ ProgressManagerPrivate::ProgressManagerPrivate(QObject *parent) ProgressManagerPrivate::~ProgressManagerPrivate() { -} - -void ProgressManagerPrivate::init() -{ + cleanup(); } void ProgressManagerPrivate::cancelTasks(const QString &type) diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_mac.mm b/src/plugins/coreplugin/progressmanager/progressmanager_mac.mm index 296db9258ed..9d1a9ec10e6 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_mac.mm +++ b/src/plugins/coreplugin/progressmanager/progressmanager_mac.mm @@ -29,6 +29,14 @@ #include "progressmanager_p.h" +void Core::Internal::ProgressManagerPrivate::init() +{ +} + +void Core::Internal::ProgressManagerPrivate::cleanup() +{ +} + #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 #import #import diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_p.h b/src/plugins/coreplugin/progressmanager/progressmanager_p.h index 80819a36d04..e219fb7a7a6 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_p.h +++ b/src/plugins/coreplugin/progressmanager/progressmanager_p.h @@ -48,6 +48,7 @@ public: ProgressManagerPrivate(QObject *parent = 0); ~ProgressManagerPrivate(); void init(); + void cleanup(); FutureProgress *addTask(const QFuture &future, const QString &title, const QString &type, ProgressFlags flags); diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp index a427349c0fd..2e4cb614bd2 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp @@ -27,8 +27,91 @@ ** **************************************************************************/ +#include +#include + +#include + #include "progressmanager_p.h" +// for windows progress bar +#include + +// Windows 7 SDK required +#ifdef __ITaskbarList3_INTERFACE_DEFINED__ + +namespace { + int total = 0; + ITaskbarList3* pITask = 0; +} + +void Core::Internal::ProgressManagerPrivate::init() +{ + CoInitialize(NULL); + HRESULT hRes = CoCreateInstance(CLSID_TaskbarList, + NULL,CLSCTX_INPROC_SERVER, + IID_ITaskbarList3,(LPVOID*) &pITask); + if (FAILED(hRes)) + { + pITask = 0; + CoUninitialize(); + return; + } + + pITask->HrInit(); + return; +} + +void Core::Internal::ProgressManagerPrivate::cleanup() +{ + if (pITask) { + pITask->Release(); + pITask = NULL; + CoUninitialize(); + } +} + + +void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &text) +{ + Q_UNUSED(text) +} + +void Core::Internal::ProgressManagerPrivate::setApplicationProgressRange(int min, int max) +{ + total = max-min; +} + +void Core::Internal::ProgressManagerPrivate::setApplicationProgressValue(int value) +{ + if (pITask) { + WId winId = Core::ICore::instance()->mainWindow()->winId(); + pITask->SetProgressValue(winId, value, total); + } +} + +void Core::Internal::ProgressManagerPrivate::setApplicationProgressVisible(bool visible) +{ + if (!pITask) + return; + + WId winId = Core::ICore::instance()->mainWindow()->winId(); + if (visible) + pITask->SetProgressState(winId, TBPF_NORMAL); + else + pITask->SetProgressState(winId, TBPF_NOPROGRESS); +} + +#else + +void Core::Internal::ProgressManagerPrivate::init() +{ +} + +void Core::Internal::ProgressManagerPrivate::cleanup() +{ +} + void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &text) { Q_UNUSED(text) @@ -49,3 +132,6 @@ void Core::Internal::ProgressManagerPrivate::setApplicationProgressVisible(bool { Q_UNUSED(visible) } + + +#endif // __ITaskbarList2_INTERFACE_DEFINED__ diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp b/src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp index a427349c0fd..69bc2d0dcd1 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager_x11.cpp @@ -29,6 +29,14 @@ #include "progressmanager_p.h" +void Core::Internal::ProgressManagerPrivate::init() +{ +} + +void Core::Internal::ProgressManagerPrivate::cleanup() +{ +} + void Core::Internal::ProgressManagerPrivate::setApplicationLabel(const QString &text) { Q_UNUSED(text) From 2f944855e6943f0d4f267d8c78f7976637054348 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 1 Dec 2009 09:35:45 +0100 Subject: [PATCH 52/62] Compile MinGw. --- .../coreplugin/progressmanager/progressmanager_win.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp index 2e4cb614bd2..5e324c2bcdc 100644 --- a/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp +++ b/src/plugins/coreplugin/progressmanager/progressmanager_win.cpp @@ -35,7 +35,9 @@ #include "progressmanager_p.h" // for windows progress bar -#include +#ifndef __GNUC__ +# include +#endif // Windows 7 SDK required #ifdef __ITaskbarList3_INTERFACE_DEFINED__ From fe0d09991eac10aa1f7f09dd454865afa12d0690 Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Tue, 1 Dec 2009 11:25:32 +0100 Subject: [PATCH 53/62] Remove accidentially committed file. --- doc/eike_doc.patch | 138 --------------------------------------------- 1 file changed, 138 deletions(-) delete mode 100644 doc/eike_doc.patch diff --git a/doc/eike_doc.patch b/doc/eike_doc.patch deleted file mode 100644 index f23c589de23..00000000000 --- a/doc/eike_doc.patch +++ /dev/null @@ -1,138 +0,0 @@ -diff --git a/doc/addressbook-sdk.qdoc b/doc/addressbook-sdk.qdoc -index 0441666..7012ea6 100644 ---- a/doc/addressbook-sdk.qdoc -+++ b/doc/addressbook-sdk.qdoc -@@ -139,7 +139,7 @@ - \section1 Placing Widgets on The Form - - In the \gui{Project Sidebar}, double-click on the \c{addressbook.ui} file. -- The \QD plugin will be launched, allowing you to design your program's user -+ The \QD form editor will be launched, allowing you to design your program's user - interface. - - We require two \l{QLabel}s to label the input fields as well as a QLineEdit -@@ -156,6 +156,7 @@ - diagram below shows the layout cells and the position of our widgets. Place - your widgets accordingly and save the form by choosing - \gui{File | Save} or using the \key{Ctrl+S} shortcut. -+ (We have to actually layout the widgets in a grid layout, this step seems to be missing to me?) - - \image addressbook-tutorial-part1-labeled-screenshot.png - -@@ -311,7 +312,7 @@ - \snippet examples/addressbook-sdk/part2/addressbook.h slot definition - - Since the \c AddressBook class is a subclass of QWidget, Qt Creator -- includes QWidget in the hedaer file. -+ includes QWidget in the header file. - - \snippet examples/addressbook-sdk/part2/addressbook.h include - -@@ -323,7 +324,7 @@ - \snippet examples/addressbook-sdk/part2/addressbook.h members - - We also declare two private QString objects, \c oldName and \c oldAddress. -- These objects are needed to hold the name and address of hte contact that -+ These objects are needed to hold the name and address of the contact that - was last displayed, before the user clicked \gui Add. So, when the user - clicks \gui Cancel, we can revert to displaying the details of the last - contact. -@@ -499,7 +500,7 @@ - - \snippet examples/addressbook-sdk/part3/addressbook.cpp enable navigation - -- We also include these lins of code in the \c cancel() function. -+ We also include these lines of code in the \c cancel() function. - - Recall that we intend to emulate a circularly-linked list with our QMap - object, \c contacts. So in the \c next() function, we obtain an iterator -@@ -722,11 +723,12 @@ - - #image - -- We begin by adding a new \c{.ui} file to our project. Right click on your -+ We begin by adding a new \c{.ui} file and a corresponding class to our project. Right click on your - project and select \gui{Add New...}. In the \gui{New File} dialog, select -- \gui{Qt Designer Form}. In the \gui{Qt Designer Form} dialog, select -- \e{Dialog without buttons}. Name it \c{finddialog.ui} and add it to your -- project. The \QD plugin within Qt Creator will now display your new form. -+ \gui{Qt Designer Form Class}. In the \gui{Qt Designer Form Class} dialog, select -+ \e{Dialog without buttons}. Name the class \c{FindDialog} and add the files it to your -+ project. Open your new form in the \QD form editor within Qt Creator by -+ double-clicking on the \c{finddialog.ui} file in the \gui{Project Sidebar}. - - To replicate the screenshot above, we need a label, a line edit, and a push - button. Drag these onto your form. Set their text accordingly and name them -@@ -759,6 +761,9 @@ - \c findContact() function know when the \c FindDialog object has been - closed. We will explain this logic in further detail when discussing the - \c findContact() function. -+ (The above paragraph is not up to date, since clicked() is not connected -+ to accept(). The description of accept() can move below to the implementation -+ of findClicked().) - - \image addressbook-tutorial-part5-signals-and-slots.png - -@@ -766,17 +771,17 @@ - \gui Find button without entering a contact's name. Then, we set - \c findText to the search string, extracted from \c lineEdit. After that, - we clear the contents of \c lineEdit and hide the dialog. -+ (There is no findText member. The description of accept() should move here, together -+ with words about reject.) - - \snippet examples/addressbook-sdk/part5/finddialog.cpp findClicked - -- The \c findText variable has a public getter function, \c getFindText(), -- associated with it. Since we only ever set \c findText directly in both -- the constructor and in hte \c findClicked() function, we do not create a -- setter function to accompany \c getFindText(). Because \c getFindText() is -+ The \c text of the find dialog's line edit has a public getter function, \c findText(), -+ associated with it. Because \c findText() is - public, classes instantiating and using \c FindDialog can always access the - search string that the user has entered and accepted. - -- \snippet examples/addressbook-sdk/part5/finddialog.cpp getFindText -+ \snippet examples/addressbook-sdk/part5/finddialog.cpp findText - - - \section1 The AddressBook Class -@@ -788,23 +793,9 @@ - - So far, all our address book features have a QPushButton and a - corresponding slot. Similarly, for the \gui Find feature, we have -- \c findButton and \c findContact(). -+ \c {ui->findButton} and \c findContact(). - - \snippet examples/addressbook-sdk/part5/addressbook.h slot definition -- \dots -- \snippet examples/addressbook-sdk/part5/addressbook.h private members -- -- Lastly, we declare the private variable, \c dialog, which we will use to -- refer to an instance of \c FindDialog. -- -- Once we have instantiated a dialog, we might want to use it more than once; -- using a private variable allows us to refer to it from more than one place -- in the class. -- -- Within the \c AddressBook class's constructor, we insantiate our private -- objects, \c findButton and \c dialog: -- -- \snippet examples/addressbook-sdk/part5/addressbook.cpp private members - - Next, we connect the \c{findButton}'s \l{QPushButton::}{clicked()} signal - to \c findContact(). -@@ -818,10 +809,12 @@ - We start out by displaying the \c FindDialog instance, \c dialog. This is - when the user enters a contact name to look up. Once the user clicks the - dialog's \c findButton, the dialog is hidden and the result code is set to -- QDialog::Accepted. THis ensures that our \c if statement is always true. -+ either QDialog::Accepted or QDialog::Rejected by the FindDialog's -+ \c findClicked() method. This ensures that we only search for a contact -+ if the user typed something in the FindDialog's line edit. - - We then proceed to extract the search string, which in this case is -- \c contactName, using \c{FindDialog}'s \c getFindText() function. If the -+ \c contactName, using \c{FindDialog}'s \c findText() function. If the - contact exists in our address book, we display it immediately. Otherwise, - we display the QMessageBox shown below to indicate that their search - failed. From b792b934e48c741b804f19378b6028f32c1c04eb Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 1 Dec 2009 11:42:48 +0100 Subject: [PATCH 54/62] Dumper: Compile fix. --- tests/auto/debugger/tst_dumpers.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index b9ed42aa4b5..e7050ae1eb8 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -110,7 +110,9 @@ public: void testMi(const char* input) { - QCOMPARE('\n' + QString::fromLatin1(GdbMi(input).toString(false)), + GdbMi gdbmi; + gdbmi.fromString(QByteArray(input)); + QCOMPARE('\n' + QString::fromLatin1(gdbmi.toString(false)), '\n' + QString(input)); } From fade61a8a9397f44d31c5ab4ede57e5259de8880 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 1 Dec 2009 11:33:13 +0100 Subject: [PATCH 55/62] Use const literals. --- src/libs/cplusplus/CheckUndefinedSymbols.cpp | 26 +++--- src/libs/cplusplus/CheckUndefinedSymbols.h | 2 +- src/libs/cplusplus/CppBindings.cpp | 26 +++--- src/libs/cplusplus/CppBindings.h | 16 ++-- src/libs/cplusplus/CppDocument.cpp | 6 +- src/libs/cplusplus/FindUsages.cpp | 8 +- src/libs/cplusplus/FindUsages.h | 4 +- src/libs/cplusplus/GenTemplateInstance.cpp | 8 +- src/libs/cplusplus/GenTemplateInstance.h | 2 +- src/libs/cplusplus/LookupContext.cpp | 10 +- src/libs/cplusplus/LookupContext.h | 2 +- src/libs/cplusplus/NamePrettyPrinter.cpp | 9 +- src/libs/cplusplus/ResolveExpression.cpp | 4 +- src/plugins/cppeditor/cppeditor.cpp | 8 +- src/plugins/cppeditor/cpphoverhandler.cpp | 4 +- src/plugins/cpptools/cppfindreferences.cpp | 12 +-- src/plugins/qmleditor/qmleditor.cpp | 2 +- .../qmleditor/qmlexpressionundercursor.cpp | 2 +- src/shared/cplusplus/ASTVisitor.cpp | 12 +-- src/shared/cplusplus/ASTVisitor.h | 12 +-- src/shared/cplusplus/CheckDeclaration.cpp | 4 +- src/shared/cplusplus/CheckName.cpp | 12 +-- src/shared/cplusplus/CheckSpecifier.cpp | 4 +- src/shared/cplusplus/Control.cpp | 74 +++++++-------- src/shared/cplusplus/Control.h | 37 ++++---- src/shared/cplusplus/DiagnosticClient.h | 2 +- src/shared/cplusplus/LiteralTable.h | 92 +++++++++---------- src/shared/cplusplus/Name.h | 5 +- src/shared/cplusplus/Names.cpp | 32 +++---- src/shared/cplusplus/Names.h | 26 +++--- src/shared/cplusplus/Parser.cpp | 6 +- src/shared/cplusplus/Scope.cpp | 4 +- src/shared/cplusplus/Scope.h | 2 +- src/shared/cplusplus/Symbol.cpp | 16 ++-- src/shared/cplusplus/Symbol.h | 10 +- src/shared/cplusplus/Token.h | 8 +- src/shared/cplusplus/TranslationUnit.cpp | 36 ++++---- src/shared/cplusplus/TranslationUnit.h | 28 +++--- 38 files changed, 284 insertions(+), 289 deletions(-) diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.cpp b/src/libs/cplusplus/CheckUndefinedSymbols.cpp index 51d02a0dc47..f3d27df502d 100644 --- a/src/libs/cplusplus/CheckUndefinedSymbols.cpp +++ b/src/libs/cplusplus/CheckUndefinedSymbols.cpp @@ -65,7 +65,7 @@ void CheckUndefinedSymbols::operator()(AST *ast) QByteArray CheckUndefinedSymbols::templateParameterName(NameAST *ast) const { if (ast && ast->name) { - if (Identifier *id = ast->name->identifier()) + if (const Identifier *id = ast->name->identifier()) return QByteArray::fromRawData(id->chars(), id->size()); } @@ -92,7 +92,7 @@ bool CheckUndefinedSymbols::isType(const QByteArray &name) const Symbol *member = members->symbolAt(m); if (member->isTypedef() && member->isDeclaration()) { - if (Identifier *id = member->identifier()) { + if (const Identifier *id = member->identifier()) { if (name == id->chars()) return true; } @@ -114,7 +114,7 @@ bool CheckUndefinedSymbols::isType(const QByteArray &name) const return _types.contains(name); } -bool CheckUndefinedSymbols::isType(Identifier *id) const +bool CheckUndefinedSymbols::isType(const Identifier *id) const { if (! id) return false; @@ -127,7 +127,7 @@ void CheckUndefinedSymbols::addType(Name *name) if (! name) return; - if (Identifier *id = name->identifier()) + if (const Identifier *id = name->identifier()) _types.insert(QByteArray(id->chars(), id->size())); } @@ -136,7 +136,7 @@ void CheckUndefinedSymbols::addProtocol(Name *name) if (!name) return; - if (Identifier *id = name->identifier()) + if (const Identifier *id = name->identifier()) _protocols.insert(QByteArray(id->chars(), id->size())); } @@ -176,7 +176,7 @@ void CheckUndefinedSymbols::buildTypeMap(NamespaceBinding *binding, QSetcontains(binding)) { processed->insert(binding); - if (Identifier *id = binding->identifier()) { + if (const Identifier *id = binding->identifier()) { _namespaceNames.insert(QByteArray(id->chars(), id->size())); } @@ -256,7 +256,7 @@ bool CheckUndefinedSymbols::visit(NamedTypeSpecifierAST *ast) unsigned line, col; getTokenStartPosition(ast->firstToken(), &line, &col); // qWarning() << _doc->fileName() << line << col; - } else if (Identifier *id = ast->name->name->identifier()) { + } else if (const Identifier *id = ast->name->name->identifier()) { if (! isType(id)) { if (FunctionDeclaratorAST *functionDeclarator = currentFunctionDeclarator()) { if (functionDeclarator->as_cpp_initializer) @@ -368,7 +368,7 @@ bool CheckUndefinedSymbols::visit(BaseSpecifierAST *base) bool resolvedBaseClassName = false; if (Name *name = nameAST->name) { - Identifier *id = name->identifier(); + const Identifier *id = name->identifier(); const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size()); if (isType(spell)) resolvedBaseClassName = true; @@ -406,7 +406,7 @@ bool CheckUndefinedSymbols::visit(QualifiedNameAST *ast) QualifiedNameId *q = ast->name->asQualifiedNameId(); for (unsigned i = 0; i < q->nameCount() - 1; ++i) { Name *name = q->nameAt(i); - if (Identifier *id = name->identifier()) { + if (const Identifier *id = name->identifier()) { const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size()); if (! (_namespaceNames.contains(spell) || isType(id))) { translationUnit()->warning(ast->firstToken(), @@ -475,7 +475,7 @@ bool CheckUndefinedSymbols::visit(ObjCClassDeclarationAST *ast) bool resolvedSuperClassName = false; if (Name *name = nameAST->name) { - Identifier *id = name->identifier(); + const Identifier *id = name->identifier(); const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size()); if (isType(spell)) resolvedSuperClassName = true; @@ -497,7 +497,7 @@ bool CheckUndefinedSymbols::visit(ObjCProtocolRefsAST *ast) bool resolvedProtocolName = false; if (Name *name = nameAST->name) { - Identifier *id = name->identifier(); + const Identifier *id = name->identifier(); const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size()); if (isProtocol(spell)) resolvedProtocolName = true; @@ -522,11 +522,11 @@ bool CheckUndefinedSymbols::visit(ObjCProtocolRefsAST *ast) bool CheckUndefinedSymbols::visit(ObjCPropertyDeclarationAST *ast) { for (List *iter = ast->symbols; iter; iter = iter->next) { - if (Name *getterName = iter->value->getterName()) { + if (/*Name *getterName = */ iter->value->getterName()) { // FIXME: resolve the symbol for the name, and check its signature. } - if (Name *setterName = iter->value->setterName()) { + if (/*Name *setterName = */ iter->value->setterName()) { // FIXME: resolve the symbol for the name, and check its signature. } } diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.h b/src/libs/cplusplus/CheckUndefinedSymbols.h index 4a13b6ee2dc..e6610a2564f 100644 --- a/src/libs/cplusplus/CheckUndefinedSymbols.h +++ b/src/libs/cplusplus/CheckUndefinedSymbols.h @@ -52,7 +52,7 @@ public: protected: using ASTVisitor::visit; - bool isType(Identifier *id) const; + bool isType(const Identifier *id) const; bool isType(const QByteArray &name) const; void addType(Name *name); diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp index c916ab4b8b1..2faf1aa6b7f 100644 --- a/src/libs/cplusplus/CppBindings.cpp +++ b/src/libs/cplusplus/CppBindings.cpp @@ -57,7 +57,7 @@ Location::Location(Symbol *symbol) _sourceLocation(symbol->sourceLocation()) { } -Location::Location(StringLiteral *fileId, unsigned sourceLocation) +Location::Location(const StringLiteral *fileId, unsigned sourceLocation) : _fileId(fileId), _sourceLocation(sourceLocation) { } @@ -93,7 +93,7 @@ NameId *NamespaceBinding::name() const return 0; } -Identifier *NamespaceBinding::identifier() const +const Identifier *NamespaceBinding::identifier() const { if (NameId *nameId = name()) return nameId->identifier(); @@ -113,7 +113,7 @@ NamespaceBinding *NamespaceBinding::globalNamespaceBinding() return it; } -Binding *NamespaceBinding::findClassOrNamespaceBinding(Identifier *id, QSet *processed) +Binding *NamespaceBinding::findClassOrNamespaceBinding(const Identifier *id, QSet *processed) { if (processed->contains(this)) return 0; @@ -156,7 +156,7 @@ ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet *pr Binding *current = this; for (unsigned i = 0; i < q->nameCount(); ++i) { - Identifier *nameId = q->nameAt(i)->identifier(); + const Identifier *nameId = q->nameAt(i)->identifier(); if (! nameId) return 0; @@ -173,7 +173,7 @@ ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet *pr processed->insert(this); - Identifier *id = name->identifier(); + const Identifier *id = name->identifier(); foreach (ClassBinding *classBinding, classBindings) { if (id->isEqualTo(classBinding->identifier())) @@ -306,7 +306,7 @@ static void closure(const Location &loc, Q_ASSERT(name->isNameId()); - Identifier *id = name->asNameId()->identifier(); + const Identifier *id = name->asNameId()->identifier(); bool ignoreUsingDirectives = false; foreach (Namespace *symbol, binding->symbols) { @@ -394,7 +394,7 @@ QByteArray NamespaceBinding::qualifiedId() const s.append(parent->qualifiedId()); s.append("::"); - if (Identifier *id = identifier()) + if (const Identifier *id = identifier()) s.append(id->chars(), id->size()); else @@ -409,7 +409,7 @@ QByteArray ClassBinding::qualifiedId() const QByteArray s = parent->qualifiedId(); s += "::"; - if (Identifier *id = identifier()) + if (const Identifier *id = identifier()) s.append(id->chars(), id->size()); else @@ -418,7 +418,7 @@ QByteArray ClassBinding::qualifiedId() const return s; } -Binding *ClassBinding::findClassOrNamespaceBinding(Identifier *id, QSet *processed) +Binding *ClassBinding::findClassOrNamespaceBinding(const Identifier *id, QSet *processed) { if (id->isEqualTo(identifier())) return this; @@ -461,7 +461,7 @@ ClassBinding *ClassBinding::findClassBinding(Name *name, QSet *proces Binding *currentBinding = this; for (unsigned i = 0; i < q->nameCount() - 1; ++i) { - Identifier *id = q->nameAt(i)->identifier(); + const Identifier *id = q->nameAt(i)->identifier(); if (! id) return 0; @@ -479,12 +479,12 @@ ClassBinding *ClassBinding::findClassBinding(Name *name, QSet *proces return 0; } - if (Identifier *id = name->identifier()) { + if (const Identifier *id = name->identifier()) { if (id->isEqualTo(identifier())) return this; foreach (ClassBinding *nestedClassBinding, children) { - if (Identifier *nestedClassId = nestedClassBinding->identifier()) { + if (const Identifier *nestedClassId = nestedClassBinding->identifier()) { if (nestedClassId->isEqualTo(id)) return nestedClassBinding; } @@ -557,7 +557,7 @@ Name *ClassBinding::name() const return symbols.first()->name(); } -Identifier *ClassBinding::identifier() const +const Identifier *ClassBinding::identifier() const { if (Name *n = name()) return n->identifier(); diff --git a/src/libs/cplusplus/CppBindings.h b/src/libs/cplusplus/CppBindings.h index 0ba95de0984..4bce41bcbc5 100644 --- a/src/libs/cplusplus/CppBindings.h +++ b/src/libs/cplusplus/CppBindings.h @@ -53,7 +53,7 @@ class CPLUSPLUS_EXPORT Location public: Location(); Location(Symbol *symbol); - Location(StringLiteral *fileId, unsigned sourceLocation); + Location(const StringLiteral *fileId, unsigned sourceLocation); inline bool isValid() const { return _fileId != 0; } @@ -61,14 +61,14 @@ public: inline operator bool() const { return _fileId != 0; } - inline StringLiteral *fileId() const + inline const StringLiteral *fileId() const { return _fileId; } inline unsigned sourceLocation() const { return _sourceLocation; } private: - StringLiteral *_fileId; + const StringLiteral *_fileId; unsigned _sourceLocation; }; @@ -85,7 +85,7 @@ public: virtual ClassBinding *asClassBinding() { return 0; } virtual ClassBinding *findClassBinding(Name *name, QSet *processed) = 0; - virtual Binding *findClassOrNamespaceBinding(Identifier *id, QSet *processed) = 0; + virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet *processed) = 0; }; class CPLUSPLUS_EXPORT NamespaceBinding: public Binding @@ -101,7 +101,7 @@ public: NameId *name() const; /// Returns this binding's identifier. - Identifier *identifier() const; + const Identifier *identifier() const; /// Returns the binding for the global namespace (aka ::). NamespaceBinding *globalNamespaceBinding(); @@ -117,7 +117,7 @@ public: bool lookAtParent = true); virtual ClassBinding *findClassBinding(Name *name, QSet *processed); - virtual Binding *findClassOrNamespaceBinding(Identifier *id, QSet *processed); + virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet *processed); /// Helpers. virtual QByteArray qualifiedId() const; @@ -168,11 +168,11 @@ public: Name *name() const; /// Returns this binding's identifier. - Identifier *identifier() const; + const Identifier *identifier() const; virtual QByteArray qualifiedId() const; virtual ClassBinding *findClassBinding(Name *name, QSet *processed); - virtual Binding *findClassOrNamespaceBinding(Identifier *id, QSet *processed); + virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet *processed); void dump(); diff --git a/src/libs/cplusplus/CppDocument.cpp b/src/libs/cplusplus/CppDocument.cpp index 24614c06e19..ba6409280ac 100644 --- a/src/libs/cplusplus/CppDocument.cpp +++ b/src/libs/cplusplus/CppDocument.cpp @@ -66,7 +66,7 @@ public: { } virtual void report(int level, - StringLiteral *fileId, + const StringLiteral *fileId, unsigned line, unsigned column, const char *format, va_list ap) { @@ -118,8 +118,8 @@ Document::Document(const QString &fileName) _control->setDiagnosticClient(new DocumentDiagnosticClient(this, &_diagnosticMessages)); const QByteArray localFileName = fileName.toUtf8(); - StringLiteral *fileId = _control->findOrInsertStringLiteral(localFileName.constData(), - localFileName.size()); + const StringLiteral *fileId = _control->findOrInsertStringLiteral(localFileName.constData(), + localFileName.size()); _translationUnit = new TranslationUnit(_control, fileId); _translationUnit->setQtMocRunEnabled(true); _translationUnit->setObjCEnabled(true); diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp index 396e9c8a5e7..bc9175740f8 100644 --- a/src/libs/cplusplus/FindUsages.cpp +++ b/src/libs/cplusplus/FindUsages.cpp @@ -57,7 +57,7 @@ void FindUsages::setGlobalNamespaceBinding(NamespaceBindingPtr globalNamespaceBi _globalNamespaceBinding = globalNamespaceBinding; } -QList FindUsages::operator()(Symbol *symbol, Identifier *id, AST *ast) +QList FindUsages::operator()(Symbol *symbol, const Identifier *id, AST *ast) { _processed.clear(); _references.clear(); @@ -344,7 +344,7 @@ bool FindUsages::visit(QualifiedNameAST *ast) bool FindUsages::visit(EnumeratorAST *ast) { - Identifier *id = identifier(ast->identifier_token); + const Identifier *id = identifier(ast->identifier_token); if (id == _id) { LookupContext context = currentContext(ast); const QList candidates = context.resolve(control()->nameId(id)); @@ -358,7 +358,7 @@ bool FindUsages::visit(EnumeratorAST *ast) bool FindUsages::visit(SimpleNameAST *ast) { - Identifier *id = identifier(ast->identifier_token); + const Identifier *id = identifier(ast->identifier_token); if (id == _id) { LookupContext context = currentContext(ast); const QList candidates = context.resolve(ast->name); @@ -370,7 +370,7 @@ bool FindUsages::visit(SimpleNameAST *ast) bool FindUsages::visit(DestructorNameAST *ast) { - Identifier *id = identifier(ast->identifier_token); + const Identifier *id = identifier(ast->identifier_token); if (id == _id) { LookupContext context = currentContext(ast); const QList candidates = context.resolve(ast->name); diff --git a/src/libs/cplusplus/FindUsages.h b/src/libs/cplusplus/FindUsages.h index 667ad18485a..4109a252df1 100644 --- a/src/libs/cplusplus/FindUsages.h +++ b/src/libs/cplusplus/FindUsages.h @@ -64,7 +64,7 @@ public: void setGlobalNamespaceBinding(NamespaceBindingPtr globalNamespaceBinding); - QList operator()(Symbol *symbol, Identifier *id, AST *ast); + QList operator()(Symbol *symbol, const Identifier *id, AST *ast); protected: using ASTVisitor::visit; @@ -101,7 +101,7 @@ protected: private: QFutureInterface *_future; - Identifier *_id; + const Identifier *_id; Symbol *_declSymbol; Document::Ptr _doc; Snapshot _snapshot; diff --git a/src/libs/cplusplus/GenTemplateInstance.cpp b/src/libs/cplusplus/GenTemplateInstance.cpp index 0267efeefa8..eaa515923a3 100644 --- a/src/libs/cplusplus/GenTemplateInstance.cpp +++ b/src/libs/cplusplus/GenTemplateInstance.cpp @@ -55,7 +55,7 @@ public: FullySpecifiedType apply(Name *name); FullySpecifiedType apply(const FullySpecifiedType &type); - int findSubstitution(Identifier *id) const; + int findSubstitution(const Identifier *id) const; FullySpecifiedType applySubstitution(int index) const; private: @@ -218,7 +218,7 @@ private: Control *control() const { return q->control(); } - int findSubstitution(Identifier *id) const + int findSubstitution(const Identifier *id) const { return q->findSubstitution(id); } FullySpecifiedType applySubstitution(int index) const @@ -337,12 +337,12 @@ FullySpecifiedType ApplySubstitution::apply(const FullySpecifiedType &type) return ty; } -int ApplySubstitution::findSubstitution(Identifier *id) const +int ApplySubstitution::findSubstitution(const Identifier *id) const { Q_ASSERT(id != 0); for (int index = 0; index < substitution.size(); ++index) { - QPair s = substitution.at(index); + QPair s = substitution.at(index); if (id->isEqualTo(s.first)) return index; diff --git a/src/libs/cplusplus/GenTemplateInstance.h b/src/libs/cplusplus/GenTemplateInstance.h index a59d1a74717..8db5bd9d934 100644 --- a/src/libs/cplusplus/GenTemplateInstance.h +++ b/src/libs/cplusplus/GenTemplateInstance.h @@ -44,7 +44,7 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT GenTemplateInstance { public: - typedef QList< QPair > Substitution; + typedef QList< QPair > Substitution; public: GenTemplateInstance(const LookupContext &context, const Substitution &substitution); diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index f125d202cd4..dbfa6710210 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -240,7 +240,7 @@ QList LookupContext::resolve(Name *name, const QList &visible else if (OperatorNameId *opId = name->asOperatorNameId()) return resolveOperatorNameId(opId, visibleScopes, mode); - else if (Identifier *id = name->identifier()) { + else if (const Identifier *id = name->identifier()) { for (int scopeIndex = 0; scopeIndex < visibleScopes.size(); ++scopeIndex) { Scope *scope = visibleScopes.at(scopeIndex); @@ -251,7 +251,7 @@ QList LookupContext::resolve(Name *name, const QList &visible else if (! maybeValidSymbol(symbol, mode, candidates)) continue; // skip it, we're not looking for this kind of symbols - else if (Identifier *symbolId = symbol->identifier()) { + else if (const Identifier *symbolId = symbol->identifier()) { if (! symbolId->isEqualTo(id)) continue; // skip it, the symbol's id is not compatible with this lookup. } @@ -265,7 +265,7 @@ QList LookupContext::resolve(Name *name, const QList &visible Name *classOrNamespaceName = control()->qualifiedNameId(q->names(), q->nameCount() - 1); - if (Identifier *classOrNamespaceNameId = identifier(classOrNamespaceName)) { + if (const Identifier *classOrNamespaceNameId = identifier(classOrNamespaceName)) { if (classOrNamespaceNameId->isEqualTo(id)) continue; } @@ -299,7 +299,7 @@ QList LookupContext::resolve(Name *name, const QList &visible return candidates; } -Identifier *LookupContext::identifier(const Name *name) const +const Identifier *LookupContext::identifier(const Name *name) const { if (name) return name->identifier(); @@ -667,7 +667,7 @@ Symbol *LookupContext::canonicalSymbol(Symbol *symbol, if (! canonicalSymbol) return 0; - if (Identifier *symbolId = canonicalSymbol->identifier()) { + if (const Identifier *symbolId = canonicalSymbol->identifier()) { if (symbolId && canonicalSymbol->type()->isFunctionType()) { Class *enclosingClass = canonicalSymbol->scope()->owner()->asClass(); const QList classBindings = visibleClassBindings(enclosingClass, globalNamespace); diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h index 3eca2fce315..06339d0a980 100644 --- a/src/libs/cplusplus/LookupContext.h +++ b/src/libs/cplusplus/LookupContext.h @@ -198,7 +198,7 @@ private: QList resolveNestedNameSpecifier(QualifiedNameId *q, const QList &visibleScopes) const; - Identifier *identifier(const Name *name) const; + const Identifier *identifier(const Name *name) const; QList buildVisibleScopes(); diff --git a/src/libs/cplusplus/NamePrettyPrinter.cpp b/src/libs/cplusplus/NamePrettyPrinter.cpp index cee4f77fea9..607d3a65923 100644 --- a/src/libs/cplusplus/NamePrettyPrinter.cpp +++ b/src/libs/cplusplus/NamePrettyPrinter.cpp @@ -64,7 +64,7 @@ QString NamePrettyPrinter::switchName(const QString &name) void NamePrettyPrinter::visit(NameId *name) { - Identifier *id = name->identifier(); + const Identifier *id = name->identifier(); if (id) _name = QString::fromLatin1(id->chars(), id->size()); else @@ -73,7 +73,7 @@ void NamePrettyPrinter::visit(NameId *name) void NamePrettyPrinter::visit(TemplateNameId *name) { - Identifier *id = name->identifier(); + const Identifier *id = name->identifier(); if (id) _name = QString::fromLatin1(id->chars(), id->size()); else @@ -95,7 +95,7 @@ void NamePrettyPrinter::visit(TemplateNameId *name) void NamePrettyPrinter::visit(DestructorNameId *name) { - Identifier *id = name->identifier(); + const Identifier *id = name->identifier(); _name += QLatin1Char('~'); _name += QString::fromLatin1(id->chars(), id->size()); } @@ -261,8 +261,7 @@ void NamePrettyPrinter::visit(SelectorNameId *name) if (!n) continue; - Identifier *id = n->identifier(); - if (id) { + if (const Identifier *id = n->identifier()) { _name += QString::fromLatin1(id->chars(), id->size()); if (name->hasArguments() || name->nameCount() > 1) diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 2d2b3defa1a..3701728557d 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -226,7 +226,7 @@ bool ResolveExpression::visit(SizeofExpressionAST *) bool ResolveExpression::visit(NumericLiteralAST *ast) { Type *type = 0; - NumericLiteral *literal = numericLiteral(ast->literal_token); + const NumericLiteral *literal = numericLiteral(ast->literal_token); if (literal->isChar()) type = control()->integerType(IntegerType::Char); @@ -723,7 +723,7 @@ ResolveExpression::resolveMember(Name *memberName, Class *klass, if (i < klass->templateParameterCount()) { Name *templArgName = klass->templateParameterAt(i)->name(); if (templArgName && templArgName->identifier()) { - Identifier *templArgId = templArgName->identifier(); + const Identifier *templArgId = templArgName->identifier(); subst.append(qMakePair(templArgId, templArgTy)); } } diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index a5192acdf91..e627e4ddc3f 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -219,7 +219,7 @@ protected: if (! (ast && ast->name)) return false; - Identifier *id = ast->name->identifier(); + const Identifier *id = ast->name->identifier(); if (scope) { for (Symbol *member = scope->lookat(id); member; member = member->next()) { @@ -1701,9 +1701,9 @@ void CPPEditor::performQuickFix(int index) { CPPQuickFixCollector *quickFixCollector = CppPlugin::instance()->quickFixCollector(); QuickFixOperationPtr op = m_quickFixes.at(index); - //quickFixCollector->perform(op); - op->createChangeSet(); - setChangeSet(op->changeSet()); + quickFixCollector->perform(op); + //op->createChangeSet(); + //setChangeSet(op->changeSet()); } void CPPEditor::contextMenuEvent(QContextMenuEvent *e) diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp index 46315187a07..5bcaba448d6 100644 --- a/src/plugins/cppeditor/cpphoverhandler.cpp +++ b/src/plugins/cppeditor/cpphoverhandler.cpp @@ -162,7 +162,7 @@ static QString buildHelpId(Symbol *symbol, Name *name) if (owner && owner->name() && ! scope->isEnumScope()) { Name *name = owner->name(); - Identifier *id = 0; + const Identifier *id = 0; if (NameId *nameId = name->asNameId()) id = nameId->identifier(); @@ -341,7 +341,7 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in if (resolvedSymbol && resolvedSymbol->scope() && resolvedSymbol->scope()->isClassScope()) { Class *enclosingClass = resolvedSymbol->scope()->owner()->asClass(); - if (Identifier *id = enclosingClass->identifier()) { + if (const Identifier *id = enclosingClass->identifier()) { if (id->isEqualTo(resolvedSymbol->identifier())) resolvedSymbol = enclosingClass; } diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 3486641558b..aca2d8c3bff 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -79,8 +79,8 @@ QList CppFindReferences::references(Symbol *symbol, Document::Ptr doc, const Snapshot& snapshot) const { - Identifier *id = 0; - if (Identifier *symbolId = symbol->identifier()) + const Identifier *id = 0; + if (const Identifier *symbolId = symbol->identifier()) id = doc->control()->findIdentifier(symbolId->chars(), symbolId->size()); QList references; @@ -106,7 +106,7 @@ static void find_helper(QFutureInterface &future, QTime tm; tm.start(); - Identifier *symbolId = symbol->identifier(); + const Identifier *symbolId = symbol->identifier(); Q_ASSERT(symbolId != 0); const QString sourceFile = QString::fromUtf8(symbol->fileName(), symbol->fileNameLength()); @@ -142,7 +142,7 @@ static void find_helper(QFutureInterface &future, if (Document::Ptr previousDoc = snapshot.value(fileName)) { Control *control = previousDoc->control(); - Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size()); + const Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size()); if (! id) continue; // skip this document, it's not using symbolId. } @@ -164,7 +164,7 @@ static void find_helper(QFutureInterface &future, doc->tokenize(); Control *control = doc->control(); - if (Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size())) { + if (const Identifier *id = control->findIdentifier(symbolId->chars(), symbolId->size())) { QTime tm; tm.start(); doc->parse(); @@ -202,7 +202,7 @@ void CppFindReferences::findUsages(Symbol *symbol) void CppFindReferences::renameUsages(Symbol *symbol) { - if (Identifier *id = symbol->identifier()) { + if (const Identifier *id = symbol->identifier()) { const QString textToReplace = QString::fromUtf8(id->chars(), id->size()); Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchAndReplace); diff --git a/src/plugins/qmleditor/qmleditor.cpp b/src/plugins/qmleditor/qmleditor.cpp index 8b25ce5a61e..498c2e4cd5e 100644 --- a/src/plugins/qmleditor/qmleditor.cpp +++ b/src/plugins/qmleditor/qmleditor.cpp @@ -666,7 +666,7 @@ static int blockStartState(const QTextBlock &block) return state & 0xff; } -void ScriptEditor::indentBlock(QTextDocument *, QTextBlock block, QChar typedChar) +void ScriptEditor::indentBlock(QTextDocument *, QTextBlock block, QChar /*typedChar*/) { TextEditor::TabSettings ts = tabSettings(); diff --git a/src/plugins/qmleditor/qmlexpressionundercursor.cpp b/src/plugins/qmleditor/qmlexpressionundercursor.cpp index 4bb17bdeb66..2c7ee0b3bad 100644 --- a/src/plugins/qmleditor/qmlexpressionundercursor.cpp +++ b/src/plugins/qmleditor/qmlexpressionundercursor.cpp @@ -104,7 +104,7 @@ namespace QmlEditor { } protected: - virtual bool visit(Block *ast) + virtual bool visit(Block * /*ast*/) { // TODO // if (_pos > ast->lbraceToken.end() && _pos < ast->rbraceToken.offset) { diff --git a/src/shared/cplusplus/ASTVisitor.cpp b/src/shared/cplusplus/ASTVisitor.cpp index 9281efdf2b9..4f93c06d0a4 100644 --- a/src/shared/cplusplus/ASTVisitor.cpp +++ b/src/shared/cplusplus/ASTVisitor.cpp @@ -89,28 +89,28 @@ int ASTVisitor::tokenKind(unsigned index) const const char *ASTVisitor::spell(unsigned index) const { return translationUnit()->spell(index); } -Identifier *ASTVisitor::identifier(unsigned index) const +const Identifier *ASTVisitor::identifier(unsigned index) const { return translationUnit()->identifier(index); } -Literal *ASTVisitor::literal(unsigned index) const +const Literal *ASTVisitor::literal(unsigned index) const { return translationUnit()->literal(index); } -NumericLiteral *ASTVisitor::numericLiteral(unsigned index) const +const NumericLiteral *ASTVisitor::numericLiteral(unsigned index) const { return translationUnit()->numericLiteral(index); } -StringLiteral *ASTVisitor::stringLiteral(unsigned index) const +const StringLiteral *ASTVisitor::stringLiteral(unsigned index) const { return translationUnit()->stringLiteral(index); } void ASTVisitor::getPosition(unsigned offset, unsigned *line, unsigned *column, - StringLiteral **fileName) const + const StringLiteral **fileName) const { translationUnit()->getPosition(offset, line, column, fileName); } void ASTVisitor::getTokenPosition(unsigned index, unsigned *line, unsigned *column, - StringLiteral **fileName) const + const StringLiteral **fileName) const { translationUnit()->getTokenPosition(index, line, column, fileName); } void ASTVisitor::getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const diff --git a/src/shared/cplusplus/ASTVisitor.h b/src/shared/cplusplus/ASTVisitor.h index 7d73ba3ed54..d4ebdcc81ab 100644 --- a/src/shared/cplusplus/ASTVisitor.h +++ b/src/shared/cplusplus/ASTVisitor.h @@ -72,20 +72,20 @@ public: const Token &tokenAt(unsigned index) const; int tokenKind(unsigned index) const; const char *spell(unsigned index) const; - Identifier *identifier(unsigned index) const; - Literal *literal(unsigned index) const; - NumericLiteral *numericLiteral(unsigned index) const; - StringLiteral *stringLiteral(unsigned index) const; + const Identifier *identifier(unsigned index) const; + const Literal *literal(unsigned index) const; + const NumericLiteral *numericLiteral(unsigned index) const; + const StringLiteral *stringLiteral(unsigned index) const; void getPosition(unsigned offset, unsigned *line, unsigned *column = 0, - StringLiteral **fileName = 0) const; + const StringLiteral **fileName = 0) const; void getTokenPosition(unsigned index, unsigned *line, unsigned *column = 0, - StringLiteral **fileName = 0) const; + const StringLiteral **fileName = 0) const; void getTokenStartPosition(unsigned index, unsigned *line, unsigned *column) const; void getTokenEndPosition(unsigned index, unsigned *line, unsigned *column) const; diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp index d7d7029fa21..3fa5922a026 100644 --- a/src/shared/cplusplus/CheckDeclaration.cpp +++ b/src/shared/cplusplus/CheckDeclaration.cpp @@ -378,7 +378,7 @@ bool CheckDeclaration::visit(LinkageSpecificationAST *ast) bool CheckDeclaration::visit(NamespaceAST *ast) { - Identifier *id = identifier(ast->identifier_token); + const Identifier *id = identifier(ast->identifier_token); Name *namespaceName = control()->nameId(id); unsigned sourceLocation = ast->firstToken(); @@ -718,7 +718,7 @@ bool CheckDeclaration::visit(ObjCPropertyDeclarationAST *ast) if (!attrAst) continue; - Identifier *attrId = identifier(attrAst->attribute_identifier_token); + const Identifier *attrId = identifier(attrAst->attribute_identifier_token); if (attrId == control()->objcGetterId()) { if (checkPropertyAttribute(attrAst, propAttrs, ObjCPropertyDeclaration::Getter)) { getterName = semantic()->check(attrAst->method_selector, _scope); diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp index 63a1885128a..1ad29a27d30 100644 --- a/src/shared/cplusplus/CheckName.cpp +++ b/src/shared/cplusplus/CheckName.cpp @@ -343,7 +343,7 @@ bool CheckName::visit(ConversionFunctionIdAST *ast) bool CheckName::visit(SimpleNameAST *ast) { - Identifier *id = identifier(ast->identifier_token); + const Identifier *id = identifier(ast->identifier_token); _name = control()->nameId(id); ast->name = _name; return false; @@ -351,7 +351,7 @@ bool CheckName::visit(SimpleNameAST *ast) bool CheckName::visit(DestructorNameAST *ast) { - Identifier *id = identifier(ast->identifier_token); + const Identifier *id = identifier(ast->identifier_token); _name = control()->destructorNameId(id); ast->name = _name; return false; @@ -359,7 +359,7 @@ bool CheckName::visit(DestructorNameAST *ast) bool CheckName::visit(TemplateIdAST *ast) { - Identifier *id = identifier(ast->identifier_token); + const Identifier *id = identifier(ast->identifier_token); std::vector templateArguments; for (TemplateArgumentListAST *it = ast->template_argument_list; it; it = it->next) { @@ -380,7 +380,7 @@ bool CheckName::visit(ObjCSelectorWithoutArgumentsAST *ast) { if (ast->name_token) { std::vector names; - Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token)); + const Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token)); NameId *nameId = control()->nameId(id); names.push_back(nameId); _name = control()->selectorNameId(&names[0], names.size(), false); @@ -395,7 +395,7 @@ bool CheckName::visit(ObjCSelectorWithArgumentsAST *ast) std::vector names; for (ObjCSelectorArgumentListAST *it = ast->selector_argument_list; it; it = it->next) { if (it->value->name_token) { - Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token)); + const Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token)); NameId *nameId = control()->nameId(id); names.push_back(nameId); } else { @@ -420,7 +420,7 @@ bool CheckName::visit(ObjCMessageArgumentDeclarationAST *ast) type = semantic()->check(ast->type_name, _scope); if (ast->param_name_token) { - Identifier *id = identifier(ast->param_name_token); + const Identifier *id = identifier(ast->param_name_token); _name = control()->nameId(id); ast->name = _name; diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp index c7604c5ee66..7f06e2de386 100644 --- a/src/shared/cplusplus/CheckSpecifier.cpp +++ b/src/shared/cplusplus/CheckSpecifier.cpp @@ -386,7 +386,7 @@ bool CheckSpecifier::visit(EnumSpecifierAST *ast) _fullySpecifiedType.setType(e); for (EnumeratorListAST *it = ast->enumerator_list; it; it = it->next) { EnumeratorAST *enumerator = it->value; - Identifier *id = identifier(enumerator->identifier_token); + const Identifier *id = identifier(enumerator->identifier_token); if (! id) continue; NameId *enumeratorName = control()->nameId(id); @@ -403,7 +403,7 @@ bool CheckSpecifier::visit(TypeofSpecifierAST *ast) return false; } -bool CheckSpecifier::visit(AttributeSpecifierAST *ast) +bool CheckSpecifier::visit(AttributeSpecifierAST * /*ast*/) { return false; } diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp index 6a949cec7b5..1cd2ad51b02 100644 --- a/src/shared/cplusplus/Control.cpp +++ b/src/shared/cplusplus/Control.cpp @@ -184,17 +184,17 @@ public: delete_array_entries(symbols); } - NameId *findOrInsertNameId(Identifier *id) + NameId *findOrInsertNameId(const Identifier *id) { if (! id) return 0; - std::map::iterator it = nameIds.lower_bound(id); + std::map::iterator it = nameIds.lower_bound(id); if (it == nameIds.end() || it->first != id) it = nameIds.insert(it, std::make_pair(id, new NameId(id))); return it->second; } - TemplateNameId *findOrInsertTemplateNameId(Identifier *id, + TemplateNameId *findOrInsertTemplateNameId(const Identifier *id, const std::vector &templateArguments) { if (! id) @@ -213,11 +213,11 @@ public: return it->second; } - DestructorNameId *findOrInsertDestructorNameId(Identifier *id) + DestructorNameId *findOrInsertDestructorNameId(const Identifier *id) { if (! id) return 0; - std::map::iterator it = destructorNameIds.lower_bound(id); + std::map::iterator it = destructorNameIds.lower_bound(id); if (it == destructorNameIds.end() || it->first != id) it = destructorNameIds.insert(it, std::make_pair(id, new DestructorNameId(id))); return it->second; @@ -441,10 +441,10 @@ public: } struct TemplateNameIdKey { - Identifier *id; + const Identifier *id; std::vector templateArguments; - TemplateNameIdKey(Identifier *id, const std::vector &templateArguments) + TemplateNameIdKey(const Identifier *id, const std::vector &templateArguments) : id(id), templateArguments(templateArguments) { } @@ -522,8 +522,8 @@ public: // ### replace std::map with lookup tables. ASAP! // names - std::map nameIds; - std::map destructorNameIds; + std::map nameIds; + std::map destructorNameIds; std::map operatorNameIds; std::map conversionNameIds; std::map templateNameIds; @@ -544,14 +544,14 @@ public: std::vector symbols; // ObjC context keywords: - Identifier *objcGetterId; - Identifier *objcSetterId; - Identifier *objcReadwriteId; - Identifier *objcReadonlyId; - Identifier *objcAssignId; - Identifier *objcRetainId; - Identifier *objcCopyId; - Identifier *objcNonatomicId; + const Identifier *objcGetterId; + const Identifier *objcSetterId; + const Identifier *objcReadwriteId; + const Identifier *objcReadonlyId; + const Identifier *objcAssignId; + const Identifier *objcRetainId; + const Identifier *objcCopyId; + const Identifier *objcNonatomicId; }; Control::Control() @@ -587,13 +587,13 @@ DiagnosticClient *Control::diagnosticClient() const void Control::setDiagnosticClient(DiagnosticClient *diagnosticClient) { d->diagnosticClient = diagnosticClient; } -Identifier *Control::findIdentifier(const char *chars, unsigned size) const +const Identifier *Control::findIdentifier(const char *chars, unsigned size) const { return d->identifiers.findLiteral(chars, size); } -Identifier *Control::findOrInsertIdentifier(const char *chars, unsigned size) +const Identifier *Control::findOrInsertIdentifier(const char *chars, unsigned size) { return d->identifiers.findOrInsertLiteral(chars, size); } -Identifier *Control::findOrInsertIdentifier(const char *chars) +const Identifier *Control::findOrInsertIdentifier(const char *chars) { unsigned length = std::strlen(chars); return findOrInsertIdentifier(chars, length); @@ -617,36 +617,36 @@ Control::NumericLiteralIterator Control::firstNumericLiteral() const Control::NumericLiteralIterator Control::lastNumericLiteral() const { return d->numericLiterals.end(); } -StringLiteral *Control::findOrInsertStringLiteral(const char *chars, unsigned size) +const StringLiteral *Control::findOrInsertStringLiteral(const char *chars, unsigned size) { return d->stringLiterals.findOrInsertLiteral(chars, size); } -StringLiteral *Control::findOrInsertStringLiteral(const char *chars) +const StringLiteral *Control::findOrInsertStringLiteral(const char *chars) { unsigned length = std::strlen(chars); return findOrInsertStringLiteral(chars, length); } -NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars, unsigned size) +const NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars, unsigned size) { return d->numericLiterals.findOrInsertLiteral(chars, size); } -NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars) +const NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars) { unsigned length = std::strlen(chars); return findOrInsertNumericLiteral(chars, length); } -NameId *Control::nameId(Identifier *id) +NameId *Control::nameId(const Identifier *id) { return d->findOrInsertNameId(id); } -TemplateNameId *Control::templateNameId(Identifier *id, - FullySpecifiedType *const args, - unsigned argv) +TemplateNameId *Control::templateNameId(const Identifier *id, + FullySpecifiedType *const args, + unsigned argv) { std::vector templateArguments(args, args + argv); return d->findOrInsertTemplateNameId(id, templateArguments); } -DestructorNameId *Control::destructorNameId(Identifier *id) +DestructorNameId *Control::destructorNameId(const Identifier *id) { return d->findOrInsertDestructorNameId(id); } OperatorNameId *Control::operatorNameId(int kind) @@ -755,26 +755,26 @@ ObjCMethod *Control::newObjCMethod(unsigned sourceLocation, Name *name) ObjCPropertyDeclaration *Control::newObjCPropertyDeclaration(unsigned sourceLocation, Name *name) { return d->newObjCPropertyDeclaration(sourceLocation, name); } -Identifier *Control::objcGetterId() const +const Identifier *Control::objcGetterId() const { return d->objcGetterId; } -Identifier *Control::objcSetterId() const +const Identifier *Control::objcSetterId() const { return d->objcSetterId; } -Identifier *Control::objcReadwriteId() const +const Identifier *Control::objcReadwriteId() const { return d->objcReadwriteId; } -Identifier *Control::objcReadonlyId() const +const Identifier *Control::objcReadonlyId() const { return d->objcReadonlyId; } -Identifier *Control::objcAssignId() const +const Identifier *Control::objcAssignId() const { return d->objcAssignId; } -Identifier *Control::objcRetainId() const +const Identifier *Control::objcRetainId() const { return d->objcRetainId; } -Identifier *Control::objcCopyId() const +const Identifier *Control::objcCopyId() const { return d->objcCopyId; } -Identifier *Control::objcNonatomicId() const +const Identifier *Control::objcNonatomicId() const { return d->objcNonatomicId; } diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h index 53203f832f3..3fc8543ab1e 100644 --- a/src/shared/cplusplus/Control.h +++ b/src/shared/cplusplus/Control.h @@ -66,15 +66,15 @@ public: void setDiagnosticClient(DiagnosticClient *diagnosticClient); /// Returns the canonical name id. - NameId *nameId(Identifier *id); + NameId *nameId(const Identifier *id); /// Returns the canonical template name id. - TemplateNameId *templateNameId(Identifier *id, + TemplateNameId *templateNameId(const Identifier *id, FullySpecifiedType *const args = 0, unsigned argc = 0); /// Returns the canonical destructor name id. - DestructorNameId *destructorNameId(Identifier *id); + DestructorNameId *destructorNameId(const Identifier *id); /// Returns the canonical operator name id. OperatorNameId *operatorNameId(int operatorId); @@ -171,19 +171,18 @@ public: ObjCPropertyDeclaration *newObjCPropertyDeclaration(unsigned sourceLocation, Name *name); // Objective-C specific context keywords. - Identifier *objcGetterId() const; - Identifier *objcSetterId() const; - Identifier *objcReadwriteId() const; - Identifier *objcReadonlyId() const; - Identifier *objcAssignId() const; - Identifier *objcRetainId() const; - Identifier *objcCopyId() const; - Identifier *objcNonatomicId() const; + const Identifier *objcGetterId() const; + const Identifier *objcSetterId() const; + const Identifier *objcReadwriteId() const; + const Identifier *objcReadonlyId() const; + const Identifier *objcAssignId() const; + const Identifier *objcRetainId() const; + const Identifier *objcCopyId() const; + const Identifier *objcNonatomicId() const; - Identifier *findIdentifier(const char *chars, unsigned size) const; - - Identifier *findOrInsertIdentifier(const char *chars, unsigned size); - Identifier *findOrInsertIdentifier(const char *chars); + const Identifier *findIdentifier(const char *chars, unsigned size) const; + const Identifier *findOrInsertIdentifier(const char *chars, unsigned size); + const Identifier *findOrInsertIdentifier(const char *chars); typedef const Identifier *const *IdentifierIterator; typedef const StringLiteral *const *StringLiteralIterator; @@ -198,11 +197,11 @@ public: NumericLiteralIterator firstNumericLiteral() const; NumericLiteralIterator lastNumericLiteral() const; - StringLiteral *findOrInsertStringLiteral(const char *chars, unsigned size); - StringLiteral *findOrInsertStringLiteral(const char *chars); + const StringLiteral *findOrInsertStringLiteral(const char *chars, unsigned size); + const StringLiteral *findOrInsertStringLiteral(const char *chars); - NumericLiteral *findOrInsertNumericLiteral(const char *chars, unsigned size); - NumericLiteral *findOrInsertNumericLiteral(const char *chars); + const NumericLiteral *findOrInsertNumericLiteral(const char *chars, unsigned size); + const NumericLiteral *findOrInsertNumericLiteral(const char *chars); private: class Data; diff --git a/src/shared/cplusplus/DiagnosticClient.h b/src/shared/cplusplus/DiagnosticClient.h index ff83a4c6f9a..2c1434cbafe 100644 --- a/src/shared/cplusplus/DiagnosticClient.h +++ b/src/shared/cplusplus/DiagnosticClient.h @@ -71,7 +71,7 @@ public: virtual ~DiagnosticClient(); virtual void report(int level, - StringLiteral *fileName, + const StringLiteral *fileName, unsigned line, unsigned column, const char *format, va_list ap) = 0; }; diff --git a/src/shared/cplusplus/LiteralTable.h b/src/shared/cplusplus/LiteralTable.h index ff4246748f9..408db390531 100644 --- a/src/shared/cplusplus/LiteralTable.h +++ b/src/shared/cplusplus/LiteralTable.h @@ -61,7 +61,7 @@ class LiteralTable void operator =(const LiteralTable &other); public: - typedef _Literal **iterator; + typedef _Literal *const *iterator; public: LiteralTable() @@ -74,14 +74,14 @@ public: ~LiteralTable() { - if (_literals) { - _Literal **lastLiteral = _literals + _literalCount + 1; - for (_Literal **it = _literals; it != lastLiteral; ++it) - delete *it; - std::free(_literals); - } - if (_buckets) - std::free(_buckets); + if (_literals) { + _Literal **lastLiteral = _literals + _literalCount + 1; + for (_Literal **it = _literals; it != lastLiteral; ++it) + delete *it; + std::free(_literals); + } + if (_buckets) + std::free(_buckets); } bool empty() const @@ -90,7 +90,7 @@ public: unsigned size() const { return _literalCount + 1; } - _Literal *at(unsigned index) const + const _Literal *at(unsigned index) const { return _literals[index]; } iterator begin() const @@ -99,53 +99,53 @@ public: iterator end() const { return _literals + _literalCount + 1; } - _Literal *findLiteral(const char *chars, unsigned size) const + const _Literal *findLiteral(const char *chars, unsigned size) const { - if (_buckets) { - unsigned h = _Literal::hashCode(chars, size); - _Literal *literal = _buckets[h % _allocatedBuckets]; - for (; literal; literal = static_cast<_Literal *>(literal->_next)) { - if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size)) - return literal; - } - } + if (_buckets) { + unsigned h = _Literal::hashCode(chars, size); + _Literal *literal = _buckets[h % _allocatedBuckets]; + for (; literal; literal = static_cast<_Literal *>(literal->_next)) { + if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size)) + return literal; + } + } - return 0; - } + return 0; + } - _Literal *findOrInsertLiteral(const char *chars, unsigned size) + const _Literal *findOrInsertLiteral(const char *chars, unsigned size) { - if (_buckets) { - unsigned h = _Literal::hashCode(chars, size); - _Literal *literal = _buckets[h % _allocatedBuckets]; - for (; literal; literal = static_cast<_Literal *>(literal->_next)) { - if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size)) - return literal; - } - } + if (_buckets) { + unsigned h = _Literal::hashCode(chars, size); + _Literal *literal = _buckets[h % _allocatedBuckets]; + for (; literal; literal = static_cast<_Literal *>(literal->_next)) { + if (literal->size() == size && ! std::strncmp(literal->chars(), chars, size)) + return literal; + } + } - _Literal *literal = new _Literal(chars, size); + _Literal *literal = new _Literal(chars, size); - if (++_literalCount == _allocatedLiterals) { - _allocatedLiterals <<= 1; + if (++_literalCount == _allocatedLiterals) { + _allocatedLiterals <<= 1; - if (! _allocatedLiterals) - _allocatedLiterals = 256; + if (! _allocatedLiterals) + _allocatedLiterals = 256; - _literals = (_Literal **) std::realloc(_literals, sizeof(_Literal *) * _allocatedLiterals); - } + _literals = (_Literal **) std::realloc(_literals, sizeof(_Literal *) * _allocatedLiterals); + } - _literals[_literalCount] = literal; + _literals[_literalCount] = literal; - if (! _buckets || _literalCount >= _allocatedBuckets * .6) - rehash(); - else { - unsigned h = literal->hashCode() % _allocatedBuckets; - literal->_next = _buckets[h]; - _buckets[h] = literal; - } + if (! _buckets || _literalCount >= _allocatedBuckets * .6) + rehash(); + else { + unsigned h = literal->hashCode() % _allocatedBuckets; + literal->_next = _buckets[h]; + _buckets[h] = literal; + } - return literal; + return literal; } protected: diff --git a/src/shared/cplusplus/Name.h b/src/shared/cplusplus/Name.h index 45dfef86e65..8559b6ea2ee 100644 --- a/src/shared/cplusplus/Name.h +++ b/src/shared/cplusplus/Name.h @@ -56,14 +56,11 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT Name { - Name(const Name &other); - void operator =(const Name &other); - public: Name(); virtual ~Name(); - virtual Identifier *identifier() const = 0; + virtual const Identifier *identifier() const = 0; bool isNameId() const; bool isTemplateNameId() const; diff --git a/src/shared/cplusplus/Names.cpp b/src/shared/cplusplus/Names.cpp index e73abb5c471..65703f804b3 100644 --- a/src/shared/cplusplus/Names.cpp +++ b/src/shared/cplusplus/Names.cpp @@ -73,7 +73,7 @@ QualifiedNameId::~QualifiedNameId() void QualifiedNameId::accept0(NameVisitor *visitor) { visitor->visit(this); } -Identifier *QualifiedNameId::identifier() const +const Identifier *QualifiedNameId::identifier() const { if (Name *u = unqualifiedNameId()) return u->identifier(); @@ -122,7 +122,7 @@ bool QualifiedNameId::isEqualTo(const Name *other) const return true; } -NameId::NameId(Identifier *identifier) +NameId::NameId(const Identifier *identifier) : _identifier(identifier) { } @@ -132,7 +132,7 @@ NameId::~NameId() void NameId::accept0(NameVisitor *visitor) { visitor->visit(this); } -Identifier *NameId::identifier() const +const Identifier *NameId::identifier() const { return _identifier; } bool NameId::isEqualTo(const Name *other) const @@ -140,12 +140,12 @@ bool NameId::isEqualTo(const Name *other) const const NameId *nameId = other->asNameId(); if (! nameId) return false; - Identifier *l = identifier(); - Identifier *r = nameId->identifier(); + const Identifier *l = identifier(); + const Identifier *r = nameId->identifier(); return l->isEqualTo(r); } -DestructorNameId::DestructorNameId(Identifier *identifier) +DestructorNameId::DestructorNameId(const Identifier *identifier) : _identifier(identifier) { } @@ -155,7 +155,7 @@ DestructorNameId::~DestructorNameId() void DestructorNameId::accept0(NameVisitor *visitor) { visitor->visit(this); } -Identifier *DestructorNameId::identifier() const +const Identifier *DestructorNameId::identifier() const { return _identifier; } bool DestructorNameId::isEqualTo(const Name *other) const @@ -163,12 +163,12 @@ bool DestructorNameId::isEqualTo(const Name *other) const const DestructorNameId *d = other->asDestructorNameId(); if (! d) return false; - Identifier *l = identifier(); - Identifier *r = d->identifier(); + const Identifier *l = identifier(); + const Identifier *r = d->identifier(); return l->isEqualTo(r); } -TemplateNameId::TemplateNameId(Identifier *identifier, +TemplateNameId::TemplateNameId(const Identifier *identifier, const FullySpecifiedType templateArguments[], unsigned templateArgumentCount) : _identifier(identifier), @@ -188,7 +188,7 @@ TemplateNameId::~TemplateNameId() void TemplateNameId::accept0(NameVisitor *visitor) { visitor->visit(this); } -Identifier *TemplateNameId::identifier() const +const Identifier *TemplateNameId::identifier() const { return _identifier; } unsigned TemplateNameId::templateArgumentCount() const @@ -205,8 +205,8 @@ bool TemplateNameId::isEqualTo(const Name *other) const const TemplateNameId *t = other->asTemplateNameId(); if (! t) return false; - Identifier *l = identifier(); - Identifier *r = t->identifier(); + const Identifier *l = identifier(); + const Identifier *r = t->identifier(); if (! l->isEqualTo(r)) return false; if (_templateArgumentCount != t->_templateArgumentCount) @@ -233,7 +233,7 @@ void OperatorNameId::accept0(NameVisitor *visitor) int OperatorNameId::kind() const { return _kind; } -Identifier *OperatorNameId::identifier() const +const Identifier *OperatorNameId::identifier() const { return 0; } bool OperatorNameId::isEqualTo(const Name *other) const @@ -257,7 +257,7 @@ void ConversionNameId::accept0(NameVisitor *visitor) FullySpecifiedType ConversionNameId::type() const { return _type; } -Identifier *ConversionNameId::identifier() const +const Identifier *ConversionNameId::identifier() const { return 0; } bool ConversionNameId::isEqualTo(const Name *other) const @@ -287,7 +287,7 @@ SelectorNameId::~SelectorNameId() void SelectorNameId::accept0(NameVisitor *visitor) { visitor->visit(this); } -Identifier *SelectorNameId::identifier() const +const Identifier *SelectorNameId::identifier() const { if (! _nameCount) return 0; diff --git a/src/shared/cplusplus/Names.h b/src/shared/cplusplus/Names.h index a30bffb0135..5629747de3f 100644 --- a/src/shared/cplusplus/Names.h +++ b/src/shared/cplusplus/Names.h @@ -63,7 +63,7 @@ public: bool isGlobal = false); virtual ~QualifiedNameId(); - virtual Identifier *identifier() const; + virtual const Identifier *identifier() const; unsigned nameCount() const; Name *nameAt(unsigned index) const; @@ -92,10 +92,10 @@ private: class CPLUSPLUS_EXPORT NameId: public Name { public: - NameId(Identifier *identifier); + NameId(const Identifier *identifier); virtual ~NameId(); - virtual Identifier *identifier() const; + virtual const Identifier *identifier() const; virtual bool isEqualTo(const Name *other) const; @@ -109,16 +109,16 @@ protected: virtual void accept0(NameVisitor *visitor); private: - Identifier *_identifier; + const Identifier *_identifier; }; class CPLUSPLUS_EXPORT DestructorNameId: public Name { public: - DestructorNameId(Identifier *identifier); + DestructorNameId(const Identifier *identifier); virtual ~DestructorNameId(); - virtual Identifier *identifier() const; + virtual const Identifier *identifier() const; virtual bool isEqualTo(const Name *other) const; @@ -132,18 +132,18 @@ protected: virtual void accept0(NameVisitor *visitor); private: - Identifier *_identifier; + const Identifier *_identifier; }; class CPLUSPLUS_EXPORT TemplateNameId: public Name { public: - TemplateNameId(Identifier *identifier, + TemplateNameId(const Identifier *identifier, const FullySpecifiedType templateArguments[], unsigned templateArgumentCount); virtual ~TemplateNameId(); - virtual Identifier *identifier() const; + virtual const Identifier *identifier() const; // ### find a better name unsigned templateArgumentCount() const; @@ -162,7 +162,7 @@ protected: virtual void accept0(NameVisitor *visitor); private: - Identifier *_identifier; + const Identifier *_identifier; FullySpecifiedType *_templateArguments; unsigned _templateArgumentCount; }; @@ -230,7 +230,7 @@ public: int kind() const; - virtual Identifier *identifier() const; + virtual const Identifier *identifier() const; virtual bool isEqualTo(const Name *other) const; virtual const OperatorNameId *asOperatorNameId() const @@ -254,7 +254,7 @@ public: FullySpecifiedType type() const; - virtual Identifier *identifier() const; + virtual const Identifier *identifier() const; virtual bool isEqualTo(const Name *other) const; virtual const ConversionNameId *asConversionNameId() const @@ -278,7 +278,7 @@ public: bool hasArguments); virtual ~SelectorNameId(); - virtual Identifier *identifier() const; + virtual const Identifier *identifier() const; unsigned nameCount() const; Name *nameAt(unsigned index) const; diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index a4be22f5b4c..f3019639360 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -4981,7 +4981,7 @@ bool Parser::parseObjCPropertyAttribute(ObjCPropertyAttributeAST *&node) node = new (_pool) ObjCPropertyAttributeAST; - Identifier *id = tok().identifier; + const Identifier *id = tok().identifier; const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size()); switch (k) { case Token_copy: @@ -5079,7 +5079,7 @@ bool Parser::parseObjCTypeQualifiers(unsigned &type_qualifier) if (LA() != T_IDENTIFIER) return false; - Identifier *id = tok().identifier; + const Identifier *id = tok().identifier; const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size()); if (k == Token_identifier) return false; @@ -5092,7 +5092,7 @@ bool Parser::peekAtObjCContextKeyword(int kind) if (LA() != T_IDENTIFIER) return false; - Identifier *id = tok().identifier; + const Identifier *id = tok().identifier; const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size()); return k == kind; } diff --git a/src/shared/cplusplus/Scope.cpp b/src/shared/cplusplus/Scope.cpp index 0a7dd294d49..76d09eb2dcf 100644 --- a/src/shared/cplusplus/Scope.cpp +++ b/src/shared/cplusplus/Scope.cpp @@ -212,14 +212,14 @@ Symbol *Scope::lookat(Name *name) const else if (OperatorNameId *opId = name->asOperatorNameId()) return lookat(opId->kind()); - else if (Identifier *id = name->identifier()) + else if (const Identifier *id = name->identifier()) return lookat(id); else return 0; } -Symbol *Scope::lookat(Identifier *id) const +Symbol *Scope::lookat(const Identifier *id) const { if (! _hash || ! id) return 0; diff --git a/src/shared/cplusplus/Scope.h b/src/shared/cplusplus/Scope.h index c05a718ff37..8587ade8c58 100644 --- a/src/shared/cplusplus/Scope.h +++ b/src/shared/cplusplus/Scope.h @@ -130,7 +130,7 @@ public: iterator lastSymbol() const; Symbol *lookat(Name *name) const; - Symbol *lookat(Identifier *id) const; + Symbol *lookat(const Identifier *id) const; Symbol *lookat(int operatorId) const; private: diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp index 316fccaaecd..57e74e13839 100644 --- a/src/shared/cplusplus/Symbol.cpp +++ b/src/shared/cplusplus/Symbol.cpp @@ -232,7 +232,7 @@ void Symbol::setSourceLocation(unsigned sourceLocation) unsigned Symbol::line() const { unsigned line = 0, column = 0; - StringLiteral *fileId = 0; + const StringLiteral *fileId = 0; translationUnit()->getPosition(_sourceOffset, &line, &column, &fileId); return line; } @@ -240,26 +240,26 @@ unsigned Symbol::line() const unsigned Symbol::column() const { unsigned line = 0, column = 0; - StringLiteral *fileId = 0; + const StringLiteral *fileId = 0; translationUnit()->getPosition(_sourceOffset, &line, &column, &fileId); return column; } -StringLiteral *Symbol::fileId() const +const StringLiteral *Symbol::fileId() const { unsigned line = 0, column = 0; - StringLiteral *fileId = 0; + const StringLiteral *fileId = 0; translationUnit()->getPosition(_sourceOffset, &line, &column, &fileId); return fileId; } -void Symbol::getPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const +void Symbol::getPosition(unsigned *line, unsigned *column, const StringLiteral **fileId) const { translationUnit()->getPosition(_sourceOffset, line, column, fileId); } -void Symbol::getStartPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const +void Symbol::getStartPosition(unsigned *line, unsigned *column, const StringLiteral **fileId) const { translationUnit()->getPosition(_startOffset, line, column, fileId); } -void Symbol::getEndPosition(unsigned *line, unsigned *column, StringLiteral **fileId) const +void Symbol::getEndPosition(unsigned *line, unsigned *column, const StringLiteral **fileId) const { translationUnit()->getPosition(_endOffset, line, column, fileId); } const char *Symbol::fileName() const @@ -302,7 +302,7 @@ void Symbol::setName(Name *name) } } -Identifier *Symbol::identifier() const +const Identifier *Symbol::identifier() const { if (_name) return _name->identifier(); diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h index 61abe02c7e1..7230a8e0c8d 100644 --- a/src/shared/cplusplus/Symbol.h +++ b/src/shared/cplusplus/Symbol.h @@ -102,7 +102,7 @@ public: unsigned column() const; /// Returns this Symbol's file name. - StringLiteral *fileId() const; + const StringLiteral *fileId() const; /// Returns this Symbol's file name. const char *fileName() const; @@ -116,9 +116,9 @@ public: unsigned endOffset() const; void setEndOffset(unsigned offset); - void getPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const; - void getStartPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const; - void getEndPosition(unsigned *line, unsigned *column = 0, StringLiteral **fileId = 0) const; + void getPosition(unsigned *line, unsigned *column = 0, const StringLiteral **fileId = 0) const; + void getStartPosition(unsigned *line, unsigned *column = 0, const StringLiteral **fileId = 0) const; + void getEndPosition(unsigned *line, unsigned *column = 0, const StringLiteral **fileId = 0) const; /// Returns this Symbol's name. Name *name() const; @@ -127,7 +127,7 @@ public: void setName(Name *name); // ### dangerous /// Returns this Symbol's (optional) identifier - Identifier *identifier() const; + const Identifier *identifier() const; /// Returns this Symbol's storage class specifier. int storage() const; diff --git a/src/shared/cplusplus/Token.h b/src/shared/cplusplus/Token.h index acbe3927ba2..cd1cf577c6d 100644 --- a/src/shared/cplusplus/Token.h +++ b/src/shared/cplusplus/Token.h @@ -335,10 +335,10 @@ public: union { void *ptr; - Literal *literal; - NumericLiteral *number; - StringLiteral *string; - Identifier *identifier; + const Literal *literal; + const NumericLiteral *number; + const StringLiteral *string; + const Identifier *identifier; unsigned close_brace; unsigned lineno; }; diff --git a/src/shared/cplusplus/TranslationUnit.cpp b/src/shared/cplusplus/TranslationUnit.cpp index 92f2bfb5ce5..fe39d5bb6f4 100644 --- a/src/shared/cplusplus/TranslationUnit.cpp +++ b/src/shared/cplusplus/TranslationUnit.cpp @@ -60,7 +60,7 @@ using namespace CPlusPlus; -TranslationUnit::TranslationUnit(Control *control, StringLiteral *fileId) +TranslationUnit::TranslationUnit(Control *control, const StringLiteral *fileId) : _control(control), _fileId(fileId), _firstSourceChar(0), @@ -96,7 +96,7 @@ void TranslationUnit::setObjCEnabled(bool onoff) Control *TranslationUnit::control() const { return _control; } -StringLiteral *TranslationUnit::fileId() const +const StringLiteral *TranslationUnit::fileId() const { return _fileId; } const char *TranslationUnit::fileName() const @@ -137,16 +137,16 @@ const char *TranslationUnit::spell(unsigned index) const return _tokens->at(index).spell(); } -Identifier *TranslationUnit::identifier(unsigned index) const +const Identifier *TranslationUnit::identifier(unsigned index) const { return _tokens->at(index).identifier; } -Literal *TranslationUnit::literal(unsigned index) const +const Literal *TranslationUnit::literal(unsigned index) const { return _tokens->at(index).literal; } -StringLiteral *TranslationUnit::stringLiteral(unsigned index) const +const StringLiteral *TranslationUnit::stringLiteral(unsigned index) const { return _tokens->at(index).string; } -NumericLiteral *TranslationUnit::numericLiteral(unsigned index) const +const NumericLiteral *TranslationUnit::numericLiteral(unsigned index) const { return _tokens->at(index).number; } unsigned TranslationUnit::matchingBrace(unsigned index) const @@ -181,8 +181,8 @@ void TranslationUnit::tokenize() pushLineOffset(0); pushPreprocessorLine(0, 1, fileId()); - Identifier *lineId = control()->findOrInsertIdentifier("line"); - Identifier *genId = control()->findOrInsertIdentifier("gen"); + const Identifier *lineId = control()->findOrInsertIdentifier("line"); + const Identifier *genId = control()->findOrInsertIdentifier("gen"); bool generated = false; Token tk; @@ -211,8 +211,8 @@ void TranslationUnit::tokenize() unsigned line = (unsigned) strtoul(tk.spell(), 0, 0); lex(&tk); if (! tk.f.newline && tk.is(T_STRING_LITERAL)) { - StringLiteral *fileName = control()->findOrInsertStringLiteral(tk.string->chars(), - tk.string->size()); + const StringLiteral *fileName = control()->findOrInsertStringLiteral(tk.string->chars(), + tk.string->size()); pushPreprocessorLine(offset, line, fileName); lex(&tk); } @@ -303,7 +303,7 @@ void TranslationUnit::pushLineOffset(unsigned offset) void TranslationUnit::pushPreprocessorLine(unsigned offset, unsigned line, - StringLiteral *fileName) + const StringLiteral *fileName) { _ppLines.push_back(PPLine(offset, line, fileName)); } unsigned TranslationUnit::findLineNumber(unsigned offset) const @@ -339,23 +339,23 @@ unsigned TranslationUnit::findColumnNumber(unsigned offset, unsigned lineNumber) void TranslationUnit::getTokenPosition(unsigned index, unsigned *line, unsigned *column, - StringLiteral **fileName) const + const StringLiteral **fileName) const { return getPosition(tokenAt(index).offset, line, column, fileName); } void TranslationUnit::getTokenStartPosition(unsigned index, unsigned *line, unsigned *column, - StringLiteral **fileName) const + const StringLiteral **fileName) const { return getPosition(tokenAt(index).begin(), line, column, fileName); } void TranslationUnit::getTokenEndPosition(unsigned index, unsigned *line, unsigned *column, - StringLiteral **fileName) const + const StringLiteral **fileName) const { return getPosition(tokenAt(index).end(), line, column, fileName); } void TranslationUnit::getPosition(unsigned tokenOffset, unsigned *line, unsigned *column, - StringLiteral **fileName) const + const StringLiteral **fileName) const { unsigned lineNumber = findLineNumber(tokenOffset); unsigned columnNumber = findColumnNumber(tokenOffset, lineNumber); @@ -389,7 +389,7 @@ void TranslationUnit::warning(unsigned index, const char *format, ...) index = std::min(index, tokenCount() - 1); unsigned line = 0, column = 0; - StringLiteral *fileName = 0; + const StringLiteral *fileName = 0; getTokenPosition(index, &line, &column, &fileName); if (DiagnosticClient *client = control()->diagnosticClient()) { @@ -420,7 +420,7 @@ void TranslationUnit::error(unsigned index, const char *format, ...) index = std::min(index, tokenCount() - 1); unsigned line = 0, column = 0; - StringLiteral *fileName = 0; + const StringLiteral *fileName = 0; getTokenPosition(index, &line, &column, &fileName); if (DiagnosticClient *client = control()->diagnosticClient()) { @@ -451,7 +451,7 @@ void TranslationUnit::fatal(unsigned index, const char *format, ...) index = std::min(index, tokenCount() - 1); unsigned line = 0, column = 0; - StringLiteral *fileName = 0; + const StringLiteral *fileName = 0; getTokenPosition(index, &line, &column, &fileName); if (DiagnosticClient *client = control()->diagnosticClient()) { diff --git a/src/shared/cplusplus/TranslationUnit.h b/src/shared/cplusplus/TranslationUnit.h index cc26f44be41..b10a4f3f3f8 100644 --- a/src/shared/cplusplus/TranslationUnit.h +++ b/src/shared/cplusplus/TranslationUnit.h @@ -65,12 +65,12 @@ class CPLUSPLUS_EXPORT TranslationUnit void operator =(const TranslationUnit &other); public: - TranslationUnit(Control *control, StringLiteral *fileId); + TranslationUnit(Control *control, const StringLiteral *fileId); ~TranslationUnit(); Control *control() const; - StringLiteral *fileId() const; + const StringLiteral *fileId() const; const char *fileName() const; unsigned fileNameLength() const; @@ -86,10 +86,10 @@ public: const char *spell(unsigned index) const; unsigned matchingBrace(unsigned index) const; - Identifier *identifier(unsigned index) const; - Literal *literal(unsigned index) const; - StringLiteral *stringLiteral(unsigned index) const; - NumericLiteral *numericLiteral(unsigned index) const; + const Identifier *identifier(unsigned index) const; + const Literal *literal(unsigned index) const; + const StringLiteral *stringLiteral(unsigned index) const; + const NumericLiteral *numericLiteral(unsigned index) const; MemoryPool *memoryPool() const; AST *ast() const; @@ -129,26 +129,26 @@ public: void getTokenStartPosition(unsigned index, unsigned *line, unsigned *column = 0, - StringLiteral **fileName = 0) const; + const StringLiteral **fileName = 0) const; void getTokenEndPosition(unsigned index, unsigned *line, unsigned *column = 0, - StringLiteral **fileName = 0) const; + const StringLiteral **fileName = 0) const; void getPosition(unsigned offset, unsigned *line, unsigned *column = 0, - StringLiteral **fileName = 0) const; + const StringLiteral **fileName = 0) const; void getTokenPosition(unsigned index, unsigned *line, unsigned *column = 0, - StringLiteral **fileName = 0) const; + const StringLiteral **fileName = 0) const; void pushLineOffset(unsigned offset); void pushPreprocessorLine(unsigned offset, unsigned line, - StringLiteral *fileName); + const StringLiteral *fileName); unsigned findPreviousLineOffset(unsigned tokenIndex) const; @@ -156,11 +156,11 @@ public: struct PPLine { unsigned offset; unsigned line; - StringLiteral *fileName; + const StringLiteral *fileName; PPLine(unsigned offset = 0, unsigned line = 0, - StringLiteral *fileName = 0) + const StringLiteral *fileName = 0) : offset(offset), line(line), fileName(fileName) { } @@ -181,7 +181,7 @@ private: void showErrorLine(unsigned index, unsigned column, FILE *out); Control *_control; - StringLiteral *_fileId; + const StringLiteral *_fileId; const char *_firstSourceChar; const char *_lastSourceChar; Array *_tokens; From f2e77fb8fd2f3c06ccb7ab922bbde6a4f7a1f7f0 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 1 Dec 2009 12:00:47 +0100 Subject: [PATCH 56/62] Dumpers: Dump QFileInfo --- share/qtcreator/gdbmacros/test/main.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/share/qtcreator/gdbmacros/test/main.cpp b/share/qtcreator/gdbmacros/test/main.cpp index de8fc9f91f2..f77486fae49 100644 --- a/share/qtcreator/gdbmacros/test/main.cpp +++ b/share/qtcreator/gdbmacros/test/main.cpp @@ -35,6 +35,8 @@ #include #include #include +#include +#include #include #include @@ -51,6 +53,7 @@ bool optTestUninitialized = false; bool optTestAll = false; bool optEmptyContainers = false; unsigned optVerbose = 0; +const char *appPath = 0; // Provide address of type of be tested. // When testing unitialized memory, allocate at random. @@ -482,7 +485,6 @@ static int dumpStdMapStringString() return 0; } - static int dumpQObject() { // Requires the childOffset to be know, but that is not critical @@ -517,6 +519,16 @@ static int dumpQObject() return 0; } +static int dumpQFileInfo() +{ + QFileInfo test(QString::fromLatin1(appPath)); + prepareInBuffer("QFileInfo", "local.qfileinfo", "local.qfileinfo",""); + qDumpObjectData440(2, 42, testAddress(&test), 1, 0, 0, 0, 0); + fputs(qDumpOutBuffer, stdout); + fputc('\n', stdout); + return 0; +} + static int dumpQObjectList() { // Requires the childOffset to be know, but that is not critical @@ -566,6 +578,7 @@ static TypeDumpFunctionMap registerTypes() rc.insert("set", dumpStdQStringSet); rc.insert("map", dumpStdMapIntString); rc.insert("map", dumpStdMapStringString); + rc.insert("QFileInfo", dumpQFileInfo); rc.insert("QObject", dumpQObject); rc.insert("QObjectList", dumpQObjectList); rc.insert("QVariant", dumpQVariant); @@ -592,6 +605,7 @@ static void usage(const char *b, const TypeDumpFunctionMap &tdm) int main(int argc, char *argv[]) { + appPath = argv[0]; printf("\nQt Creator Debugging Helper testing tool\n\n"); printf("Running query protocol\n"); qDumpObjectData440(1, 42, 0, 1, 0, 0, 0, 0); From 7c7ce13ac09d1a3a3807d0f4fea97688554d28d3 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 1 Dec 2009 12:46:15 +0100 Subject: [PATCH 57/62] Use const names. --- src/libs/cplusplus/CheckUndefinedSymbols.cpp | 16 +- src/libs/cplusplus/CheckUndefinedSymbols.h | 4 +- src/libs/cplusplus/CppBindings.cpp | 44 ++--- src/libs/cplusplus/CppBindings.h | 18 +- src/libs/cplusplus/GenTemplateInstance.cpp | 32 ++-- src/libs/cplusplus/LookupContext.cpp | 40 ++--- src/libs/cplusplus/LookupContext.h | 30 ++-- src/libs/cplusplus/NamePrettyPrinter.cpp | 18 +- src/libs/cplusplus/NamePrettyPrinter.h | 16 +- src/libs/cplusplus/Overview.cpp | 4 +- src/libs/cplusplus/Overview.h | 8 +- src/libs/cplusplus/ResolveExpression.cpp | 44 ++--- src/libs/cplusplus/ResolveExpression.h | 14 +- src/libs/cplusplus/TypePrettyPrinter.cpp | 2 +- src/plugins/cppeditor/cppeditor.cpp | 47 ++--- src/plugins/cppeditor/cpphoverhandler.cpp | 12 +- src/plugins/cpptools/cppcodecompletion.cpp | 22 +-- src/plugins/cpptools/searchsymbols.cpp | 4 +- src/plugins/designer/qtcreatorintegration.cpp | 24 +-- src/shared/cplusplus/AST.h | 4 +- src/shared/cplusplus/CheckDeclaration.cpp | 38 ++-- src/shared/cplusplus/CheckDeclarator.cpp | 12 +- src/shared/cplusplus/CheckDeclarator.h | 6 +- src/shared/cplusplus/CheckExpression.cpp | 7 +- src/shared/cplusplus/CheckName.cpp | 33 ++-- src/shared/cplusplus/CheckName.h | 10 +- src/shared/cplusplus/CheckSpecifier.cpp | 12 +- src/shared/cplusplus/CheckStatement.cpp | 11 +- src/shared/cplusplus/Control.cpp | 167 +++++++++--------- src/shared/cplusplus/Control.h | 66 +++---- src/shared/cplusplus/CoreTypes.cpp | 16 +- src/shared/cplusplus/CoreTypes.h | 12 +- src/shared/cplusplus/Name.cpp | 4 +- src/shared/cplusplus/Name.h | 14 +- src/shared/cplusplus/NameVisitor.cpp | 4 +- src/shared/cplusplus/NameVisitor.h | 20 +-- src/shared/cplusplus/Names.cpp | 100 ++++------- src/shared/cplusplus/Names.h | 65 ++----- src/shared/cplusplus/Scope.cpp | 20 +-- src/shared/cplusplus/Scope.h | 2 +- src/shared/cplusplus/Semantic.cpp | 8 +- src/shared/cplusplus/Semantic.h | 8 +- src/shared/cplusplus/Symbol.cpp | 48 ++--- src/shared/cplusplus/Symbol.h | 10 +- src/shared/cplusplus/Symbols.cpp | 68 +++---- src/shared/cplusplus/Symbols.h | 55 +++--- 46 files changed, 577 insertions(+), 642 deletions(-) diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.cpp b/src/libs/cplusplus/CheckUndefinedSymbols.cpp index f3d27df502d..ee5d76bf7e8 100644 --- a/src/libs/cplusplus/CheckUndefinedSymbols.cpp +++ b/src/libs/cplusplus/CheckUndefinedSymbols.cpp @@ -122,7 +122,7 @@ bool CheckUndefinedSymbols::isType(const Identifier *id) const return isType(QByteArray::fromRawData(id->chars(), id->size())); } -void CheckUndefinedSymbols::addType(Name *name) +void CheckUndefinedSymbols::addType(const Name *name) { if (! name) return; @@ -131,7 +131,7 @@ void CheckUndefinedSymbols::addType(Name *name) _types.insert(QByteArray(id->chars(), id->size())); } -void CheckUndefinedSymbols::addProtocol(Name *name) +void CheckUndefinedSymbols::addProtocol(const Name *name) { if (!name) return; @@ -294,7 +294,7 @@ bool CheckUndefinedSymbols::visit(ClassSpecifierAST *ast) Symbol *symbol = klass->memberAt(i); if (symbol->name() && symbol->name()->isNameId()) { - NameId *nameId = symbol->name()->asNameId(); + const NameId *nameId = symbol->name()->asNameId(); if (! qstrcmp(nameId->identifier()->chars(), "qt_check_for_QOBJECT_macro")) { hasQ_OBJECT_CHECK = true; @@ -367,7 +367,7 @@ bool CheckUndefinedSymbols::visit(BaseSpecifierAST *base) if (NameAST *nameAST = base->name) { bool resolvedBaseClassName = false; - if (Name *name = nameAST->name) { + if (const Name *name = nameAST->name) { const Identifier *id = name->identifier(); const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size()); if (isType(spell)) @@ -403,9 +403,9 @@ bool CheckUndefinedSymbols::visit(UsingDirectiveAST *ast) bool CheckUndefinedSymbols::visit(QualifiedNameAST *ast) { if (ast->name) { - QualifiedNameId *q = ast->name->asQualifiedNameId(); + const QualifiedNameId *q = ast->name->asQualifiedNameId(); for (unsigned i = 0; i < q->nameCount() - 1; ++i) { - Name *name = q->nameAt(i); + const Name *name = q->nameAt(i); if (const Identifier *id = name->identifier()) { const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size()); if (! (_namespaceNames.contains(spell) || isType(id))) { @@ -474,7 +474,7 @@ bool CheckUndefinedSymbols::visit(ObjCClassDeclarationAST *ast) if (NameAST *nameAST = ast->superclass) { bool resolvedSuperClassName = false; - if (Name *name = nameAST->name) { + if (const Name *name = nameAST->name) { const Identifier *id = name->identifier(); const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size()); if (isType(spell)) @@ -496,7 +496,7 @@ bool CheckUndefinedSymbols::visit(ObjCProtocolRefsAST *ast) if (NameAST *nameAST = iter->value) { bool resolvedProtocolName = false; - if (Name *name = nameAST->name) { + if (const Name *name = nameAST->name) { const Identifier *id = name->identifier(); const QByteArray spell = QByteArray::fromRawData(id->chars(), id->size()); if (isProtocol(spell)) diff --git a/src/libs/cplusplus/CheckUndefinedSymbols.h b/src/libs/cplusplus/CheckUndefinedSymbols.h index e6610a2564f..c8569bd2103 100644 --- a/src/libs/cplusplus/CheckUndefinedSymbols.h +++ b/src/libs/cplusplus/CheckUndefinedSymbols.h @@ -55,11 +55,11 @@ protected: bool isType(const Identifier *id) const; bool isType(const QByteArray &name) const; - void addType(Name *name); + void addType(const Name *name); void buildTypeMap(Class *klass); void buildMemberTypeMap(Symbol *member); void buildTypeMap(NamespaceBinding *binding, QSet *processed); - void addProtocol(Name *name); + void addProtocol(const Name *name); bool isProtocol(const QByteArray &name) const; FunctionDeclaratorAST *currentFunctionDeclarator() const; diff --git a/src/libs/cplusplus/CppBindings.cpp b/src/libs/cplusplus/CppBindings.cpp index 2faf1aa6b7f..d9b0a32eacd 100644 --- a/src/libs/cplusplus/CppBindings.cpp +++ b/src/libs/cplusplus/CppBindings.cpp @@ -79,11 +79,11 @@ NamespaceBinding::~NamespaceBinding() qDeleteAll(classBindings); } -NameId *NamespaceBinding::name() const +const NameId *NamespaceBinding::name() const { if (symbols.size()) { - if (Name *name = symbols.first()->name()) { - NameId *nameId = name->asNameId(); + if (const Name *name = symbols.first()->name()) { + const NameId *nameId = name->asNameId(); Q_ASSERT(nameId != 0); return nameId; @@ -95,7 +95,7 @@ NameId *NamespaceBinding::name() const const Identifier *NamespaceBinding::identifier() const { - if (NameId *nameId = name()) + if (const NameId *nameId = name()) return nameId->identifier(); return 0; @@ -144,7 +144,7 @@ Binding *NamespaceBinding::findClassOrNamespaceBinding(const Identifier *id, QSe return 0; } -ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet *processed) +ClassBinding *NamespaceBinding::findClassBinding(const Name *name, QSet *processed) { if (! name) return 0; @@ -191,19 +191,19 @@ ClassBinding *NamespaceBinding::findClassBinding(Name *name, QSet *pr return 0; } -NamespaceBinding *NamespaceBinding::findNamespaceBinding(Name *name) +NamespaceBinding *NamespaceBinding::findNamespaceBinding(const Name *name) { if (! name) return anonymousNamespaceBinding; - else if (NameId *nameId = name->asNameId()) + else if (const NameId *nameId = name->asNameId()) return findNamespaceBindingForNameId(nameId, /*lookAtParent = */ true); else if (const QualifiedNameId *q = name->asQualifiedNameId()) { NamespaceBinding *current = this; for (unsigned i = 0; i < q->nameCount(); ++i) { - NameId *namespaceName = q->nameAt(i)->asNameId(); + const NameId *namespaceName = q->nameAt(i)->asNameId(); if (! namespaceName) return 0; @@ -225,14 +225,14 @@ NamespaceBinding *NamespaceBinding::findNamespaceBinding(Name *name) return 0; } -NamespaceBinding *NamespaceBinding::findNamespaceBindingForNameId(NameId *name, +NamespaceBinding *NamespaceBinding::findNamespaceBindingForNameId(const NameId *name, bool lookAtParentNamespace) { QSet processed; return findNamespaceBindingForNameId_helper(name, lookAtParentNamespace, &processed); } -NamespaceBinding *NamespaceBinding::findNamespaceBindingForNameId_helper(NameId *name, +NamespaceBinding *NamespaceBinding::findNamespaceBindingForNameId_helper(const NameId *name, bool lookAtParentNamespace, QSet *processed) { @@ -242,12 +242,12 @@ NamespaceBinding *NamespaceBinding::findNamespaceBindingForNameId_helper(NameId processed->insert(this); foreach (NamespaceBinding *binding, children) { - Name *bindingName = binding->name(); + const Name *bindingName = binding->name(); if (! bindingName) continue; - if (NameId *bindingNameId = bindingName->asNameId()) { + if (const NameId *bindingNameId = bindingName->asNameId()) { if (name->isEqualTo(bindingNameId)) return binding; } @@ -296,7 +296,7 @@ NamespaceBinding *NamespaceBinding::findOrCreateNamespaceBinding(Namespace *symb } static void closure(const Location &loc, - NamespaceBinding *binding, Name *name, + NamespaceBinding *binding, const Name *name, QList *bindings) { if (bindings->contains(binding)) @@ -334,13 +334,13 @@ static void closure(const Location &loc, NamespaceBinding *NamespaceBinding::resolveNamespace(const Location &loc, - Name *name, + const Name *name, bool lookAtParent) { if (! name) return 0; - else if (NameId *nameId = name->asNameId()) { + else if (const NameId *nameId = name->asNameId()) { QList bindings; closure(loc, this, nameId, &bindings); @@ -447,7 +447,7 @@ Binding *ClassBinding::findClassOrNamespaceBinding(const Identifier *id, QSet *processed) +ClassBinding *ClassBinding::findClassBinding(const Name *name, QSet *processed) { if (! name) return 0; @@ -549,7 +549,7 @@ ClassBinding::ClassBinding(ClassBinding *parentClass) ClassBinding::~ClassBinding() { qDeleteAll(children); } -Name *ClassBinding::name() const +const Name *ClassBinding::name() const { if (symbols.isEmpty()) return 0; @@ -559,7 +559,7 @@ Name *ClassBinding::name() const const Identifier *ClassBinding::identifier() const { - if (Name *n = name()) + if (const Name *n = name()) return n->identifier(); return 0; @@ -623,12 +623,12 @@ protected: NamespaceBinding *bind(Symbol *symbol, NamespaceBinding *binding); NamespaceBinding *findOrCreateNamespaceBinding(Namespace *symbol); - NamespaceBinding *resolveNamespace(const Location &loc, Name *name); + NamespaceBinding *resolveNamespace(const Location &loc, const Name *name); NamespaceBinding *switchNamespaceBinding(NamespaceBinding *binding); ClassBinding *findOrCreateClassBinding(Class *classSymbol); - ClassBinding *findClassBinding(Name *name); + ClassBinding *findClassBinding(const Name *name); ClassBinding *switchClassBinding(ClassBinding *binding); @@ -665,7 +665,7 @@ NamespaceBinding *Binder::bind(Symbol *symbol, NamespaceBinding *binding) NamespaceBinding *Binder::findOrCreateNamespaceBinding(Namespace *symbol) { return namespaceBinding->findOrCreateNamespaceBinding(symbol); } -NamespaceBinding *Binder::resolveNamespace(const Location &loc, Name *name) +NamespaceBinding *Binder::resolveNamespace(const Location &loc, const Name *name) { if (! namespaceBinding) return 0; @@ -694,7 +694,7 @@ ClassBinding *Binder::findOrCreateClassBinding(Class *classSymbol) return binding; } -ClassBinding *Binder::findClassBinding(Name *name) +ClassBinding *Binder::findClassBinding(const Name *name) { QSet processed; diff --git a/src/libs/cplusplus/CppBindings.h b/src/libs/cplusplus/CppBindings.h index 4bce41bcbc5..41ed9638c71 100644 --- a/src/libs/cplusplus/CppBindings.h +++ b/src/libs/cplusplus/CppBindings.h @@ -84,7 +84,7 @@ public: virtual NamespaceBinding *asNamespaceBinding() { return 0; } virtual ClassBinding *asClassBinding() { return 0; } - virtual ClassBinding *findClassBinding(Name *name, QSet *processed) = 0; + virtual ClassBinding *findClassBinding(const Name *name, QSet *processed) = 0; virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet *processed) = 0; }; @@ -98,7 +98,7 @@ public: virtual ~NamespaceBinding(); /// Returns this binding's name. - NameId *name() const; + const NameId *name() const; /// Returns this binding's identifier. const Identifier *identifier() const; @@ -107,16 +107,16 @@ public: NamespaceBinding *globalNamespaceBinding(); /// Returns the binding for the given namespace symbol. - NamespaceBinding *findNamespaceBinding(Name *name); + NamespaceBinding *findNamespaceBinding(const Name *name); /// Returns the binding associated with the given symbol. NamespaceBinding *findOrCreateNamespaceBinding(Namespace *symbol); NamespaceBinding *resolveNamespace(const Location &loc, - Name *name, + const Name *name, bool lookAtParent = true); - virtual ClassBinding *findClassBinding(Name *name, QSet *processed); + virtual ClassBinding *findClassBinding(const Name *name, QSet *processed); virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet *processed); /// Helpers. @@ -129,10 +129,10 @@ public: static ClassBinding *find(Class *symbol, NamespaceBinding *binding); private: - NamespaceBinding *findNamespaceBindingForNameId(NameId *name, + NamespaceBinding *findNamespaceBindingForNameId(const NameId *name, bool lookAtParentNamespace); - NamespaceBinding *findNamespaceBindingForNameId_helper(NameId *name, + NamespaceBinding *findNamespaceBindingForNameId_helper(const NameId *name, bool lookAtParentNamespace, QSet *processed); @@ -165,13 +165,13 @@ public: virtual ClassBinding *asClassBinding() { return this; } /// Returns this binding's name. - Name *name() const; + const Name *name() const; /// Returns this binding's identifier. const Identifier *identifier() const; virtual QByteArray qualifiedId() const; - virtual ClassBinding *findClassBinding(Name *name, QSet *processed); + virtual ClassBinding *findClassBinding(const Name *name, QSet *processed); virtual Binding *findClassOrNamespaceBinding(const Identifier *id, QSet *processed); void dump(); diff --git a/src/libs/cplusplus/GenTemplateInstance.cpp b/src/libs/cplusplus/GenTemplateInstance.cpp index eaa515923a3..16aee2f9577 100644 --- a/src/libs/cplusplus/GenTemplateInstance.cpp +++ b/src/libs/cplusplus/GenTemplateInstance.cpp @@ -52,7 +52,7 @@ public: Control *control() const { return context.control(); } - FullySpecifiedType apply(Name *name); + FullySpecifiedType apply(const Name *name); FullySpecifiedType apply(const FullySpecifiedType &type); int findSubstitution(const Identifier *id) const; @@ -207,7 +207,7 @@ private: public: ApplyToName(ApplySubstitution *q): q(q) {} - FullySpecifiedType operator()(Name *name) + FullySpecifiedType operator()(const Name *name) { FullySpecifiedType previousType = switchType(FullySpecifiedType()); accept(name); @@ -231,7 +231,7 @@ private: return previousType; } - virtual void visit(NameId *name) + virtual void visit(const NameId *name) { int index = findSubstitution(name->identifier()); @@ -242,7 +242,7 @@ private: _type = control()->namedType(name); } - virtual void visit(TemplateNameId *name) + virtual void visit(const TemplateNameId *name) { QVarLengthArray arguments(name->templateArgumentCount()); for (unsigned i = 0; i < name->templateArgumentCount(); ++i) { @@ -250,17 +250,19 @@ private: arguments[i] = q->apply(argTy); } - TemplateNameId *templId = control()->templateNameId(name->identifier(), arguments.data(), arguments.size()); + const TemplateNameId *templId = control()->templateNameId(name->identifier(), + arguments.data(), + arguments.size()); _type = control()->namedType(templId); } - virtual void visit(QualifiedNameId *name) + virtual void visit(const QualifiedNameId *name) { - QVarLengthArray names(name->nameCount()); + QVarLengthArray names(name->nameCount()); for (unsigned i = 0; i < name->nameCount(); ++i) { - Name *n = name->nameAt(i); + const Name *n = name->nameAt(i); - if (TemplateNameId *templId = n->asTemplateNameId()) { + if (const TemplateNameId *templId = n->asTemplateNameId()) { QVarLengthArray arguments(templId->templateArgumentCount()); for (unsigned templateArgIndex = 0; templateArgIndex < templId->templateArgumentCount(); ++templateArgIndex) { FullySpecifiedType argTy = templId->templateArgumentAt(templateArgIndex); @@ -273,29 +275,29 @@ private: names[i] = n; } - QualifiedNameId *q = control()->qualifiedNameId(names.data(), names.size(), name->isGlobal()); + const QualifiedNameId *q = control()->qualifiedNameId(names.data(), names.size(), name->isGlobal()); _type = control()->namedType(q); } - virtual void visit(DestructorNameId *name) + virtual void visit(const DestructorNameId *name) { Overview oo; qWarning() << "ignored name:" << oo(name); } - virtual void visit(OperatorNameId *name) + virtual void visit(const OperatorNameId *name) { Overview oo; qWarning() << "ignored name:" << oo(name); } - virtual void visit(ConversionNameId *name) + virtual void visit(const ConversionNameId *name) { Overview oo; qWarning() << "ignored name:" << oo(name); } - virtual void visit(SelectorNameId *name) + virtual void visit(const SelectorNameId *name) { Overview oo; qWarning() << "ignored name:" << oo(name); @@ -325,7 +327,7 @@ ApplySubstitution::~ApplySubstitution() { } -FullySpecifiedType ApplySubstitution::apply(Name *name) +FullySpecifiedType ApplySubstitution::apply(const Name *name) { FullySpecifiedType ty = applyToName(name); return ty; diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp index dbfa6710210..942c0dc764e 100644 --- a/src/libs/cplusplus/LookupContext.cpp +++ b/src/libs/cplusplus/LookupContext.cpp @@ -109,14 +109,14 @@ bool LookupContext::maybeValidSymbol(Symbol *symbol, return false; } -QList LookupContext::resolveNestedNameSpecifier(QualifiedNameId *q, - const QList &visibleScopes) const +QList LookupContext::resolveNestedNameSpecifier(const QualifiedNameId *q, + const QList &visibleScopes) const { QList candidates; QList scopes = visibleScopes; for (unsigned i = 0; i < q->nameCount() - 1; ++i) { - Name *name = q->nameAt(i); + const Name *name = q->nameAt(i); candidates = resolveClassOrNamespace(name, scopes); @@ -137,7 +137,7 @@ QList LookupContext::resolveNestedNameSpecifier(QualifiedNameId *q, return scopes; } -QList LookupContext::resolveQualifiedNameId(QualifiedNameId *q, +QList LookupContext::resolveQualifiedNameId(const QualifiedNameId *q, const QList &visibleScopes, ResolveMode mode) const { @@ -153,7 +153,7 @@ QList LookupContext::resolveQualifiedNameId(QualifiedNameId *q, else if (! symbol->isClass()) continue; - QualifiedNameId *qq = symbol->name()->asQualifiedNameId(); + const QualifiedNameId *qq = symbol->name()->asQualifiedNameId(); if (! qq) continue; @@ -167,8 +167,8 @@ QList LookupContext::resolveQualifiedNameId(QualifiedNameId *q, unsigned j = 0; for (; j < q->nameCount(); ++j) { - Name *classOrNamespaceName1 = q->nameAt(j); - Name *classOrNamespaceName2 = qq->nameAt(j); + const Name *classOrNamespaceName1 = q->nameAt(j); + const Name *classOrNamespaceName2 = qq->nameAt(j); if (! classOrNamespaceName1->isEqualTo(classOrNamespaceName2)) break; @@ -205,7 +205,7 @@ QList LookupContext::resolveQualifiedNameId(QualifiedNameId *q, return candidates; } -QList LookupContext::resolveOperatorNameId(OperatorNameId *opId, +QList LookupContext::resolveOperatorNameId(const OperatorNameId *opId, const QList &visibleScopes, ResolveMode) const { @@ -226,7 +226,7 @@ QList LookupContext::resolveOperatorNameId(OperatorNameId *opId, return candidates; } -QList LookupContext::resolve(Name *name, const QList &visibleScopes, +QList LookupContext::resolve(const Name *name, const QList &visibleScopes, ResolveMode mode) const { QList candidates; @@ -234,10 +234,10 @@ QList LookupContext::resolve(Name *name, const QList &visible if (!name) return candidates; // nothing to do, the symbol is anonymous. - else if (QualifiedNameId *q = name->asQualifiedNameId()) + else if (const QualifiedNameId *q = name->asQualifiedNameId()) return resolveQualifiedNameId(q, visibleScopes, mode); - else if (OperatorNameId *opId = name->asOperatorNameId()) + else if (const OperatorNameId *opId = name->asOperatorNameId()) return resolveOperatorNameId(opId, visibleScopes, mode); else if (const Identifier *id = name->identifier()) { @@ -256,14 +256,14 @@ QList LookupContext::resolve(Name *name, const QList &visible continue; // skip it, the symbol's id is not compatible with this lookup. } - if (QualifiedNameId *q = symbol->name()->asQualifiedNameId()) { + if (const QualifiedNameId *q = symbol->name()->asQualifiedNameId()) { if (name->isDestructorNameId() != q->unqualifiedNameId()->isDestructorNameId()) continue; else if (q->nameCount() > 1) { - Name *classOrNamespaceName = control()->qualifiedNameId(q->names(), - q->nameCount() - 1); + const Name *classOrNamespaceName = control()->qualifiedNameId(q->names(), + q->nameCount() - 1); if (const Identifier *classOrNamespaceNameId = identifier(classOrNamespaceName)) { if (classOrNamespaceNameId->isEqualTo(id)) @@ -418,7 +418,7 @@ void LookupContext::expandNamespace(Namespace *ns, if (Scope *encl = ns->enclosingNamespaceScope()) expand(encl, visibleScopes, expandedScopes); - if (Name *nsName = ns->name()) { + if (const Name *nsName = ns->name()) { const QList namespaceList = resolveNamespace(nsName, visibleScopes); foreach (Symbol *otherNs, namespaceList) { if (otherNs == ns) @@ -478,7 +478,7 @@ void LookupContext::expandClass(Class *klass, for (unsigned i = 0; i < klass->baseClassCount(); ++i) { BaseClass *baseClass = klass->baseClassAt(i); - Name *baseClassName = baseClass->name(); + const Name *baseClassName = baseClass->name(); const QList baseClassCandidates = resolveClass(baseClassName, classVisibleScopes); @@ -515,8 +515,8 @@ void LookupContext::expandFunction(Function *function, if (! expandedScopes->contains(function->arguments())) expandedScopes->append(function->arguments()); - if (QualifiedNameId *q = function->name()->asQualifiedNameId()) { - Name *nestedNameSpec = 0; + if (const QualifiedNameId *q = function->name()->asQualifiedNameId()) { + const Name *nestedNameSpec = 0; if (q->nameCount() == 1) nestedNameSpec = q->nameAt(0); else @@ -565,7 +565,7 @@ void LookupContext::expandObjCClass(ObjCClass *klass, // expand the base class: if (ObjCBaseClass *baseClass = klass->baseClass()) { - Name *baseClassName = baseClass->name(); + const Name *baseClassName = baseClass->name(); const QList baseClassCandidates = resolveObjCClass(baseClassName, visibleScopes); @@ -577,7 +577,7 @@ void LookupContext::expandObjCClass(ObjCClass *klass, // expand the protocols: for (unsigned i = 0; i < klass->protocolCount(); ++i) { - Name *protocolName = klass->protocolAt(i)->name(); + const Name *protocolName = klass->protocolAt(i)->name(); const QList protocolCandidates = resolveObjCProtocol(protocolName, visibleScopes); for (int j = 0; j < protocolCandidates.size(); ++j) { if (ObjCProtocol *protocolSymbol = protocolCandidates.at(j)->asObjCProtocol()) diff --git a/src/libs/cplusplus/LookupContext.h b/src/libs/cplusplus/LookupContext.h index 06339d0a980..bced5f4cf49 100644 --- a/src/libs/cplusplus/LookupContext.h +++ b/src/libs/cplusplus/LookupContext.h @@ -94,22 +94,22 @@ public: static Symbol *canonicalSymbol(const QList &candidates, NamespaceBinding *globalNamespaceBinding); - QList resolve(Name *name) const + QList resolve(const Name *name) const { return resolve(name, visibleScopes()); } - QList resolveNamespace(Name *name) const + QList resolveNamespace(const Name *name) const { return resolveNamespace(name, visibleScopes()); } - QList resolveClass(Name *name) const + QList resolveClass(const Name *name) const { return resolveClass(name, visibleScopes()); } - QList resolveClassOrNamespace(Name *name) const + QList resolveClassOrNamespace(const Name *name) const { return resolveClassOrNamespace(name, visibleScopes()); } - QList resolveObjCClass(Name *name) const + QList resolveObjCClass(const Name *name) const { return resolveObjCClass(name, visibleScopes()); } - QList resolveObjCProtocol(Name *name) const + QList resolveObjCProtocol(const Name *name) const { return resolveObjCProtocol(name, visibleScopes()); } enum ResolveMode { @@ -122,22 +122,22 @@ public: ResolveAll = ResolveSymbol | ResolveClassOrNamespace | ResolveObjCClass | ResolveObjCProtocol }; - QList resolve(Name *name, const QList &visibleScopes, + QList resolve(const Name *name, const QList &visibleScopes, ResolveMode mode = ResolveAll) const; - QList resolveNamespace(Name *name, const QList &visibleScopes) const + QList resolveNamespace(const Name *name, const QList &visibleScopes) const { return resolve(name, visibleScopes, ResolveNamespace); } - QList resolveClass(Name *name, const QList &visibleScopes) const + QList resolveClass(const Name *name, const QList &visibleScopes) const { return resolve(name, visibleScopes, ResolveClass); } - QList resolveClassOrNamespace(Name *name, const QList &visibleScopes) const + QList resolveClassOrNamespace(const Name *name, const QList &visibleScopes) const { return resolve(name, visibleScopes, ResolveClassOrNamespace); } - QList resolveObjCClass(Name *name, const QList &visibleScopes) const + QList resolveObjCClass(const Name *name, const QList &visibleScopes) const { return resolve(name, visibleScopes, ResolveObjCClass); } - QList resolveObjCProtocol(Name *name, const QList &visibleScopes) const + QList resolveObjCProtocol(const Name *name, const QList &visibleScopes) const { return resolve(name, visibleScopes, ResolveObjCProtocol); } QList visibleScopes() const @@ -187,15 +187,15 @@ public: private: static Symbol *canonicalSymbol(Symbol *symbol); - QList resolveQualifiedNameId(QualifiedNameId *q, + QList resolveQualifiedNameId(const QualifiedNameId *q, const QList &visibleScopes, ResolveMode mode) const; - QList resolveOperatorNameId(OperatorNameId *opId, + QList resolveOperatorNameId(const OperatorNameId *opId, const QList &visibleScopes, ResolveMode mode) const; - QList resolveNestedNameSpecifier(QualifiedNameId *q, + QList resolveNestedNameSpecifier(const QualifiedNameId *q, const QList &visibleScopes) const; const Identifier *identifier(const Name *name) const; diff --git a/src/libs/cplusplus/NamePrettyPrinter.cpp b/src/libs/cplusplus/NamePrettyPrinter.cpp index 607d3a65923..99274198a2a 100644 --- a/src/libs/cplusplus/NamePrettyPrinter.cpp +++ b/src/libs/cplusplus/NamePrettyPrinter.cpp @@ -48,7 +48,7 @@ const Overview *NamePrettyPrinter::overview() const return _overview; } -QString NamePrettyPrinter::operator()(Name *name) +QString NamePrettyPrinter::operator()(const Name *name) { QString previousName = switchName(); accept(name); @@ -62,7 +62,7 @@ QString NamePrettyPrinter::switchName(const QString &name) return previousName; } -void NamePrettyPrinter::visit(NameId *name) +void NamePrettyPrinter::visit(const NameId *name) { const Identifier *id = name->identifier(); if (id) @@ -71,7 +71,7 @@ void NamePrettyPrinter::visit(NameId *name) _name = QLatin1String("anonymous"); } -void NamePrettyPrinter::visit(TemplateNameId *name) +void NamePrettyPrinter::visit(const TemplateNameId *name) { const Identifier *id = name->identifier(); if (id) @@ -93,14 +93,14 @@ void NamePrettyPrinter::visit(TemplateNameId *name) _name += QLatin1Char('>'); } -void NamePrettyPrinter::visit(DestructorNameId *name) +void NamePrettyPrinter::visit(const DestructorNameId *name) { const Identifier *id = name->identifier(); _name += QLatin1Char('~'); _name += QString::fromLatin1(id->chars(), id->size()); } -void NamePrettyPrinter::visit(OperatorNameId *name) +void NamePrettyPrinter::visit(const OperatorNameId *name) { _name += QLatin1String("operator "); switch (name->kind()) { // ### i should probably do this in OperatorNameId @@ -236,13 +236,13 @@ void NamePrettyPrinter::visit(OperatorNameId *name) } // switch } -void NamePrettyPrinter::visit(ConversionNameId *name) +void NamePrettyPrinter::visit(const ConversionNameId *name) { _name += QLatin1String("operator "); _name += overview()->prettyType(name->type()); } -void NamePrettyPrinter::visit(QualifiedNameId *name) +void NamePrettyPrinter::visit(const QualifiedNameId *name) { if (name->isGlobal()) _name += QLatin1String("::"); @@ -254,10 +254,10 @@ void NamePrettyPrinter::visit(QualifiedNameId *name) } } -void NamePrettyPrinter::visit(SelectorNameId *name) +void NamePrettyPrinter::visit(const SelectorNameId *name) { for (unsigned i = 0; i < name->nameCount(); ++i) { - Name *n = name->nameAt(i); + const Name *n = name->nameAt(i); if (!n) continue; diff --git a/src/libs/cplusplus/NamePrettyPrinter.h b/src/libs/cplusplus/NamePrettyPrinter.h index f1855bb2ab5..d1d40696252 100644 --- a/src/libs/cplusplus/NamePrettyPrinter.h +++ b/src/libs/cplusplus/NamePrettyPrinter.h @@ -44,18 +44,18 @@ public: virtual ~NamePrettyPrinter(); const Overview *overview() const; - QString operator()(Name *name); + QString operator()(const Name *name); protected: QString switchName(const QString &name = QString()); - virtual void visit(NameId *name); - virtual void visit(TemplateNameId *name); - virtual void visit(DestructorNameId *name); - virtual void visit(OperatorNameId *name); - virtual void visit(ConversionNameId *name); - virtual void visit(QualifiedNameId *name); - virtual void visit(SelectorNameId *name); + virtual void visit(const NameId *name); + virtual void visit(const TemplateNameId *name); + virtual void visit(const DestructorNameId *name); + virtual void visit(const OperatorNameId *name); + virtual void visit(const ConversionNameId *name); + virtual void visit(const QualifiedNameId *name); + virtual void visit(const SelectorNameId *name); private: const Overview *_overview; diff --git a/src/libs/cplusplus/Overview.cpp b/src/libs/cplusplus/Overview.cpp index 19ac3b95bbe..6f4483187ef 100644 --- a/src/libs/cplusplus/Overview.cpp +++ b/src/libs/cplusplus/Overview.cpp @@ -117,13 +117,13 @@ void Overview::setShowFullyQualifiedNamed(bool showFullyQualifiedNames) _showFullyQualifiedNames = showFullyQualifiedNames; } -QString Overview::prettyName(Name *name) const +QString Overview::prettyName(const Name *name) const { NamePrettyPrinter pp(this); return pp(name); } -QString Overview::prettyType(const FullySpecifiedType &ty, Name *name) const +QString Overview::prettyType(const FullySpecifiedType &ty, const Name *name) const { return prettyType(ty, prettyName(name)); } diff --git a/src/libs/cplusplus/Overview.h b/src/libs/cplusplus/Overview.h index 95ab7515db3..756a2307fe6 100644 --- a/src/libs/cplusplus/Overview.h +++ b/src/libs/cplusplus/Overview.h @@ -66,14 +66,14 @@ public: int markedArgumentEnd() const; void setMarkedArgumentEnd(int end); - QString operator()(Name *name) const + QString operator()(const Name *name) const { return prettyName(name); } - QString operator()(const FullySpecifiedType &type, Name *name = 0) const + QString operator()(const FullySpecifiedType &type, const Name *name = 0) const { return prettyType(type, name); } - QString prettyName(Name *name) const; - QString prettyType(const FullySpecifiedType &type, Name *name = 0) const; + QString prettyName(const Name *name) const; + QString prettyType(const FullySpecifiedType &type, const Name *name = 0) const; QString prettyType(const FullySpecifiedType &type, const QString &name) const; private: diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 3701728557d..c6aa2f9ae0f 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -181,11 +181,11 @@ bool ResolveExpression::visit(NewExpressionAST *ast) bool ResolveExpression::visit(TypeidExpressionAST *) { - Name *std_type_info[2]; + const Name *std_type_info[2]; std_type_info[0] = control()->nameId(control()->findOrInsertIdentifier("std")); std_type_info[1] = control()->nameId(control()->findOrInsertIdentifier("type_info")); - Name *q = control()->qualifiedNameId(std_type_info, 2, /*global=*/ true); + const Name *q = control()->qualifiedNameId(std_type_info, 2, /*global=*/ true); FullySpecifiedType ty(control()->namedType(q)); addResult(ty); @@ -277,8 +277,8 @@ bool ResolveExpression::visit(ThisExpressionAST *) FullySpecifiedType ptrTy(control()->pointerType(classTy)); addResult(ptrTy, fun); break; - } else if (QualifiedNameId *q = fun->name()->asQualifiedNameId()) { - Name *nestedNameSpecifier = 0; + } else if (const QualifiedNameId *q = fun->name()->asQualifiedNameId()) { + const Name *nestedNameSpecifier = 0; if (q->nameCount() == 1 && q->isGlobal()) nestedNameSpecifier = q->nameAt(0); else @@ -355,7 +355,7 @@ bool ResolveExpression::visit(CompoundLiteralAST *ast) bool ResolveExpression::visit(QualifiedNameAST *ast) { ResolveClass resolveClass; - Name *name = ast->name; + const Name *name = ast->name; QList symbols = _context.resolve(name); foreach (Symbol *symbol, symbols) { @@ -451,7 +451,7 @@ bool ResolveExpression::visit(CallAST *ast) ++actualArgumentCount; } - Name *functionCallOp = control()->operatorNameId(OperatorNameId::FunctionCallOp); + const Name *functionCallOp = control()->operatorNameId(OperatorNameId::FunctionCallOp); foreach (const LookupItem &result, baseResults) { FullySpecifiedType ty = result.type().simplified(); @@ -495,7 +495,7 @@ bool ResolveExpression::visit(ArrayAccessAST *ast) const QList indexResults = operator()(ast->expression); ResolveClass resolveClass; - Name *arrayAccessOp = control()->operatorNameId(OperatorNameId::ArrayAccessOp); + const Name *arrayAccessOp = control()->operatorNameId(OperatorNameId::ArrayAccessOp); foreach (const LookupItem &result, baseResults) { FullySpecifiedType ty = result.type().simplified(); @@ -537,7 +537,7 @@ bool ResolveExpression::visit(MemberAccessAST *ast) QList baseResults = _results; // Evaluate the expression-id that follows the access operator. - Name *memberName = 0; + const Name *memberName = 0; if (ast->member_name) memberName = ast->member_name->name; @@ -594,7 +594,7 @@ ResolveExpression::resolveBaseExpression(const QList &baseResults, i if (NamedType *namedTy = ty->asNamedType()) { ResolveClass resolveClass; - Name *arrowAccessOp = control()->operatorNameId(OperatorNameId::ArrowOp); + const Name *arrowAccessOp = control()->operatorNameId(OperatorNameId::ArrowOp); const QList candidates = resolveClass(namedTy->name(), result, _context); foreach (Symbol *classObject, candidates) { @@ -663,7 +663,7 @@ ResolveExpression::resolveBaseExpression(const QList &baseResults, i QList ResolveExpression::resolveMemberExpression(const QList &baseResults, unsigned accessOp, - Name *memberName, + const Name *memberName, bool *replacedDotOperator) const { ResolveClass resolveClass; @@ -677,7 +677,7 @@ ResolveExpression::resolveMemberExpression(const QList &baseResults, results += resolveMember(memberName, klass); else if (NamedType *namedTy = ty->asNamedType()) { - Name *className = namedTy->name(); + const Name *className = namedTy->name(); const QList classes = resolveClass(className, r, _context); foreach (Symbol *c, classes) { @@ -691,8 +691,8 @@ ResolveExpression::resolveMemberExpression(const QList &baseResults, } QList -ResolveExpression::resolveMember(Name *memberName, Class *klass, - Name *className) const +ResolveExpression::resolveMember(const Name *memberName, Class *klass, + const Name *className) const { QList results; @@ -709,19 +709,19 @@ ResolveExpression::resolveMember(Name *memberName, Class *klass, foreach (Symbol *candidate, candidates) { FullySpecifiedType ty = candidate->type(); - Name *unqualifiedNameId = className; + const Name *unqualifiedNameId = className; - if (QualifiedNameId *q = className->asQualifiedNameId()) + if (const QualifiedNameId *q = className->asQualifiedNameId()) unqualifiedNameId = q->unqualifiedNameId(); - if (TemplateNameId *templId = unqualifiedNameId->asTemplateNameId()) { + if (const TemplateNameId *templId = unqualifiedNameId->asTemplateNameId()) { GenTemplateInstance::Substitution subst; for (unsigned i = 0; i < templId->templateArgumentCount(); ++i) { FullySpecifiedType templArgTy = templId->templateArgumentAt(i); if (i < klass->templateParameterCount()) { - Name *templArgName = klass->templateParameterAt(i)->name(); + const Name *templArgName = klass->templateParameterAt(i)->name(); if (templArgName && templArgName->identifier()) { const Identifier *templArgId = templArgName->identifier(); subst.append(qMakePair(templArgId, templArgTy)); @@ -741,7 +741,7 @@ ResolveExpression::resolveMember(Name *memberName, Class *klass, QList -ResolveExpression::resolveMember(Name *memberName, ObjCClass *klass) const +ResolveExpression::resolveMember(const Name *memberName, ObjCClass *klass) const { QList results; @@ -774,7 +774,7 @@ bool ResolveExpression::visit(ObjCMessageExpressionAST *ast) if (!receiverResults.isEmpty()) { LookupItem result = receiverResults.first(); FullySpecifiedType ty = result.type().simplified(); - Name *klassName = 0; + const Name *klassName = 0; if (const ObjCClass *classTy = ty->asObjCClassType()) { // static access, e.g.: @@ -805,7 +805,7 @@ bool ResolveExpression::visit(ObjCMessageExpressionAST *ast) ResolveClass::ResolveClass() { } -QList ResolveClass::operator()(Name *name, +QList ResolveClass::operator()(const Name *name, const LookupItem &p, const LookupContext &context) { @@ -815,7 +815,7 @@ QList ResolveClass::operator()(Name *name, return symbols; } -QList ResolveClass::resolveClass(Name *name, +QList ResolveClass::resolveClass(const Name *name, const LookupItem &p, const LookupContext &context) { @@ -873,7 +873,7 @@ QList ResolveClass::resolveClass(Name *name, ResolveObjCClass::ResolveObjCClass() {} -QList ResolveObjCClass::operator ()(Name *name, +QList ResolveObjCClass::operator ()(const Name *name, const LookupItem &p, const LookupContext &context) { diff --git a/src/libs/cplusplus/ResolveExpression.h b/src/libs/cplusplus/ResolveExpression.h index f4c00352daa..1d613228d83 100644 --- a/src/libs/cplusplus/ResolveExpression.h +++ b/src/libs/cplusplus/ResolveExpression.h @@ -48,17 +48,17 @@ public: QList resolveMemberExpression(const QList &baseResults, unsigned accessOp, - Name *memberName, + const Name *memberName, bool *replacedDotOperator = 0) const; QList resolveBaseExpression(const QList &baseResults, int accessOp, bool *replacedDotOperator = 0) const; - QList resolveMember(Name *memberName, Class *klass, - Name *className = 0) const; + QList resolveMember(const Name *memberName, Class *klass, + const Name *className = 0) const; - QList resolveMember(Name *memberName, ObjCClass *klass) const; + QList resolveMember(const Name *memberName, ObjCClass *klass) const; protected: QList switchResults(const QList &symbols); @@ -125,12 +125,12 @@ class CPLUSPLUS_EXPORT ResolveClass public: ResolveClass(); - QList operator()(Name *name, + QList operator()(const Name *name, const LookupItem &p, const LookupContext &context); private: - QList resolveClass(Name *name, + QList resolveClass(const Name *name, const LookupItem &p, const LookupContext &context); @@ -143,7 +143,7 @@ class CPLUSPLUS_EXPORT ResolveObjCClass public: ResolveObjCClass(); - QList operator()(Name *name, + QList operator()(const Name *name, const LookupItem &p, const LookupContext &context); }; diff --git a/src/libs/cplusplus/TypePrettyPrinter.cpp b/src/libs/cplusplus/TypePrettyPrinter.cpp index 3baa14c06d0..2434e866127 100644 --- a/src/libs/cplusplus/TypePrettyPrinter.cpp +++ b/src/libs/cplusplus/TypePrettyPrinter.cpp @@ -327,7 +327,7 @@ void TypePrettyPrinter::visit(Function *type) if (index + 1 == _overview->markedArgument()) const_cast(_overview)->setMarkedArgumentBegin(_text.length()); - Name *name = 0; + const Name *name = 0; if (_overview->showArgumentNames()) name = arg->name(); diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index e627e4ddc3f..7e8c06f14fa 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -477,7 +477,7 @@ protected: class FindFunctionDefinitions: protected SymbolVisitor { - Name *_declarationName; + const Name *_declarationName; QList *_functions; public: @@ -486,7 +486,7 @@ public: _functions(0) { } - void operator()(Name *declarationName, Scope *globals, + void operator()(const Name *declarationName, Scope *globals, QList *functions) { _declarationName = declarationName; @@ -502,8 +502,8 @@ protected: virtual bool visit(Function *function) { - Name *name = function->name(); - if (QualifiedNameId *q = name->asQualifiedNameId()) + const Name *name = function->name(); + if (const QualifiedNameId *q = name->asQualifiedNameId()) name = q->unqualifiedNameId(); if (_declarationName->isEqualTo(name)) @@ -515,19 +515,19 @@ protected: } // end of anonymous namespace -static QualifiedNameId *qualifiedNameIdForSymbol(Symbol *s, const LookupContext &context) +static const QualifiedNameId *qualifiedNameIdForSymbol(Symbol *s, const LookupContext &context) { - Name *symbolName = s->name(); + const Name *symbolName = s->name(); if (! symbolName) return 0; // nothing to do. - QVector names; + QVector names; for (Scope *scope = s->scope(); scope; scope = scope->enclosingScope()) { if (scope->isClassScope() || scope->isNamespaceScope()) { if (scope->owner() && scope->owner()->name()) { - Name *ownerName = scope->owner()->name(); - if (QualifiedNameId *q = ownerName->asQualifiedNameId()) { + const Name *ownerName = scope->owner()->name(); + if (const QualifiedNameId *q = ownerName->asQualifiedNameId()) { for (unsigned i = 0; i < q->nameCount(); ++i) { names.prepend(q->nameAt(i)); } @@ -538,7 +538,7 @@ static QualifiedNameId *qualifiedNameIdForSymbol(Symbol *s, const LookupContext } } - if (QualifiedNameId *q = symbolName->asQualifiedNameId()) { + if (const QualifiedNameId *q = symbolName->asQualifiedNameId()) { for (unsigned i = 0; i < q->nameCount(); ++i) { names.append(q->nameAt(i)); } @@ -1021,27 +1021,28 @@ void CPPEditor::updateUsesNow() semanticRehighlight(); } -static bool isCompatible(Name *name, Name *otherName) +static bool isCompatible(const Name *name, const Name *otherName) { - if (NameId *nameId = name->asNameId()) { - if (TemplateNameId *otherTemplId = otherName->asTemplateNameId()) + if (const NameId *nameId = name->asNameId()) { + if (const TemplateNameId *otherTemplId = otherName->asTemplateNameId()) return nameId->identifier()->isEqualTo(otherTemplId->identifier()); - } else if (TemplateNameId *templId = name->asTemplateNameId()) { - if (NameId *otherNameId = otherName->asNameId()) + } else if (const TemplateNameId *templId = name->asTemplateNameId()) { + if (const NameId *otherNameId = otherName->asNameId()) return templId->identifier()->isEqualTo(otherNameId->identifier()); } return name->isEqualTo(otherName); } -static bool isCompatible(Function *definition, Symbol *declaration, QualifiedNameId *declarationName) +static bool isCompatible(Function *definition, Symbol *declaration, + const QualifiedNameId *declarationName) { Function *declTy = declaration->type()->asFunctionType(); if (! declTy) return false; - Name *definitionName = definition->name(); - if (QualifiedNameId *q = definitionName->asQualifiedNameId()) { + const Name *definitionName = definition->name(); + if (const QualifiedNameId *q = definitionName->asQualifiedNameId()) { if (! isCompatible(q->unqualifiedNameId(), declaration->name())) return false; else if (q->nameCount() > declarationName->nameCount()) @@ -1061,8 +1062,8 @@ static bool isCompatible(Function *definition, Symbol *declaration, QualifiedNam } for (unsigned i = 0; i != q->nameCount(); ++i) { - Name *n = q->nameAt(q->nameCount() - i - 1); - Name *m = declarationName->nameAt(declarationName->nameCount() - i - 1); + const Name *n = q->nameAt(q->nameCount() - i - 1); + const Name *m = declarationName->nameAt(declarationName->nameCount() - i - 1); if (! isCompatible(n, m)) return false; } @@ -1105,7 +1106,7 @@ void CPPEditor::switchDeclarationDefinition() QList resolvedSymbols = typeOfExpression(QString(), doc, lastSymbol); const LookupContext &context = typeOfExpression.lookupContext(); - QualifiedNameId *q = qualifiedNameIdForSymbol(f, context); + const QualifiedNameId *q = qualifiedNameIdForSymbol(f, context); QList symbols = context.resolve(q); Symbol *declaration = 0; @@ -1278,11 +1279,11 @@ Symbol *CPPEditor::findDefinition(Symbol *symbol) if (! funTy) return 0; // symbol does not have function type. - Name *name = symbol->name(); + const Name *name = symbol->name(); if (! name) return 0; // skip anonymous functions! - if (QualifiedNameId *q = name->asQualifiedNameId()) + if (const QualifiedNameId *q = name->asQualifiedNameId()) name = q->unqualifiedNameId(); // map from file names to function definitions. diff --git a/src/plugins/cppeditor/cpphoverhandler.cpp b/src/plugins/cppeditor/cpphoverhandler.cpp index 5bcaba448d6..3db38f6f716 100644 --- a/src/plugins/cppeditor/cpphoverhandler.cpp +++ b/src/plugins/cppeditor/cpphoverhandler.cpp @@ -138,7 +138,7 @@ void CppHoverHandler::showToolTip(TextEditor::ITextEditor *editor, const QPoint } } -static QString buildHelpId(Symbol *symbol, Name *name) +static QString buildHelpId(Symbol *symbol, const Name *name) { Scope *scope = 0; @@ -161,13 +161,13 @@ static QString buildHelpId(Symbol *symbol, Name *name) Symbol *owner = scope->owner(); if (owner && owner->name() && ! scope->isEnumScope()) { - Name *name = owner->name(); + const Name *name = owner->name(); const Identifier *id = 0; - if (NameId *nameId = name->asNameId()) + if (const NameId *nameId = name->asNameId()) id = nameId->identifier(); - else if (TemplateNameId *nameId = name->asTemplateNameId()) + else if (const TemplateNameId *nameId = name->asTemplateNameId()) id = nameId->identifier(); if (id) @@ -182,7 +182,7 @@ static QString buildHelpId(Symbol *symbol, Name *name) static FullySpecifiedType resolve(const FullySpecifiedType &ty, const LookupContext &context, Symbol **resolvedSymbol, - Name **resolvedName) + const Name **resolvedName) { Control *control = context.control(); @@ -334,7 +334,7 @@ void CppHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in Symbol *lookupSymbol = result.lastVisibleSymbol(); // lookup symbol Symbol *resolvedSymbol = lookupSymbol; - Name *resolvedName = lookupSymbol ? lookupSymbol->name() : 0; + const Name *resolvedName = lookupSymbol ? lookupSymbol->name() : 0; firstType = resolve(firstType, typeOfExpression.lookupContext(), &resolvedSymbol, &resolvedName); diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp index 37ea378d2e1..a61cfde23ff 100644 --- a/src/plugins/cpptools/cppcodecompletion.cpp +++ b/src/plugins/cpptools/cppcodecompletion.cpp @@ -192,7 +192,7 @@ protected: return previousItem; } - TextEditor::CompletionItem newCompletionItem(Name *name) + TextEditor::CompletionItem newCompletionItem(const Name *name) { TextEditor::CompletionItem item(_collector); item.text = overview.prettyName(name); @@ -200,25 +200,25 @@ protected: return item; } - virtual void visit(NameId *name) + virtual void visit(const NameId *name) { _item = newCompletionItem(name); } - virtual void visit(TemplateNameId *name) + virtual void visit(const TemplateNameId *name) { _item = newCompletionItem(name); _item.text = QLatin1String(name->identifier()->chars()); } - virtual void visit(DestructorNameId *name) + virtual void visit(const DestructorNameId *name) { _item = newCompletionItem(name); } - virtual void visit(OperatorNameId *name) + virtual void visit(const OperatorNameId *name) { _item = newCompletionItem(name); } - virtual void visit(ConversionNameId *name) + virtual void visit(const ConversionNameId *name) { _item = newCompletionItem(name); } - virtual void visit(QualifiedNameId *name) + virtual void visit(const QualifiedNameId *name) { _item = newCompletionItem(name->unqualifiedNameId()); } }; @@ -890,13 +890,13 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList &r FullySpecifiedType exprTy = result.type().simplified(); if (Class *klass = exprTy->asClassType()) { - Name *className = klass->name(); + const Name *className = klass->name(); if (! className) continue; // nothing to do for anonymoous classes. for (unsigned i = 0; i < klass->memberCount(); ++i) { Symbol *member = klass->memberAt(i); - Name *memberName = member->name(); + const Name *memberName = member->name(); if (! memberName) continue; // skip anonymous member. @@ -945,7 +945,7 @@ bool CppCodeCompletion::completeConstructorOrFunction(const QList &r if (functions.isEmpty()) { ResolveExpression resolveExpression(context); ResolveClass resolveClass; - Name *functionCallOp = context.control()->operatorNameId(OperatorNameId::FunctionCallOp); + const Name *functionCallOp = context.control()->operatorNameId(OperatorNameId::FunctionCallOp); foreach (const LookupItem &result, results) { FullySpecifiedType ty = result.type().simplified(); @@ -1092,7 +1092,7 @@ bool CppCodeCompletion::completeMember(const QList &baseResults, classObjectCandidates.append(klass); else if (NamedType *namedTy = ty->asNamedType()) { - Name *className = namedTy->name(); + const Name *className = namedTy->name(); const QList classes = resolveClass(className, r, context); foreach (Symbol *c, classes) { diff --git a/src/plugins/cpptools/searchsymbols.cpp b/src/plugins/cpptools/searchsymbols.cpp index ae2c6edc641..1e101cb4ef0 100644 --- a/src/plugins/cpptools/searchsymbols.cpp +++ b/src/plugins/cpptools/searchsymbols.cpp @@ -95,8 +95,8 @@ bool SearchSymbols::visit(Function *symbol) return false; QString extraScope; - if (Name *name = symbol->name()) { - if (QualifiedNameId *nameId = name->asQualifiedNameId()) { + if (const Name *name = symbol->name()) { + if (const QualifiedNameId *nameId = name->asQualifiedNameId()) { if (nameId->nameCount() > 1) { extraScope = overview.prettyName(nameId->nameAt(nameId->nameCount() - 2)); } diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp index 636627c40f8..4f08b925fae 100644 --- a/src/plugins/designer/qtcreatorintegration.cpp +++ b/src/plugins/designer/qtcreatorintegration.cpp @@ -251,8 +251,8 @@ static bool isCompatible(const Function *definition, const Symbol *declaration, if (! declTy) return false; - Name *definitionName = definition->name(); - if (QualifiedNameId *q = definitionName->asQualifiedNameId()) { + const Name *definitionName = definition->name(); + if (const QualifiedNameId *q = definitionName->asQualifiedNameId()) { if (! isCompatible(q->unqualifiedNameId(), declaration->name())) return false; else if (q->nameCount() > declarationName->nameCount()) @@ -272,8 +272,8 @@ static bool isCompatible(const Function *definition, const Symbol *declaration, } for (unsigned i = 0; i != q->nameCount(); ++i) { - Name *n = q->nameAt(q->nameCount() - i - 1); - Name *m = declarationName->nameAt(declarationName->nameCount() - i - 1); + const Name *n = q->nameAt(q->nameCount() - i - 1); + const Name *m = declarationName->nameAt(declarationName->nameCount() - i - 1); if (! isCompatible(n, m)) return false; } @@ -291,13 +291,13 @@ static Document::Ptr findDefinition(const Function *functionDeclaration, int *li if (!cppModelManager) return Document::Ptr(); - QVector qualifiedName; + QVector qualifiedName; Scope *scope = functionDeclaration->scope(); for (; scope; scope = scope->enclosingScope()) { if (scope->isClassScope() || scope->isNamespaceScope()) { if (scope->owner() && scope->owner()->name()) { - Name *scopeOwnerName = scope->owner()->name(); - if (QualifiedNameId *q = scopeOwnerName->asQualifiedNameId()) { + const Name *scopeOwnerName = scope->owner()->name(); + if (const QualifiedNameId *q = scopeOwnerName->asQualifiedNameId()) { for (unsigned i = 0; i < q->nameCount(); ++i) { qualifiedName.prepend(q->nameAt(i)); @@ -312,7 +312,7 @@ static Document::Ptr findDefinition(const Function *functionDeclaration, int *li qualifiedName.append(functionDeclaration->name()); Control control; - QualifiedNameId *q = control.qualifiedNameId(&qualifiedName[0], qualifiedName.size()); + const QualifiedNameId *q = control.qualifiedNameId(&qualifiedName[0], qualifiedName.size()); LookupContext context(&control); const Snapshot documents = cppModelManager->snapshot(); foreach (Document::Ptr doc, documents) { @@ -321,13 +321,13 @@ static Document::Ptr findDefinition(const Function *functionDeclaration, int *li visibleScopes = context.expand(visibleScopes); foreach (Scope *visibleScope, visibleScopes) { Symbol *symbol = 0; - if (NameId *nameId = q->unqualifiedNameId()->asNameId()) + if (const NameId *nameId = q->unqualifiedNameId()->asNameId()) symbol = visibleScope->lookat(nameId->identifier()); - else if (DestructorNameId *dtorId = q->unqualifiedNameId()->asDestructorNameId()) + else if (const DestructorNameId *dtorId = q->unqualifiedNameId()->asDestructorNameId()) symbol = visibleScope->lookat(dtorId->identifier()); - else if (TemplateNameId *templNameId = q->unqualifiedNameId()->asTemplateNameId()) + else if (const TemplateNameId *templNameId = q->unqualifiedNameId()->asTemplateNameId()) symbol = visibleScope->lookat(templNameId->identifier()); - else if (OperatorNameId *opId = q->unqualifiedNameId()->asOperatorNameId()) + else if (const OperatorNameId *opId = q->unqualifiedNameId()->asOperatorNameId()) symbol = visibleScope->lookat(opId->kind()); // ### cast operators for (; symbol; symbol = symbol->next()) { diff --git a/src/shared/cplusplus/AST.h b/src/shared/cplusplus/AST.h index 3902fcb5c52..47342c2e045 100644 --- a/src/shared/cplusplus/AST.h +++ b/src/shared/cplusplus/AST.h @@ -303,7 +303,7 @@ public: class CPLUSPLUS_EXPORT NameAST: public ExpressionAST { public: // annotations - Name *name; + const Name *name; public: virtual NameAST *asName() { return this; } @@ -342,7 +342,7 @@ public: class CPLUSPLUS_EXPORT ObjCSelectorAST: public AST { public: // annotation - Name *selector_name; + const Name *selector_name; public: virtual ObjCSelectorAST *asObjCSelector() { return this; } diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp index 3fa5922a026..bd6be26743f 100644 --- a/src/shared/cplusplus/CheckDeclaration.cpp +++ b/src/shared/cplusplus/CheckDeclaration.cpp @@ -153,7 +153,7 @@ bool CheckDeclaration::visit(SimpleDeclarationAST *ast) if (elab_type_spec->name) sourceLocation = elab_type_spec->name->firstToken(); - Name *name = semantic()->check(elab_type_spec->name, _scope); + const Name *name = semantic()->check(elab_type_spec->name, _scope); ForwardClassDeclaration *symbol = control()->newForwardClassDeclaration(sourceLocation, name); @@ -172,7 +172,7 @@ bool CheckDeclaration::visit(SimpleDeclarationAST *ast) List **decl_it = &ast->symbols; for (DeclaratorListAST *it = ast->declarator_list; it; it = it->next) { - Name *name = 0; + const Name *name = 0; FullySpecifiedType declTy = semantic()->check(it->value, qualTy, _scope, &name); @@ -268,7 +268,7 @@ bool CheckDeclaration::visit(ExceptionDeclarationAST *ast) FullySpecifiedType ty = semantic()->check(ast->type_specifier_list, _scope); FullySpecifiedType qualTy = ty.qualifiedType(); - Name *name = 0; + const Name *name = 0; FullySpecifiedType declTy = semantic()->check(ast->declarator, qualTy, _scope, &name); @@ -293,7 +293,7 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast) { FullySpecifiedType ty = semantic()->check(ast->decl_specifier_list, _scope); FullySpecifiedType qualTy = ty.qualifiedType(); - Name *name = 0; + const Name *name = 0; FullySpecifiedType funTy = semantic()->check(ast->declarator, qualTy, _scope, &name); if (! (funTy && funTy->isFunctionType())) { @@ -379,7 +379,7 @@ bool CheckDeclaration::visit(LinkageSpecificationAST *ast) bool CheckDeclaration::visit(NamespaceAST *ast) { const Identifier *id = identifier(ast->identifier_token); - Name *namespaceName = control()->nameId(id); + const Name *namespaceName = control()->nameId(id); unsigned sourceLocation = ast->firstToken(); @@ -411,7 +411,7 @@ bool CheckDeclaration::visit(ParameterDeclarationAST *ast) sourceLocation = ast->firstToken(); } - Name *argName = 0; + const Name *argName = 0; FullySpecifiedType ty = semantic()->check(ast->type_specifier_list, _scope); FullySpecifiedType argTy = semantic()->check(ast->declarator, ty.qualifiedType(), _scope, &argName); @@ -445,7 +445,7 @@ bool CheckDeclaration::visit(TypenameTypeParameterAST *ast) if (ast->name) sourceLocation = ast->name->firstToken(); - Name *name = semantic()->check(ast->name, _scope); + const Name *name = semantic()->check(ast->name, _scope); Argument *arg = control()->newArgument(sourceLocation, name); // ### new template type ast->symbol = arg; _scope->enterSymbol(arg); @@ -458,7 +458,7 @@ bool CheckDeclaration::visit(TemplateTypeParameterAST *ast) if (ast->name) sourceLocation = ast->name->firstToken(); - Name *name = semantic()->check(ast->name, _scope); + const Name *name = semantic()->check(ast->name, _scope); Argument *arg = control()->newArgument(sourceLocation, name); // ### new template type ast->symbol = arg; _scope->enterSymbol(arg); @@ -467,7 +467,7 @@ bool CheckDeclaration::visit(TemplateTypeParameterAST *ast) bool CheckDeclaration::visit(UsingAST *ast) { - Name *name = semantic()->check(ast->name, _scope); + const Name *name = semantic()->check(ast->name, _scope); unsigned sourceLocation = ast->firstToken(); if (ast->name) @@ -481,7 +481,7 @@ bool CheckDeclaration::visit(UsingAST *ast) bool CheckDeclaration::visit(UsingDirectiveAST *ast) { - Name *name = semantic()->check(ast->name, _scope); + const Name *name = semantic()->check(ast->name, _scope); unsigned sourceLocation = ast->firstToken(); if (ast->name) @@ -510,7 +510,7 @@ bool CheckDeclaration::visit(ObjCProtocolForwardDeclarationAST *ast) else declarationLocation = sourceLocation; - Name *protocolName = semantic()->check(it->value, _scope); + const Name *protocolName = semantic()->check(it->value, _scope); ObjCForwardProtocolDeclaration *fwdProtocol = control()->newObjCForwardProtocolDeclaration(sourceLocation, protocolName); fwdProtocol->setStartOffset(tokenAt(ast->firstToken()).offset); fwdProtocol->setEndOffset(tokenAt(ast->lastToken()).offset); @@ -533,7 +533,7 @@ bool CheckDeclaration::visit(ObjCProtocolDeclarationAST *ast) else sourceLocation = ast->firstToken(); - Name *protocolName = semantic()->check(ast->name, _scope); + const Name *protocolName = semantic()->check(ast->name, _scope); ObjCProtocol *protocol = control()->newObjCProtocol(sourceLocation, protocolName); protocol->setStartOffset(tokenAt(ast->firstToken()).offset); protocol->setEndOffset(tokenAt(ast->lastToken()).offset); @@ -541,7 +541,7 @@ bool CheckDeclaration::visit(ObjCProtocolDeclarationAST *ast) if (ast->protocol_refs && ast->protocol_refs->identifier_list) { for (ObjCIdentifierListAST *iter = ast->protocol_refs->identifier_list; iter; iter = iter->next) { NameAST* name = iter->value; - Name *protocolName = semantic()->check(name, _scope); + const Name *protocolName = semantic()->check(name, _scope); ObjCBaseProtocol *baseProtocol = control()->newObjCBaseProtocol(name->firstToken(), protocolName); protocol->addProtocol(baseProtocol); } @@ -571,7 +571,7 @@ bool CheckDeclaration::visit(ObjCClassForwardDeclarationAST *ast) else declarationLocation = sourceLocation; - Name *className = semantic()->check(it->value, _scope); + const Name *className = semantic()->check(it->value, _scope); ObjCForwardClassDeclaration *fwdClass = control()->newObjCForwardClassDeclaration(sourceLocation, className); fwdClass->setStartOffset(tokenAt(ast->firstToken()).offset); fwdClass->setEndOffset(tokenAt(ast->lastToken()).offset); @@ -594,7 +594,7 @@ bool CheckDeclaration::visit(ObjCClassDeclarationAST *ast) else sourceLocation = ast->firstToken(); - Name *className = semantic()->check(ast->class_name, _scope); + const Name *className = semantic()->check(ast->class_name, _scope); ObjCClass *klass = control()->newObjCClass(sourceLocation, className); klass->setStartOffset(tokenAt(ast->firstToken()).offset); klass->setEndOffset(tokenAt(ast->lastToken()).offset); @@ -603,12 +603,12 @@ bool CheckDeclaration::visit(ObjCClassDeclarationAST *ast) klass->setInterface(ast->interface_token != 0); if (ast->category_name) { - Name *categoryName = semantic()->check(ast->category_name, _scope); + const Name *categoryName = semantic()->check(ast->category_name, _scope); klass->setCategoryName(categoryName); } if (ast->superclass) { - Name *superClassName = semantic()->check(ast->superclass, _scope); + const Name *superClassName = semantic()->check(ast->superclass, _scope); ObjCBaseClass *superKlass = control()->newObjCBaseClass(ast->superclass->firstToken(), superClassName); klass->setBaseClass(superKlass); } @@ -616,7 +616,7 @@ bool CheckDeclaration::visit(ObjCClassDeclarationAST *ast) if (ast->protocol_refs && ast->protocol_refs->identifier_list) { for (ObjCIdentifierListAST *iter = ast->protocol_refs->identifier_list; iter; iter = iter->next) { NameAST* name = iter->value; - Name *protocolName = semantic()->check(name, _scope); + const Name *protocolName = semantic()->check(name, _scope); ObjCBaseProtocol *baseProtocol = control()->newObjCBaseProtocol(name->firstToken(), protocolName); klass->addProtocol(baseProtocol); } @@ -711,7 +711,7 @@ bool CheckDeclaration::visit(ObjCPropertyDeclarationAST *ast) } int propAttrs = ObjCPropertyDeclaration::None; - Name *getterName = 0, *setterName = 0; + const Name *getterName = 0, *setterName = 0; for (ObjCPropertyAttributeListAST *iter= ast->property_attribute_list; iter; iter = iter->next) { ObjCPropertyAttributeAST *attrAst = iter->value; diff --git a/src/shared/cplusplus/CheckDeclarator.cpp b/src/shared/cplusplus/CheckDeclarator.cpp index 9f283811059..7af4e02268a 100644 --- a/src/shared/cplusplus/CheckDeclarator.cpp +++ b/src/shared/cplusplus/CheckDeclarator.cpp @@ -70,12 +70,12 @@ CheckDeclarator::~CheckDeclarator() FullySpecifiedType CheckDeclarator::check(DeclaratorAST *declarator, const FullySpecifiedType &type, Scope *scope, - Name **name) + const Name **name) { FullySpecifiedType previousType = switchFullySpecifiedType(type); Scope *previousScope = switchScope(scope); DeclaratorAST *previousDeclarator = switchDeclarator(declarator); - Name **previousName = switchName(name); + const Name **previousName = switchName(name); accept(declarator); (void) switchName(previousName); (void) switchDeclarator(previousDeclarator); @@ -124,9 +124,9 @@ Scope *CheckDeclarator::switchScope(Scope *scope) return previousScope; } -Name **CheckDeclarator::switchName(Name **name) +const Name **CheckDeclarator::switchName(const Name **name) { - Name **previousName = _name; + const Name **previousName = _name; _name = name; return previousName; } @@ -149,7 +149,7 @@ bool CheckDeclarator::visit(DeclaratorAST *ast) bool CheckDeclarator::visit(DeclaratorIdAST *ast) { - Name *name = semantic()->check(ast->name, _scope); + const Name *name = semantic()->check(ast->name, _scope); if (_name) *_name = name; return false; @@ -219,7 +219,7 @@ bool CheckDeclarator::visit(ArrayDeclaratorAST *ast) bool CheckDeclarator::visit(PointerToMemberAST *ast) { - Name *memberName = semantic()->check(ast->nested_name_specifier_list, _scope); + const Name *memberName = semantic()->check(ast->nested_name_specifier_list, _scope); PointerToMemberType *ptrTy = control()->pointerToMemberType(memberName, _fullySpecifiedType); FullySpecifiedType ty(ptrTy); _fullySpecifiedType = ty; diff --git a/src/shared/cplusplus/CheckDeclarator.h b/src/shared/cplusplus/CheckDeclarator.h index 1b9e14cb813..81d6c0e4f5c 100644 --- a/src/shared/cplusplus/CheckDeclarator.h +++ b/src/shared/cplusplus/CheckDeclarator.h @@ -65,7 +65,7 @@ public: FullySpecifiedType check(DeclaratorAST *declarator, const FullySpecifiedType &type, Scope *scope, - Name **name); + const Name **name); FullySpecifiedType check(PtrOperatorListAST *ptrOperators, const FullySpecifiedType &type, @@ -78,7 +78,7 @@ protected: DeclaratorAST *switchDeclarator(DeclaratorAST *declarator); FullySpecifiedType switchFullySpecifiedType(const FullySpecifiedType &type); Scope *switchScope(Scope *scope); - Name **switchName(Name **name); + const Name **switchName(const Name **name); using ASTVisitor::visit; @@ -102,7 +102,7 @@ protected: private: DeclaratorAST *_declarator; Scope *_scope; - Name **_name; + const Name **_name; FullySpecifiedType _fullySpecifiedType; }; diff --git a/src/shared/cplusplus/CheckExpression.cpp b/src/shared/cplusplus/CheckExpression.cpp index ad1bb3a46e5..f8da07534c5 100644 --- a/src/shared/cplusplus/CheckExpression.cpp +++ b/src/shared/cplusplus/CheckExpression.cpp @@ -120,7 +120,7 @@ bool CheckExpression::visit(CastExpressionAST *ast) bool CheckExpression::visit(ConditionAST *ast) { FullySpecifiedType typeSpecTy = semantic()->check(ast->type_specifier_list, _scope); - Name *name = 0; + const Name *name = 0; FullySpecifiedType declTy = semantic()->check(ast->declarator, typeSpecTy.qualifiedType(), _scope, &name); Declaration *decl = control()->newDeclaration(ast->declarator->firstToken(), name); @@ -302,8 +302,7 @@ bool CheckExpression::visit(ThrowExpressionAST *ast) bool CheckExpression::visit(TypeIdAST *ast) { FullySpecifiedType typeSpecTy = semantic()->check(ast->type_specifier_list, _scope); - FullySpecifiedType declTy = semantic()->check(ast->declarator, typeSpecTy.qualifiedType(), - _scope); + FullySpecifiedType declTy = semantic()->check(ast->declarator, typeSpecTy.qualifiedType(), _scope); _fullySpecifiedType = declTy; return false; } @@ -316,7 +315,7 @@ bool CheckExpression::visit(UnaryExpressionAST *ast) bool CheckExpression::visit(QtMethodAST *ast) { - Name *name = 0; + const Name *name = 0; Scope dummy; FullySpecifiedType methTy = semantic()->check(ast->declarator, FullySpecifiedType(), &dummy, &name); diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp index 1ad29a27d30..11688aba481 100644 --- a/src/shared/cplusplus/CheckName.cpp +++ b/src/shared/cplusplus/CheckName.cpp @@ -69,9 +69,9 @@ CheckName::CheckName(Semantic *semantic) CheckName::~CheckName() { } -Name *CheckName::check(NameAST *name, Scope *scope) +const Name *CheckName::check(NameAST *name, Scope *scope) { - Name *previousName = switchName(0); + const Name *previousName = switchName(0); Scope *previousScope = switchScope(scope); accept(name); @@ -82,12 +82,12 @@ Name *CheckName::check(NameAST *name, Scope *scope) return switchName(previousName); } -Name *CheckName::check(NestedNameSpecifierListAST *nested_name_specifier_list, Scope *scope) +const Name *CheckName::check(NestedNameSpecifierListAST *nested_name_specifier_list, Scope *scope) { - Name *previousName = switchName(0); + const Name *previousName = switchName(0); Scope *previousScope = switchScope(scope); - std::vector names; + std::vector names; for (NestedNameSpecifierListAST *it = nested_name_specifier_list; it; it = it->next) { NestedNameSpecifierAST *nested_name_specifier = it->value; names.push_back(semantic()->check(nested_name_specifier->class_or_namespace_name, _scope)); @@ -100,9 +100,9 @@ Name *CheckName::check(NestedNameSpecifierListAST *nested_name_specifier_list, S return switchName(previousName); } -Name *CheckName::check(ObjCSelectorAST *args, Scope *scope) +const Name *CheckName::check(ObjCSelectorAST *args, Scope *scope) { - Name *previousName = switchName(0); + const Name *previousName = switchName(0); Scope *previousScope = switchScope(scope); accept(args); @@ -113,7 +113,7 @@ Name *CheckName::check(ObjCSelectorAST *args, Scope *scope) void CheckName::check(ObjCMessageArgumentDeclarationAST *arg, Scope *scope) { - Name *previousName = switchName(0); + const Name *previousName = switchName(0); Scope *previousScope = switchScope(scope); accept(arg); @@ -122,9 +122,9 @@ void CheckName::check(ObjCMessageArgumentDeclarationAST *arg, Scope *scope) (void) switchName(previousName); } -Name *CheckName::switchName(Name *name) +const Name *CheckName::switchName(const Name *name) { - Name *previousName = _name; + const Name *previousName = _name; _name = name; return previousName; } @@ -138,14 +138,13 @@ Scope *CheckName::switchScope(Scope *scope) bool CheckName::visit(QualifiedNameAST *ast) { - std::vector names; + std::vector names; for (NestedNameSpecifierListAST *it = ast->nested_name_specifier_list; it; it = it->next) { NestedNameSpecifierAST *nested_name_specifier = it->value; names.push_back(semantic()->check(nested_name_specifier->class_or_namespace_name, _scope)); } names.push_back(semantic()->check(ast->unqualified_name, _scope)); - _name = control()->qualifiedNameId(&names[0], names.size(), - ast->global_scope_token != 0); + _name = control()->qualifiedNameId(&names[0], names.size(), ast->global_scope_token != 0); ast->name = _name; return false; @@ -379,9 +378,9 @@ bool CheckName::visit(TemplateIdAST *ast) bool CheckName::visit(ObjCSelectorWithoutArgumentsAST *ast) { if (ast->name_token) { - std::vector names; + std::vector names; const Identifier *id = control()->findOrInsertIdentifier(spell(ast->name_token)); - NameId *nameId = control()->nameId(id); + const NameId *nameId = control()->nameId(id); names.push_back(nameId); _name = control()->selectorNameId(&names[0], names.size(), false); ast->selector_name = _name; @@ -392,11 +391,11 @@ bool CheckName::visit(ObjCSelectorWithoutArgumentsAST *ast) bool CheckName::visit(ObjCSelectorWithArgumentsAST *ast) { - std::vector names; + std::vector names; for (ObjCSelectorArgumentListAST *it = ast->selector_argument_list; it; it = it->next) { if (it->value->name_token) { const Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token)); - NameId *nameId = control()->nameId(id); + const NameId *nameId = control()->nameId(id); names.push_back(nameId); } else { // we have an incomplete name due, probably due to error recovery. So, back out completely diff --git a/src/shared/cplusplus/CheckName.h b/src/shared/cplusplus/CheckName.h index 7f86d751671..1484cb7848e 100644 --- a/src/shared/cplusplus/CheckName.h +++ b/src/shared/cplusplus/CheckName.h @@ -61,13 +61,13 @@ public: CheckName(Semantic *semantic); virtual ~CheckName(); - Name *check(NameAST *name, Scope *scope); - Name *check(NestedNameSpecifierListAST *name, Scope *scope); - Name *check(ObjCSelectorAST *args, Scope *scope); + const Name *check(NameAST *name, Scope *scope); + const Name *check(NestedNameSpecifierListAST *name, Scope *scope); + const Name *check(ObjCSelectorAST *args, Scope *scope); void check(ObjCMessageArgumentDeclarationAST *arg, Scope *scope); protected: - Name *switchName(Name *name); + const Name *switchName(const Name *name); Scope *switchScope(Scope *scope); using ASTVisitor::visit; @@ -85,7 +85,7 @@ protected: virtual bool visit(ObjCMessageArgumentDeclarationAST *ast); private: - Name *_name; + const Name *_name; Scope *_scope; }; diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp index 7f06e2de386..03b2d53d97d 100644 --- a/src/shared/cplusplus/CheckSpecifier.cpp +++ b/src/shared/cplusplus/CheckSpecifier.cpp @@ -312,7 +312,7 @@ bool CheckSpecifier::visit(ClassSpecifierAST *ast) if (ast->name) sourceLocation = ast->name->firstToken(); - Name *className = semantic()->check(ast->name, _scope); + const Name *className = semantic()->check(ast->name, _scope); Class *klass = control()->newClass(sourceLocation, className); klass->setStartOffset(tokenAt(ast->firstToken()).offset); klass->setEndOffset(tokenAt(ast->lastToken()).offset); @@ -330,7 +330,7 @@ bool CheckSpecifier::visit(ClassSpecifierAST *ast) for (BaseSpecifierListAST *it = ast->base_clause_list; it; it = it->next) { BaseSpecifierAST *base = it->value; - Name *baseClassName = semantic()->check(base->name, _scope); + const Name *baseClassName = semantic()->check(base->name, _scope); BaseClass *baseClass = control()->newBaseClass(ast->firstToken(), baseClassName); base->symbol = baseClass; if (base->virtual_token) @@ -359,14 +359,14 @@ bool CheckSpecifier::visit(ClassSpecifierAST *ast) bool CheckSpecifier::visit(NamedTypeSpecifierAST *ast) { - Name *name = semantic()->check(ast->name, _scope); + const Name *name = semantic()->check(ast->name, _scope); _fullySpecifiedType.setType(control()->namedType(name)); return false; } bool CheckSpecifier::visit(ElaboratedTypeSpecifierAST *ast) { - Name *name = semantic()->check(ast->name, _scope); + const Name *name = semantic()->check(ast->name, _scope); _fullySpecifiedType.setType(control()->namedType(name)); return false; } @@ -377,7 +377,7 @@ bool CheckSpecifier::visit(EnumSpecifierAST *ast) if (ast->name) sourceLocation = ast->name->firstToken(); - Name *name = semantic()->check(ast->name, _scope); + const Name *name = semantic()->check(ast->name, _scope); Enum *e = control()->newEnum(sourceLocation, name); e->setStartOffset(tokenAt(ast->firstToken()).offset); e->setEndOffset(tokenAt(ast->lastToken()).offset); @@ -389,7 +389,7 @@ bool CheckSpecifier::visit(EnumSpecifierAST *ast) const Identifier *id = identifier(enumerator->identifier_token); if (! id) continue; - NameId *enumeratorName = control()->nameId(id); + const NameId *enumeratorName = control()->nameId(id); Declaration *decl = control()->newDeclaration(enumerator->firstToken(), enumeratorName); e->addMember(decl); diff --git a/src/shared/cplusplus/CheckStatement.cpp b/src/shared/cplusplus/CheckStatement.cpp index dec68b1ea4c..ec9f6590e29 100644 --- a/src/shared/cplusplus/CheckStatement.cpp +++ b/src/shared/cplusplus/CheckStatement.cpp @@ -154,7 +154,7 @@ bool CheckStatement::visit(ForeachStatementAST *ast) Scope *previousScope = switchScope(block->members()); if (ast->type_specifier_list && ast->declarator) { FullySpecifiedType ty = semantic()->check(ast->type_specifier_list, _scope); - Name *name = 0; + const Name *name = 0; ty = semantic()->check(ast->declarator, ty, _scope, &name); unsigned location = ast->declarator->firstToken(); if (CoreDeclaratorAST *core_declarator = ast->declarator->core_declarator) @@ -183,7 +183,7 @@ bool CheckStatement::visit(ObjCFastEnumerationAST *ast) Scope *previousScope = switchScope(block->members()); if (ast->type_specifier_list && ast->declarator) { FullySpecifiedType ty = semantic()->check(ast->type_specifier_list, _scope); - Name *name = 0; + const Name *name = 0; ty = semantic()->check(ast->declarator, ty, _scope, &name); unsigned location = ast->declarator->firstToken(); if (CoreDeclaratorAST *core_declarator = ast->declarator->core_declarator) @@ -312,7 +312,7 @@ bool CheckStatement::visit(WhileStatementAST *ast) bool CheckStatement::visit(QtMemberDeclarationAST *ast) { - Name *name = 0; + const Name *name = 0; if (tokenKind(ast->q_token) == T_Q_D) name = control()->nameId(control()->findOrInsertIdentifier("d")); @@ -323,12 +323,13 @@ bool CheckStatement::visit(QtMemberDeclarationAST *ast) if (tokenKind(ast->q_token) == T_Q_D) { if (NamedType *namedTy = declTy->asNamedType()) { - if (NameId *nameId = namedTy->name()->asNameId()) { + if (const NameId *nameId = namedTy->name()->asNameId()) { std::string privateClass; privateClass += nameId->identifier()->chars(); privateClass += "Private"; - Name *privName = control()->nameId(control()->findOrInsertIdentifier(privateClass.c_str(), privateClass.size())); + const Name *privName = control()->nameId(control()->findOrInsertIdentifier(privateClass.c_str(), + privateClass.size())); declTy.setType(control()->namedType(privName)); } } diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp index 1cd2ad51b02..ec14aa796b3 100644 --- a/src/shared/cplusplus/Control.cpp +++ b/src/shared/cplusplus/Control.cpp @@ -184,79 +184,78 @@ public: delete_array_entries(symbols); } - NameId *findOrInsertNameId(const Identifier *id) + const NameId *findOrInsertNameId(const Identifier *id) { if (! id) return 0; - std::map::iterator it = nameIds.lower_bound(id); + std::map::iterator it = nameIds.lower_bound(id); if (it == nameIds.end() || it->first != id) it = nameIds.insert(it, std::make_pair(id, new NameId(id))); return it->second; } - TemplateNameId *findOrInsertTemplateNameId(const Identifier *id, - const std::vector &templateArguments) + const TemplateNameId *findOrInsertTemplateNameId(const Identifier *id, + const std::vector &templateArguments) { if (! id) return 0; const TemplateNameIdKey key(id, templateArguments); - std::map::iterator it = + std::map::iterator it = templateNameIds.lower_bound(key); if (it == templateNameIds.end() || it->first != key) { const FullySpecifiedType *args = 0; if (templateArguments.size()) args = &templateArguments[0]; - TemplateNameId *templ = new TemplateNameId(id, args, - templateArguments.size()); + const TemplateNameId *templ = new TemplateNameId(id, args, templateArguments.size()); it = templateNameIds.insert(it, std::make_pair(key, templ)); } return it->second; } - DestructorNameId *findOrInsertDestructorNameId(const Identifier *id) + const DestructorNameId *findOrInsertDestructorNameId(const Identifier *id) { if (! id) return 0; - std::map::iterator it = destructorNameIds.lower_bound(id); + std::map::iterator it = destructorNameIds.lower_bound(id); if (it == destructorNameIds.end() || it->first != id) it = destructorNameIds.insert(it, std::make_pair(id, new DestructorNameId(id))); return it->second; } - OperatorNameId *findOrInsertOperatorNameId(int kind) + const OperatorNameId *findOrInsertOperatorNameId(int kind) { const int key(kind); - std::map::iterator it = operatorNameIds.lower_bound(key); + std::map::iterator it = operatorNameIds.lower_bound(key); if (it == operatorNameIds.end() || it->first != key) it = operatorNameIds.insert(it, std::make_pair(key, new OperatorNameId(kind))); return it->second; } - ConversionNameId *findOrInsertConversionNameId(const FullySpecifiedType &type) + const ConversionNameId *findOrInsertConversionNameId(const FullySpecifiedType &type) { - std::map::iterator it = + std::map::iterator it = conversionNameIds.lower_bound(type); if (it == conversionNameIds.end() || it->first != type) it = conversionNameIds.insert(it, std::make_pair(type, new ConversionNameId(type))); return it->second; } - QualifiedNameId *findOrInsertQualifiedNameId(const std::vector &names, bool isGlobal) + const QualifiedNameId *findOrInsertQualifiedNameId(const std::vector &names, bool isGlobal) { const QualifiedNameIdKey key(names, isGlobal); - std::map::iterator it = + std::map::iterator it = qualifiedNameIds.lower_bound(key); if (it == qualifiedNameIds.end() || it->first != key) { - QualifiedNameId *name = new QualifiedNameId(&names[0], names.size(), isGlobal); + const QualifiedNameId *name = new QualifiedNameId(&names[0], names.size(), isGlobal); it = qualifiedNameIds.insert(it, std::make_pair(key, name)); } return it->second; } - SelectorNameId *findOrInsertSelectorNameId(const std::vector &names, bool hasArguments) + const SelectorNameId *findOrInsertSelectorNameId(const std::vector &names, bool hasArguments) { const SelectorNameIdKey key(names, hasArguments); - std::map::iterator it = selectorNameIds.lower_bound(key); + std::map::iterator it = selectorNameIds.lower_bound(key); if (it == selectorNameIds.end() || it->first != key) it = selectorNameIds.insert(it, std::make_pair(key, new SelectorNameId(&names[0], names.size(), hasArguments))); return it->second; @@ -272,7 +271,7 @@ public: return floatTypes.intern(FloatType(kind)); } - PointerToMemberType *findOrInsertPointerToMemberType(Name *memberName, const FullySpecifiedType &elementType) + PointerToMemberType *findOrInsertPointerToMemberType(const Name *memberName, const FullySpecifiedType &elementType) { return pointerToMemberTypes.intern(PointerToMemberType(memberName, elementType)); } @@ -292,12 +291,12 @@ public: return arrayTypes.intern(ArrayType(elementType, size)); } - NamedType *findOrInsertNamedType(Name *name) + NamedType *findOrInsertNamedType(const Name *name) { return namedTypes.intern(NamedType(name)); } - Declaration *newDeclaration(unsigned sourceLocation, Name *name) + Declaration *newDeclaration(unsigned sourceLocation, const Name *name) { Declaration *declaration = new Declaration(translationUnit, sourceLocation, name); @@ -305,7 +304,7 @@ public: return declaration; } - Argument *newArgument(unsigned sourceLocation, Name *name) + Argument *newArgument(unsigned sourceLocation, const Name *name) { Argument *argument = new Argument(translationUnit, sourceLocation, name); @@ -313,7 +312,7 @@ public: return argument; } - Function *newFunction(unsigned sourceLocation, Name *name) + Function *newFunction(unsigned sourceLocation, const Name *name) { Function *function = new Function(translationUnit, sourceLocation, name); @@ -321,7 +320,7 @@ public: return function; } - BaseClass *newBaseClass(unsigned sourceLocation, Name *name) + BaseClass *newBaseClass(unsigned sourceLocation, const Name *name) { BaseClass *baseClass = new BaseClass(translationUnit, sourceLocation, name); @@ -336,7 +335,7 @@ public: return block; } - Class *newClass(unsigned sourceLocation, Name *name) + Class *newClass(unsigned sourceLocation, const Name *name) { Class *klass = new Class(translationUnit, sourceLocation, name); @@ -344,7 +343,7 @@ public: return klass; } - Namespace *newNamespace(unsigned sourceLocation, Name *name) + Namespace *newNamespace(unsigned sourceLocation, const Name *name) { Namespace *ns = new Namespace(translationUnit, sourceLocation, name); @@ -352,7 +351,7 @@ public: return ns; } - UsingNamespaceDirective *newUsingNamespaceDirective(unsigned sourceLocation, Name *name) + UsingNamespaceDirective *newUsingNamespaceDirective(unsigned sourceLocation, const Name *name) { UsingNamespaceDirective *u = new UsingNamespaceDirective(translationUnit, sourceLocation, name); @@ -360,7 +359,7 @@ public: return u; } - ForwardClassDeclaration *newForwardClassDeclaration(unsigned sourceLocation, Name *name) + ForwardClassDeclaration *newForwardClassDeclaration(unsigned sourceLocation, const Name *name) { ForwardClassDeclaration *c = new ForwardClassDeclaration(translationUnit, sourceLocation, name); @@ -368,63 +367,63 @@ public: return c; } - ObjCBaseClass *newObjCBaseClass(unsigned sourceLocation, Name *name) + ObjCBaseClass *newObjCBaseClass(unsigned sourceLocation, const Name *name) { ObjCBaseClass *c = new ObjCBaseClass(translationUnit, sourceLocation, name); symbols.push_back(c); return c; } - ObjCBaseProtocol *newObjCBaseProtocol(unsigned sourceLocation, Name *name) + ObjCBaseProtocol *newObjCBaseProtocol(unsigned sourceLocation, const Name *name) { ObjCBaseProtocol *p = new ObjCBaseProtocol(translationUnit, sourceLocation, name); symbols.push_back(p); return p; } - ObjCClass *newObjCClass(unsigned sourceLocation, Name *name) + ObjCClass *newObjCClass(unsigned sourceLocation, const Name *name) { ObjCClass *c = new ObjCClass(translationUnit, sourceLocation, name); symbols.push_back(c); return c; } - ObjCForwardClassDeclaration *newObjCForwardClassDeclaration(unsigned sourceLocation, Name *name) + ObjCForwardClassDeclaration *newObjCForwardClassDeclaration(unsigned sourceLocation, const Name *name) { ObjCForwardClassDeclaration *fwd = new ObjCForwardClassDeclaration(translationUnit, sourceLocation, name); symbols.push_back(fwd); return fwd; } - ObjCProtocol *newObjCProtocol(unsigned sourceLocation, Name *name) + ObjCProtocol *newObjCProtocol(unsigned sourceLocation, const Name *name) { ObjCProtocol *p = new ObjCProtocol(translationUnit, sourceLocation, name); symbols.push_back(p); return p; } - ObjCForwardProtocolDeclaration *newObjCForwardProtocolDeclaration(unsigned sourceLocation, Name *name) + ObjCForwardProtocolDeclaration *newObjCForwardProtocolDeclaration(unsigned sourceLocation, const Name *name) { ObjCForwardProtocolDeclaration *fwd = new ObjCForwardProtocolDeclaration(translationUnit, sourceLocation, name); symbols.push_back(fwd); return fwd; } - ObjCMethod *newObjCMethod(unsigned sourceLocation, Name *name) + ObjCMethod *newObjCMethod(unsigned sourceLocation, const Name *name) { ObjCMethod *method = new ObjCMethod(translationUnit, sourceLocation, name); symbols.push_back(method); return method; } - ObjCPropertyDeclaration *newObjCPropertyDeclaration(unsigned sourceLocation, Name *name) + ObjCPropertyDeclaration *newObjCPropertyDeclaration(unsigned sourceLocation, const Name *name) { ObjCPropertyDeclaration *decl = new ObjCPropertyDeclaration(translationUnit, sourceLocation, name); symbols.push_back(decl); return decl; } - Enum *newEnum(unsigned sourceLocation, Name *name) + Enum *newEnum(unsigned sourceLocation, const Name *name) { Enum *e = new Enum(translationUnit, sourceLocation, name); @@ -432,7 +431,7 @@ public: return e; } - UsingDeclaration *newUsingDeclaration(unsigned sourceLocation, Name *name) + UsingDeclaration *newUsingDeclaration(unsigned sourceLocation, const Name *name) { UsingDeclaration *u = new UsingDeclaration(translationUnit, sourceLocation, name); @@ -466,10 +465,10 @@ public: }; struct QualifiedNameIdKey { - std::vector names; + std::vector names; bool isGlobal; - QualifiedNameIdKey(const std::vector &names, bool isGlobal) : + QualifiedNameIdKey(const std::vector &names, bool isGlobal) : names(names), isGlobal(isGlobal) { } @@ -489,10 +488,10 @@ public: }; struct SelectorNameIdKey { - std::vector _names; + std::vector _names; bool _hasArguments; - SelectorNameIdKey(const std::vector &names, bool hasArguments): _names(names), _hasArguments(hasArguments) {} + SelectorNameIdKey(const std::vector &names, bool hasArguments): _names(names), _hasArguments(hasArguments) {} bool operator==(const SelectorNameIdKey &other) const { return _names == other._names && _hasArguments == other._hasArguments; } @@ -522,13 +521,13 @@ public: // ### replace std::map with lookup tables. ASAP! // names - std::map nameIds; - std::map destructorNameIds; - std::map operatorNameIds; - std::map conversionNameIds; - std::map templateNameIds; - std::map qualifiedNameIds; - std::map selectorNameIds; + std::map nameIds; + std::map destructorNameIds; + std::map operatorNameIds; + std::map conversionNameIds; + std::map templateNameIds; + std::map qualifiedNameIds; + std::map selectorNameIds; // types VoidType voidType; @@ -635,39 +634,39 @@ const NumericLiteral *Control::findOrInsertNumericLiteral(const char *chars) return findOrInsertNumericLiteral(chars, length); } -NameId *Control::nameId(const Identifier *id) +const NameId *Control::nameId(const Identifier *id) { return d->findOrInsertNameId(id); } -TemplateNameId *Control::templateNameId(const Identifier *id, - FullySpecifiedType *const args, - unsigned argv) +const TemplateNameId *Control::templateNameId(const Identifier *id, + const FullySpecifiedType *const args, + unsigned argv) { std::vector templateArguments(args, args + argv); return d->findOrInsertTemplateNameId(id, templateArguments); } -DestructorNameId *Control::destructorNameId(const Identifier *id) +const DestructorNameId *Control::destructorNameId(const Identifier *id) { return d->findOrInsertDestructorNameId(id); } -OperatorNameId *Control::operatorNameId(int kind) +const OperatorNameId *Control::operatorNameId(int kind) { return d->findOrInsertOperatorNameId(kind); } -ConversionNameId *Control::conversionNameId(const FullySpecifiedType &type) +const ConversionNameId *Control::conversionNameId(const FullySpecifiedType &type) { return d->findOrInsertConversionNameId(type); } -QualifiedNameId *Control::qualifiedNameId(Name *const *names, - unsigned nameCount, - bool isGlobal) +const QualifiedNameId *Control::qualifiedNameId(const Name *const *names, + unsigned nameCount, + bool isGlobal) { - std::vector classOrNamespaceNames(names, names + nameCount); + std::vector classOrNamespaceNames(names, names + nameCount); return d->findOrInsertQualifiedNameId(classOrNamespaceNames, isGlobal); } -SelectorNameId *Control::selectorNameId(Name *const *names, - unsigned nameCount, - bool hasArguments) +const SelectorNameId *Control::selectorNameId(const Name *const *names, + unsigned nameCount, + bool hasArguments) { - std::vector selectorNames(names, names + nameCount); + std::vector selectorNames(names, names + nameCount); return d->findOrInsertSelectorNameId(selectorNames, hasArguments); } @@ -681,7 +680,7 @@ IntegerType *Control::integerType(int kind) FloatType *Control::floatType(int kind) { return d->findOrInsertFloatType(kind); } -PointerToMemberType *Control::pointerToMemberType(Name *memberName, const FullySpecifiedType &elementType) +PointerToMemberType *Control::pointerToMemberType(const Name *memberName, const FullySpecifiedType &elementType) { return d->findOrInsertPointerToMemberType(memberName, elementType); } PointerType *Control::pointerType(const FullySpecifiedType &elementType) @@ -693,66 +692,66 @@ ReferenceType *Control::referenceType(const FullySpecifiedType &elementType) ArrayType *Control::arrayType(const FullySpecifiedType &elementType, unsigned size) { return d->findOrInsertArrayType(elementType, size); } -NamedType *Control::namedType(Name *name) +NamedType *Control::namedType(const Name *name) { return d->findOrInsertNamedType(name); } -Argument *Control::newArgument(unsigned sourceLocation, Name *name) +Argument *Control::newArgument(unsigned sourceLocation, const Name *name) { return d->newArgument(sourceLocation, name); } -Function *Control::newFunction(unsigned sourceLocation, Name *name) +Function *Control::newFunction(unsigned sourceLocation, const Name *name) { return d->newFunction(sourceLocation, name); } -Namespace *Control::newNamespace(unsigned sourceLocation, Name *name) +Namespace *Control::newNamespace(unsigned sourceLocation, const Name *name) { return d->newNamespace(sourceLocation, name); } -BaseClass *Control::newBaseClass(unsigned sourceLocation, Name *name) +BaseClass *Control::newBaseClass(unsigned sourceLocation, const Name *name) { return d->newBaseClass(sourceLocation, name); } -Class *Control::newClass(unsigned sourceLocation, Name *name) +Class *Control::newClass(unsigned sourceLocation, const Name *name) { return d->newClass(sourceLocation, name); } -Enum *Control::newEnum(unsigned sourceLocation, Name *name) +Enum *Control::newEnum(unsigned sourceLocation, const Name *name) { return d->newEnum(sourceLocation, name); } Block *Control::newBlock(unsigned sourceLocation) { return d->newBlock(sourceLocation); } -Declaration *Control::newDeclaration(unsigned sourceLocation, Name *name) +Declaration *Control::newDeclaration(unsigned sourceLocation, const Name *name) { return d->newDeclaration(sourceLocation, name); } UsingNamespaceDirective *Control::newUsingNamespaceDirective(unsigned sourceLocation, - Name *name) + const Name *name) { return d->newUsingNamespaceDirective(sourceLocation, name); } -UsingDeclaration *Control::newUsingDeclaration(unsigned sourceLocation, Name *name) +UsingDeclaration *Control::newUsingDeclaration(unsigned sourceLocation, const Name *name) { return d->newUsingDeclaration(sourceLocation, name); } ForwardClassDeclaration *Control::newForwardClassDeclaration(unsigned sourceLocation, - Name *name) + const Name *name) { return d->newForwardClassDeclaration(sourceLocation, name); } -ObjCBaseClass *Control::newObjCBaseClass(unsigned sourceLocation, Name *name) +ObjCBaseClass *Control::newObjCBaseClass(unsigned sourceLocation, const Name *name) { return d->newObjCBaseClass(sourceLocation, name); } -ObjCBaseProtocol *Control::newObjCBaseProtocol(unsigned sourceLocation, Name *name) +ObjCBaseProtocol *Control::newObjCBaseProtocol(unsigned sourceLocation, const Name *name) { return d->newObjCBaseProtocol(sourceLocation, name); } -ObjCClass *Control::newObjCClass(unsigned sourceLocation, Name *name) +ObjCClass *Control::newObjCClass(unsigned sourceLocation, const Name *name) { return d->newObjCClass(sourceLocation, name); } -ObjCForwardClassDeclaration *Control::newObjCForwardClassDeclaration(unsigned sourceLocation, Name *name) +ObjCForwardClassDeclaration *Control::newObjCForwardClassDeclaration(unsigned sourceLocation, const Name *name) { return d->newObjCForwardClassDeclaration(sourceLocation, name); } -ObjCProtocol *Control::newObjCProtocol(unsigned sourceLocation, Name *name) +ObjCProtocol *Control::newObjCProtocol(unsigned sourceLocation, const Name *name) { return d->newObjCProtocol(sourceLocation, name); } -ObjCForwardProtocolDeclaration *Control::newObjCForwardProtocolDeclaration(unsigned sourceLocation, Name *name) +ObjCForwardProtocolDeclaration *Control::newObjCForwardProtocolDeclaration(unsigned sourceLocation, const Name *name) { return d->newObjCForwardProtocolDeclaration(sourceLocation, name); } -ObjCMethod *Control::newObjCMethod(unsigned sourceLocation, Name *name) +ObjCMethod *Control::newObjCMethod(unsigned sourceLocation, const Name *name) { return d->newObjCMethod(sourceLocation, name); } -ObjCPropertyDeclaration *Control::newObjCPropertyDeclaration(unsigned sourceLocation, Name *name) +ObjCPropertyDeclaration *Control::newObjCPropertyDeclaration(unsigned sourceLocation, const Name *name) { return d->newObjCPropertyDeclaration(sourceLocation, name); } const Identifier *Control::objcGetterId() const diff --git a/src/shared/cplusplus/Control.h b/src/shared/cplusplus/Control.h index 3fc8543ab1e..4881b416e8e 100644 --- a/src/shared/cplusplus/Control.h +++ b/src/shared/cplusplus/Control.h @@ -66,30 +66,30 @@ public: void setDiagnosticClient(DiagnosticClient *diagnosticClient); /// Returns the canonical name id. - NameId *nameId(const Identifier *id); + const NameId *nameId(const Identifier *id); /// Returns the canonical template name id. - TemplateNameId *templateNameId(const Identifier *id, - FullySpecifiedType *const args = 0, - unsigned argc = 0); + const TemplateNameId *templateNameId(const Identifier *id, + const FullySpecifiedType *const args = 0, + unsigned argc = 0); /// Returns the canonical destructor name id. - DestructorNameId *destructorNameId(const Identifier *id); + const DestructorNameId *destructorNameId(const Identifier *id); /// Returns the canonical operator name id. - OperatorNameId *operatorNameId(int operatorId); + const OperatorNameId *operatorNameId(int operatorId); /// Returns the canonical conversion name id. - ConversionNameId *conversionNameId(const FullySpecifiedType &type); + const ConversionNameId *conversionNameId(const FullySpecifiedType &type); /// Returns the canonical qualified name id. - QualifiedNameId *qualifiedNameId(Name *const *names, - unsigned nameCount, - bool isGlobal = false); + const QualifiedNameId *qualifiedNameId(const Name *const *names, + unsigned nameCount, + bool isGlobal = false); - SelectorNameId *selectorNameId(Name *const *names, - unsigned nameCount, - bool hasArguments); + const SelectorNameId *selectorNameId(const Name *const *names, + unsigned nameCount, + bool hasArguments); /// Returns a Type object of type VoidType. VoidType *voidType(); @@ -101,7 +101,7 @@ public: FloatType *floatType(int floatId); /// Returns a Type object of type PointertoMemberType. - PointerToMemberType *pointerToMemberType(Name *memberName, + PointerToMemberType *pointerToMemberType(const Name *memberName, const FullySpecifiedType &elementType); /// Returns a Type object of type PointerType. @@ -114,61 +114,61 @@ public: ArrayType *arrayType(const FullySpecifiedType &elementType, unsigned size = 0); /// Returns a Type object of type NamedType. - NamedType *namedType(Name *name); + NamedType *namedType(const Name *name); /// Creates a new Declaration symbol. - Declaration *newDeclaration(unsigned sourceLocation, Name *name); + Declaration *newDeclaration(unsigned sourceLocation, const Name *name); /// Creates a new Argument symbol. - Argument *newArgument(unsigned sourceLocation, Name *name = 0); + Argument *newArgument(unsigned sourceLocation, const Name *name = 0); /// Creates a new Function symbol. - Function *newFunction(unsigned sourceLocation, Name *name = 0); + Function *newFunction(unsigned sourceLocation, const Name *name = 0); /// Creates a new Namespace symbol. - Namespace *newNamespace(unsigned sourceLocation, Name *name = 0); + Namespace *newNamespace(unsigned sourceLocation, const Name *name = 0); /// Creates a new BaseClass symbol. - BaseClass *newBaseClass(unsigned sourceLocation, Name *name = 0); + BaseClass *newBaseClass(unsigned sourceLocation, const Name *name = 0); /// Creates a new Class symbol. - Class *newClass(unsigned sourceLocation, Name *name = 0); + Class *newClass(unsigned sourceLocation, const Name *name = 0); /// Creates a new Enum symbol. - Enum *newEnum(unsigned sourceLocation, Name *name = 0); + Enum *newEnum(unsigned sourceLocation, const Name *name = 0); /// Creates a new Block symbol. Block *newBlock(unsigned sourceLocation); /// Creates a new UsingNamespaceDirective symbol. - UsingNamespaceDirective *newUsingNamespaceDirective(unsigned sourceLocation, Name *name = 0); + UsingNamespaceDirective *newUsingNamespaceDirective(unsigned sourceLocation, const Name *name = 0); /// Creates a new UsingDeclaration symbol. - UsingDeclaration *newUsingDeclaration(unsigned sourceLocation, Name *name = 0); + UsingDeclaration *newUsingDeclaration(unsigned sourceLocation, const Name *name = 0); /// Creates a new ForwardClassDeclaration symbol. - ForwardClassDeclaration *newForwardClassDeclaration(unsigned sourceLocation, Name *name = 0); + ForwardClassDeclaration *newForwardClassDeclaration(unsigned sourceLocation, const Name *name = 0); - ObjCBaseClass *newObjCBaseClass(unsigned sourceLocation, Name *name); - ObjCBaseProtocol *newObjCBaseProtocol(unsigned sourceLocation, Name *name); + ObjCBaseClass *newObjCBaseClass(unsigned sourceLocation, const Name *name); + ObjCBaseProtocol *newObjCBaseProtocol(unsigned sourceLocation, const Name *name); /// Creates a new Objective-C class symbol. - ObjCClass *newObjCClass(unsigned sourceLocation, Name *name = 0); + ObjCClass *newObjCClass(unsigned sourceLocation, const Name *name = 0); /// Creates a new Objective-C class forward declaration symbol. - ObjCForwardClassDeclaration *newObjCForwardClassDeclaration(unsigned sourceLocation, Name *name = 0); + ObjCForwardClassDeclaration *newObjCForwardClassDeclaration(unsigned sourceLocation, const Name *name = 0); /// Creates a new Objective-C protocol symbol. - ObjCProtocol *newObjCProtocol(unsigned sourceLocation, Name *name = 0); + ObjCProtocol *newObjCProtocol(unsigned sourceLocation, const Name *name = 0); /// Creates a new Objective-C protocol forward declaration symbol. - ObjCForwardProtocolDeclaration *newObjCForwardProtocolDeclaration(unsigned sourceLocation, Name *name = 0); + ObjCForwardProtocolDeclaration *newObjCForwardProtocolDeclaration(unsigned sourceLocation, const Name *name = 0); /// Creates a new Objective-C method symbol. - ObjCMethod *newObjCMethod(unsigned sourceLocation, Name *name = 0); + ObjCMethod *newObjCMethod(unsigned sourceLocation, const Name *name = 0); /// Creates a new Objective-C @property declaration symbol. - ObjCPropertyDeclaration *newObjCPropertyDeclaration(unsigned sourceLocation, Name *name); + ObjCPropertyDeclaration *newObjCPropertyDeclaration(unsigned sourceLocation, const Name *name); // Objective-C specific context keywords. const Identifier *objcGetterId() const; diff --git a/src/shared/cplusplus/CoreTypes.cpp b/src/shared/cplusplus/CoreTypes.cpp index 9bdd17a827f..43d9f8bab00 100644 --- a/src/shared/cplusplus/CoreTypes.cpp +++ b/src/shared/cplusplus/CoreTypes.cpp @@ -90,7 +90,7 @@ bool VoidType::matchType0(const Type *otherType, TypeMatcher *matcher) const return false; } -PointerToMemberType::PointerToMemberType(Name *memberName, const FullySpecifiedType &elementType) +PointerToMemberType::PointerToMemberType(const Name *memberName, const FullySpecifiedType &elementType) : _memberName(memberName), _elementType(elementType) { } @@ -98,7 +98,7 @@ PointerToMemberType::PointerToMemberType(Name *memberName, const FullySpecifiedT PointerToMemberType::~PointerToMemberType() { } -Name *PointerToMemberType::memberName() const +const Name *PointerToMemberType::memberName() const { return _memberName; } FullySpecifiedType PointerToMemberType::elementType() const @@ -275,14 +275,14 @@ FullySpecifiedType ArrayType::elementType() const unsigned ArrayType::size() const { return _size; } -NamedType::NamedType(Name *name) +NamedType::NamedType(const Name *name) : _name(name) { } NamedType::~NamedType() { } -Name *NamedType::name() const +const Name *NamedType::name() const { return _name; } bool NamedType::isEqualTo(const Type *other) const @@ -291,12 +291,12 @@ bool NamedType::isEqualTo(const Type *other) const if (! o) return false; - Name *name = _name; - if (QualifiedNameId *q = name->asQualifiedNameId()) + const Name *name = _name; + if (const QualifiedNameId *q = name->asQualifiedNameId()) name = q->unqualifiedNameId(); - Name *otherName = o->name(); - if (QualifiedNameId *q = otherName->asQualifiedNameId()) + const Name *otherName = o->name(); + if (const QualifiedNameId *q = otherName->asQualifiedNameId()) otherName = q->unqualifiedNameId(); return name->isEqualTo(otherName); diff --git a/src/shared/cplusplus/CoreTypes.h b/src/shared/cplusplus/CoreTypes.h index dc70f06ddf6..42d69b4cb39 100644 --- a/src/shared/cplusplus/CoreTypes.h +++ b/src/shared/cplusplus/CoreTypes.h @@ -186,10 +186,10 @@ private: class CPLUSPLUS_EXPORT PointerToMemberType: public Type { public: - PointerToMemberType(Name *memberName, const FullySpecifiedType &elementType); + PointerToMemberType(const Name *memberName, const FullySpecifiedType &elementType); virtual ~PointerToMemberType(); - Name *memberName() const; + const Name *memberName() const; FullySpecifiedType elementType() const; virtual bool isEqualTo(const Type *other) const; @@ -205,7 +205,7 @@ protected: virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const; private: - Name *_memberName; + const Name *_memberName; FullySpecifiedType _elementType; }; @@ -262,10 +262,10 @@ private: class CPLUSPLUS_EXPORT NamedType: public Type { public: - NamedType(Name *name); + NamedType(const Name *name); virtual ~NamedType(); - Name *name() const; + const Name *name() const; virtual bool isEqualTo(const Type *other) const; @@ -280,7 +280,7 @@ protected: virtual bool matchType0(const Type *otherType, TypeMatcher *matcher) const; private: - Name *_name; + const Name *_name; }; } // end of namespace CPlusPlus diff --git a/src/shared/cplusplus/Name.cpp b/src/shared/cplusplus/Name.cpp index 6354382551d..b185409cf6b 100644 --- a/src/shared/cplusplus/Name.cpp +++ b/src/shared/cplusplus/Name.cpp @@ -79,14 +79,14 @@ bool Name::isQualifiedNameId() const bool Name::isSelectorNameId() const { return asSelectorNameId() != 0; } -void Name::accept(NameVisitor *visitor) +void Name::accept(NameVisitor *visitor) const { if (visitor->preVisit(this)) accept0(visitor); visitor->postVisit(this); } -void Name::accept(Name *name, NameVisitor *visitor) +void Name::accept(const Name *name, NameVisitor *visitor) { if (! name) return; diff --git a/src/shared/cplusplus/Name.h b/src/shared/cplusplus/Name.h index 8559b6ea2ee..ea740bd2497 100644 --- a/src/shared/cplusplus/Name.h +++ b/src/shared/cplusplus/Name.h @@ -78,21 +78,13 @@ public: virtual const QualifiedNameId *asQualifiedNameId() const { return 0; } virtual const SelectorNameId *asSelectorNameId() const { return 0; } - virtual NameId *asNameId() { return 0; } - virtual TemplateNameId *asTemplateNameId() { return 0; } - virtual DestructorNameId *asDestructorNameId() { return 0; } - virtual OperatorNameId *asOperatorNameId() { return 0; } - virtual ConversionNameId *asConversionNameId() { return 0; } - virtual QualifiedNameId *asQualifiedNameId() { return 0; } - virtual SelectorNameId *asSelectorNameId() { return 0; } - virtual bool isEqualTo(const Name *other) const = 0; - void accept(NameVisitor *visitor); - static void accept(Name *name, NameVisitor *visitor); + void accept(NameVisitor *visitor) const; + static void accept(const Name *name, NameVisitor *visitor); protected: - virtual void accept0(NameVisitor *visitor) = 0; + virtual void accept0(NameVisitor *visitor) const = 0; }; } // end of namespace CPlusPlus diff --git a/src/shared/cplusplus/NameVisitor.cpp b/src/shared/cplusplus/NameVisitor.cpp index 29630661d78..fe9d5cda09b 100644 --- a/src/shared/cplusplus/NameVisitor.cpp +++ b/src/shared/cplusplus/NameVisitor.cpp @@ -57,7 +57,5 @@ NameVisitor::NameVisitor() NameVisitor::~NameVisitor() { } -void NameVisitor::accept(Name *name) +void NameVisitor::accept(const Name *name) { Name::accept(name, this); } - - diff --git a/src/shared/cplusplus/NameVisitor.h b/src/shared/cplusplus/NameVisitor.h index f8889b7d7f6..d567c30be8b 100644 --- a/src/shared/cplusplus/NameVisitor.h +++ b/src/shared/cplusplus/NameVisitor.h @@ -63,18 +63,18 @@ public: NameVisitor(); virtual ~NameVisitor(); - void accept(Name *name); + void accept(const Name *name); - virtual bool preVisit(Name *) { return true; } - virtual void postVisit(Name *) {} + virtual bool preVisit(const Name *) { return true; } + virtual void postVisit(const Name *) {} - virtual void visit(NameId *) {} - virtual void visit(TemplateNameId *) {} - virtual void visit(DestructorNameId *) {} - virtual void visit(OperatorNameId *) {} - virtual void visit(ConversionNameId *) {} - virtual void visit(QualifiedNameId *) {} - virtual void visit(SelectorNameId *) {} + virtual void visit(const NameId *) {} + virtual void visit(const TemplateNameId *) {} + virtual void visit(const DestructorNameId *) {} + virtual void visit(const OperatorNameId *) {} + virtual void visit(const ConversionNameId *) {} + virtual void visit(const QualifiedNameId *) {} + virtual void visit(const SelectorNameId *) {} }; } // end of namespace CPlusPlus diff --git a/src/shared/cplusplus/Names.cpp b/src/shared/cplusplus/Names.cpp index 65703f804b3..4bc64f497d7 100644 --- a/src/shared/cplusplus/Names.cpp +++ b/src/shared/cplusplus/Names.cpp @@ -54,51 +54,42 @@ using namespace CPlusPlus; -QualifiedNameId::QualifiedNameId(Name *const names[], +QualifiedNameId::QualifiedNameId(const Name *const *names, unsigned nameCount, bool isGlobal) - : _names(0), - _nameCount(nameCount), + : _names(names, names + nameCount), _isGlobal(isGlobal) -{ - if (_nameCount) { - _names = new Name *[_nameCount]; - std::copy(&names[0], &names[nameCount], _names); - } -} +{ } QualifiedNameId::~QualifiedNameId() -{ delete[] _names; } +{ } -void QualifiedNameId::accept0(NameVisitor *visitor) +void QualifiedNameId::accept0(NameVisitor *visitor) const { visitor->visit(this); } const Identifier *QualifiedNameId::identifier() const { - if (Name *u = unqualifiedNameId()) + if (const Name *u = unqualifiedNameId()) return u->identifier(); return 0; } unsigned QualifiedNameId::nameCount() const -{ return _nameCount; } +{ return _names.size(); } -Name *QualifiedNameId::nameAt(unsigned index) const +const Name *QualifiedNameId::nameAt(unsigned index) const { return _names[index]; } -Name *const *QualifiedNameId::names() const -{ return _names; } - bool QualifiedNameId::isGlobal() const { return _isGlobal; } -Name *QualifiedNameId::unqualifiedNameId() const +const Name *QualifiedNameId::unqualifiedNameId() const { - if (! _nameCount) + if (_names.empty()) return 0; - return _names[_nameCount - 1]; + return _names.back(); } bool QualifiedNameId::isEqualTo(const Name *other) const @@ -113,8 +104,8 @@ bool QualifiedNameId::isEqualTo(const Name *other) const if (count != q->nameCount()) return false; for (unsigned i = 0; i < count; ++i) { - Name *l = nameAt(i); - Name *r = q->nameAt(i); + const Name *l = nameAt(i); + const Name *r = q->nameAt(i); if (! l->isEqualTo(r)) return false; } @@ -129,7 +120,7 @@ NameId::NameId(const Identifier *identifier) NameId::~NameId() { } -void NameId::accept0(NameVisitor *visitor) +void NameId::accept0(NameVisitor *visitor) const { visitor->visit(this); } const Identifier *NameId::identifier() const @@ -152,7 +143,7 @@ DestructorNameId::DestructorNameId(const Identifier *identifier) DestructorNameId::~DestructorNameId() { } -void DestructorNameId::accept0(NameVisitor *visitor) +void DestructorNameId::accept0(NameVisitor *visitor) const { visitor->visit(this); } const Identifier *DestructorNameId::identifier() const @@ -169,37 +160,27 @@ bool DestructorNameId::isEqualTo(const Name *other) const } TemplateNameId::TemplateNameId(const Identifier *identifier, - const FullySpecifiedType templateArguments[], - unsigned templateArgumentCount) + const FullySpecifiedType templateArguments[], + unsigned templateArgumentCount) : _identifier(identifier), - _templateArguments(0), - _templateArgumentCount(templateArgumentCount) -{ - if (_templateArgumentCount) { - _templateArguments = new FullySpecifiedType[_templateArgumentCount]; - std::copy(&templateArguments[0], &templateArguments[_templateArgumentCount], - _templateArguments); - } -} + _templateArguments(templateArguments, templateArguments + templateArgumentCount) +{ } TemplateNameId::~TemplateNameId() -{ delete[] _templateArguments; } +{ } -void TemplateNameId::accept0(NameVisitor *visitor) +void TemplateNameId::accept0(NameVisitor *visitor) const { visitor->visit(this); } const Identifier *TemplateNameId::identifier() const { return _identifier; } unsigned TemplateNameId::templateArgumentCount() const -{ return _templateArgumentCount; } +{ return _templateArguments.size(); } const FullySpecifiedType &TemplateNameId::templateArgumentAt(unsigned index) const { return _templateArguments[index]; } -const FullySpecifiedType *TemplateNameId::templateArguments() const -{ return _templateArguments; } - bool TemplateNameId::isEqualTo(const Name *other) const { const TemplateNameId *t = other->asTemplateNameId(); @@ -209,9 +190,9 @@ bool TemplateNameId::isEqualTo(const Name *other) const const Identifier *r = t->identifier(); if (! l->isEqualTo(r)) return false; - if (_templateArgumentCount != t->_templateArgumentCount) + if (templateArgumentCount() != t->templateArgumentCount()) return false; - for (unsigned i = 0; i < _templateArgumentCount; ++i) { + for (unsigned i = 0; i < templateArgumentCount(); ++i) { const FullySpecifiedType &l = _templateArguments[i]; const FullySpecifiedType &r = t->_templateArguments[i]; if (! l.isEqualTo(r)) @@ -227,7 +208,7 @@ OperatorNameId::OperatorNameId(int kind) OperatorNameId::~OperatorNameId() { } -void OperatorNameId::accept0(NameVisitor *visitor) +void OperatorNameId::accept0(NameVisitor *visitor) const { visitor->visit(this); } int OperatorNameId::kind() const @@ -251,7 +232,7 @@ ConversionNameId::ConversionNameId(const FullySpecifiedType &type) ConversionNameId::~ConversionNameId() { } -void ConversionNameId::accept0(NameVisitor *visitor) +void ConversionNameId::accept0(NameVisitor *visitor) const { visitor->visit(this); } FullySpecifiedType ConversionNameId::type() const @@ -268,42 +249,33 @@ bool ConversionNameId::isEqualTo(const Name *other) const return _type.isEqualTo(c->type()); } -SelectorNameId::SelectorNameId(Name *const names[], +SelectorNameId::SelectorNameId(const Name *const *names, unsigned nameCount, bool hasArguments) - : _names(0), - _nameCount(nameCount), + : _names(names, names + nameCount), _hasArguments(hasArguments) -{ - if (_nameCount) { - _names = new Name *[_nameCount]; - std::copy(&names[0], &names[nameCount], _names); - } -} +{ } SelectorNameId::~SelectorNameId() -{ delete[] _names; } +{ } -void SelectorNameId::accept0(NameVisitor *visitor) +void SelectorNameId::accept0(NameVisitor *visitor) const { visitor->visit(this); } const Identifier *SelectorNameId::identifier() const { - if (! _nameCount) + if (_names.empty()) return 0; return nameAt(0)->identifier(); } unsigned SelectorNameId::nameCount() const -{ return _nameCount; } +{ return _names.size(); } -Name *SelectorNameId::nameAt(unsigned index) const +const Name *SelectorNameId::nameAt(unsigned index) const { return _names[index]; } -Name *const *SelectorNameId::names() const -{ return _names; } - bool SelectorNameId::hasArguments() const { return _hasArguments; } @@ -319,8 +291,8 @@ bool SelectorNameId::isEqualTo(const Name *other) const if (count != q->nameCount()) return false; for (unsigned i = 0; i < count; ++i) { - Name *l = nameAt(i); - Name *r = q->nameAt(i); + const Name *l = nameAt(i); + const Name *r = q->nameAt(i); if (! l->isEqualTo(r)) return false; } diff --git a/src/shared/cplusplus/Names.h b/src/shared/cplusplus/Names.h index 5629747de3f..9bae0e07fb5 100644 --- a/src/shared/cplusplus/Names.h +++ b/src/shared/cplusplus/Names.h @@ -52,24 +52,22 @@ #include "CPlusPlusForwardDeclarations.h" #include "Name.h" #include "FullySpecifiedType.h" +#include namespace CPlusPlus { class CPLUSPLUS_EXPORT QualifiedNameId: public Name { public: - QualifiedNameId(Name *const names[], - unsigned nameCount, - bool isGlobal = false); + QualifiedNameId(const Name *const *names, unsigned nameCount, bool isGlobal = false); virtual ~QualifiedNameId(); virtual const Identifier *identifier() const; unsigned nameCount() const; - Name *nameAt(unsigned index) const; - Name *const *names() const; - Name *unqualifiedNameId() const; - + const Name *nameAt(unsigned index) const; + const Name *unqualifiedNameId() const; + const Name *const *names() const { return &_names[0]; } // ### remove me bool isGlobal() const; virtual bool isEqualTo(const Name *other) const; @@ -77,15 +75,11 @@ public: virtual const QualifiedNameId *asQualifiedNameId() const { return this; } - virtual QualifiedNameId *asQualifiedNameId() - { return this; } - protected: - virtual void accept0(NameVisitor *visitor); + virtual void accept0(NameVisitor *visitor) const; private: - Name **_names; - unsigned _nameCount; + std::vector _names; bool _isGlobal; }; @@ -102,11 +96,8 @@ public: virtual const NameId *asNameId() const { return this; } - virtual NameId *asNameId() - { return this; } - protected: - virtual void accept0(NameVisitor *visitor); + virtual void accept0(NameVisitor *visitor) const; private: const Identifier *_identifier; @@ -125,11 +116,8 @@ public: virtual const DestructorNameId *asDestructorNameId() const { return this; } - virtual DestructorNameId *asDestructorNameId() - { return this; } - protected: - virtual void accept0(NameVisitor *visitor); + virtual void accept0(NameVisitor *visitor) const; private: const Identifier *_identifier; @@ -148,23 +136,18 @@ public: // ### find a better name unsigned templateArgumentCount() const; const FullySpecifiedType &templateArgumentAt(unsigned index) const; - const FullySpecifiedType *templateArguments() const; virtual bool isEqualTo(const Name *other) const; virtual const TemplateNameId *asTemplateNameId() const { return this; } - virtual TemplateNameId *asTemplateNameId() - { return this; } - protected: - virtual void accept0(NameVisitor *visitor); + virtual void accept0(NameVisitor *visitor) const; private: const Identifier *_identifier; - FullySpecifiedType *_templateArguments; - unsigned _templateArgumentCount; + std::vector _templateArguments; }; class CPLUSPLUS_EXPORT OperatorNameId: public Name @@ -236,11 +219,8 @@ public: virtual const OperatorNameId *asOperatorNameId() const { return this; } - virtual OperatorNameId *asOperatorNameId() - { return this; } - protected: - virtual void accept0(NameVisitor *visitor); + virtual void accept0(NameVisitor *visitor) const; private: int _kind; @@ -260,11 +240,8 @@ public: virtual const ConversionNameId *asConversionNameId() const { return this; } - virtual ConversionNameId *asConversionNameId() - { return this; } - protected: - virtual void accept0(NameVisitor *visitor); + virtual void accept0(NameVisitor *visitor) const; private: FullySpecifiedType _type; @@ -273,17 +250,13 @@ private: class CPLUSPLUS_EXPORT SelectorNameId: public Name { public: - SelectorNameId(Name *const names[], - unsigned nameCount, - bool hasArguments); + SelectorNameId(const Name *const *names, unsigned nameCount, bool hasArguments); virtual ~SelectorNameId(); virtual const Identifier *identifier() const; unsigned nameCount() const; - Name *nameAt(unsigned index) const; - Name *const *names() const; - + const Name *nameAt(unsigned index) const; bool hasArguments() const; virtual bool isEqualTo(const Name *other) const; @@ -291,15 +264,11 @@ public: virtual const SelectorNameId *asSelectorNameId() const { return this; } - virtual SelectorNameId *asSelectorNameId() - { return this; } - protected: - virtual void accept0(NameVisitor *visitor); + virtual void accept0(NameVisitor *visitor) const; private: - Name **_names; - unsigned _nameCount; + std::vector _names; bool _hasArguments; }; diff --git a/src/shared/cplusplus/Scope.cpp b/src/shared/cplusplus/Scope.cpp index 76d09eb2dcf..0fae6db3919 100644 --- a/src/shared/cplusplus/Scope.cpp +++ b/src/shared/cplusplus/Scope.cpp @@ -204,12 +204,12 @@ void Scope::enterSymbol(Symbol *symbol) } } -Symbol *Scope::lookat(Name *name) const +Symbol *Scope::lookat(const Name *name) const { if (! name) return 0; - else if (OperatorNameId *opId = name->asOperatorNameId()) + else if (const OperatorNameId *opId = name->asOperatorNameId()) return lookat(opId->kind()); else if (const Identifier *id = name->identifier()) @@ -227,21 +227,21 @@ Symbol *Scope::lookat(const Identifier *id) const const unsigned h = id->hashCode() % _hashSize; Symbol *symbol = _hash[h]; for (; symbol; symbol = symbol->_next) { - Name *identity = symbol->identity(); + const Name *identity = symbol->identity(); if (! identity) { continue; - } else if (NameId *nameId = identity->asNameId()) { + } else if (const NameId *nameId = identity->asNameId()) { if (nameId->identifier()->isEqualTo(id)) break; - } else if (TemplateNameId *t = identity->asTemplateNameId()) { + } else if (const TemplateNameId *t = identity->asTemplateNameId()) { if (t->identifier()->isEqualTo(id)) break; - } else if (DestructorNameId *d = identity->asDestructorNameId()) { + } else if (const DestructorNameId *d = identity->asDestructorNameId()) { if (d->identifier()->isEqualTo(id)) break; } else if (identity->isQualifiedNameId()) { - assert(0); - } else if (SelectorNameId *selectorNameId = identity->asSelectorNameId()) { + return 0; + } else if (const SelectorNameId *selectorNameId = identity->asSelectorNameId()) { if (selectorNameId->identifier()->isEqualTo(id)) break; } @@ -257,8 +257,8 @@ Symbol *Scope::lookat(int operatorId) const const unsigned h = operatorId % _hashSize; Symbol *symbol = _hash[h]; for (; symbol; symbol = symbol->_next) { - Name *identity = symbol->identity(); - if (OperatorNameId *op = identity->asOperatorNameId()) { + const Name *identity = symbol->identity(); + if (const OperatorNameId *op = identity->asOperatorNameId()) { if (op->kind() == operatorId) break; } diff --git a/src/shared/cplusplus/Scope.h b/src/shared/cplusplus/Scope.h index 8587ade8c58..04f735bf2a6 100644 --- a/src/shared/cplusplus/Scope.h +++ b/src/shared/cplusplus/Scope.h @@ -129,7 +129,7 @@ public: /// Returns the last Symbol in the scope. iterator lastSymbol() const; - Symbol *lookat(Name *name) const; + Symbol *lookat(const Name *name) const; Symbol *lookat(const Identifier *id) const; Symbol *lookat(int operatorId) const; diff --git a/src/shared/cplusplus/Semantic.cpp b/src/shared/cplusplus/Semantic.cpp index 74d870a91c0..57ac5fe99f3 100644 --- a/src/shared/cplusplus/Semantic.cpp +++ b/src/shared/cplusplus/Semantic.cpp @@ -132,7 +132,7 @@ void Semantic::check(DeclarationAST *declaration, Scope *scope, TemplateParamete { d->checkDeclaration->check(declaration, scope, templateParameters); } FullySpecifiedType Semantic::check(DeclaratorAST *declarator, const FullySpecifiedType &type, - Scope *scope, Name **name) + Scope *scope, const Name **name) { return d->checkDeclarator->check(declarator, type, scope, name); } FullySpecifiedType Semantic::check(PtrOperatorListAST *ptrOperators, const FullySpecifiedType &type, @@ -154,13 +154,13 @@ FullySpecifiedType Semantic::check(ExpressionAST *expression, Scope *scope) void Semantic::check(StatementAST *statement, Scope *scope) { d->checkStatement->check(statement, scope); } -Name *Semantic::check(NameAST *name, Scope *scope) +const Name *Semantic::check(NameAST *name, Scope *scope) { return d->checkName->check(name, scope); } -Name *Semantic::check(NestedNameSpecifierListAST *name, Scope *scope) +const Name *Semantic::check(NestedNameSpecifierListAST *name, Scope *scope) { return d->checkName->check(name, scope); } -Name *Semantic::check(ObjCSelectorAST *args, Scope *scope) +const Name *Semantic::check(ObjCSelectorAST *args, Scope *scope) { return d->checkName->check(args, scope); } bool Semantic::skipFunctionBodies() const diff --git a/src/shared/cplusplus/Semantic.h b/src/shared/cplusplus/Semantic.h index f6a4e528f48..6ca0b81c70b 100644 --- a/src/shared/cplusplus/Semantic.h +++ b/src/shared/cplusplus/Semantic.h @@ -70,7 +70,7 @@ public: FullySpecifiedType check(SpecifierListAST *specifier, Scope *scope); FullySpecifiedType check(DeclaratorAST *declarator, const FullySpecifiedType &type, - Scope *scope, Name **name = 0); // ### ugly + Scope *scope, const Name **name = 0); // ### ugly FullySpecifiedType check(PtrOperatorListAST *ptrOperators, const FullySpecifiedType &type, Scope *scope); @@ -83,11 +83,11 @@ public: void check(StatementAST *statement, Scope *scope); - Name *check(NameAST *name, Scope *scope); + const Name *check(NameAST *name, Scope *scope); - Name *check(NestedNameSpecifierListAST *name, Scope *scope); + const Name *check(NestedNameSpecifierListAST *name, Scope *scope); - Name *check(ObjCSelectorAST *args, Scope *scope); + const Name *check(ObjCSelectorAST *args, Scope *scope); FullySpecifiedType check(ObjCTypeNameAST *typeName, Scope *scope); void check(ObjCMessageArgumentDeclarationAST *arg, Scope *scope); diff --git a/src/shared/cplusplus/Symbol.cpp b/src/shared/cplusplus/Symbol.cpp index 57e74e13839..221af1ad828 100644 --- a/src/shared/cplusplus/Symbol.cpp +++ b/src/shared/cplusplus/Symbol.cpp @@ -70,7 +70,7 @@ public: virtual ~HashCode() { } - unsigned operator()(Name *name) + unsigned operator()(const Name *name) { unsigned previousValue = switchValue(0); accept(name); @@ -85,25 +85,25 @@ protected: return previousValue; } - virtual void visit(NameId *name) + virtual void visit(const NameId *name) { _value = name->identifier()->hashCode(); } - virtual void visit(TemplateNameId *name) + virtual void visit(const TemplateNameId *name) { _value = name->identifier()->hashCode(); } - virtual void visit(DestructorNameId *name) + virtual void visit(const DestructorNameId *name) { _value = name->identifier()->hashCode(); } - virtual void visit(OperatorNameId *name) + virtual void visit(const OperatorNameId *name) { _value = unsigned(name->kind()); } - virtual void visit(ConversionNameId *) + virtual void visit(const ConversionNameId *) { _value = 0; } // ### TODO: implement me - virtual void visit(QualifiedNameId *name) + virtual void visit(const QualifiedNameId *name) { _value = operator()(name->unqualifiedNameId()); } - virtual void visit(SelectorNameId *name) + virtual void visit(const SelectorNameId *name) { _value = name->identifier()->hashCode(); } private: @@ -120,47 +120,47 @@ public: virtual ~IdentityForName() { } - Name *operator()(Name *name) + const Name *operator()(const Name *name) { - Name *previousIdentity = switchIdentity(0); + const Name *previousIdentity = switchIdentity(0); accept(name); return switchIdentity(previousIdentity); } protected: - Name *switchIdentity(Name *identity) + const Name *switchIdentity(const Name *identity) { - Name *previousIdentity = _identity; + const Name *previousIdentity = _identity; _identity = identity; return previousIdentity; } - virtual void visit(NameId *name) + virtual void visit(const NameId *name) { _identity = name; } - virtual void visit(TemplateNameId *name) + virtual void visit(const TemplateNameId *name) { _identity = name; } - virtual void visit(DestructorNameId *name) + virtual void visit(const DestructorNameId *name) { _identity = name; } - virtual void visit(OperatorNameId *name) + virtual void visit(const OperatorNameId *name) { _identity = name; } - virtual void visit(ConversionNameId *name) + virtual void visit(const ConversionNameId *name) { _identity = name; } - virtual void visit(QualifiedNameId *name) + virtual void visit(const QualifiedNameId *name) { _identity = name->unqualifiedNameId(); } - virtual void visit(SelectorNameId *name) + virtual void visit(const SelectorNameId *name) { _identity = name; } private: - Name *_identity; + const Name *_identity; }; -Symbol::Symbol(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +Symbol::Symbol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : _control(translationUnit->control()), _sourceLocation(sourceLocation), _sourceOffset(0), @@ -280,16 +280,16 @@ unsigned Symbol::endOffset() const void Symbol::setEndOffset(unsigned offset) { _endOffset = offset; } -Name *Symbol::identity() const +const Name *Symbol::identity() const { IdentityForName id; return id(_name); } -Name *Symbol::name() const +const Name *Symbol::name() const { return _name; } -void Symbol::setName(Name *name) +void Symbol::setName(const Name *name) { _name = name; diff --git a/src/shared/cplusplus/Symbol.h b/src/shared/cplusplus/Symbol.h index 7230a8e0c8d..e8615dc75b8 100644 --- a/src/shared/cplusplus/Symbol.h +++ b/src/shared/cplusplus/Symbol.h @@ -81,7 +81,7 @@ public: public: /// Constructs a Symbol with the given source location, name and translation unit. - Symbol(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + Symbol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); /// Destroy this Symbol. virtual ~Symbol(); @@ -121,10 +121,10 @@ public: void getEndPosition(unsigned *line, unsigned *column = 0, const StringLiteral **fileId = 0) const; /// Returns this Symbol's name. - Name *name() const; + const Name *name() const; /// Sets this Symbol's name. - void setName(Name *name); // ### dangerous + void setName(const Name *name); // ### dangerous /// Returns this Symbol's (optional) identifier const Identifier *identifier() const; @@ -282,7 +282,7 @@ public: /// Returns this Symbol's index. unsigned index() const; - Name *identity() const; + const Name *identity() const; bool isGenerated() const; @@ -320,7 +320,7 @@ private: unsigned _sourceOffset; unsigned _startOffset; unsigned _endOffset; - Name *_name; + const Name *_name; unsigned _hashCode; int _storage; int _visibility; diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp index 8c044ef03ca..22098f82b56 100644 --- a/src/shared/cplusplus/Symbols.cpp +++ b/src/shared/cplusplus/Symbols.cpp @@ -76,7 +76,7 @@ Scope *TemplateParameters::scope() const { return _scope; } UsingNamespaceDirective::UsingNamespaceDirective(TranslationUnit *translationUnit, - unsigned sourceLocation, Name *name) + unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name) { } @@ -90,7 +90,7 @@ void UsingNamespaceDirective::visitSymbol0(SymbolVisitor *visitor) { visitor->visit(this); } UsingDeclaration::UsingDeclaration(TranslationUnit *translationUnit, - unsigned sourceLocation, Name *name) + unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name) { } @@ -103,7 +103,7 @@ FullySpecifiedType UsingDeclaration::type() const void UsingDeclaration::visitSymbol0(SymbolVisitor *visitor) { visitor->visit(this); } -Declaration::Declaration(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +Declaration::Declaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name), _templateParameters(0) { } @@ -126,7 +126,7 @@ FullySpecifiedType Declaration::type() const void Declaration::visitSymbol0(SymbolVisitor *visitor) { visitor->visit(this); } -Argument::Argument(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +Argument::Argument(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name), _initializer(false) { } @@ -149,7 +149,7 @@ FullySpecifiedType Argument::type() const void Argument::visitSymbol0(SymbolVisitor *visitor) { visitor->visit(this); } -Function::Function(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +Function::Function(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : ScopedSymbol(translationUnit, sourceLocation, name), _templateParameters(0), _flags(0) @@ -203,8 +203,8 @@ bool Function::isEqualTo(const Type *other) const else if (isVolatile() != o->isVolatile()) return false; - Name *l = identity(); - Name *r = o->identity(); + const Name *l = identity(); + const Name *r = o->identity(); if (l == r || (l && l->isEqualTo(r))) { if (_arguments->symbolCount() != o->_arguments->symbolCount()) return false; @@ -315,7 +315,7 @@ void Function::visitSymbol0(SymbolVisitor *visitor) } } -ScopedSymbol::ScopedSymbol(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +ScopedSymbol::ScopedSymbol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name) { _members = new Scope(this); } @@ -361,7 +361,7 @@ void Block::visitSymbol0(SymbolVisitor *visitor) } } -Enum::Enum(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +Enum::Enum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : ScopedSymbol(translationUnit, sourceLocation, name) { } @@ -376,8 +376,8 @@ bool Enum::isEqualTo(const Type *other) const const Enum *o = other->asEnumType(); if (! o) return false; - Name *l = identity(); - Name *r = o->identity(); + const Name *l = identity(); + const Name *r = o->identity(); if (l == r) return true; else if (! l) @@ -405,7 +405,7 @@ void Enum::visitSymbol0(SymbolVisitor *visitor) } } -Namespace::Namespace(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +Namespace::Namespace(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : ScopedSymbol(translationUnit, sourceLocation, name) { } @@ -417,8 +417,8 @@ bool Namespace::isEqualTo(const Type *other) const const Namespace *o = other->asNamespaceType(); if (! o) return false; - Name *l = identity(); - Name *r = o->identity(); + const Name *l = identity(); + const Name *r = o->identity(); if (l == r || (l && l->isEqualTo(r))) return true; return false; @@ -447,7 +447,7 @@ void Namespace::visitSymbol0(SymbolVisitor *visitor) FullySpecifiedType Namespace::type() const { return FullySpecifiedType(const_cast(this)); } -BaseClass::BaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +BaseClass::BaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name), _isVirtual(false) { } @@ -468,7 +468,7 @@ void BaseClass::visitSymbol0(SymbolVisitor *visitor) { visitor->visit(this); } ForwardClassDeclaration::ForwardClassDeclaration(TranslationUnit *translationUnit, - unsigned sourceLocation, Name *name) + unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name), _templateParameters(0) { } @@ -512,7 +512,7 @@ bool ForwardClassDeclaration::matchType0(const Type *otherType, TypeMatcher *mat return false; } -Class::Class(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +Class::Class(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : ScopedSymbol(translationUnit, sourceLocation, name), _key(ClassKey), _templateParameters(0) @@ -581,8 +581,8 @@ bool Class::isEqualTo(const Type *other) const const Class *o = other->asClassType(); if (! o) return false; - Name *l = identity(); - Name *r = o->identity(); + const Name *l = identity(); + const Name *r = o->identity(); if (l == r || (l && l->isEqualTo(r))) return true; else @@ -601,7 +601,7 @@ void Class::visitSymbol0(SymbolVisitor *visitor) } } -ObjCBaseClass::ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +ObjCBaseClass::ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name) { } @@ -614,7 +614,7 @@ FullySpecifiedType ObjCBaseClass::type() const void ObjCBaseClass::visitSymbol0(SymbolVisitor *visitor) { visitor->visit(this); } -ObjCBaseProtocol::ObjCBaseProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +ObjCBaseProtocol::ObjCBaseProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : Symbol(translationUnit, sourceLocation, name) { } @@ -627,7 +627,7 @@ FullySpecifiedType ObjCBaseProtocol::type() const void ObjCBaseProtocol::visitSymbol0(SymbolVisitor *visitor) { visitor->visit(this); } -ObjCClass::ObjCClass(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name): +ObjCClass::ObjCClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name): ScopedSymbol(translationUnit, sourceLocation, name), _isInterface(false), _categoryName(0), @@ -647,8 +647,8 @@ bool ObjCClass::isEqualTo(const Type *other) const if (!o) return false; - Name *l = identity(); - Name *r = o->identity(); + const Name *l = identity(); + const Name *r = o->identity(); if (l == r || (l && l->isEqualTo(r))) return true; else @@ -680,7 +680,7 @@ bool ObjCClass::matchType0(const Type *otherType, TypeMatcher *matcher) const return false; } -ObjCProtocol::ObjCProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name): +ObjCProtocol::ObjCProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name): ScopedSymbol(translationUnit, sourceLocation, name) { } @@ -697,8 +697,8 @@ bool ObjCProtocol::isEqualTo(const Type *other) const if (!o) return false; - Name *l = identity(); - Name *r = o->identity(); + const Name *l = identity(); + const Name *r = o->identity(); if (l == r || (l && l->isEqualTo(r))) return true; else @@ -724,7 +724,8 @@ bool ObjCProtocol::matchType0(const Type *otherType, TypeMatcher *matcher) const return false; } -ObjCForwardClassDeclaration::ObjCForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name): +ObjCForwardClassDeclaration::ObjCForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, + const Name *name): Symbol(translationUnit, sourceLocation, name) { } @@ -763,7 +764,8 @@ bool ObjCForwardClassDeclaration::matchType0(const Type *otherType, TypeMatcher return false; } -ObjCForwardProtocolDeclaration::ObjCForwardProtocolDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name): +ObjCForwardProtocolDeclaration::ObjCForwardProtocolDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, + const Name *name): Symbol(translationUnit, sourceLocation, name) { } @@ -802,7 +804,7 @@ bool ObjCForwardProtocolDeclaration::matchType0(const Type *otherType, TypeMatch return false; } -ObjCMethod::ObjCMethod(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name) +ObjCMethod::ObjCMethod(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name) : ScopedSymbol(translationUnit, sourceLocation, name), _flags(0) { _arguments = new Scope(this); } @@ -818,8 +820,8 @@ bool ObjCMethod::isEqualTo(const Type *other) const if (! o) return false; - Name *l = identity(); - Name *r = o->identity(); + const Name *l = identity(); + const Name *r = o->identity(); if (l == r || (l && l->isEqualTo(r))) { if (_arguments->symbolCount() != o->_arguments->symbolCount()) return false; @@ -902,7 +904,7 @@ void ObjCMethod::visitSymbol0(SymbolVisitor *visitor) ObjCPropertyDeclaration::ObjCPropertyDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, - Name *name): + const Name *name): Symbol(translationUnit, sourceLocation, name), _propertyAttributes(None), _getterName(0), diff --git a/src/shared/cplusplus/Symbols.h b/src/shared/cplusplus/Symbols.h index 022846d3c02..a75d09e0ffd 100644 --- a/src/shared/cplusplus/Symbols.h +++ b/src/shared/cplusplus/Symbols.h @@ -76,7 +76,7 @@ private: class CPLUSPLUS_EXPORT UsingNamespaceDirective: public Symbol { public: - UsingNamespaceDirective(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + UsingNamespaceDirective(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~UsingNamespaceDirective(); // Symbol's interface @@ -95,7 +95,7 @@ protected: class CPLUSPLUS_EXPORT UsingDeclaration: public Symbol { public: - UsingDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + UsingDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~UsingDeclaration(); // Symbol's interface @@ -114,7 +114,7 @@ protected: class CPLUSPLUS_EXPORT Declaration: public Symbol { public: - Declaration(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + Declaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~Declaration(); TemplateParameters *templateParameters() const; @@ -142,7 +142,7 @@ private: class CPLUSPLUS_EXPORT Argument: public Symbol { public: - Argument(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + Argument(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~Argument(); void setType(const FullySpecifiedType &type); @@ -170,7 +170,7 @@ private: class CPLUSPLUS_EXPORT ScopedSymbol: public Symbol { public: - ScopedSymbol(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ScopedSymbol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ScopedSymbol(); unsigned memberCount() const; @@ -210,7 +210,7 @@ protected: class CPLUSPLUS_EXPORT ForwardClassDeclaration: public Symbol, public Type { public: - ForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ForwardClassDeclaration(); TemplateParameters *templateParameters() const; @@ -244,7 +244,7 @@ private: class CPLUSPLUS_EXPORT Enum: public ScopedSymbol, public Type { public: - Enum(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + Enum(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~Enum(); // Symbol's interface @@ -281,7 +281,7 @@ public: }; public: - Function(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + Function(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~Function(); bool isNormal() const; @@ -372,7 +372,7 @@ private: class CPLUSPLUS_EXPORT Namespace: public ScopedSymbol, public Type { public: - Namespace(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + Namespace(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~Namespace(); // Symbol's interface @@ -402,7 +402,7 @@ protected: class CPLUSPLUS_EXPORT BaseClass: public Symbol { public: - BaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + BaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~BaseClass(); bool isVirtual() const; @@ -427,7 +427,7 @@ private: class CPLUSPLUS_EXPORT Class: public ScopedSymbol, public Type { public: - Class(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + Class(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~Class(); enum Key { @@ -484,7 +484,7 @@ private: class CPLUSPLUS_EXPORT ObjCBaseClass: public Symbol { public: - ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ObjCBaseClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ObjCBaseClass(); // Symbol's interface @@ -505,7 +505,7 @@ private: class CPLUSPLUS_EXPORT ObjCBaseProtocol: public Symbol { public: - ObjCBaseProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ObjCBaseProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ObjCBaseProtocol(); // Symbol's interface @@ -526,7 +526,7 @@ private: class CPLUSPLUS_EXPORT ObjCForwardProtocolDeclaration: public Symbol, public Type { public: - ObjCForwardProtocolDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ObjCForwardProtocolDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ObjCForwardProtocolDeclaration(); virtual FullySpecifiedType type() const; @@ -556,7 +556,7 @@ private: class CPLUSPLUS_EXPORT ObjCProtocol: public ScopedSymbol, public Type { public: - ObjCProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ObjCProtocol(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ObjCProtocol(); unsigned protocolCount() const @@ -598,7 +598,7 @@ private: class CPLUSPLUS_EXPORT ObjCForwardClassDeclaration: public Symbol, public Type { public: - ObjCForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ObjCForwardClassDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ObjCForwardClassDeclaration(); virtual FullySpecifiedType type() const; @@ -628,15 +628,15 @@ private: class CPLUSPLUS_EXPORT ObjCClass: public ScopedSymbol, public Type { public: - ObjCClass(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ObjCClass(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ObjCClass(); bool isInterface() const { return _isInterface; } void setInterface(bool isInterface) { _isInterface = isInterface; } bool isCategory() const { return _categoryName != 0; } - Name *categoryName() const { return _categoryName; } - void setCategoryName(Name *categoryName) { _categoryName = categoryName; } + const Name *categoryName() const { return _categoryName; } + void setCategoryName(const Name *categoryName) { _categoryName = categoryName; } ObjCBaseClass *baseClass() const { return _baseClass; } @@ -677,7 +677,7 @@ protected: private: bool _isInterface; - Name *_categoryName; + const Name *_categoryName; ObjCBaseClass * _baseClass; Array _protocols; }; @@ -685,7 +685,7 @@ private: class CPLUSPLUS_EXPORT ObjCMethod: public ScopedSymbol, public Type { public: - ObjCMethod(TranslationUnit *translationUnit, unsigned sourceLocation, Name *name); + ObjCMethod(TranslationUnit *translationUnit, unsigned sourceLocation, const Name *name); virtual ~ObjCMethod(); FullySpecifiedType returnType() const; @@ -760,7 +760,7 @@ public: public: ObjCPropertyDeclaration(TranslationUnit *translationUnit, unsigned sourceLocation, - Name *name); + const Name *name); virtual ~ObjCPropertyDeclaration(); bool hasAttribute(int attribute) const @@ -775,16 +775,16 @@ public: bool hasSetter() const { return hasAttribute(Setter); } - Name *getterName() const + const Name *getterName() const { return _getterName; } - void setGetterName(Name *getterName) + void setGetterName(const Name *getterName) { _getterName = getterName; } - Name *setterName() const + const Name *setterName() const { return _setterName; } - void setSetterName(Name *setterName) + void setSetterName(const Name *setterName) { _setterName = setterName; } void setType(const FullySpecifiedType &type) @@ -805,7 +805,8 @@ protected: private: FullySpecifiedType _type; int _propertyAttributes; - Name *_getterName, *_setterName; + const Name *_getterName; + const Name *_setterName; }; } // end of namespace CPlusPlus From 7d50367ba44518ab55aa40c98b351910611388c0 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Nov 2009 15:16:05 +0100 Subject: [PATCH 58/62] Improve visual appearance of DetailsWidget * Make toolswidget appear on hover. * Use a cached gradient in the background. * Remove layout fixup as that does not help on Linux and Windows anymore. Reevaluate after testing on Mac. Reviewed-by: dt --- src/libs/utils/detailswidget.cpp | 212 +++++++++++++++++-------------- src/libs/utils/detailswidget.h | 32 +++-- 2 files changed, 135 insertions(+), 109 deletions(-) diff --git a/src/libs/utils/detailswidget.cpp b/src/libs/utils/detailswidget.cpp index b0b9db7724c..982fbb2f822 100644 --- a/src/libs/utils/detailswidget.cpp +++ b/src/libs/utils/detailswidget.cpp @@ -9,31 +9,41 @@ using namespace Utils; -DetailsWidget::DetailsWidget(QWidget *parent) - : QWidget(parent), - m_summaryLabel(new QLabel(this)), - m_detailsButton(new DetailsButton(this)), - m_widget(0), - m_toolWidget(0), - m_grid(new QGridLayout(this)) +namespace { +const int MARGIN=8; +} +// This widget is using a grid layout and places the items +// in the following way: +// +// +------------+-------------------------+---------------+ +// + toolWidget | summaryLabel | detailsButton | +// +------------+-------------------------+---------------+ +// | | widget | +// +------------+-------------------------+---------------+ + +DetailsWidget::DetailsWidget(QWidget *parent) : + QWidget(parent), + m_detailsButton(new DetailsButton(this)), + m_grid(new QGridLayout(this)), + m_summaryLabel(new QLabel(this)), + m_toolWidget(0), + m_widget(0), + m_hovered(false) { - m_grid->setContentsMargins(4, 3, 4, 3); - m_summaryLabel->setTextInteractionFlags(Qt::TextSelectableByMouse); m_summaryLabel->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + m_summaryLabel->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN); - m_grid->addWidget(m_summaryLabel, 0, 0); - m_grid->addWidget(m_detailsButton, 0, 2, 1, 1, Qt::AlignBottom); + m_grid->setContentsMargins(0, 0, 0, 0); + m_grid->setSpacing(0); + m_grid->addWidget(m_summaryLabel, 0, 1); + m_grid->addWidget(m_detailsButton, 0, 2, 1, 1, Qt::AlignCenter); - m_dummyWidget = new QWidget(this); - m_dummyWidget->setMaximumHeight(4); - m_dummyWidget->setMaximumHeight(4); - m_dummyWidget->setVisible(false); - m_grid->addWidget(m_dummyWidget, 2, 0, 1, 1); + m_detailsButton->setEnabled(false); - connect(m_detailsButton, SIGNAL(clicked()), - this, SLOT(detailsButtonClicked())); + connect(m_detailsButton, SIGNAL(toggled(bool)), + this, SLOT(setExpanded(bool))); } DetailsWidget::~DetailsWidget() @@ -43,53 +53,36 @@ DetailsWidget::~DetailsWidget() void DetailsWidget::paintEvent(QPaintEvent *paintEvent) { - //TL--> ___________ <-- TR - // | | - //ML-> ______________| <--MM | <--MR - // | | - //BL-> |_________________________| <-- BR - - QWidget::paintEvent(paintEvent); - if (!m_detailsButton->isToggled()) - return; - - const QRect detailsGeometry = m_detailsButton->geometry(); - const QRect widgetGeometry = m_widget ? m_widget->geometry() : QRect(x(), y() + height(), width(), 0); - - QPoint tl(detailsGeometry.topLeft()); - tl += QPoint(-3, -3); - - QPoint tr(detailsGeometry.topRight()); - tr += QPoint(3, -3); - - QPoint mm(detailsGeometry.left() - 3, widgetGeometry.top() - 3); - - QPoint ml(1, mm.y()); - - QPoint mr(tr.x(), mm.y()); - - int bottom = geometry().height() - 3; - QPoint bl(1, bottom); - QPoint br(tr.x(), bottom); - QPainter p(this); - p.setRenderHint(QPainter::Antialiasing); - p.setPen(Qt::NoPen); - p.setBrush(palette().dark()); - p.drawRoundedRect(QRect(tl, br), 5, 5); - p.drawRoundedRect(QRect(ml, br), 5, 5); + const QRect paintArea(m_summaryLabel->geometry().topLeft(), + contentsRect().bottomRight()); + + if (!isExpanded()) { + if (m_collapsedPixmap.isNull() || + m_collapsedPixmap.size() != size()) + m_collapsedPixmap = cacheBackground(paintArea.size(), false); + p.drawPixmap(paintArea, m_collapsedPixmap); + } else { + if (m_expandedPixmap.isNull() || + m_expandedPixmap.size() != size()) + m_expandedPixmap = cacheBackground(paintArea.size(), true); + p.drawPixmap(paintArea, m_expandedPixmap); + } } -void DetailsWidget::detailsButtonClicked() +void DetailsWidget::enterEvent(QEvent * event) { - bool visible = m_detailsButton->isToggled(); - if (m_widget) - m_widget->setVisible(visible); - m_dummyWidget->setVisible(visible); - fixUpLayout(); + QWidget::enterEvent(event); + changeHoverState(true); +} + +void DetailsWidget::leaveEvent(QEvent * event) +{ + QWidget::leaveEvent(event); + changeHoverState(false); } void DetailsWidget::setSummaryText(const QString &text) @@ -102,15 +95,21 @@ QString DetailsWidget::summaryText() const return m_summaryLabel->text(); } -bool DetailsWidget::expanded() const +bool DetailsWidget::isExpanded() const { - return m_detailsButton->isToggled(); + if (!m_widget) + return false; + return m_widget->isVisible(); } -void DetailsWidget::setExpanded(bool v) +void DetailsWidget::setExpanded(bool visible) { - if (expanded() != v) - m_detailsButton->animateClick(); + if (!m_widget) + return; + + m_summaryLabel->setEnabled(!visible); + m_widget->setVisible(visible); + m_detailsButton->setChecked(visible); } QWidget *DetailsWidget::widget() const @@ -122,31 +121,40 @@ void DetailsWidget::setWidget(QWidget *widget) { if (m_widget == widget) return; - if (m_widget) { + + const bool wasExpanded(isExpanded()); + + if (m_widget) m_grid->removeWidget(m_widget); - m_widget = 0; - } + m_widget = widget; + if (widget) { - m_grid->addWidget(widget, 1, 0, 1, 3); - m_widget = widget; - bool visible = m_detailsButton->isToggled(); - m_widget->setVisible(visible); - m_dummyWidget->setVisible(visible); + m_widget->setContentsMargins(MARGIN, MARGIN, MARGIN, MARGIN); + m_grid->addWidget(widget, 1, 1, 1, 2); + setExpanded(wasExpanded); + } else { + m_detailsButton->setEnabled(false); } + m_detailsButton->setEnabled(0 != m_widget); } void DetailsWidget::setToolWidget(QWidget *widget) { if (m_toolWidget == widget) return; - if (m_toolWidget) { - m_grid->removeWidget(m_toolWidget); - m_toolWidget = 0; - } - if (widget) { - m_grid->addWidget(widget, 0, 1, 1, 1, Qt::AlignBottom); - m_toolWidget = widget; - } + + m_toolWidget = widget; + + if (!m_toolWidget) + return; + + m_toolWidget->adjustSize(); + m_grid->addWidget(m_toolWidget, 0, 0, 1, 1, Qt::AlignCenter); + + m_grid->setColumnMinimumWidth(0, m_toolWidget->width()); + m_grid->setRowMinimumHeight(0, m_toolWidget->height()); + + changeHoverState(m_hovered); } QWidget *DetailsWidget::toolWidget() const @@ -154,25 +162,35 @@ QWidget *DetailsWidget::toolWidget() const return m_toolWidget; } -// This function works around a qt limitation. -// In a deeply nested widget structure, nested layouts -// tell their parents per a delayed invocation that they -// need to repaint. Thus hiding a widget triggers -// one relayout (and repaint) for each level of widget -// nesting. We circumvent that, by forcing a update() -// activate() on the widget after hiding. -void DetailsWidget::fixUpLayout() +QPixmap DetailsWidget::cacheBackground(const QSize &size, bool expanded) { - if (!m_widget) - return; - QWidget *parent = m_widget; - QStack widgets; - while((parent = parent->parentWidget()) && parent && parent->layout()) { - widgets.push(parent); - parent->layout()->update(); + QLinearGradient lg; + lg.setCoordinateMode(QGradient::ObjectBoundingMode); + lg.setFinalStop(0, 1); + + lg.setColorAt(0, palette().color(QPalette::Midlight)); + lg.setColorAt(1, palette().color(QPalette::Button)); + + QPixmap pixmap(size); + QPainter p(&pixmap); + p.setBrush(lg); + p.setPen(QPen(palette().color(QPalette::Mid))); + + p.drawRect(0, 0, size.width() - 1, size.height() - 1); + + if (expanded) { + p.drawLine(0, m_summaryLabel->height(), + size.width(), m_summaryLabel->height()); } - while(!widgets.isEmpty()) { - widgets.pop()->layout()->activate(); - } + return pixmap; +} + +void DetailsWidget::changeHoverState(bool hovered) +{ + m_hovered = hovered; + if (!m_toolWidget) + return; + + m_toolWidget->setVisible(m_hovered); } diff --git a/src/libs/utils/detailswidget.h b/src/libs/utils/detailswidget.h index 781fc4026ed..6304dc3c3c6 100644 --- a/src/libs/utils/detailswidget.h +++ b/src/libs/utils/detailswidget.h @@ -3,6 +3,7 @@ #include "utils_global.h" +#include #include QT_BEGIN_NAMESPACE @@ -17,7 +18,8 @@ class QTCREATOR_UTILS_EXPORT DetailsWidget : public QWidget { Q_OBJECT Q_PROPERTY(QString summaryText READ summaryText WRITE setSummaryText DESIGNABLE true) - Q_PROPERTY(bool expanded READ expanded WRITE setExpanded DESIGNABLE true) + Q_PROPERTY(bool expanded READ isExpanded WRITE setExpanded DESIGNABLE true) + public: DetailsWidget(QWidget *parent = 0); ~DetailsWidget(); @@ -25,8 +27,7 @@ public: void setSummaryText(const QString &text); QString summaryText() const; - bool expanded() const; - void setExpanded(bool); + bool isExpanded() const; void setWidget(QWidget *widget); QWidget *widget() const; @@ -34,21 +35,28 @@ public: void setToolWidget(QWidget *widget); QWidget *toolWidget() const; +public slots: + void setExpanded(bool); + protected: void paintEvent(QPaintEvent *paintEvent); - -private slots: - void detailsButtonClicked(); + void enterEvent(QEvent *event); + void leaveEvent(QEvent *event); private: - void fixUpLayout(); - QLabel *m_summaryLabel; - DetailsButton *m_detailsButton; + QPixmap cacheBackground(const QSize &size, bool expanded); + void changeHoverState(bool hovered); - QWidget *m_widget; - QWidget *m_toolWidget; - QWidget *m_dummyWidget; + DetailsButton *m_detailsButton; QGridLayout *m_grid; + QLabel *m_summaryLabel; + QWidget *m_toolWidget; + QWidget *m_widget; + + QPixmap m_collapsedPixmap; + QPixmap m_expandedPixmap; + + bool m_hovered; }; } From 7ebf60dce260b9c48bab4e8df45c0647721efdf3 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Nov 2009 16:23:28 +0100 Subject: [PATCH 59/62] ProjectWindow update * Indent widgets using contentsmargins. That way the individual widgets can override this. * Remove spme spacers in favour of yet more contents margins. * Remove unused headers and forward declarations. * Define some constants for spacings we might want to tweak later on. Reviewed-by: dt --- src/plugins/projectexplorer/projectwindow.cpp | 130 +++++++++--------- src/plugins/projectexplorer/projectwindow.h | 34 ++--- 2 files changed, 82 insertions(+), 82 deletions(-) diff --git a/src/plugins/projectexplorer/projectwindow.cpp b/src/plugins/projectexplorer/projectwindow.cpp index 69d514b1881..b7be977809a 100644 --- a/src/plugins/projectexplorer/projectwindow.cpp +++ b/src/plugins/projectexplorer/projectwindow.cpp @@ -44,28 +44,28 @@ #include #include #include +#include #include #include -#include #include #include #include #include -#include -#include -#include #include #include #include #include - using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; namespace { const int ICON_SIZE(64); + +const int ABOVE_HEADING_MARGIN(10); +const int ABOVE_CONTENTS_MARGIN(4); +const int BELOW_CONTENTS_MARGIN(16); } /// @@ -84,8 +84,9 @@ public: } void paintEvent(QPaintEvent *e) { + Q_UNUSED(e); QPainter p(this); - p.fillRect(e->rect(), QBrush(Utils::StyleHelper::borderColor())); + p.fillRect(contentsRect(), QBrush(Utils::StyleHelper::borderColor())); } }; @@ -94,7 +95,7 @@ public: /// PanelsWidget::Panel::Panel(QWidget * w) : - iconLabel(0), lineWidget(0), nameLabel(0), panelWidget(w), spacer(0) + iconLabel(0), lineWidget(0), nameLabel(0), panelWidget(w) { } PanelsWidget::Panel::~Panel() @@ -103,7 +104,6 @@ PanelsWidget::Panel::~Panel() delete lineWidget; delete nameLabel; // do not delete panelWidget, we do not own it! - delete spacer; } /// @@ -118,16 +118,10 @@ PanelsWidget::PanelsWidget(QWidget *parent) : // side of the screen. m_root->setMaximumWidth(800); // The layout holding the individual panels: - m_layout = new QGridLayout; - m_layout->setColumnMinimumWidth(0, ICON_SIZE); - - // A helper layout to glue some stretch to the button of - // the panel layout: - QVBoxLayout * vbox = new QVBoxLayout; - vbox->addLayout(m_layout); - vbox->addStretch(10); - - m_root->setLayout(vbox); + m_layout = new QGridLayout(m_root); + m_layout->setColumnMinimumWidth(0, ICON_SIZE + 4); + m_layout->setSpacing(0); + m_layout->setRowStretch(0, 10); // Add horizontal space to the left of our widget: QHBoxLayout *hbox = new QHBoxLayout; @@ -155,15 +149,17 @@ PanelsWidget::~PanelsWidget() * Add a widget into the grid layout of the PanelsWidget. * * ... - * +--------+-------------------------------------------+ - * | | widget | - * +--------+-------------------------------------------+ + * +--------+-------------------------------------------+ ABOVE_CONTENTS_MARGIN + * | widget (with contentsmargins adjusted!) | + * +--------+-------------------------------------------+ BELOW_CONTENTS_MARGIN */ void PanelsWidget::addWidget(QWidget *widget) { - Panel *p = new Panel(widget); - m_layout->addWidget(widget, m_layout->rowCount(), 1); - m_panels.append(p); + QTC_ASSERT(widget, return); + + const int row(m_layout->rowCount() - 1); + m_layout->setRowStretch(row, 0); + addPanelWidget(new Panel(widget), row); } /* @@ -171,52 +167,49 @@ void PanelsWidget::addWidget(QWidget *widget) * layout of the PanelsWidget. * * ... - * +--------+-------------------------------------------+ - * | | spacer | - * +--------+-------------------------------------------+ + * +--------+-------------------------------------------+ ABOVE_HEADING_MARGIN * | icon | name | * + +-------------------------------------------+ - * | | Line | - * + +-------------------------------------------+ - * | | widget | - * +--------+-------------------------------------------+ + * | | line | + * +--------+-------------------------------------------+ ABOVE_CONTENTS_MARGIN + * | widget (with contentsmargins adjusted!) | + * +--------+-------------------------------------------+ BELOW_CONTENTS_MARGIN */ void PanelsWidget::addWidget(const QString &name, QWidget *widget, const QIcon & icon) { + QTC_ASSERT(widget, return); + Panel *p = new Panel(widget); - // spacer: - const int spacerRow(m_layout->rowCount()); - p->spacer = new QSpacerItem(1, 10, QSizePolicy::Fixed, QSizePolicy::Fixed); - m_layout->addItem(p->spacer, spacerRow, 1); - // icon: - const int headerRow(spacerRow + 1); + const int headerRow(m_layout->rowCount() - 1); + m_layout->setRowStretch(headerRow, 0); + if (!icon.isNull()) { p->iconLabel = new QLabel(m_root); p->iconLabel->setPixmap(icon.pixmap(ICON_SIZE, ICON_SIZE)); - m_layout->addWidget(p->iconLabel, headerRow, 0, 3, 1, Qt::AlignTop | Qt::AlignHCenter); + p->iconLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0); + m_layout->addWidget(p->iconLabel, headerRow, 0, 2, 1, Qt::AlignTop | Qt::AlignHCenter); } // name: p->nameLabel = new QLabel(m_root); p->nameLabel->setText(name); + p->nameLabel->setContentsMargins(0, ABOVE_HEADING_MARGIN, 0, 0); QFont f = p->nameLabel->font(); f.setBold(true); f.setPointSizeF(f.pointSizeF() * 1.4); p->nameLabel->setFont(f); - m_layout->addWidget(p->nameLabel, headerRow, 1); + m_layout->addWidget(p->nameLabel, headerRow, 1, 1, 1, Qt::AlignBottom | Qt::AlignLeft); // line: const int lineRow(headerRow + 1); p->lineWidget = new OnePixelBlackLine(m_root); m_layout->addWidget(p->lineWidget, lineRow, 1); - // widget: + // add the widget: const int widgetRow(lineRow + 1); - m_layout->addWidget(p->panelWidget, widgetRow, 1); - - m_panels.append(p); + addPanelWidget(p, widgetRow); } QWidget *PanelsWidget::rootWidget() const @@ -235,13 +228,24 @@ void PanelsWidget::clear() m_layout->removeWidget(p->nameLabel); if (p->panelWidget) m_layout->removeWidget(p->panelWidget); - if (p->spacer) - m_layout->removeItem(p->spacer); delete p; } m_panels.clear(); } +void PanelsWidget::addPanelWidget(Panel *panel, int row) +{ + panel->panelWidget->setContentsMargins(m_layout->columnMinimumWidth(0), + ABOVE_CONTENTS_MARGIN, 0, + BELOW_CONTENTS_MARGIN); + m_layout->addWidget(panel->panelWidget, row, 0, 1, 2); + + const int stretchRow(row + 1); + m_layout->setRowStretch(stretchRow, 10); + + m_panels.append(panel); +} + //// // ActiveConfigurationWidget //// @@ -523,8 +527,8 @@ BuildConfigurationComboBox::BuildConfigurationComboBox(Project *p, QWidget *pare m_comboBox->setCurrentIndex(index); // TODO -// connect(p, SIGNAL(buildConfigurationDisplayNameChanged(ProjectExplorer::BuildConfiguration *)), -// this, SLOT(nameChanged(ProjectExplorer::BuildConfiguration *))); +// connect(p, SIGNAL(buildConfigurationDisplayNameChanged(QString)), + // this, SLOT(nameChanged(ProjectExplorer::BuildConfiguration *))); connect(p, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(activeConfigurationChanged())); connect(p, SIGNAL(addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *)), @@ -542,7 +546,7 @@ BuildConfigurationComboBox::~BuildConfigurationComboBox() void BuildConfigurationComboBox::nameChanged(BuildConfiguration *bc) { - int index = nameToIndex(bc); + const int index(buildConfigurationToIndex(bc)); if (index == -1) return; const QString &displayName = bc->displayName(); @@ -551,7 +555,7 @@ void BuildConfigurationComboBox::nameChanged(BuildConfiguration *bc) m_label->setText(displayName); } -int BuildConfigurationComboBox::nameToIndex(BuildConfiguration *bc) +int BuildConfigurationComboBox::buildConfigurationToIndex(BuildConfiguration *bc) { for (int i=0; i < m_comboBox->count(); ++i) if (m_comboBox->itemData(i).value() == bc) @@ -561,7 +565,7 @@ int BuildConfigurationComboBox::nameToIndex(BuildConfiguration *bc) void BuildConfigurationComboBox::activeConfigurationChanged() { - int index = nameToIndex(m_project->activeBuildConfiguration()); + const int index(buildConfigurationToIndex(m_project->activeBuildConfiguration())); if (index == -1) return; ignoreIndexChange = true; @@ -569,8 +573,10 @@ void BuildConfigurationComboBox::activeConfigurationChanged() ignoreIndexChange = false; } -void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Project *,BuildConfiguration *bc) +void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Project *project, + BuildConfiguration *bc) { + Q_UNUSED(project); ignoreIndexChange = true; m_comboBox->addItem(bc->displayName(), QVariant::fromValue(bc)); @@ -579,10 +585,14 @@ void BuildConfigurationComboBox::addedBuildConfiguration(ProjectExplorer::Projec ignoreIndexChange = false; } -void BuildConfigurationComboBox::removedBuildConfiguration(ProjectExplorer::Project *, BuildConfiguration *bc) +void BuildConfigurationComboBox::removedBuildConfiguration(ProjectExplorer::Project *project, + BuildConfiguration * bc) { + Q_UNUSED(project); ignoreIndexChange = true; - int index = nameToIndex(bc); + const int index(buildConfigurationToIndex(bc)); + if (index == -1) + return; m_comboBox->removeItem(index); if (m_comboBox->count() == 1) { m_label->setText(m_comboBox->itemText(0)); @@ -719,19 +729,13 @@ ProjectWindow::ProjectWindow(QWidget *parent) m_panelsWidget = new PanelsWidget(this); viewLayout->addWidget(m_panelsWidget); - // Run and build configuration selection area: + // Run and build configuration selection panel: m_activeConfigurationWidget = new ActiveConfigurationWidget(m_panelsWidget->rootWidget()); - // Spacer and line: - m_spacerBetween = new QWidget(m_panelsWidget->rootWidget()); - QVBoxLayout *spacerVbox = new QVBoxLayout(m_spacerBetween); - spacerVbox->setMargin(0); - m_spacerBetween->setLayout(spacerVbox); - spacerVbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed)); - spacerVbox->addWidget(new OnePixelBlackLine(m_spacerBetween)); - spacerVbox->addSpacerItem(new QSpacerItem(10, 15, QSizePolicy::Fixed, QSizePolicy::Fixed)); + // Spacer and line panel: + m_spacerBetween = new OnePixelBlackLine(m_panelsWidget->rootWidget()); - // Project chooser: + // Project chooser panel: m_projectChooser = new QWidget(m_panelsWidget->rootWidget()); QHBoxLayout *hbox = new QHBoxLayout(m_projectChooser); hbox->setMargin(0); diff --git a/src/plugins/projectexplorer/projectwindow.h b/src/plugins/projectexplorer/projectwindow.h index 70c58890b9c..558dbc7bb15 100644 --- a/src/plugins/projectexplorer/projectwindow.h +++ b/src/plugins/projectexplorer/projectwindow.h @@ -30,32 +30,25 @@ #ifndef PROJECTWINDOW_H #define PROJECTWINDOW_H -#include -#include -#include #include -#include -#include -#include +#include +#include #include +#include +#include +#include +#include QT_BEGIN_NAMESPACE class QLabel; class QGridLayout; -class QModelIndex; -class QTabWidget; -class QHBoxLayout; -class QComboBox; class QMenu; -class QSpacerItem; QT_END_NAMESPACE namespace ProjectExplorer { class IPropertiesPanel; class Project; -class ProjectExplorerPlugin; -class SessionManager; class BuildConfiguration; namespace Internal { @@ -79,17 +72,18 @@ private: struct Panel { // This does not take ownership of widget! - explicit Panel(QWidget * widget); + explicit Panel(QWidget *widget); ~Panel(); QLabel *iconLabel; QWidget *lineWidget; QLabel *nameLabel; QWidget *panelWidget; - QSpacerItem *spacer; }; QList m_panels; + void addPanelWidget(Panel *panel, int row); + QGridLayout *m_layout; QWidget *m_root; }; @@ -101,13 +95,15 @@ public: BuildConfigurationComboBox(ProjectExplorer::Project *p, QWidget *parent = 0); ~BuildConfigurationComboBox(); private slots: - void nameChanged(ProjectExplorer::BuildConfiguration *bc); + void nameChanged(BuildConfiguration *bc); void activeConfigurationChanged(); - void addedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *bc); - void removedBuildConfiguration(ProjectExplorer::Project *, ProjectExplorer::BuildConfiguration *bc); + void addedBuildConfiguration(ProjectExplorer::Project *project, + BuildConfiguration *bc); + void removedBuildConfiguration(ProjectExplorer::Project *project, + BuildConfiguration *bc); void changedIndex(int newIndex); private: - int nameToIndex(ProjectExplorer::BuildConfiguration *bc); + int buildConfigurationToIndex(BuildConfiguration *bc); bool ignoreIndexChange; ProjectExplorer::Project *m_project; QComboBox *m_comboBox; From c4d127427377d26611d5f9240e85568fb7d69046 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Mon, 30 Nov 2009 16:44:22 +0100 Subject: [PATCH 60/62] Update build steps related panels * Merge BuildSettingsWidget and BuildSettingsSubWidgets. I don't see much need for this separation and it makes the indention harder to do. * Override contentsmargins set by the ProjectsWindow. This enables the toolwidget to be displayed properly. * Add a remove button to the toolwidget of the buildsteps. Remove the global one. * Simplify code a bit by using QSignalMapper instead of mapping signals manually. Reviewed-by: dt --- .../buildsettingspropertiespage.cpp | 158 ++++++------ .../buildsettingspropertiespage.h | 50 ++-- .../projectexplorer/buildstepspage.cpp | 237 ++++++++---------- src/plugins/projectexplorer/buildstepspage.h | 26 +- 4 files changed, 226 insertions(+), 245 deletions(-) diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 3978b744a35..e8cc4c35537 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -37,18 +37,21 @@ #include #include -#include +#include +#include #include +#include #include #include -#include #include +#include +#include using namespace ProjectExplorer; using namespace ProjectExplorer::Internal; /// -/// BuildSettingsPanelFactory +// BuildSettingsPanelFactory /// bool BuildSettingsPanelFactory::supports(Project *project) @@ -62,7 +65,7 @@ IPropertiesPanel *BuildSettingsPanelFactory::createPanel(Project *project) } /// -/// BuildSettingsPanel +// BuildSettingsPanel /// BuildSettingsPanel::BuildSettingsPanel(Project *project) : @@ -92,74 +95,36 @@ QIcon BuildSettingsPanel::icon() const } /// -// BuildSettingsSubWidgets -/// - -BuildSettingsSubWidgets::~BuildSettingsSubWidgets() -{ - clear(); -} - -void BuildSettingsSubWidgets::addWidget(const QString &name, QWidget *widget) -{ - QSpacerItem *item = new QSpacerItem(1, 10, QSizePolicy::Fixed, QSizePolicy::Fixed); - - QLabel *label = new QLabel(this); - label->setText(name); - QFont f = label->font(); - f.setBold(true); - f.setPointSizeF(f.pointSizeF() *1.2); - label->setFont(f); - - layout()->addItem(item); - layout()->addWidget(label); - layout()->addWidget(widget); - - m_spacerItems.append(item); - m_labels.append(label); - m_widgets.append(widget); -} - -void BuildSettingsSubWidgets::clear() -{ - foreach(QSpacerItem *item, m_spacerItems) - layout()->removeItem(item); - qDeleteAll(m_spacerItems); - qDeleteAll(m_widgets); - qDeleteAll(m_labels); - m_widgets.clear(); - m_labels.clear(); - m_spacerItems.clear(); -} - -QList BuildSettingsSubWidgets::widgets() const -{ - return m_widgets; -} - -BuildSettingsSubWidgets::BuildSettingsSubWidgets(QWidget *parent) - : QWidget(parent) -{ - new QVBoxLayout(this); - layout()->setMargin(0); -} - -/// -/// BuildSettingsWidget +// BuildSettingsWidget /// BuildSettingsWidget::~BuildSettingsWidget() { + clear(); } -BuildSettingsWidget::BuildSettingsWidget(Project *project) - : m_project(project), m_buildConfiguration(0) +BuildSettingsWidget::BuildSettingsWidget(Project *project) : + m_project(project), + m_buildConfiguration(0), + m_leftMargin(0) { + // Provide some time for our contentsmargins to get updated: + QTimer::singleShot(0, this, SLOT(init())); +} + +void BuildSettingsWidget::init() +{ + QMargins margins(contentsMargins()); + m_leftMargin = margins.left(); + margins.setLeft(0); + setContentsMargins(margins); + QVBoxLayout *vbox = new QVBoxLayout(this); - vbox->setContentsMargins(0, -1, 0, -1); + vbox->setContentsMargins(0, 0, 0, 0); { // Edit Build Configuration row QHBoxLayout *hbox = new QHBoxLayout(); + hbox->setContentsMargins(m_leftMargin, 0, 0, 0); hbox->addWidget(new QLabel(tr("Edit Build Configuration:"), this)); m_buildConfigurationComboBox = new QComboBox(this); m_buildConfigurationComboBox->setSizeAdjustPolicy(QComboBox::AdjustToContents); @@ -169,6 +134,8 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) m_addButton->setText(tr("Add")); m_addButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); hbox->addWidget(m_addButton); + m_addButtonMenu = new QMenu(this); + m_addButton->setMenu(m_addButtonMenu); m_removeButton = new QPushButton(this); m_removeButton->setText(tr("Remove")); @@ -182,13 +149,6 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) m_makeActiveLabel->setVisible(false); vbox->addWidget(m_makeActiveLabel); - m_subWidgets = new BuildSettingsSubWidgets(this); - vbox->addWidget(m_subWidgets); - - m_addButtonMenu = new QMenu(this); - m_addButton->setMenu(m_addButtonMenu); - updateAddButtonMenu(); - m_buildConfiguration = m_project->activeBuildConfiguration(); connect(m_makeActiveLabel, SIGNAL(linkActivated(QString)), @@ -201,6 +161,8 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) this, SLOT(deleteConfiguration())); // TODO update on displayNameChange +// connect(m_project, SIGNAL(buildConfigurationDisplayNameChanged(const QString &)), +// this, SLOT(buildConfigurationDisplayNameChanged(const QString &))); connect(m_project, SIGNAL(activeBuildConfigurationChanged()), this, SLOT(checkMakeActiveLabel())); @@ -208,9 +170,44 @@ BuildSettingsWidget::BuildSettingsWidget(Project *project) if (m_project->buildConfigurationFactory()) connect(m_project->buildConfigurationFactory(), SIGNAL(availableCreationTypesChanged()), SLOT(updateAddButtonMenu())); + updateAddButtonMenu(); updateBuildSettings(); } +void BuildSettingsWidget::addSubWidget(const QString &name, QWidget *widget) +{ + widget->setContentsMargins(m_leftMargin, 10, 0, 0); + + QLabel *label = new QLabel(this); + label->setText(name); + QFont f = label->font(); + f.setBold(true); + f.setPointSizeF(f.pointSizeF() * 1.2); + label->setFont(f); + + label->setContentsMargins(m_leftMargin, 10, 0, 0); + + layout()->addWidget(label); + layout()->addWidget(widget); + + m_labels.append(label); + m_subWidgets.append(widget); +} + +void BuildSettingsWidget::clear() +{ + qDeleteAll(m_subWidgets); + m_subWidgets.clear(); + qDeleteAll(m_labels); + m_labels.clear(); + +} + +QList BuildSettingsWidget::subWidgets() const +{ + return m_subWidgets; +} + void BuildSettingsWidget::makeActive() { m_project->setActiveBuildConfiguration(m_buildConfiguration); @@ -220,7 +217,7 @@ void BuildSettingsWidget::updateAddButtonMenu() { m_addButtonMenu->clear(); m_addButtonMenu->addAction(tr("&Clone Selected"), - this, SLOT(cloneConfiguration())); + this, SLOT(cloneConfiguration())); IBuildConfigurationFactory *factory = m_project->buildConfigurationFactory(); if (factory) { foreach (const QString &type, factory->availableCreationTypes()) { @@ -237,25 +234,25 @@ void BuildSettingsWidget::updateBuildSettings() // Delete old tree items bool blocked = m_buildConfigurationComboBox->blockSignals(true); m_buildConfigurationComboBox->clear(); - m_subWidgets->clear(); + clear(); // update buttons m_removeButton->setEnabled(m_project->buildConfigurations().size() > 1); // Add pages BuildConfigWidget *generalConfigWidget = m_project->createConfigWidget(); - m_subWidgets->addWidget(generalConfigWidget->displayName(), generalConfigWidget); + addSubWidget(generalConfigWidget->displayName(), generalConfigWidget); - m_subWidgets->addWidget(tr("Build Steps"), new BuildStepsPage(m_project)); - m_subWidgets->addWidget(tr("Clean Steps"), new BuildStepsPage(m_project, true)); + addSubWidget(tr("Build Steps"), new BuildStepsPage(m_project, false)); + addSubWidget(tr("Clean Steps"), new BuildStepsPage(m_project, true)); QList subConfigWidgets = m_project->subConfigWidgets(); foreach (BuildConfigWidget *subConfigWidget, subConfigWidgets) - m_subWidgets->addWidget(subConfigWidget->displayName(), subConfigWidget); + addSubWidget(subConfigWidget->displayName(), subConfigWidget); // Add tree items foreach (BuildConfiguration *bc, m_project->buildConfigurations()) { - m_buildConfigurationComboBox->addItem(bc->displayName(), QVariant::fromValue(bc)); + m_buildConfigurationComboBox->addItem(bc->displayName(), QVariant::fromValue(bc)); if (bc == m_buildConfiguration) m_buildConfigurationComboBox->setCurrentIndex(m_buildConfigurationComboBox->count() - 1); } @@ -264,12 +261,13 @@ void BuildSettingsWidget::updateBuildSettings() // TODO Restore position, entry from combbox // TODO? select entry from combobox ? + activeBuildConfigurationChanged(); } void BuildSettingsWidget::currentIndexChanged(int index) { - m_buildConfiguration = (BuildConfiguration *) m_buildConfigurationComboBox->itemData(index).value(); + m_buildConfiguration = m_buildConfigurationComboBox->itemData(index).value(); activeBuildConfigurationChanged(); } @@ -281,7 +279,7 @@ void BuildSettingsWidget::activeBuildConfigurationChanged() break; } } - foreach (QWidget *widget, m_subWidgets->widgets()) { + foreach (QWidget *widget, subWidgets()) { if (BuildConfigWidget *buildStepWidget = qobject_cast(widget)) { buildStepWidget->init(m_buildConfiguration); } @@ -311,14 +309,14 @@ void BuildSettingsWidget::createConfiguration() void BuildSettingsWidget::cloneConfiguration() { - int index = m_buildConfigurationComboBox->currentIndex(); + const int index = m_buildConfigurationComboBox->currentIndex(); BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value(); cloneConfiguration(bc); } void BuildSettingsWidget::deleteConfiguration() { - int index = m_buildConfigurationComboBox->currentIndex(); + const int index = m_buildConfigurationComboBox->currentIndex(); BuildConfiguration *bc = m_buildConfigurationComboBox->itemData(index).value(); deleteConfiguration(bc); } @@ -328,7 +326,7 @@ void BuildSettingsWidget::cloneConfiguration(BuildConfiguration *sourceConfigura if (!sourceConfiguration) return; - QString newDisplayName = QInputDialog::getText(this, tr("Clone configuration"), tr("New Configuration Name:")); + QString newDisplayName(QInputDialog::getText(this, tr("Clone configuration"), tr("New Configuration Name:"))); if (newDisplayName.isEmpty()) return; diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.h b/src/plugins/projectexplorer/buildsettingspropertiespage.h index 652f91e116f..d71b4d2bc37 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.h +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.h @@ -32,35 +32,22 @@ #include "iprojectproperties.h" -#include -#include -#include -#include -#include -#include +#include + +QT_BEGIN_NAMESPACE +class QComboBox; +class QLabel; +class QMenu; +class QPushButton; +QT_END_NAMESPACE namespace ProjectExplorer { -class IBuildStepFactory; class BuildConfiguration; +class IBuildStepFactory; namespace Internal { -class BuildSettingsSubWidgets : public QWidget -{ - Q_OBJECT -public: - BuildSettingsSubWidgets(QWidget *parent); - ~BuildSettingsSubWidgets(); - void clear(); - void addWidget(const QString &name, QWidget *widget); - QList widgets() const; -private: - QList m_widgets; - QList m_labels; - QList m_spacerItems; -}; - class BuildSettingsPanelFactory : public IPanelFactory { public: @@ -93,6 +80,10 @@ public: BuildSettingsWidget(Project *project); ~BuildSettingsWidget(); + void clear(); + void addSubWidget(const QString &name, QWidget *widget); + QList subWidgets() const; + private slots: void updateBuildSettings(); void currentIndexChanged(int index); @@ -105,18 +96,25 @@ private slots: void checkMakeActiveLabel(); void makeActive(); + void init(); + private: - void cloneConfiguration(ProjectExplorer::BuildConfiguration *toClone); - void deleteConfiguration(ProjectExplorer::BuildConfiguration *toDelete); + void cloneConfiguration(BuildConfiguration *toClone); + void deleteConfiguration(BuildConfiguration *toDelete); Project *m_project; + BuildConfiguration *m_buildConfiguration; + QPushButton *m_addButton; QPushButton *m_removeButton; QComboBox *m_buildConfigurationComboBox; - BuildSettingsSubWidgets *m_subWidgets; - BuildConfiguration *m_buildConfiguration; QMenu *m_addButtonMenu; QLabel *m_makeActiveLabel; + + QList m_subWidgets; + QList m_labels; + + int m_leftMargin; }; } // namespace Internal diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index 0930901be9e..5e7a0e99baf 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -28,13 +28,14 @@ **************************************************************************/ #include "buildstepspage.h" -#include "project.h" #include "buildconfiguration.h" #include #include #include +#include + #include #include #include @@ -47,40 +48,11 @@ using namespace ProjectExplorer::Internal; BuildStepsPage::BuildStepsPage(Project *project, bool clean) : BuildConfigWidget(), - m_clean(clean) + m_clean(clean), + m_addButton(0), + m_leftMargin(-1) { - Q_UNUSED(project) - m_vbox = new QVBoxLayout(this); - m_vbox->setContentsMargins(0, 0, 0, 0); - m_vbox->setSpacing(0); - - m_noStepsLabel = new QLabel(tr("No Build Steps"), this); - m_vbox->addWidget(m_noStepsLabel); - - QHBoxLayout *hboxLayout = new QHBoxLayout(); - m_addButton = new QPushButton(this); - m_addButton->setText(clean ? tr("Add clean step") : tr("Add build step")); - m_addButton->setMenu(new QMenu(this)); - hboxLayout->addWidget(m_addButton); - - m_removeButton = new QPushButton(this); - m_removeButton->setText(clean ? tr("Remove clean step") : tr("Remove build step")); - m_removeButton->setMenu(new QMenu(this)); - hboxLayout->addWidget(m_removeButton); - hboxLayout->addStretch(10); - -#ifdef Q_OS_MAC - m_addButton->setAttribute(Qt::WA_MacSmallSize); - m_removeButton->setAttribute(Qt::WA_MacSmallSize); -#endif - - m_vbox->addLayout(hboxLayout); - - connect(m_addButton->menu(), SIGNAL(aboutToShow()), - this, SLOT(updateAddBuildStepMenu())); - - connect(m_removeButton->menu(), SIGNAL(aboutToShow()), - this, SLOT(updateRemoveBuildStepMenu())); + Q_UNUSED(project); } BuildStepsPage::~BuildStepsPage() @@ -112,6 +84,10 @@ QString BuildStepsPage::displayName() const void BuildStepsPage::init(BuildConfiguration *bc) { + QTC_ASSERT(bc, return); + + setupUi(); + foreach(BuildStepsWidgetStruct s, m_buildSteps) { delete s.widget; delete s.detailsWidget; @@ -120,7 +96,7 @@ void BuildStepsPage::init(BuildConfiguration *bc) m_configuration = bc; - const QList &steps = m_clean ? bc->cleanSteps() : bc->buildSteps(); + const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); int i = 0; foreach (BuildStep *bs, steps) { addBuildStepWidget(i, bs); @@ -128,7 +104,6 @@ void BuildStepsPage::init(BuildConfiguration *bc) } m_noStepsLabel->setVisible(steps.isEmpty()); - m_removeButton->setEnabled(!steps.isEmpty()); // make sure widget is updated foreach(BuildStepsWidgetStruct s, m_buildSteps) { @@ -143,7 +118,7 @@ void BuildStepsPage::updateAddBuildStepMenu() QMap > map; //Build up a list of possible steps and save map the display names to the (internal) name and factories. QList factories = ExtensionSystem::PluginManager::instance()->getObjects(); - foreach (IBuildStepFactory * factory, factories) { + foreach (IBuildStepFactory *factory, factories) { QStringList names = factory->canCreateForBuildConfiguration(m_configuration); foreach (const QString &name, names) { map.insert(factory->displayNameForName(name), QPair(name, factory)); @@ -188,114 +163,57 @@ void BuildStepsPage::addBuildStepWidget(int pos, BuildStep *step) s.upButton->setIconSize(QSize(10, 10)); s.downButton->setIconSize(QSize(10, 10)); #endif + s.removeButton = new QPushButton(this); + s.removeButton->setText(QChar('X')); + s.removeButton->setMaximumHeight(22); + s.removeButton->setMaximumWidth(22); + // layout QWidget *toolWidget = new QWidget(s.detailsWidget); toolWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); - s.hbox = new QHBoxLayout(toolWidget); - s.hbox->setMargin(0); - s.hbox->setSpacing(0); - s.hbox->addWidget(s.upButton); - s.hbox->addWidget(s.downButton); + QHBoxLayout *hbox = new QHBoxLayout(); + toolWidget->setLayout(hbox); + hbox->setMargin(0); + hbox->setSpacing(0); + hbox->addWidget(s.upButton); + hbox->addWidget(s.downButton); + hbox->addWidget(s.removeButton); + s.detailsWidget->setToolWidget(toolWidget); + const int leftMargin(qMax(m_leftMargin - toolWidget->width(), 0)); + s.detailsWidget->setContentsMargins(leftMargin, 0, 0, 1); + m_buildSteps.insert(pos, s); + m_vbox->insertWidget(pos, s.detailsWidget); connect(s.widget, SIGNAL(updateSummary()), this, SLOT(updateSummary())); connect(s.upButton, SIGNAL(clicked()), - this, SLOT(upBuildStep())); + m_upMapper, SLOT(map())); connect(s.downButton, SIGNAL(clicked()), - this, SLOT(downBuildStep())); + m_downMapper, SLOT(map())); + connect(s.removeButton, SIGNAL(clicked()), + m_removeMapper, SLOT(map())); } void BuildStepsPage::addBuildStep() { if (QAction *action = qobject_cast(sender())) { - BuildConfiguration *bc = m_configuration; QPair pair = m_addBuildStepHash.value(action); - BuildStep *newStep = pair.second->create(bc, pair.first); - int pos = m_clean ? bc->cleanSteps().count() : bc->buildSteps().count(); - m_clean ? bc->insertCleanStep(pos, newStep) : bc->insertBuildStep(pos, newStep); + BuildStep *newStep = pair.second->create(m_configuration, pair.first); + int pos = m_clean ? m_configuration->cleanSteps().count() : m_configuration->buildSteps().count(); + m_clean ? m_configuration->insertCleanStep(pos, newStep) : m_configuration->insertBuildStep(pos, newStep); addBuildStepWidget(pos, newStep); const BuildStepsWidgetStruct s = m_buildSteps.at(pos); s.widget->init(); s.detailsWidget->setSummaryText(s.widget->summaryText()); + s.detailsWidget->setExpanded(true); } - updateBuildStepButtonsState(); -} -void BuildStepsPage::updateRemoveBuildStepMenu() -{ - QMenu *menu = m_removeButton->menu(); - menu->clear(); - const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); - foreach(BuildStep *step, steps) { - QAction *action = menu->addAction(step->displayName()); - if (step->immutable()) - action->setEnabled(false); - connect(action, SIGNAL(triggered()), - this, SLOT(removeBuildStep())); - } -} - -void BuildStepsPage::removeBuildStep() -{ - QAction *action = qobject_cast(sender()); - if (action) { - int pos = m_removeButton->menu()->actions().indexOf(action); - const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); - if (steps.at(pos)->immutable()) - return; - - BuildStepsWidgetStruct s = m_buildSteps.at(pos); - delete s.widget; - delete s.detailsWidget; - m_buildSteps.removeAt(pos); - m_clean ? m_configuration->removeCleanStep(pos) : m_configuration->removeBuildStep(pos); - } - updateBuildStepButtonsState(); -} - -void BuildStepsPage::upBuildStep() -{ - int pos = -1; - QToolButton *tb = qobject_cast(sender()); - if (!tb) - return; - - for (int i=0; i(sender()); - if (!tb) - return; - - for (int i=0; iinsertWidget(pos - 1, m_buildSteps.at(pos).detailsWidget); - BuildStepsWidgetStruct tmp = m_buildSteps.at(pos -1); - m_buildSteps[pos -1] = m_buildSteps.at(pos); - m_buildSteps[pos] = tmp; + m_buildSteps.swap(pos - 1, pos); + + updateBuildStepButtonsState(); +} + +void BuildStepsPage::stepMoveDown(int pos) +{ + stepMoveUp(pos + 1); +} + +void BuildStepsPage::stepRemove(int pos) +{ + BuildStepsWidgetStruct s = m_buildSteps.at(pos); + delete s.widget; + delete s.detailsWidget; + m_buildSteps.removeAt(pos); + m_clean ? m_configuration->removeCleanStep(pos) : m_configuration->removeBuildStep(pos); + + updateBuildStepButtonsState(); +} + +void BuildStepsPage::setupUi() +{ + if (0 != m_addButton) + return; + + QMargins margins(contentsMargins()); + m_leftMargin = margins.left(); + margins.setLeft(0); + setContentsMargins(margins); + + m_upMapper = new QSignalMapper(this); + connect(m_upMapper, SIGNAL(mapped(int)), + this, SLOT(stepMoveUp(int))); + m_downMapper = new QSignalMapper(this); + connect(m_downMapper, SIGNAL(mapped(int)), + this, SLOT(stepMoveDown(int))); + m_removeMapper = new QSignalMapper(this); + connect(m_removeMapper, SIGNAL(mapped(int)), + this, SLOT(stepRemove(int))); + + m_vbox = new QVBoxLayout(this); + m_vbox->setContentsMargins(0, 0, 0, 0); + m_vbox->setSpacing(0); + + m_noStepsLabel = new QLabel(tr("No Build Steps"), this); + m_noStepsLabel->setContentsMargins(m_leftMargin, 0, 0, 0); + m_vbox->addWidget(m_noStepsLabel); + + QHBoxLayout *hboxLayout = new QHBoxLayout(); + hboxLayout->setContentsMargins(m_leftMargin, 4, 0, 0); + m_addButton = new QPushButton(this); + m_addButton->setText(m_clean ? tr("Add clean step") : tr("Add build step")); + m_addButton->setMenu(new QMenu(this)); + hboxLayout->addWidget(m_addButton); + + hboxLayout->addStretch(10); + +#ifdef Q_OS_MAC + m_addButton->setAttribute(Qt::WA_MacSmallSize); +#endif + + m_vbox->addLayout(hboxLayout); + + connect(m_addButton->menu(), SIGNAL(aboutToShow()), + this, SLOT(updateAddBuildStepMenu())); } void BuildStepsPage::updateBuildStepButtonsState() { const QList &steps = m_clean ? m_configuration->cleanSteps() : m_configuration->buildSteps(); - for(int i=0; isetEnabled((i>0) && !(steps.at(i)->immutable() && steps.at(i - 1))); - s.downButton->setEnabled((i + 1< steps.count()) && !(steps.at(i)->immutable() && steps.at(i + 1)->immutable())); + s.removeButton->setEnabled(!steps.at(i)->immutable()); + m_removeMapper->setMapping(s.removeButton, i); + s.upButton->setEnabled((i > 0) && !(steps.at(i)->immutable() && steps.at(i - 1))); + m_upMapper->setMapping(s.upButton, i); + s.downButton->setEnabled((i + 1 < steps.count()) && !(steps.at(i)->immutable() && steps.at(i + 1)->immutable())); + m_downMapper->setMapping(s.downButton, i); } - m_noStepsLabel->setVisible(steps.isEmpty()); - m_removeButton->setEnabled(!steps.isEmpty()); } diff --git a/src/plugins/projectexplorer/buildstepspage.h b/src/plugins/projectexplorer/buildstepspage.h index 1e716d4d215..09cf70a0772 100644 --- a/src/plugins/projectexplorer/buildstepspage.h +++ b/src/plugins/projectexplorer/buildstepspage.h @@ -34,18 +34,17 @@ #include QT_BEGIN_NAMESPACE -class QTreeWidgetItem; -class QHBoxLayout; class QPushButton; -class QAbstractButton; class QToolButton; class QLabel; class QVBoxLayout; +class QSignalMapper; QT_END_NAMESPACE namespace ProjectExplorer { class Project; +class BuildConfiguration; namespace Internal { @@ -59,7 +58,7 @@ struct BuildStepsWidgetStruct Utils::DetailsWidget *detailsWidget; QToolButton *upButton; QToolButton *downButton; - QHBoxLayout *hbox; + QPushButton *removeButton; }; class BuildStepsPage : public BuildConfigWidget @@ -76,29 +75,32 @@ public: private slots: void updateAddBuildStepMenu(); void addBuildStep(); - void updateRemoveBuildStepMenu(); - void removeBuildStep(); - void upBuildStep(); - void downBuildStep(); void updateSummary(); + void stepMoveUp(int pos); + void stepMoveDown(int pos); + void stepRemove(int pos); private: - void stepMoveUp(int pos); + void setupUi(); void updateBuildStepButtonsState(); void addBuildStepWidget(int pos, BuildStep *step); - BuildConfiguration *m_configuration; + BuildConfiguration * m_configuration; QHash > m_addBuildStepHash; bool m_clean; - QList m_titleLayouts; QList m_buildSteps; QVBoxLayout *m_vbox; QLabel *m_noStepsLabel; QPushButton *m_addButton; - QPushButton *m_removeButton; + + QSignalMapper *m_upMapper; + QSignalMapper *m_downMapper; + QSignalMapper *m_removeMapper; + + int m_leftMargin; }; } // Internal From c4737c1fdf5ab3d950adaa5002367797c993ed37 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 1 Dec 2009 14:38:42 +0100 Subject: [PATCH 61/62] Store the names in a set. --- src/shared/cplusplus/CheckDeclaration.cpp | 5 +- src/shared/cplusplus/Control.cpp | 245 +++++++++------------- src/shared/cplusplus/Names.cpp | 22 +- src/shared/cplusplus/Names.h | 33 ++- 4 files changed, 125 insertions(+), 180 deletions(-) diff --git a/src/shared/cplusplus/CheckDeclaration.cpp b/src/shared/cplusplus/CheckDeclaration.cpp index bd6be26743f..426a7d9de2b 100644 --- a/src/shared/cplusplus/CheckDeclaration.cpp +++ b/src/shared/cplusplus/CheckDeclaration.cpp @@ -378,8 +378,9 @@ bool CheckDeclaration::visit(LinkageSpecificationAST *ast) bool CheckDeclaration::visit(NamespaceAST *ast) { - const Identifier *id = identifier(ast->identifier_token); - const Name *namespaceName = control()->nameId(id); + const Name *namespaceName = 0; + if (const Identifier *id = identifier(ast->identifier_token)) + namespaceName = control()->nameId(id); unsigned sourceLocation = ast->firstToken(); diff --git a/src/shared/cplusplus/Control.cpp b/src/shared/cplusplus/Control.cpp index ec14aa796b3..f03384274a9 100644 --- a/src/shared/cplusplus/Control.cpp +++ b/src/shared/cplusplus/Control.cpp @@ -129,6 +129,76 @@ template <> struct Compare } }; +template <> struct Compare +{ + bool operator()(const NameId &name, const NameId &otherName) const + { + return name.identifier() < otherName.identifier(); + } +}; + +template <> struct Compare +{ + bool operator()(const DestructorNameId &name, const DestructorNameId &otherName) const + { + return name.identifier() < otherName.identifier(); + } +}; + +template <> struct Compare +{ + bool operator()(const OperatorNameId &name, const OperatorNameId &otherName) const + { + return name.kind() < otherName.kind(); + } +}; + +template <> struct Compare +{ + bool operator()(const ConversionNameId &name, const ConversionNameId &otherName) const + { + return name.type() < otherName.type(); + } +}; +template <> struct Compare +{ + bool operator()(const TemplateNameId &name, const TemplateNameId &otherName) const + { + const Identifier *id = name.identifier(); + const Identifier *otherId = otherName.identifier(); + + if (id == otherId) + return std::lexicographical_compare(name.firstTemplateArgument(), name.lastTemplateArgument(), + otherName.firstTemplateArgument(), otherName.lastTemplateArgument()); + + return id < otherId; + } +}; +template <> struct Compare +{ + bool operator()(const QualifiedNameId &name, const QualifiedNameId &otherName) const + { + if (name.isGlobal() == otherName.isGlobal()) + return std::lexicographical_compare(name.firstName(), name.lastName(), + otherName.firstName(), otherName.lastName()); + + return name.isGlobal() < otherName.isGlobal(); + } +}; + +template <> struct Compare +{ + bool operator()(const SelectorNameId &name, const SelectorNameId &otherName) const + { + if (name.hasArguments() == otherName.hasArguments()) + return std::lexicographical_compare(name.firstName(), name.lastName(), + otherName.firstName(), otherName.lastName()); + + return name.hasArguments() < otherName.hasArguments(); + } +}; + + template class Table: public std::set<_Tp, Compare<_Tp> > { @@ -139,13 +209,6 @@ public: } // end of anonymous namespace -template -static void delete_map_entries(_Iterator first, _Iterator last) -{ - for (; first != last; ++first) - delete first->second; -} - template static void delete_array_entries(_Iterator first, _Iterator last) { @@ -153,10 +216,6 @@ static void delete_array_entries(_Iterator first, _Iterator last) delete *first; } -template -static void delete_map_entries(const _Map &m) -{ delete_map_entries(m.begin(), m.end()); } - template static void delete_array_entries(const _Array &a) { delete_array_entries(a.begin(), a.end()); } @@ -172,14 +231,6 @@ public: ~Data() { - // names - delete_map_entries(nameIds); - delete_map_entries(destructorNameIds); - delete_map_entries(operatorNameIds); - delete_map_entries(conversionNameIds); - delete_map_entries(qualifiedNameIds); - delete_map_entries(templateNameIds); - // symbols delete_array_entries(symbols); } @@ -188,77 +239,41 @@ public: { if (! id) return 0; - std::map::iterator it = nameIds.lower_bound(id); - if (it == nameIds.end() || it->first != id) - it = nameIds.insert(it, std::make_pair(id, new NameId(id))); - return it->second; + + return nameIds.intern(NameId(id)); } - const TemplateNameId *findOrInsertTemplateNameId(const Identifier *id, - const std::vector &templateArguments) + template + const TemplateNameId *findOrInsertTemplateNameId(const Identifier *id, _Iterator first, _Iterator last) { - if (! id) - return 0; - const TemplateNameIdKey key(id, templateArguments); - std::map::iterator it = - templateNameIds.lower_bound(key); - if (it == templateNameIds.end() || it->first != key) { - const FullySpecifiedType *args = 0; - if (templateArguments.size()) - args = &templateArguments[0]; - const TemplateNameId *templ = new TemplateNameId(id, args, templateArguments.size()); - it = templateNameIds.insert(it, std::make_pair(key, templ)); - } - return it->second; + return templateNameIds.intern(TemplateNameId(id, first, last)); } const DestructorNameId *findOrInsertDestructorNameId(const Identifier *id) { - if (! id) - return 0; - std::map::iterator it = destructorNameIds.lower_bound(id); - if (it == destructorNameIds.end() || it->first != id) - it = destructorNameIds.insert(it, std::make_pair(id, new DestructorNameId(id))); - return it->second; + return destructorNameIds.intern(DestructorNameId(id)); } const OperatorNameId *findOrInsertOperatorNameId(int kind) { - const int key(kind); - std::map::iterator it = operatorNameIds.lower_bound(key); - if (it == operatorNameIds.end() || it->first != key) - it = operatorNameIds.insert(it, std::make_pair(key, new OperatorNameId(kind))); - return it->second; + return operatorNameIds.intern(OperatorNameId(kind)); } const ConversionNameId *findOrInsertConversionNameId(const FullySpecifiedType &type) { - std::map::iterator it = - conversionNameIds.lower_bound(type); - if (it == conversionNameIds.end() || it->first != type) - it = conversionNameIds.insert(it, std::make_pair(type, new ConversionNameId(type))); - return it->second; + return conversionNameIds.intern(ConversionNameId(type)); } - const QualifiedNameId *findOrInsertQualifiedNameId(const std::vector &names, bool isGlobal) + template + const QualifiedNameId *findOrInsertQualifiedNameId(_Iterator first, _Iterator last, bool isGlobal) { - const QualifiedNameIdKey key(names, isGlobal); - std::map::iterator it = - qualifiedNameIds.lower_bound(key); - if (it == qualifiedNameIds.end() || it->first != key) { - const QualifiedNameId *name = new QualifiedNameId(&names[0], names.size(), isGlobal); - it = qualifiedNameIds.insert(it, std::make_pair(key, name)); - } - return it->second; + return qualifiedNameIds.intern(QualifiedNameId(first, last, isGlobal)); } - const SelectorNameId *findOrInsertSelectorNameId(const std::vector &names, bool hasArguments) + template + const SelectorNameId *findOrInsertSelectorNameId(_Iterator first, _Iterator last, bool hasArguments) { - const SelectorNameIdKey key(names, hasArguments); - std::map::iterator it = selectorNameIds.lower_bound(key); - if (it == selectorNameIds.end() || it->first != key) - it = selectorNameIds.insert(it, std::make_pair(key, new SelectorNameId(&names[0], names.size(), hasArguments))); - return it->second; + return selectorNameIds.intern(SelectorNameId(first, last, hasArguments)); } IntegerType *findOrInsertIntegerType(int kind) @@ -439,75 +454,6 @@ public: return u; } - struct TemplateNameIdKey { - const Identifier *id; - std::vector templateArguments; - - TemplateNameIdKey(const Identifier *id, const std::vector &templateArguments) - : id(id), templateArguments(templateArguments) - { } - - bool operator == (const TemplateNameIdKey &other) const - { return id == other.id && templateArguments == other.templateArguments; } - - bool operator != (const TemplateNameIdKey &other) const - { return ! operator==(other); } - - bool operator < (const TemplateNameIdKey &other) const - { - if (id == other.id) - return std::lexicographical_compare(templateArguments.begin(), - templateArguments.end(), - other.templateArguments.begin(), - other.templateArguments.end()); - return id < other.id; - } - }; - - struct QualifiedNameIdKey { - std::vector names; - bool isGlobal; - - QualifiedNameIdKey(const std::vector &names, bool isGlobal) : - names(names), isGlobal(isGlobal) - { } - - bool operator == (const QualifiedNameIdKey &other) const - { return isGlobal == other.isGlobal && names == other.names; } - - bool operator != (const QualifiedNameIdKey &other) const - { return ! operator==(other); } - - bool operator < (const QualifiedNameIdKey &other) const - { - if (isGlobal == other.isGlobal) - return std::lexicographical_compare(names.begin(), names.end(), - other.names.begin(), other.names.end()); - return isGlobal < other.isGlobal; - } - }; - - struct SelectorNameIdKey { - std::vector _names; - bool _hasArguments; - - SelectorNameIdKey(const std::vector &names, bool hasArguments): _names(names), _hasArguments(hasArguments) {} - - bool operator==(const SelectorNameIdKey &other) const - { return _names == other._names && _hasArguments == other._hasArguments; } - - bool operator!=(const SelectorNameIdKey &other) const - { return !operator==(other); } - - bool operator<(const SelectorNameIdKey &other) const - { - if (_hasArguments == other._hasArguments) - return std::lexicographical_compare(_names.begin(), _names.end(), other._names.begin(), other._names.end()); - else - return _hasArguments < other._hasArguments; - } - }; - Control *control; TranslationUnit *translationUnit; DiagnosticClient *diagnosticClient; @@ -521,13 +467,13 @@ public: // ### replace std::map with lookup tables. ASAP! // names - std::map nameIds; - std::map destructorNameIds; - std::map operatorNameIds; - std::map conversionNameIds; - std::map templateNameIds; - std::map qualifiedNameIds; - std::map selectorNameIds; + Table nameIds; + Table destructorNameIds; + Table operatorNameIds; + Table conversionNameIds; + Table templateNameIds; + Table qualifiedNameIds; + Table selectorNameIds; // types VoidType voidType; @@ -641,8 +587,7 @@ const TemplateNameId *Control::templateNameId(const Identifier *id, const FullySpecifiedType *const args, unsigned argv) { - std::vector templateArguments(args, args + argv); - return d->findOrInsertTemplateNameId(id, templateArguments); + return d->findOrInsertTemplateNameId(id, args, args + argv); } const DestructorNameId *Control::destructorNameId(const Identifier *id) @@ -658,16 +603,14 @@ const QualifiedNameId *Control::qualifiedNameId(const Name *const *names, unsigned nameCount, bool isGlobal) { - std::vector classOrNamespaceNames(names, names + nameCount); - return d->findOrInsertQualifiedNameId(classOrNamespaceNames, isGlobal); + return d->findOrInsertQualifiedNameId(names, names + nameCount, isGlobal); } const SelectorNameId *Control::selectorNameId(const Name *const *names, unsigned nameCount, bool hasArguments) { - std::vector selectorNames(names, names + nameCount); - return d->findOrInsertSelectorNameId(selectorNames, hasArguments); + return d->findOrInsertSelectorNameId(names, names + nameCount, hasArguments); } diff --git a/src/shared/cplusplus/Names.cpp b/src/shared/cplusplus/Names.cpp index 4bc64f497d7..79196da173f 100644 --- a/src/shared/cplusplus/Names.cpp +++ b/src/shared/cplusplus/Names.cpp @@ -50,17 +50,11 @@ #include "NameVisitor.h" #include "Literals.h" #include +#include #include using namespace CPlusPlus; -QualifiedNameId::QualifiedNameId(const Name *const *names, - unsigned nameCount, - bool isGlobal) - : _names(names, names + nameCount), - _isGlobal(isGlobal) -{ } - QualifiedNameId::~QualifiedNameId() { } @@ -159,13 +153,6 @@ bool DestructorNameId::isEqualTo(const Name *other) const return l->isEqualTo(r); } -TemplateNameId::TemplateNameId(const Identifier *identifier, - const FullySpecifiedType templateArguments[], - unsigned templateArgumentCount) - : _identifier(identifier), - _templateArguments(templateArguments, templateArguments + templateArgumentCount) -{ } - TemplateNameId::~TemplateNameId() { } @@ -249,13 +236,6 @@ bool ConversionNameId::isEqualTo(const Name *other) const return _type.isEqualTo(c->type()); } -SelectorNameId::SelectorNameId(const Name *const *names, - unsigned nameCount, - bool hasArguments) - : _names(names, names + nameCount), - _hasArguments(hasArguments) -{ } - SelectorNameId::~SelectorNameId() { } diff --git a/src/shared/cplusplus/Names.h b/src/shared/cplusplus/Names.h index 9bae0e07fb5..9ce31a9b60e 100644 --- a/src/shared/cplusplus/Names.h +++ b/src/shared/cplusplus/Names.h @@ -59,7 +59,10 @@ namespace CPlusPlus { class CPLUSPLUS_EXPORT QualifiedNameId: public Name { public: - QualifiedNameId(const Name *const *names, unsigned nameCount, bool isGlobal = false); + template + QualifiedNameId(_Iterator first, _Iterator last, bool isGlobal = false) + : _names(first, last), _isGlobal(isGlobal) {} + virtual ~QualifiedNameId(); virtual const Identifier *identifier() const; @@ -75,6 +78,11 @@ public: virtual const QualifiedNameId *asQualifiedNameId() const { return this; } + typedef std::vector::const_iterator NameIterator; + + NameIterator firstName() const { return _names.begin(); } + NameIterator lastName() const { return _names.end(); } + protected: virtual void accept0(NameVisitor *visitor) const; @@ -126,9 +134,10 @@ private: class CPLUSPLUS_EXPORT TemplateNameId: public Name { public: - TemplateNameId(const Identifier *identifier, - const FullySpecifiedType templateArguments[], - unsigned templateArgumentCount); + template + TemplateNameId(const Identifier *identifier, _Iterator first, _Iterator last) + : _identifier(identifier), _templateArguments(first, last) {} + virtual ~TemplateNameId(); virtual const Identifier *identifier() const; @@ -142,6 +151,11 @@ public: virtual const TemplateNameId *asTemplateNameId() const { return this; } + typedef std::vector::const_iterator TemplateArgumentIterator; + + TemplateArgumentIterator firstTemplateArgument() const { return _templateArguments.begin(); } + TemplateArgumentIterator lastTemplateArgument() const { return _templateArguments.end(); } + protected: virtual void accept0(NameVisitor *visitor) const; @@ -250,7 +264,10 @@ private: class CPLUSPLUS_EXPORT SelectorNameId: public Name { public: - SelectorNameId(const Name *const *names, unsigned nameCount, bool hasArguments); + template + SelectorNameId(_Iterator first, _Iterator last, bool hasArguments) + : _names(first, last), _hasArguments(hasArguments) {} + virtual ~SelectorNameId(); virtual const Identifier *identifier() const; @@ -264,6 +281,11 @@ public: virtual const SelectorNameId *asSelectorNameId() const { return this; } + typedef std::vector::const_iterator NameIterator; + + NameIterator firstName() const { return _names.begin(); } + NameIterator lastName() const { return _names.end(); } + protected: virtual void accept0(NameVisitor *visitor) const; @@ -274,5 +296,4 @@ private: } // end of namespace CPlusPlus - #endif // CPLUSPLUS_NAMES_H From e2a899e354ce579597feed2d79d9df9cdc3daf57 Mon Sep 17 00:00:00 2001 From: mae Date: Tue, 1 Dec 2009 14:47:10 +0100 Subject: [PATCH 62/62] improved search result selection with over and underlay done with thorbjorn --- src/plugins/texteditor/basetexteditor.cpp | 52 +++++-- src/plugins/texteditor/basetexteditor_p.h | 6 +- src/plugins/texteditor/displaysettings.cpp | 4 +- src/plugins/texteditor/texteditoroverlay.cpp | 155 ++++++++++++++++--- src/plugins/texteditor/texteditoroverlay.h | 18 ++- 5 files changed, 195 insertions(+), 40 deletions(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 2a20ed857c4..3a8c5e9437c 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -177,6 +177,7 @@ BaseTextEditor::BaseTextEditor(QWidget *parent) d->m_overlay = new TextEditorOverlay(this); d->m_searchResultOverlay = new TextEditorOverlay(this); + d->m_searchResultUnderlay = new TextEditorOverlay(this); d->setupDocumentSignals(d->m_document); d->setupDocumentSignals(d->m_document); @@ -230,6 +231,10 @@ BaseTextEditor::BaseTextEditor(QWidget *parent) slotCursorPositionChanged(); setFrameStyle(QFrame::NoFrame); + d->m_delayedUpdateTimer = new QTimer(this); + d->m_delayedUpdateTimer->setSingleShot(true); + connect(d->m_delayedUpdateTimer, SIGNAL(timeout()), viewport(), SLOT(update())); + connect(Core::EditorManager::instance(), SIGNAL(currentEditorChanged(Core::IEditor*)), this, SLOT(currentEditorChanged(Core::IEditor*))); } @@ -1822,7 +1827,9 @@ QTextBlock BaseTextEditor::collapsedBlockAt(const QPoint &pos, QRect *box) const return QTextBlock(); } -void BaseTextEditorPrivate::highlightSearchResults(const QTextBlock &block) +void BaseTextEditorPrivate::highlightSearchResults(const QTextBlock &block, + TextEditorOverlay *overlay, + QVector *selections ) { if (m_searchExpr.isEmpty()) return; @@ -1843,9 +1850,19 @@ void BaseTextEditorPrivate::highlightSearchResults(const QTextBlock &block) if (m_findScope.isNull() || (block.position() + idx >= m_findScope.selectionStart() && block.position() + idx + l <= m_findScope.selectionEnd())) { - m_searchResultOverlay->addOverlaySelection(block.position() + idx, - block.position() + idx + l, - m_searchResultFormat.background().color()); + if (selections) { + QTextLayout::FormatRange selection; + selection.start = idx; + selection.length = l; + selection.format = m_searchResultFormat; + selections->append(selection); + } + + overlay->addOverlaySelection(block.position() + idx, + block.position() + idx + l, + m_searchResultFormat.background().color().darker(120), + QColor()); + } } } @@ -2075,6 +2092,8 @@ void BaseTextEditor::paintEvent(QPaintEvent *e) QPen cursor_pen; d->m_searchResultOverlay->clear(); + d->m_searchResultUnderlay->clear(); + while (block.isValid()) { QRectF r = blockBoundingRect(block).translated(offset); @@ -2169,7 +2188,9 @@ void BaseTextEditor::paintEvent(QPaintEvent *e) selections.append(o); } } - d->highlightSearchResults(block); + + d->highlightSearchResults(block, d->m_searchResultUnderlay, &selections); + d->m_searchResultOverlay->m_selections.append(d->m_searchResultUnderlay->m_selections); selections += prioritySelections; bool drawCursor = ((editable || true) // we want the cursor in read-only mode @@ -2191,6 +2212,12 @@ void BaseTextEditor::paintEvent(QPaintEvent *e) } } + if (d->m_searchResultUnderlay && !d->m_searchExpr.isEmpty()) { + d->m_searchResultUnderlay->fill(&painter, + d->m_searchResultFormat.background().color(), + e->rect()); + d->m_searchResultUnderlay->clear(); + } layout->draw(&painter, offset, selections, er); @@ -2208,6 +2235,9 @@ void BaseTextEditor::paintEvent(QPaintEvent *e) cursor_pen = painter.pen(); } + } else if (r.bottom() >= er.top()-10 && r.top() <= er.bottom()+10) { + // search result overlays can cover adjacent blocks + d->highlightSearchResults(block, d->m_searchResultOverlay); } offset.ry() += r.height(); @@ -2421,11 +2451,13 @@ void BaseTextEditor::paintEvent(QPaintEvent *e) painter.drawLine(QPointF(lineX, 0), QPointF(lineX, viewport()->height())); } - if (d->m_searchResultOverlay) - d->m_searchResultOverlay->paint(&painter, e->rect()); - if (d->m_overlay && d->m_overlay->isVisible()) d->m_overlay->paint(&painter, e->rect()); + + if (d->m_searchResultOverlay && !d->m_searchExpr.isEmpty()) + d->m_searchResultOverlay->paint(&painter, e->rect()); +// d->m_searchResultOverlay->paintInverted(&painter, e->rect(), d->m_searchResultFormat.background().color()); + // draw the cursor last, on top of everything @@ -3934,9 +3966,9 @@ void BaseTextEditor::highlightSearchResults(const QString &txt, Find::IFindSuppo d->m_searchExpr.setCaseSensitivity((findFlags & Find::IFindSupport::FindCaseSensitively) ? Qt::CaseSensitive : Qt::CaseInsensitive); d->m_findFlags = findFlags; - viewport()->update(); -} + d->m_delayedUpdateTimer->start(10); +} void BaseTextEditor::setFindScope(const QTextCursor &scope) { diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index f7c7ed3a6b8..39bb0dfedbc 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -189,6 +189,7 @@ public: TextEditorOverlay *m_overlay; TextEditorOverlay *m_searchResultOverlay; + TextEditorOverlay *m_searchResultUnderlay; QBasicTimer collapsedBlockTimer; int visibleCollapsedBlockNumber; @@ -222,7 +223,10 @@ public: QTextCharFormat m_searchScopeFormat; QTextCharFormat m_currentLineFormat; QTextCharFormat m_currentLineNumberFormat; - void highlightSearchResults(const QTextBlock &block); + void highlightSearchResults(const QTextBlock &block, + TextEditorOverlay *overlay, + QVector *selections = 0); + QTimer *m_delayedUpdateTimer; BaseTextEditorEditable *m_editable; diff --git a/src/plugins/texteditor/displaysettings.cpp b/src/plugins/texteditor/displaysettings.cpp index 0906a9016fd..aca646ccf93 100644 --- a/src/plugins/texteditor/displaysettings.cpp +++ b/src/plugins/texteditor/displaysettings.cpp @@ -40,7 +40,7 @@ static const char * const showWrapColumnKey = "ShowWrapColumn"; static const char * const wrapColumnKey = "WrapColumn"; static const char * const visualizeWhitespaceKey = "VisualizeWhitespace"; static const char * const displayFoldingMarkersKey = "DisplayFoldingMarkers"; -static const char * const highlightCurrentLineKey = "HighlightCurrentLineKey"; +static const char * const highlightCurrentLineKey = "HighlightCurrentLine2Key"; static const char * const highlightBlocksKey = "HighlightBlocksKey"; static const char * const animateMatchingParenthesesKey= "AnimateMatchingParenthesesKey"; static const char * const mouseNavigationKey = "MouseNavigation"; @@ -56,7 +56,7 @@ DisplaySettings::DisplaySettings() : m_wrapColumn(80), m_visualizeWhitespace(false), m_displayFoldingMarkers(true), - m_highlightCurrentLine(true), + m_highlightCurrentLine(false), m_highlightBlocks(false), m_animateMatchingParentheses(true), m_mouseNavigation(true), diff --git a/src/plugins/texteditor/texteditoroverlay.cpp b/src/plugins/texteditor/texteditoroverlay.cpp index 9b76385efc9..1e3065ca3e3 100644 --- a/src/plugins/texteditor/texteditoroverlay.cpp +++ b/src/plugins/texteditor/texteditoroverlay.cpp @@ -36,7 +36,8 @@ void TextEditorOverlay::clear() update(); } -void TextEditorOverlay::addOverlaySelection(int begin, int end, const QColor &color, bool lockSize) +void TextEditorOverlay::addOverlaySelection(int begin, int end, + const QColor &fg, const QColor &bg, bool lockSize) { if (end < begin) return; @@ -44,7 +45,8 @@ void TextEditorOverlay::addOverlaySelection(int begin, int end, const QColor &co QTextDocument *document = m_editor->document(); OverlaySelection selection; - selection.m_color = color; + selection.m_fg = fg; + selection.m_bg = bg; selection.m_cursor_begin = QTextCursor(document); selection.m_cursor_begin.setPosition(begin); @@ -60,9 +62,10 @@ void TextEditorOverlay::addOverlaySelection(int begin, int end, const QColor &co } -void TextEditorOverlay::addOverlaySelection(const QTextCursor &cursor, const QColor &color, bool lockSize) +void TextEditorOverlay::addOverlaySelection(const QTextCursor &cursor, + const QColor &fg, const QColor &bg, bool lockSize) { - addOverlaySelection(cursor.selectionStart(), cursor.selectionEnd(), color, lockSize); + addOverlaySelection(cursor.selectionStart(), cursor.selectionEnd(), fg, bg, lockSize); } QRect TextEditorOverlay::rect() const @@ -70,20 +73,21 @@ QRect TextEditorOverlay::rect() const return m_viewport->rect(); } -void TextEditorOverlay::paintSelection(QPainter *painter, const QTextCursor &begin, const QTextCursor &end, const QColor &color) +QPainterPath TextEditorOverlay::createSelectionPath(const QTextCursor &begin, const QTextCursor &end, + const QRect &clip) { if (begin.isNull() || end.isNull() || begin.position() > end.position()) - return; + return QPainterPath(); QPointF offset = m_editor->contentOffset(); QRect viewportRect = rect(); QTextDocument *document = m_editor->document(); - if (m_editor->blockBoundingGeometry(begin.block()).translated(offset).top() > viewportRect.bottom() + 10 - || m_editor->blockBoundingGeometry(end.block()).translated(offset).bottom() < viewportRect.top() - 10 + if (m_editor->blockBoundingGeometry(begin.block()).translated(offset).top() > clip.bottom() + 10 + || m_editor->blockBoundingGeometry(end.block()).translated(offset).bottom() < clip.top() - 10 ) - return; // nothing of the selection is visible + return QPainterPath(); // nothing of the selection is visible QTextBlock block = begin.block(); @@ -154,7 +158,7 @@ void TextEditorOverlay::paintSelection(QPainter *painter, const QTextCursor &beg if (selection.isEmpty()) - return; + return QPainterPath(); QVector points; @@ -224,34 +228,60 @@ void TextEditorOverlay::paintSelection(QPainter *painter, const QTextCursor &beg previous = points.at(i); } path.closeSubpath(); + path.translate(offset); + return path; +} + +void TextEditorOverlay::paintSelection(QPainter *painter, const QTextCursor &begin, const QTextCursor &end, + const QColor &fg, const QColor &bg) +{ + if (begin.isNull() || end.isNull() || begin.position() > end.position()) + return; + + QPainterPath path = createSelectionPath(begin, end, m_editor->viewport()->rect()); painter->save(); - QColor penColor = color; + QColor penColor = fg; penColor.setAlpha(220); QPen pen(penColor, m_borderWidth); painter->translate(-.5, -.5); - path.translate(offset); QRectF pathRect = path.controlPointRect(); - QLinearGradient linearGrad(pathRect.topLeft(), pathRect.bottomLeft()); - QColor col1 = color.lighter(150); - col1.setAlpha(20); - QColor col2 = color; - col2.setAlpha(80); - linearGrad.setColorAt(0, col1); - linearGrad.setColorAt(1, col2); - QBrush brush(linearGrad); - + if (bg.isValid()) { + QLinearGradient linearGrad(pathRect.topLeft(), pathRect.bottomLeft()); + QColor col1 = fg.lighter(150); + col1.setAlpha(20); + QColor col2 = fg; + col2.setAlpha(80); + linearGrad.setColorAt(0, col1); + linearGrad.setColorAt(1, col2); + painter->setBrush(QBrush(linearGrad)); + } else { + painter->setBrush(QBrush()); + } painter->setRenderHint(QPainter::Antialiasing); pen.setJoinStyle(Qt::RoundJoin); painter->setPen(pen); - painter->setBrush(brush); painter->drawPath(path); painter->restore(); } +void TextEditorOverlay::fillSelection(QPainter *painter, const QTextCursor &begin, const QTextCursor &end, + const QColor &color) +{ + if (begin.isNull() || end.isNull() || begin.position() > end.position()) + return; + + QPainterPath path = createSelectionPath(begin, end, m_editor->viewport()->rect()); + + painter->save(); + painter->translate(-.5, -.5); + painter->setRenderHint(QPainter::Antialiasing); + painter->fillPath(path, color); + painter->restore(); +} void TextEditorOverlay::paint(QPainter *painter, const QRect &clip) { @@ -266,10 +296,89 @@ void TextEditorOverlay::paint(QPainter *painter, const QRect &clip) paintSelection(painter, selection.m_cursor_begin, selection.m_cursor_end, - selection.m_color + selection.m_fg, + selection.m_bg ); } } +void TextEditorOverlay::fill(QPainter *painter, const QColor &color, const QRect &clip) +{ + Q_UNUSED(clip); + for (int i = 0; i < m_selections.size(); ++i) { + const OverlaySelection &selection = m_selections.at(i); + if (selection.m_fixedLength >= 0 + && selection.m_cursor_end.position() - selection.m_cursor_begin.position() + != selection.m_fixedLength) + continue; + + fillSelection(painter, + selection.m_cursor_begin, + selection.m_cursor_end, + color + ); + } +} + +void TextEditorOverlay::paintInverted(QPainter *painter, const QRect &clip, const QColor &color) +{ + QPainterPath path; + for (int i = 0; i < m_selections.size(); ++i) { + const OverlaySelection &selection = m_selections.at(i); + if (selection.m_fixedLength >= 0 + && selection.m_cursor_end.position() - selection.m_cursor_begin.position() + != selection.m_fixedLength) + continue; + path.addPath(createSelectionPath(selection.m_cursor_begin, selection.m_cursor_end, clip)); + } + + QRect viewportRect = m_editor->viewport()->rect(); + QColor background = Qt::black; + background.setAlpha(30); + + if (path.isEmpty()) { + painter->fillRect(viewportRect, background); + return; + } + +// QPainterPath all; +// all.addRect(viewportRect); +// QPainterPath inversion = all.subtracted(path); + + painter->save(); + QColor penColor = color; + penColor.setAlpha(220); + QPen pen(penColor, m_borderWidth); + QColor brush = color; + brush.setAlpha(30); + painter->translate(-.5, -.5); + +// painter->setRenderHint(QPainter::Antialiasing); + //pen.setJoinStyle(Qt::RoundJoin); + painter->setPen(pen); + painter->setBrush(QBrush()); + painter->drawPath(path); + + painter->translate(.5, .5); + + QPixmap shadow(clip.size()); + shadow.fill(background); + QPainter pmp(&shadow); + pmp.translate(-.5, -.5); + pmp.setRenderHint(QPainter::Antialiasing); + pmp.setCompositionMode(QPainter::CompositionMode_Source); + path.translate(-clip.topLeft()); + pen.setColor(Qt::transparent); + pmp.setPen(pen); + pmp.setBrush(Qt::transparent); + pmp.drawPath(path); + pmp.end(); + + painter->drawPixmap(clip.topLeft(), shadow); + +// painter->fillPath(inversion, background); + painter->restore(); +} + diff --git a/src/plugins/texteditor/texteditoroverlay.h b/src/plugins/texteditor/texteditoroverlay.h index 6516b69bca9..79836776434 100644 --- a/src/plugins/texteditor/texteditoroverlay.h +++ b/src/plugins/texteditor/texteditoroverlay.h @@ -11,7 +11,8 @@ struct TEXTEDITOR_EXPORT OverlaySelection { OverlaySelection():m_fixedLength(-1){} QTextCursor m_cursor_begin; QTextCursor m_cursor_end; - QColor m_color; + QColor m_fg; + QColor m_bg; int m_fixedLength; }; @@ -21,7 +22,9 @@ Q_OBJECT BaseTextEditor *m_editor; QWidget *m_viewport; +public: QList m_selections; +private: bool m_visible; int m_borderWidth; @@ -31,6 +34,9 @@ public: QRect rect() const; void paint(QPainter *painter, const QRect &clip); + void fill(QPainter *painter, const QColor &color, const QRect &clip); + + void paintInverted(QPainter *painter, const QRect &clip, const QColor &color); bool isVisible() const { return m_visible; } void setVisible(bool b); @@ -40,13 +46,17 @@ public: void update(); void clear(); - void addOverlaySelection(const QTextCursor &cursor, const QColor &color, bool lockSize = false); - void addOverlaySelection(int begin, int end, const QColor &color, bool lockSize = false); + void addOverlaySelection(const QTextCursor &cursor, const QColor &fg, const QColor &bg, bool lockSize = false); + void addOverlaySelection(int begin, int end, const QColor &fg, const QColor &bg, bool lockSize = false); inline bool isEmpty() const { return m_selections.isEmpty(); } private: - void paintSelection(QPainter *painter, const QTextCursor &begin, const QTextCursor &end, const QColor &color); + QPainterPath createSelectionPath(const QTextCursor &begin, const QTextCursor &end, const QRect& clip); + void paintSelection(QPainter *painter, const QTextCursor &begin, const QTextCursor &end, + const QColor &fg, const QColor &bg); + void fillSelection(QPainter *painter, const QTextCursor &begin, const QTextCursor &end, + const QColor &color); };