summaryrefslogtreecommitdiff
path: root/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp')
-rw-r--r--src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp59
1 files changed, 37 insertions, 22 deletions
diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
index ec16d72bd5..d9bf685f08 100644
--- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
+++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp
@@ -34,6 +34,7 @@
#include <projectexplorer/buildinfo.h>
#include <projectexplorer/buildsteplist.h>
#include <projectexplorer/buildtargetinfo.h>
+#include <projectexplorer/deploymentdata.h>
#include <projectexplorer/gcctoolchain.h>
#include <projectexplorer/headerpath.h>
#include <projectexplorer/kitinformation.h>
@@ -47,6 +48,7 @@
#include <texteditor/textdocument.h>
#include <utils/algorithm.h>
+#include <utils/filesystemwatcher.h>
#include <utils/qtcassert.h>
#include <utils/runextensions.h>
@@ -390,26 +392,27 @@ void CompilationDatabaseProject::buildTreeAndProjectParts()
setRootProjectNode(std::move(root));
m_cppCodeModelUpdater->update({this, kitInfo, activeParseEnvironment(), rpps});
+ updateDeploymentData();
}
CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FilePath &projectFile)
: Project(Constants::COMPILATIONDATABASEMIMETYPE, projectFile)
, m_cppCodeModelUpdater(std::make_unique<CppTools::CppProjectUpdater>())
, m_parseDelay(new QTimer(this))
+ , m_deployFileWatcher(new FileSystemWatcher(this))
{
setId(Constants::COMPILATIONDATABASEPROJECT_ID);
setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID));
setDisplayName(projectDirectory().fileName());
- setRequiredKitPredicate([](const Kit *) { return false; });
- setPreferredKitPredicate([](const Kit *) { return false; });
m_kit.reset(KitManager::defaultKit()->clone());
addTargetForKit(m_kit.get());
- connect(this,
- &CompilationDatabaseProject::rootProjectDirectoryChanged,
- m_parseDelay,
- QOverload<>::of(&QTimer::start));
+ connect(this, &CompilationDatabaseProject::rootProjectDirectoryChanged,
+ this, [this] {
+ m_projectFileHash.clear();
+ m_parseDelay->start();
+ });
setExtraProjectFiles(
{projectFile.stringAppended(Constants::COMPILATIONDATABASEPROJECT_FILES_SUFFIX)});
@@ -419,6 +422,10 @@ CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FilePath &pr
m_parseDelay->setInterval(1000);
connect(this, &Project::projectFileIsDirty, this, &CompilationDatabaseProject::reparseProject);
+ connect(m_deployFileWatcher, &FileSystemWatcher::fileChanged,
+ this, &CompilationDatabaseProject::updateDeploymentData);
+ connect(this, &Project::activeTargetChanged,
+ this, &CompilationDatabaseProject::updateDeploymentData);
}
Utils::FilePath CompilationDatabaseProject::rootPathFromSettings() const
@@ -458,14 +465,34 @@ void CompilationDatabaseProject::reparseProject()
m_mimeBinaryCache,
guardParsingRun(),
this);
- connect(m_parser, &CompilationDbParser::finished, this, [this](bool success) {
- if (success)
+ connect(m_parser, &CompilationDbParser::finished, this, [this](ParseResult result) {
+ m_projectFileHash = m_parser->projectFileHash();
+ if (result == ParseResult::Success)
buildTreeAndProjectParts();
m_parser = nullptr;
});
+ m_parser->setPreviousProjectFileHash(m_projectFileHash);
m_parser->start();
}
+void CompilationDatabaseProject::updateDeploymentData()
+{
+ Target * const target = activeTarget();
+ if (!target)
+ return;
+ const Utils::FilePath deploymentFilePath = projectDirectory()
+ .pathAppended("QtCreatorDeployment.txt");
+ DeploymentData deploymentData;
+ deploymentData.addFilesFromDeploymentFile(deploymentFilePath.toString(),
+ projectDirectory().toString());
+ target->setDeploymentData(deploymentData);
+ if (m_deployFileWatcher->files() != QStringList(deploymentFilePath.toString())) {
+ m_deployFileWatcher->removeFiles(m_deployFileWatcher->files());
+ m_deployFileWatcher->addFile(deploymentFilePath.toString(),
+ FileSystemWatcher::WatchModifiedDate);
+ }
+}
+
CompilationDatabaseProject::~CompilationDatabaseProject()
{
m_parserWatcher.cancel();
@@ -498,19 +525,6 @@ CompilationDatabaseBuildConfiguration::CompilationDatabaseBuildConfiguration(
ProjectExplorer::Target *target, Core::Id id)
: ProjectExplorer::BuildConfiguration(target, id)
{
- target->setApplicationTargets({BuildTargetInfo()});
-}
-
-void CompilationDatabaseBuildConfiguration::initialize()
-{
- ProjectExplorer::BuildConfiguration::initialize();
- BuildStepList *buildSteps = stepList(ProjectExplorer::Constants::BUILDSTEPS_BUILD);
- buildSteps->appendStep(ProjectExplorer::Constants::PROCESS_STEP_ID);
-}
-
-ProjectExplorer::NamedWidget *CompilationDatabaseBuildConfiguration::createConfigWidget()
-{
- return new ProjectExplorer::NamedWidget();
}
CompilationDatabaseBuildConfigurationFactory::CompilationDatabaseBuildConfigurationFactory()
@@ -523,13 +537,14 @@ CompilationDatabaseBuildConfigurationFactory::CompilationDatabaseBuildConfigurat
}
QList<BuildInfo> CompilationDatabaseBuildConfigurationFactory::availableBuilds
- (const Kit *kit, const FilePath &, bool) const
+ (const Kit *kit, const FilePath &projectPath, bool) const
{
const QString name = tr("Release");
ProjectExplorer::BuildInfo info(this);
info.typeName = name;
info.displayName = name;
info.buildType = BuildConfiguration::Release;
+ info.buildDirectory = projectPath.parentDir();
info.kitId = kit->id();
return {info};
}