in src/main/kotlin/com/jetbrains/plugin/jtreg/configuration/SdkUtils.kt [55:98]
fun detectLocalJdkBuilds(project: Project) {
val buildDir = getBuildDir(project) ?: return
if (!buildDir.exists()) return
val topDirs = Files.walk(buildDir, 1)
.filter { it.isDirectory() }
.map { it.resolve("jdk") }
.filter { it.exists() }
.toList()
topDirs.forEach {
val releaseFilePath = it.resolve("release")
if (!releaseFilePath.exists()) return@forEach
if (!it.resolve("bin/java").exists()) return@forEach
if (!it.resolve("bin/javac").exists()) return@forEach
val name = "Local build ${it.parent.fileName}"
val version = getVersion(releaseFilePath, it.parent.fileName.toString())
val homePath = it.toString()
val existingJdk = ProjectJdkTable.getInstance().allJdks.firstOrNull { sdk -> sdk.homePath == homePath }
existingJdk?.let {
if (existingJdk.versionString == version && existingJdk.name == name) {
return@forEach
} else {
existingJdk.sdkModificator.name = name
existingJdk.sdkModificator.versionString = version
val newSdk = createLocalJdk(name, version, homePath)
WriteAction.runAndWait<RuntimeException> {
ProjectJdkTable.getInstance().removeJdk(existingJdk)
ProjectJdkTable.getInstance().addJdk(newSdk)
JavaSdk.getInstance().setupSdkPaths(newSdk)
}
}
} ?: run {
WriteAction.runAndWait<RuntimeException> {
val similarNamesCount = ProjectJdkTable.getInstance().allJdks.count { sdk -> sdk.name.startsWith(name) }
val sdkName = if (similarNamesCount <= 1) name else "$name (${similarNamesCount})"
val sdk = createLocalJdk(sdkName, version, homePath)
ProjectJdkTable.getInstance().addJdk(sdk)
JavaSdk.getInstance().setupSdkPaths(sdk)
}
}
}
}