OPENIDE fix compile errors for 2025.3.2

(cherry picked from commit 9d93258eed)
This commit is contained in:
Nikita Iarychenko
2026-01-28 16:29:23 +04:00
parent cf00a9ffb8
commit c002bcb0bf
3 changed files with 53 additions and 67 deletions

View File

@@ -4,11 +4,9 @@
// Any modifications are available on the same license terms as the original source code.
package com.intellij.internal.statistic.eventLog.connection
import com.jetbrains.fus.reporting.FusHttpClient
import com.jetbrains.fus.reporting.FusJsonSerializer
import com.jetbrains.fus.reporting.configuration.ConfigurationClient
import com.jetbrains.fus.reporting.configuration.RegionCode
import com.jetbrains.fus.reporting.model.http.HttpClientBuilder
import com.jetbrains.fus.reporting.model.http.HttpRequestBuilder
import com.jetbrains.fus.reporting.model.serialization.Serializer
import java.util.concurrent.TimeUnit
class ConfigurationClientFactory {
@@ -21,14 +19,6 @@ class ConfigurationClientFactory {
* @param productVersion Product version
* @param isTestConfiguration Set it to true to use the test configuration url,
* otherwise set it false to use the production one.
* @param httpClientBuilder FUS-client supports java http client com.jetbrains.fus.reporting.connection.JavaHttpClientBuilder,
* You can configure it or use another http client [com.jetbrains.fus.reporting.model.http.HttpClientBuilder].
* @param httpRequestBuilder FUS-client supports java http request com.jetbrains.fus.reporting.connection.JavaHttpRequestBuilder,
* You can configure it or use another http request [com.jetbrains.fus.reporting.model.http.HttpRequestBuilder].
* @param regionCode The region code for the downloading configuration,
* configuration url depends on the region code.
* Configuration template url for China region code is [com.jetbrains.fus.reporting.configuration.RegionCode.CN].
* Configuration template url for all other regions is [com.jetbrains.fus.reporting.configuration.RegionCode.ALL].
* @param cacheTimeoutMs The frequency of the downloading configuration, it is 10 minutes by default.
* @param serializer FUS-client supports jackson serialization com.jetbrains.fus.reporting.serialization.FusJacksonSerializer,
* kotlin serialization com.jetbrains.fus.reporting.serialization.FusKotlinSerializer.
@@ -40,20 +30,16 @@ class ConfigurationClientFactory {
productCode: String,
productVersion: String,
isTestConfiguration: Boolean,
httpClientBuilder: HttpClientBuilder,
httpRequestBuilder: HttpRequestBuilder,
regionCode: RegionCode = RegionCode.ALL,
httpClient: FusHttpClient,
cacheTimeoutMs: Long = TimeUnit.MINUTES.toMillis(10),
serializer: Serializer
serializer: FusJsonSerializer
): ConfigurationClient {
return createConfigurationClient(
recorderId,
productCode,
productVersion,
isTestConfiguration,
httpClientBuilder,
httpRequestBuilder,
regionCode,
httpClient,
cacheTimeoutMs,
serializer
)
@@ -64,11 +50,9 @@ class ConfigurationClientFactory {
productCode: String,
productVersion: String,
isTestConfiguration: Boolean,
httpClientBuilder: HttpClientBuilder,
httpRequestBuilder: HttpRequestBuilder,
regionCode: RegionCode,
httpClient: FusHttpClient,
cacheTimeoutMs: Long,
serializer: Serializer
serializer: FusJsonSerializer
): ConfigurationClient {
val eventLogSettingsURLTemplate = "https://stats.openide.ru/storage/fus/config/v4/%s/%s.json"
val configurationUrl: String =
@@ -81,8 +65,7 @@ class ConfigurationClientFactory {
configurationUrl,
productCode,
productVersion,
httpClientBuilder.newClient(configurationUrl),
httpRequestBuilder.newGetRequest(configurationUrl),
httpClient,
serializer,
cacheTimeoutMs
)

View File

@@ -1,4 +1,7 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
//
// Modified by Nikita Iarychenko at 2025 as part of the OpenIDE project(https://openide.ru).
// Any modifications are available on the same license terms as the original source code.
package com.intellij.internal.statistic.eventLog.connection
import com.fasterxml.jackson.annotation.JsonInclude
@@ -13,12 +16,11 @@ import com.fasterxml.jackson.databind.json.JsonMapper
import com.intellij.internal.statistic.eventLog.EventLogApplicationInfo
import com.jetbrains.fus.reporting.FusJsonSerializer
import com.jetbrains.fus.reporting.configuration.ConfigurationClient
import com.jetbrains.fus.reporting.configuration.ConfigurationClientFactory
import com.jetbrains.fus.reporting.configuration.RegionCode
import com.jetbrains.fus.reporting.jvm.JvmHttpClient
import com.jetbrains.fus.reporting.jvm.ProxyInfo
import com.jetbrains.fus.reporting.model.serialization.SerializationException
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.annotations.VisibleForTesting
import java.util.concurrent.TimeUnit
/**
@@ -34,7 +36,8 @@ open class EventLogUploadSettingsClient(
cacheTimeoutMs: Long = TimeUnit.MINUTES.toMillis(10)
) : EventLogSettingsClient() {
companion object {
const val chinaRegion: String = "china" //com.intellij.ide.Region.CHINA
@VisibleForTesting
val chinaRegion: String = "china" //com.intellij.ide.Region.CHINA
}
override var configurationClient: ConfigurationClient = ConfigurationClientFactory.create(
recorderId = recorderId,
@@ -49,7 +52,6 @@ open class EventLogUploadSettingsClient(
extraHeadersProvider = { applicationInfo.connectionSettings.provideExtraHeaders() },
userAgent = applicationInfo.connectionSettings.provideUserAgent()
),
regionCode = if (applicationInfo.regionalCode == chinaRegion) RegionCode.CN else RegionCode.ALL,
serializer = FusJacksonSerializer(),
cacheTimeoutMs = cacheTimeoutMs
)
@@ -127,4 +129,4 @@ open class EventLogUploadSettingsClient(
return CustomPrettyPrinter(this)
}
}
}
}

View File

@@ -4,26 +4,22 @@
// Any modifications are available on the same license terms as the original source code.
package com.intellij.internal.statistic.eventLog.connection
import com.jetbrains.fus.reporting.FusHttpClient
import com.jetbrains.fus.reporting.FusJsonSerializer
import com.jetbrains.fus.reporting.configuration.ConfigurationClient
import com.jetbrains.fus.reporting.model.config.v4.Configuration
import com.jetbrains.fus.reporting.model.config.v4.ConfigurationVersion
import com.jetbrains.fus.reporting.model.exceptions.StatsResponseException
import com.jetbrains.fus.reporting.model.http.HttpClient
import com.jetbrains.fus.reporting.model.http.HttpRequest
import com.jetbrains.fus.reporting.model.http.HttpResponse
import com.jetbrains.fus.reporting.HttpResponse
import com.jetbrains.fus.reporting.model.serialization.SerializationException
import com.jetbrains.fus.reporting.model.serialization.Serializer
import java.io.IOException
import java.io.InputStream
import java.nio.charset.StandardCharsets
internal class RemoteConfigurationClient internal constructor(
override val configurationUrl: String,
override val productCode: String,
private val productVersion: String,
private val httpClient: HttpClient,
private val httpRequest: HttpRequest,
private val serializer: Serializer,
private val httpClient: FusHttpClient,
private val serializer: FusJsonSerializer,
cacheTimeoutMs: Long
) : ConfigurationClient() {
private val cachedConfigurationVersion: StatisticsCachingSupplier<ConfigurationVersion?> =
@@ -46,27 +42,23 @@ internal class RemoteConfigurationClient internal constructor(
private fun loadConfiguration(): ConfigurationVersion? {
val processor = object : ResponseProcessor<ConfigurationVersion?> {
override fun onSucceed(response: HttpResponse): ConfigurationVersion? {
val responseContent: InputStream? = response.read()
if (responseContent != null) {
val content = responseContent.bufferedReader(StandardCharsets.UTF_8).use { reader ->
reader.readText()
}
val configuration = serializer.deserializeConfiguration(content)
return configuration.findProductVersion(productVersion)
}
return null
val content = response.body ?: return null
val configuration = serializer.fromJson(content, Configuration::class.java)
return configuration.findProductVersion(productVersion)
}
}
val statsRequestResult = HttpClientProcessor.send(httpClient, httpRequest, processor)
if (statsRequestResult.errorCode != -1)
throw StatsResponseException(
"Http response status code to get fus reporting " +
"configuration: ${statsRequestResult.errorCode}. " +
"Configuration url: $configurationUrl. " +
"Product code: $productCode. " +
"Product version: $productVersion."
)
return statsRequestResult.result
val statsRequestResult = HttpClientProcessor.send(httpClient, configurationUrl, processor)
if (statsRequestResult.errorCode == -1) {
return statsRequestResult.result
}
throw StatsResponseException(
"Http response status code to get fus reporting configuration: ${statsRequestResult.errorCode}. " +
"Configuration url: $configurationUrl. " +
"Product code: $productCode. " +
"Product version: $productVersion."
)
}
}
@@ -93,8 +85,8 @@ internal object HttpClientProcessor {
*
*/
@Throws(IOException::class, InterruptedException::class, SecurityException::class)
fun <T> send(httpClient: HttpClient, httpRequest: HttpRequest, processor: ResponseProcessor<T>): RequestResult<T?> {
val response = trySend(httpClient, httpRequest)
fun <T> send(httpClient: FusHttpClient, url: String, processor: ResponseProcessor<T>): RequestResult<T?> {
val response = trySend(httpClient, url)
val code = response?.statusCode
if (code == SUCCESS_CODE) {
val result: T = processor.onSucceed(response)
@@ -105,17 +97,26 @@ internal object HttpClientProcessor {
}
@Throws(IOException::class, InterruptedException::class, SecurityException::class)
private fun trySend(httpClient: HttpClient, httpRequest: HttpRequest): HttpResponse? {
private fun trySend(httpClient: FusHttpClient, url: String): HttpResponse? {
var retryCounter = 0
while (retryCounter < MAX_RETRIES) {
val response = httpClient.send(httpRequest)
retryCounter++
if (CAN_RETRY_CODES.contains(response.statusCode) && (retryCounter != MAX_RETRIES - 1)) {
Thread.sleep(RETRY_INTERVAL.toLong())
} else {
return response
val response = try {
httpClient.get(url)
} catch (e: Exception) {
null
}
retryCounter++
if ((response == null || response.statusCode in CAN_RETRY_CODES) && retryCounter != MAX_RETRIES - 1) {
Thread.sleep(RETRY_INTERVAL.toLong())
continue
}
return response
}
return null
}