Android: Use BuildConfiguration instead of Target

... in JLSClient.

Change-Id: I9c8fc0c3b381021c12c9e35afe38574c429c6fee
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Christian Kandeler
2025-03-07 12:09:21 +01:00
parent d408ad2e4f
commit 35e6763b6e
6 changed files with 28 additions and 19 deletions

View File

@@ -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<AndroidBuildApkStep>())
return androidBuildApkStep->buildTargetSdk();
}

View File

@@ -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);

View File

@@ -13,9 +13,10 @@
#include <languageclient/languageclientutils.h>
#include <projectexplorer/devicesupport/devicekitaspects.h>
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsystem.h>
#include <projectexplorer/project.h>
#include <projectexplorer/projectnodes.h>
#include <projectexplorer/target.h>
#include <qtsupport/qtkitaspect.h>
@@ -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();
}

View File

@@ -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());

View File

@@ -212,6 +212,8 @@ signals:
void removedTarget(ProjectExplorer::Target *target);
void addedTarget(ProjectExplorer::Target *target);
void activeBuildConfigurationChanged(BuildConfiguration *bc);
void vanishedTargetsChanged();
void settingsLoaded();

View File

@@ -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())