aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-08-29 09:59:45 +0200
committerEike Ziller <eike.ziller@qt.io>2019-09-12 06:37:41 +0000
commited9177f74cf5da5eda3d2bc670ef883b66ee9a9b (patch)
tree439123496d84c84e0977fb03034ccfea4299ff17 /src/plugins/projectexplorer
parent295fb99cc64243458832a3352b01707488324a6e (diff)
CppTools: Move ProjectUpdateInfo to ProjectExplorer
Used for updating project parts, so move it near RawProjectPart. Change-Id: I77aeffbdbfb3d2ec0de600f61dcf7fbb7a355a98 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
Diffstat (limited to 'src/plugins/projectexplorer')
-rw-r--r--src/plugins/projectexplorer/rawprojectpart.cpp62
-rw-r--r--src/plugins/projectexplorer/rawprojectpart.h68
2 files changed, 129 insertions, 1 deletions
diff --git a/src/plugins/projectexplorer/rawprojectpart.cpp b/src/plugins/projectexplorer/rawprojectpart.cpp
index deb60d18d7..4f24eaf49e 100644
--- a/src/plugins/projectexplorer/rawprojectpart.cpp
+++ b/src/plugins/projectexplorer/rawprojectpart.cpp
@@ -27,7 +27,9 @@
#include "abi.h"
#include "kitinformation.h"
+#include "project.h"
#include "projectexplorerconstants.h"
+#include "target.h"
#include <utils/algorithm.h>
@@ -148,4 +150,64 @@ void RawProjectPart::setBuildTargetType(BuildTargetType type)
buildTargetType = type;
}
+KitInfo::KitInfo(Project *project)
+{
+ // Kit
+ if (Target *target = project->activeTarget())
+ kit = target->kit();
+ else
+ kit = KitManager::defaultKit();
+
+ // Toolchains
+ if (kit) {
+ cToolChain = ToolChainKitAspect::toolChain(kit, Constants::C_LANGUAGE_ID);
+ cxxToolChain = ToolChainKitAspect::toolChain(kit, Constants::CXX_LANGUAGE_ID);
+ }
+
+ // Sysroot
+ sysRootPath = SysRootKitAspect::sysRoot(kit).toString();
+}
+
+bool KitInfo::isValid() const
+{
+ return kit;
+}
+
+ToolChainInfo::ToolChainInfo(const ToolChain *toolChain,
+ const QString &sysRootPath,
+ const Utils::Environment &env)
+{
+ if (toolChain) {
+ // Keep the following cheap/non-blocking for the ui thread...
+ type = toolChain->typeId();
+ isMsvc2015ToolChain = toolChain->targetAbi().osFlavor() == Abi::WindowsMsvc2015Flavor;
+ wordWidth = toolChain->targetAbi().wordWidth();
+ targetTriple = toolChain->originalTargetTriple();
+ extraCodeModelFlags = toolChain->extraCodeModelFlags();
+
+ // ...and save the potentially expensive operations for later so that
+ // they can be run from a worker thread.
+ this->sysRootPath = sysRootPath;
+ headerPathsRunner = toolChain->createBuiltInHeaderPathsRunner(env);
+ macroInspectionRunner = toolChain->createMacroInspectionRunner();
+ }
+}
+
+ProjectUpdateInfo::ProjectUpdateInfo(Project *project,
+ const KitInfo &kitInfo,
+ const Utils::Environment &env,
+ const RawProjectParts &rawProjectParts)
+ : project(project)
+ , rawProjectParts(rawProjectParts)
+ , cToolChain(kitInfo.cToolChain)
+ , cxxToolChain(kitInfo.cxxToolChain)
+ , cToolChainInfo(ToolChainInfo(cToolChain, kitInfo.sysRootPath, env))
+ , cxxToolChainInfo(ToolChainInfo(cxxToolChain, kitInfo.sysRootPath, env))
+{}
+
+bool ProjectUpdateInfo::isValid() const
+{
+ return project && !rawProjectParts.isEmpty();
+}
+
} // namespace ProjectExplorer
diff --git a/src/plugins/projectexplorer/rawprojectpart.h b/src/plugins/projectexplorer/rawprojectpart.h
index 4f6969d92a..eda3ce5ad7 100644
--- a/src/plugins/projectexplorer/rawprojectpart.h
+++ b/src/plugins/projectexplorer/rawprojectpart.h
@@ -31,13 +31,20 @@
#include "projectexplorer_global.h"
#include "projectmacro.h"
+// this include style is forced for the cpp unit test mocks
+#include <projectexplorer/toolchain.h>
+
#include <utils/cpplanguage_details.h>
+#include <utils/environment.h>
+
+#include <QPointer>
#include <functional>
namespace ProjectExplorer {
-class ToolChain;
+class Kit;
+class Project;
class PROJECTEXPLORER_EXPORT RawProjectPartFlags
{
@@ -114,4 +121,63 @@ public:
using RawProjectParts = QVector<RawProjectPart>;
+class PROJECTEXPLORER_EXPORT KitInfo
+{
+public:
+ explicit KitInfo(Project *project);
+
+ bool isValid() const;
+
+ Kit *kit = nullptr;
+ ToolChain *cToolChain = nullptr;
+ ToolChain *cxxToolChain = nullptr;
+
+ Utils::QtVersion projectPartQtVersion = Utils::QtVersion::None;
+
+ QString sysRootPath;
+};
+
+class PROJECTEXPLORER_EXPORT ToolChainInfo
+{
+public:
+ ToolChainInfo() = default;
+ ToolChainInfo(const ProjectExplorer::ToolChain *toolChain,
+ const QString &sysRootPath,
+ const Utils::Environment &env);
+
+ bool isValid() const { return type.isValid(); }
+
+public:
+ Core::Id type;
+ bool isMsvc2015ToolChain = false;
+ unsigned wordWidth = 0;
+ QString targetTriple;
+ QStringList extraCodeModelFlags;
+
+ QString sysRootPath; // For headerPathsRunner.
+ ProjectExplorer::ToolChain::BuiltInHeaderPathsRunner headerPathsRunner;
+ ProjectExplorer::ToolChain::MacroInspectionRunner macroInspectionRunner;
+};
+
+class PROJECTEXPLORER_EXPORT ProjectUpdateInfo
+{
+public:
+ ProjectUpdateInfo() = default;
+ ProjectUpdateInfo(Project *project,
+ const KitInfo &kitInfo,
+ const Utils::Environment &env,
+ const RawProjectParts &rawProjectParts);
+ bool isValid() const;
+
+public:
+ QPointer<Project> project;
+ RawProjectParts rawProjectParts;
+
+ const ToolChain *cToolChain = nullptr;
+ const ToolChain *cxxToolChain = nullptr;
+
+ ToolChainInfo cToolChainInfo;
+ ToolChainInfo cxxToolChainInfo;
+};
+
} // namespace ProjectExplorer