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; 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>()) if (auto androidBuildApkStep = bc->buildSteps()->firstOfType<AndroidBuildApkStep>())
return androidBuildApkStep->buildTargetSdk(); return androidBuildApkStep->buildTargetSdk();
} }

View File

@@ -43,7 +43,7 @@ void setDeviceAbis(ProjectExplorer::Target *target, const QStringList &deviceAbi
int deviceApiLevel(const ProjectExplorer::Target *target); int deviceApiLevel(const ProjectExplorer::Target *target);
void setDeviceApiLevel(ProjectExplorer::Target *target, int level); 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::BuildConfiguration *bc);
int minimumSDK(const ProjectExplorer::Kit *kit); int minimumSDK(const ProjectExplorer::Kit *kit);

View File

@@ -13,9 +13,10 @@
#include <languageclient/languageclientutils.h> #include <languageclient/languageclientutils.h>
#include <projectexplorer/devicesupport/devicekitaspects.h> #include <projectexplorer/devicesupport/devicekitaspects.h>
#include <projectexplorer/buildconfiguration.h>
#include <projectexplorer/buildsystem.h>
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/projectnodes.h> #include <projectexplorer/projectnodes.h>
#include <projectexplorer/target.h>
#include <qtsupport/qtkitaspect.h> #include <qtsupport/qtkitaspect.h>
@@ -201,10 +202,10 @@ public:
void executeCommand(const LanguageServerProtocol::Command &command) override; void executeCommand(const LanguageServerProtocol::Command &command) override;
void setCurrentProject(Project *project) override; void setCurrentProject(Project *project) override;
void updateProjectFiles(); void updateProjectFiles();
void updateTarget(Target *target); void updateBuildConfiguration(BuildConfiguration *bc);
private: private:
Target *m_currentTarget = nullptr; BuildConfiguration *m_currentBuildConfiguration = nullptr;
}; };
void JLSClient::executeCommand(const LanguageServerProtocol::Command &command) void JLSClient::executeCommand(const LanguageServerProtocol::Command &command)
@@ -227,9 +228,10 @@ void JLSClient::setCurrentProject(Project *project)
{ {
Client::setCurrentProject(project); Client::setCurrentProject(project);
QTC_ASSERT(project, return); QTC_ASSERT(project, return);
updateTarget(project->activeTarget()); updateBuildConfiguration(project->activeBuildConfiguration());
updateProjectFiles(); updateProjectFiles();
connect(project, &Project::activeTargetChanged, this, &JLSClient::updateTarget); connect(project, &Project::activeBuildConfigurationChanged, this,
&JLSClient::updateBuildConfiguration);
} }
static void generateProjectFile(const FilePath &projectDir, static void generateProjectFile(const FilePath &projectDir,
@@ -294,14 +296,14 @@ static void generateClassPathFile(const FilePath &projectDir,
void JLSClient::updateProjectFiles() void JLSClient::updateProjectFiles()
{ {
if (!m_currentTarget) if (!m_currentBuildConfiguration)
return; return;
Kit *kit = m_currentTarget->kit(); Kit *kit = m_currentBuildConfiguration->kit();
if (RunDeviceTypeKitAspect::deviceTypeId(kit) != Android::Constants::ANDROID_DEVICE_TYPE) if (RunDeviceTypeKitAspect::deviceTypeId(kit) != Android::Constants::ANDROID_DEVICE_TYPE)
return; return;
if (ProjectNode *node = project()->findNodeForBuildKey(m_currentTarget->activeBuildKey())) { if (ProjectNode *node = project()->findNodeForBuildKey(m_currentBuildConfiguration->activeBuildKey())) {
QtSupport::QtVersion *version = QtSupport::QtKitAspect::qtVersion(kit); QtSupport::QtVersion *version = QtSupport::QtKitAspect::qtVersion(kit);
if (!version) if (!version)
return; return;
@@ -325,7 +327,7 @@ void JLSClient::updateProjectFiles()
const QStringList classPaths = node->data(Constants::AndroidClassPaths).toStringList(); const QStringList classPaths = node->data(Constants::AndroidClassPaths).toStringList();
const FilePath &sdkLocation = AndroidConfig::sdkLocation(); 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") const FilePath androidJar = sdkLocation / QString("platforms/%2/android.jar")
.arg(targetSDK); .arg(targetSDK);
FilePaths libs = {androidJar}; FilePaths libs = {androidJar};
@@ -339,15 +341,17 @@ void JLSClient::updateProjectFiles()
} }
} }
void JLSClient::updateTarget(Target *target) void JLSClient::updateBuildConfiguration(BuildConfiguration *bc)
{ {
if (m_currentTarget) if (m_currentBuildConfiguration)
disconnect(m_currentTarget, &Target::parsingFinished, this, &JLSClient::updateProjectFiles); disconnect(m_currentBuildConfiguration->buildSystem(), &BuildSystem::parsingFinished,
this, &JLSClient::updateProjectFiles);
m_currentTarget = target; m_currentBuildConfiguration = bc;
if (m_currentTarget) if (m_currentBuildConfiguration)
connect(m_currentTarget, &Target::parsingFinished, this, &JLSClient::updateProjectFiles); connect(m_currentBuildConfiguration->buildSystem(), &BuildSystem::parsingFinished,
this, &JLSClient::updateProjectFiles);
updateProjectFiles(); updateProjectFiles();
} }

View File

@@ -345,6 +345,7 @@ void Project::setActiveTargetHelper(Target *target)
(target && contains(d->m_targets, target))) { (target && contains(d->m_targets, target))) {
d->m_activeTarget = target; d->m_activeTarget = target;
emit activeTargetChanged(d->m_activeTarget); emit activeTargetChanged(d->m_activeTarget);
emit activeBuildConfigurationChanged(target ? target->activeBuildConfiguration() : nullptr);
if (this == ProjectManager::startupProject()) { if (this == ProjectManager::startupProject()) {
emit ProjectManager::instance()->activeBuildConfigurationChanged( emit ProjectManager::instance()->activeBuildConfigurationChanged(
activeBuildConfiguration()); activeBuildConfiguration());

View File

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

View File

@@ -305,7 +305,9 @@ void Target::setActiveBuildConfiguration(BuildConfiguration *bc)
(bc && d->m_buildConfigurations.contains(bc) && (bc && d->m_buildConfigurations.contains(bc) &&
bc != d->m_activeBuildConfiguration)) { bc != d->m_activeBuildConfiguration)) {
d->m_activeBuildConfiguration = bc; d->m_activeBuildConfiguration = bc;
emit activeBuildConfigurationChanged(d->m_activeBuildConfiguration); emit activeBuildConfigurationChanged(bc);
if (this == project()->activeTarget())
emit project()->activeBuildConfigurationChanged(bc);
if (bc == activeBuildConfigForActiveProject()) if (bc == activeBuildConfigForActiveProject())
emit ProjectManager::instance()->activeBuildConfigurationChanged(bc); emit ProjectManager::instance()->activeBuildConfigurationChanged(bc);
if (bc == activeBuildConfigForCurrentProject()) if (bc == activeBuildConfigForCurrentProject())