override fun visit()

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
                        }