diff --git a/src/plugins/android/androidutils.cpp b/src/plugins/android/androidutils.cpp index 572ad5921b9..0156ee818ab 100644 --- a/src/plugins/android/androidutils.cpp +++ b/src/plugins/android/androidutils.cpp @@ -212,9 +212,9 @@ int minimumSDK(const Kit *kit) return minSdkVersion; } -QString buildTargetSDK(const Target *target) +QString buildTargetSDK(const BuildConfiguration *bc) { - if (auto bc = target->activeBuildConfiguration()) { + if (bc) { if (auto androidBuildApkStep = bc->buildSteps()->firstOfType()) return androidBuildApkStep->buildTargetSdk(); } diff --git a/src/plugins/android/androidutils.h b/src/plugins/android/androidutils.h index 59e673b4320..a640589db02 100644 --- a/src/plugins/android/androidutils.h +++ b/src/plugins/android/androidutils.h @@ -43,7 +43,7 @@ void setDeviceAbis(ProjectExplorer::Target *target, const QStringList &deviceAbi int deviceApiLevel(const ProjectExplorer::Target *target); void setDeviceApiLevel(ProjectExplorer::Target *target, int level); -QString buildTargetSDK(const ProjectExplorer::Target *target); +QString buildTargetSDK(const ProjectExplorer::BuildConfiguration *bc); int minimumSDK(const ProjectExplorer::BuildConfiguration *bc); int minimumSDK(const ProjectExplorer::Kit *kit); diff --git a/src/plugins/android/javalanguageserver.cpp b/src/plugins/android/javalanguageserver.cpp index 7fae9986d43..6c4876438ac 100644 --- a/src/plugins/android/javalanguageserver.cpp +++ b/src/plugins/android/javalanguageserver.cpp @@ -13,9 +13,10 @@ #include #include +#include +#include #include #include -#include #include @@ -201,10 +202,10 @@ public: void executeCommand(const LanguageServerProtocol::Command &command) override; void setCurrentProject(Project *project) override; void updateProjectFiles(); - void updateTarget(Target *target); + void updateBuildConfiguration(BuildConfiguration *bc); private: - Target *m_currentTarget = nullptr; + BuildConfiguration *m_currentBuildConfiguration = nullptr; }; void JLSClient::executeCommand(const LanguageServerProtocol::Command &command) @@ -227,9 +228,10 @@ void JLSClient::setCurrentProject(Project *project) { Client::setCurrentProject(project); QTC_ASSERT(project, return); - updateTarget(project->activeTarget()); + updateBuildConfiguration(project->activeBuildConfiguration()); updateProjectFiles(); - connect(project, &Project::activeTargetChanged, this, &JLSClient::updateTarget); + connect(project, &Project::activeBuildConfigurationChanged, this, + &JLSClient::updateBuildConfiguration); } static void generateProjectFile(const FilePath &projectDir, @@ -294,14 +296,14 @@ static void generateClassPathFile(const FilePath &projectDir, void JLSClient::updateProjectFiles() { - if (!m_currentTarget) + if (!m_currentBuildConfiguration) return; - Kit *kit = m_currentTarget->kit(); + Kit *kit = m_currentBuildConfiguration->kit(); if (RunDeviceTypeKitAspect::deviceTypeId(kit) != Android::Constants::ANDROID_DEVICE_TYPE) return; - if (ProjectNode *node = project()->findNodeForBuildKey(m_currentTarget->activeBuildKey())) { + if (ProjectNode *node = project()->findNodeForBuildKey(m_currentBuildConfiguration->activeBuildKey())) { QtSupport::QtVersion *version = QtSupport::QtKitAspect::qtVersion(kit); if (!version) return; @@ -325,7 +327,7 @@ void JLSClient::updateProjectFiles() const QStringList classPaths = node->data(Constants::AndroidClassPaths).toStringList(); const FilePath &sdkLocation = AndroidConfig::sdkLocation(); - const QString &targetSDK = buildTargetSDK(m_currentTarget); + const QString &targetSDK = buildTargetSDK(m_currentBuildConfiguration); const FilePath androidJar = sdkLocation / QString("platforms/%2/android.jar") .arg(targetSDK); FilePaths libs = {androidJar}; @@ -339,15 +341,17 @@ void JLSClient::updateProjectFiles() } } -void JLSClient::updateTarget(Target *target) +void JLSClient::updateBuildConfiguration(BuildConfiguration *bc) { - if (m_currentTarget) - disconnect(m_currentTarget, &Target::parsingFinished, this, &JLSClient::updateProjectFiles); + if (m_currentBuildConfiguration) + disconnect(m_currentBuildConfiguration->buildSystem(), &BuildSystem::parsingFinished, + this, &JLSClient::updateProjectFiles); - m_currentTarget = target; + m_currentBuildConfiguration = bc; - if (m_currentTarget) - connect(m_currentTarget, &Target::parsingFinished, this, &JLSClient::updateProjectFiles); + if (m_currentBuildConfiguration) + connect(m_currentBuildConfiguration->buildSystem(), &BuildSystem::parsingFinished, + this, &JLSClient::updateProjectFiles); updateProjectFiles(); } diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 3bc2ac7bb56..e88ed8a345e 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -345,6 +345,7 @@ void Project::setActiveTargetHelper(Target *target) (target && contains(d->m_targets, target))) { d->m_activeTarget = target; emit activeTargetChanged(d->m_activeTarget); + emit activeBuildConfigurationChanged(target ? target->activeBuildConfiguration() : nullptr); if (this == ProjectManager::startupProject()) { emit ProjectManager::instance()->activeBuildConfigurationChanged( activeBuildConfiguration()); diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index baf1e6409ac..46f6b4c1732 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -212,6 +212,8 @@ signals: void removedTarget(ProjectExplorer::Target *target); void addedTarget(ProjectExplorer::Target *target); + void activeBuildConfigurationChanged(BuildConfiguration *bc); + void vanishedTargetsChanged(); void settingsLoaded(); diff --git a/src/plugins/projectexplorer/target.cpp b/src/plugins/projectexplorer/target.cpp index 0aa9cbb4445..051694dfe85 100644 --- a/src/plugins/projectexplorer/target.cpp +++ b/src/plugins/projectexplorer/target.cpp @@ -305,7 +305,9 @@ void Target::setActiveBuildConfiguration(BuildConfiguration *bc) (bc && d->m_buildConfigurations.contains(bc) && bc != d->m_activeBuildConfiguration)) { d->m_activeBuildConfiguration = bc; - emit activeBuildConfigurationChanged(d->m_activeBuildConfiguration); + emit activeBuildConfigurationChanged(bc); + if (this == project()->activeTarget()) + emit project()->activeBuildConfigurationChanged(bc); if (bc == activeBuildConfigForActiveProject()) emit ProjectManager::instance()->activeBuildConfigurationChanged(bc); if (bc == activeBuildConfigForCurrentProject())