diff options
author | Marco Bubke <marco.bubke@theqtcompany.com> | 2016-01-13 14:32:28 +0100 |
---|---|---|
committer | Marco Bubke <marco.bubke@theqtcompany.com> | 2016-01-13 14:47:04 +0000 |
commit | da1f8e66e55d88919079e619a9d43ba71a4e517d (patch) | |
tree | a2aeac5417495854b198a5329c896e3e60767988 | |
parent | 2b4cadf1fe138bfa23ca42ffe63c9da5d4d8827c (diff) | |
download | qt-creator-da1f8e66e55d88919079e619a9d43ba71a4e517d.tar.gz |
CppTools: Move ProjectInfo in its own header file
Change-Id: I0fc4c73553a29585d4ff7c8d6593acb6975d1607
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
-rw-r--r-- | src/plugins/cpptools/cppprojects.cpp | 115 | ||||
-rw-r--r-- | src/plugins/cpptools/cppprojects.h | 41 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptools.pro | 6 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptools.qbs | 1 | ||||
-rw-r--r-- | src/plugins/cpptools/projectinfo.cpp | 150 | ||||
-rw-r--r-- | src/plugins/cpptools/projectinfo.h | 85 | ||||
-rw-r--r-- | src/plugins/cpptools/projectpart.cpp | 1 | ||||
-rw-r--r-- | src/plugins/cpptools/projectpart.h | 1 |
8 files changed, 243 insertions, 157 deletions
diff --git a/src/plugins/cpptools/cppprojects.cpp b/src/plugins/cpptools/cppprojects.cpp index 317baa6d68..d1719c3b72 100644 --- a/src/plugins/cpptools/cppprojects.cpp +++ b/src/plugins/cpptools/cppprojects.cpp @@ -49,121 +49,6 @@ using namespace CppTools; using namespace CppTools::Internal; using namespace ProjectExplorer; - - -ProjectInfo::ProjectInfo() -{} - -ProjectInfo::ProjectInfo(QPointer<Project> project) - : m_project(project) -{} - -bool ProjectInfo::operator ==(const ProjectInfo &other) const -{ - return m_project == other.m_project - && m_projectParts == other.m_projectParts - && m_compilerCallData == other.m_compilerCallData - && m_headerPaths == other.m_headerPaths - && m_sourceFiles == other.m_sourceFiles - && m_defines == other.m_defines; -} - -bool ProjectInfo::operator !=(const ProjectInfo &other) const -{ - return !operator ==(other); -} - -bool ProjectInfo::definesChanged(const ProjectInfo &other) const -{ - return m_defines != other.m_defines; -} - -bool ProjectInfo::configurationChanged(const ProjectInfo &other) const -{ - return definesChanged(other) || m_headerPaths != other.m_headerPaths; -} - -bool ProjectInfo::configurationOrFilesChanged(const ProjectInfo &other) const -{ - return configurationChanged(other) || m_sourceFiles != other.m_sourceFiles; -} - -bool ProjectInfo::isValid() const -{ - return !m_project.isNull(); -} - -QPointer<Project> ProjectInfo::project() const -{ - return m_project; -} - -const QList<ProjectPart::Ptr> ProjectInfo::projectParts() const -{ - return m_projectParts; -} - -void ProjectInfo::appendProjectPart(const ProjectPart::Ptr &part) -{ - if (part) - m_projectParts.append(part); -} - -void ProjectInfo::finish() -{ - typedef ProjectPartHeaderPath HeaderPath; - - QSet<HeaderPath> incs; - foreach (const ProjectPart::Ptr &part, m_projectParts) { - part->updateLanguageFeatures(); - // Update header paths - foreach (const HeaderPath &hp, part->headerPaths) { - if (!incs.contains(hp)) { - incs.insert(hp); - m_headerPaths += hp; - } - } - - // Update source files - foreach (const ProjectFile &file, part->files) - m_sourceFiles.insert(file.path); - - // Update defines - m_defines.append(part->toolchainDefines); - m_defines.append(part->projectDefines); - if (!part->projectConfigFile.isEmpty()) { - m_defines.append('\n'); - m_defines += ProjectPart::readProjectConfigFile(part); - m_defines.append('\n'); - } - } -} - -const ProjectPartHeaderPaths ProjectInfo::headerPaths() const -{ - return m_headerPaths; -} - -const QSet<QString> ProjectInfo::sourceFiles() const -{ - return m_sourceFiles; -} - -const QByteArray ProjectInfo::defines() const -{ - return m_defines; -} - -void ProjectInfo::setCompilerCallData(const CompilerCallData &data) -{ - m_compilerCallData = data; -} - -ProjectInfo::CompilerCallData ProjectInfo::compilerCallData() const -{ - return m_compilerCallData; -} - namespace { class ProjectFileCategorizer { diff --git a/src/plugins/cpptools/cppprojects.h b/src/plugins/cpptools/cppprojects.h index d6257abb3f..7394105852 100644 --- a/src/plugins/cpptools/cppprojects.h +++ b/src/plugins/cpptools/cppprojects.h @@ -34,6 +34,7 @@ #include "cpptools_global.h" #include "cppprojectfile.h" +#include "projectinfo.h" #include "projectpart.h" #include <projectexplorer/toolchain.h> @@ -50,46 +51,6 @@ namespace ProjectExplorer { class Project; } namespace Utils { class FileName; } namespace CppTools { -class ProjectFile; - -class CPPTOOLS_EXPORT ProjectInfo -{ -public: - ProjectInfo(); - ProjectInfo(QPointer<ProjectExplorer::Project> project); - - bool isValid() const; - - bool operator ==(const ProjectInfo &other) const; - bool operator !=(const ProjectInfo &other) const; - bool definesChanged(const ProjectInfo &other) const; - bool configurationChanged(const ProjectInfo &other) const; - bool configurationOrFilesChanged(const ProjectInfo &other) const; - - QPointer<ProjectExplorer::Project> project() const; - const QList<ProjectPart::Ptr> projectParts() const; - - void appendProjectPart(const ProjectPart::Ptr &part); - void finish(); - - const ProjectPartHeaderPaths headerPaths() const; - const QSet<QString> sourceFiles() const; - const QByteArray defines() const; - - // Source file --> List of compiler calls - typedef QHash<QString, QList<QStringList>> CompilerCallData; - void setCompilerCallData(const CompilerCallData &data); - CompilerCallData compilerCallData() const; - -private: - QPointer<ProjectExplorer::Project> m_project; - QList<ProjectPart::Ptr> m_projectParts; - CompilerCallData m_compilerCallData; - // The members below are (re)calculated from the project parts with finish() - ProjectPartHeaderPaths m_headerPaths; - QSet<QString> m_sourceFiles; - QByteArray m_defines; -}; class CPPTOOLS_EXPORT ProjectPartBuilder { diff --git a/src/plugins/cpptools/cpptools.pro b/src/plugins/cpptools/cpptools.pro index c2bd7d89e2..b73333790f 100644 --- a/src/plugins/cpptools/cpptools.pro +++ b/src/plugins/cpptools/cpptools.pro @@ -71,7 +71,8 @@ HEADERS += \ cpptoolsbridgeinterface.h \ cpptoolsbridgeqtcreatorimplementation.h \ projectpart.h \ - projectpartheaderpath.h + projectpartheaderpath.h \ + projectinfo.h SOURCES += \ abstracteditorsupport.cpp \ @@ -138,7 +139,8 @@ SOURCES += \ senddocumenttracker.cpp \ cpptoolsbridge.cpp \ cpptoolsbridgeqtcreatorimplementation.cpp \ - projectpart.cpp + projectpart.cpp \ + projectinfo.cpp FORMS += \ completionsettingspage.ui \ diff --git a/src/plugins/cpptools/cpptools.qbs b/src/plugins/cpptools/cpptools.qbs index f7ec8e0d14..40b680deed 100644 --- a/src/plugins/cpptools/cpptools.qbs +++ b/src/plugins/cpptools/cpptools.qbs @@ -86,6 +86,7 @@ QtcPlugin { "includeutils.cpp", "includeutils.h", "indexitem.cpp", "indexitem.h", "insertionpointlocator.cpp", "insertionpointlocator.h", + "projectinfo.cpp", "projectinfo.h", "projectpart.cpp", "projectpart.h", "projectpartheaderpath.h", "searchsymbols.cpp", "searchsymbols.h", diff --git a/src/plugins/cpptools/projectinfo.cpp b/src/plugins/cpptools/projectinfo.cpp new file mode 100644 index 0000000000..c34240cd0f --- /dev/null +++ b/src/plugins/cpptools/projectinfo.cpp @@ -0,0 +1,150 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/contact-us. +** +** 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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "projectinfo.h" + +#include <projectexplorer/project.h> + +namespace CppTools { + +ProjectInfo::ProjectInfo() +{} + +ProjectInfo::ProjectInfo(QPointer<ProjectExplorer::Project> project) + : m_project(project) +{} + +bool ProjectInfo::operator ==(const ProjectInfo &other) const +{ + return m_project == other.m_project + && m_projectParts == other.m_projectParts + && m_compilerCallData == other.m_compilerCallData + && m_headerPaths == other.m_headerPaths + && m_sourceFiles == other.m_sourceFiles + && m_defines == other.m_defines; +} + +bool ProjectInfo::operator !=(const ProjectInfo &other) const +{ + return !operator ==(other); +} + +bool ProjectInfo::definesChanged(const ProjectInfo &other) const +{ + return m_defines != other.m_defines; +} + +bool ProjectInfo::configurationChanged(const ProjectInfo &other) const +{ + return definesChanged(other) || m_headerPaths != other.m_headerPaths; +} + +bool ProjectInfo::configurationOrFilesChanged(const ProjectInfo &other) const +{ + return configurationChanged(other) || m_sourceFiles != other.m_sourceFiles; +} + +bool ProjectInfo::isValid() const +{ + return !m_project.isNull(); +} + +QPointer<ProjectExplorer::Project> ProjectInfo::project() const +{ + return m_project; +} + +const QList<ProjectPart::Ptr> ProjectInfo::projectParts() const +{ + return m_projectParts; +} + +void ProjectInfo::appendProjectPart(const ProjectPart::Ptr &part) +{ + if (part) + m_projectParts.append(part); +} + +void ProjectInfo::finish() +{ + typedef ProjectPartHeaderPath HeaderPath; + + QSet<HeaderPath> incs; + foreach (const ProjectPart::Ptr &part, m_projectParts) { + part->updateLanguageFeatures(); + // Update header paths + foreach (const HeaderPath &hp, part->headerPaths) { + if (!incs.contains(hp)) { + incs.insert(hp); + m_headerPaths += hp; + } + } + + // Update source files + foreach (const ProjectFile &file, part->files) + m_sourceFiles.insert(file.path); + + // Update defines + m_defines.append(part->toolchainDefines); + m_defines.append(part->projectDefines); + if (!part->projectConfigFile.isEmpty()) { + m_defines.append('\n'); + m_defines += ProjectPart::readProjectConfigFile(part); + m_defines.append('\n'); + } + } +} + +const ProjectPartHeaderPaths ProjectInfo::headerPaths() const +{ + return m_headerPaths; +} + +const QSet<QString> ProjectInfo::sourceFiles() const +{ + return m_sourceFiles; +} + +const QByteArray ProjectInfo::defines() const +{ + return m_defines; +} + +void ProjectInfo::setCompilerCallData(const CompilerCallData &data) +{ + m_compilerCallData = data; +} + +ProjectInfo::CompilerCallData ProjectInfo::compilerCallData() const +{ + return m_compilerCallData; +} + +} // namespace CppTools diff --git a/src/plugins/cpptools/projectinfo.h b/src/plugins/cpptools/projectinfo.h new file mode 100644 index 0000000000..2440c1b142 --- /dev/null +++ b/src/plugins/cpptools/projectinfo.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/contact-us. +** +** 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 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef CPPTOOLS_PROJECTINFO_H +#define CPPTOOLS_PROJECTINFO_H + +#include "cpptools_global.h" + +#include "projectpart.h" + +#include <QHash> +#include <QPointer> +#include <QSet> + +namespace CppTools { + +class CPPTOOLS_EXPORT ProjectInfo +{ +public: + ProjectInfo(); + ProjectInfo(QPointer<ProjectExplorer::Project> project); + + bool isValid() const; + + bool operator ==(const ProjectInfo &other) const; + bool operator !=(const ProjectInfo &other) const; + bool definesChanged(const ProjectInfo &other) const; + bool configurationChanged(const ProjectInfo &other) const; + bool configurationOrFilesChanged(const ProjectInfo &other) const; + + QPointer<ProjectExplorer::Project> project() const; + const QList<ProjectPart::Ptr> projectParts() const; + + void appendProjectPart(const ProjectPart::Ptr &part); + void finish(); + + const ProjectPartHeaderPaths headerPaths() const; + const QSet<QString> sourceFiles() const; + const QByteArray defines() const; + + // Source file --> List of compiler calls + typedef QHash<QString, QList<QStringList>> CompilerCallData; + void setCompilerCallData(const CompilerCallData &data); + CompilerCallData compilerCallData() const; + +private: + QPointer<ProjectExplorer::Project> m_project; + QList<ProjectPart::Ptr> m_projectParts; + CompilerCallData m_compilerCallData; + // The members below are (re)calculated from the project parts with finish() + ProjectPartHeaderPaths m_headerPaths; + QSet<QString> m_sourceFiles; + QByteArray m_defines; +}; + +} // namespace CppTools + +#endif // CPPTOOLS_PROJECTINFO_H diff --git a/src/plugins/cpptools/projectpart.cpp b/src/plugins/cpptools/projectpart.cpp index bd7a1138b7..796e788d53 100644 --- a/src/plugins/cpptools/projectpart.cpp +++ b/src/plugins/cpptools/projectpart.cpp @@ -27,6 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ + #include "projectpart.h" #include <projectexplorer/headerpath.h> diff --git a/src/plugins/cpptools/projectpart.h b/src/plugins/cpptools/projectpart.h index a04299cb0b..d0807338a9 100644 --- a/src/plugins/cpptools/projectpart.h +++ b/src/plugins/cpptools/projectpart.h @@ -27,6 +27,7 @@ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ****************************************************************************/ + #ifndef CPPTOOLS_PROJECTPART_H #define CPPTOOLS_PROJECTPART_H |