QbsProjectManager: Provide classpath data to Java language server

Change-Id: Idf09ae566139a752184defe26fee082af8be31aa
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
Aaron McCarthy
2023-07-21 22:45:06 +10:00
parent df7619de8d
commit 5977c26f2e
5 changed files with 35 additions and 3 deletions

View File

@@ -56,6 +56,7 @@ const char AndroidMkSpecAbis[] = "AndroidMkSpecAbis"; // QStringList
const char AndroidSoLibPath[] = "AndroidSoLibPath"; // QStringList
const char AndroidTargets[] = "AndroidTargets"; // QStringList
const char AndroidApplicationArgs[] = "AndroidApplicationArgs"; // QString
const char AndroidClassPaths[] = "AndroidClassPath"; // QStringList
// For qbs support
const char AndroidApk[] = "Android.APK"; // QStringList

View File

@@ -291,16 +291,29 @@ void JLSClient::updateProjectFiles()
return;
const FilePath packageSourceDir = FilePath::fromVariant(
node->data(Constants::AndroidPackageSourceDir));
FilePath sourceDir = packageSourceDir.pathAppended("src");
if (!sourceDir.exists())
FilePath sourceDir = packageSourceDir.pathAppended("src/main/java");
if (!sourceDir.exists()) {
sourceDir = packageSourceDir.pathAppended("src");
if (!sourceDir.exists()) {
return;
}
}
sourceDir = sourceDir.relativeChildPath(projectDir);
const QStringList classPaths = node->data(Constants::AndroidClassPaths).toStringList();
const FilePath &sdkLocation = AndroidConfigurations::currentConfig().sdkLocation();
const QString &targetSDK = AndroidManager::buildTargetSDK(m_currentTarget);
const FilePath androidJar = sdkLocation / QString("platforms/%2/android.jar")
.arg(targetSDK);
FilePaths libs = {androidJar};
libs << packageSourceDir.pathAppended("libs").dirEntries({{"*.jar"}, QDir::Files});
for (const QString &path : classPaths)
libs << FilePath::fromString(path);
generateProjectFile(projectDir, qtSrc, project()->displayName());
generateClassPathFile(projectDir, sourceDir, libs);
}

View File

@@ -219,6 +219,22 @@ QVariant QbsProductNode::data(Id role) const
qbsAbis << archToAbi[architecture];
return qbsAbis;
}
if (role == Android::Constants::AndroidPackageSourceDir) {
return m_productData.value("properties").toObject()
.value("sourceDirectory").toString();
}
if (role == Android::Constants::AndroidClassPaths) {
QStringList paths;
for (const auto &p : m_productData.value("module-properties").toObject()
.value(Constants::JAVA_ADDITIONAL_CLASSPATHS).toArray()) {
if (p.isString())
paths << p.toString();
}
return paths;
}
return {};
}

View File

@@ -68,6 +68,7 @@ const char CPP_PLATFORMLINKERFLAGS[] = "cpp.platformLinkerFlags";
const char CPP_VCVARSALLPATH[] = "cpp.vcvarsallPath";
const char XCODE_DEVELOPERPATH[] = "xcode.developerPath";
const char XCODE_SDK[] = "xcode.sdk";
const char JAVA_ADDITIONAL_CLASSPATHS[] = "java.additionalClassPaths";
// Settings page
const char QBS_SETTINGS_CATEGORY[] = "K.Qbs";

View File

@@ -372,6 +372,7 @@ void QbsSession::insertRequestedModuleProperties(QJsonObject &request)
"cpp.useObjcPrecompiledHeader",
"cpp.useObjcxxPrecompiledHeader",
"cpp.warningLevel",
"java.additionalClassPaths",
"qbs.architecture",
"qbs.architectures",
"qbs.sysroot",