in plugin-dotnet-agent/src/main/kotlin/jetbrains/buildServer/dotnet/discovery/SdkRegistryProvider.kt [25:74]
override fun visit(value: WindowsRegistryValue): Boolean {
val parts = value.key.parts.takeLast(3)
val majorKey = parts[0]
val minorKey = parts[1]
val name = parts[2].lowercase()
var key: String? = null
var platform: Platform = Platform.Default
var toolInstanceType: ToolInstanceType = ToolInstanceType.WindowsSDK
var baseVersion: Version = Version.Empty
if (value.type == WindowsRegistryValueType.Str && value.text.isNotBlank()) {
// Windows SDK
if ("Windows".equals(majorKey, true)) {
WinSdkVersionRegex.matchEntire(minorKey)?.groupValues?.let { values ->
var versionStr = values[1]
val release = values[2]
if (release.isNotBlank()) {
versionStr += "-$release"
}
toolInstanceType = ToolInstanceType.WindowsSDK
baseVersion = Version.parse(versionStr)
platform = Platform.Default
key = "${minorKey}_${regKey.bitness.getPlatform(isArm = false).id}" // there is no separate arm version of windows sdk
}
}
// .NET Framework SDK
DotnetFrameworkSdkRegex.matchEntire(minorKey)?.groupValues?.let { values ->
toolInstanceType = ToolInstanceType.DotNetFrameworkSDK
baseVersion = Version.parse("${values[1]}${Version.Separator}${values[2]}")
if(baseVersion.digits == 2 || baseVersion.digits == 3) {
platform = Platform.tryParse(values[3]) ?: Platform.x86
key = "${majorKey}_${baseVersion}_$platform"
}
}
if (key != null && baseVersion != Version.Empty) {
when (name) {
InstallationFolderName -> {
sdks.getOrPut(key!!) { Sdk(toolInstanceType, platform, baseVersion) }.installationFolder = File(value.text)
}
ProductVersionName -> {
sdks.getOrPut(key!!) { Sdk(toolInstanceType, platform, baseVersion) }.detailedVersion = Version.parse(value.text.replace("..", "."))
}
}
}
}
return true
}