diff options
author | Eike Ziller <eike.ziller@qt.io> | 2019-08-29 09:59:45 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2019-09-12 06:37:41 +0000 |
commit | ed9177f74cf5da5eda3d2bc670ef883b66ee9a9b (patch) | |
tree | 439123496d84c84e0977fb03034ccfea4299ff17 /src/plugins/projectexplorer | |
parent | 295fb99cc64243458832a3352b01707488324a6e (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.cpp | 62 | ||||
-rw-r--r-- | src/plugins/projectexplorer/rawprojectpart.h | 68 |
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 |