diff --git a/platform/ide-core/src/com/intellij/openapi/util/registry/RegistryKeyBean.kt b/platform/ide-core/src/com/intellij/openapi/util/registry/RegistryKeyBean.kt index 9fc02260ef7f..1afff650cda3 100644 --- a/platform/ide-core/src/com/intellij/openapi/util/registry/RegistryKeyBean.kt +++ b/platform/ide-core/src/com/intellij/openapi/util/registry/RegistryKeyBean.kt @@ -40,7 +40,7 @@ class RegistryKeyBean private constructor() { Registry.setContributedKeys(HashMap().let { mutator -> point.processUnsortedWithPluginDescriptor { bean, pluginDescriptor -> val descriptor = createRegistryKeyDescriptor(bean, pluginDescriptor) - putNewDescriptorConsideringOverrides(mutator, descriptor, false) + putNewDescriptorConsideringOverrides(map = mutator, newDescriptor = descriptor, isDynamic = false) } java.util.Map.copyOf(mutator) }) @@ -51,7 +51,7 @@ class RegistryKeyBean private constructor() { Registry.mutateContributedKeys { oldMap -> val newMap = HashMap(oldMap.size + 1) newMap.putAll(oldMap) - putNewDescriptorConsideringOverrides(newMap, descriptor, isDynamic = true) + putNewDescriptorConsideringOverrides(map = newMap, newDescriptor = descriptor, isDynamic = true) java.util.Map.copyOf(newMap) } } diff --git a/platform/platform-impl/src/com/intellij/openapi/util/registry/RegistryManagerImpl.kt b/platform/platform-impl/src/com/intellij/openapi/util/registry/RegistryManagerImpl.kt index b0eb51fe71f7..b7d5e45c1744 100644 --- a/platform/platform-impl/src/com/intellij/openapi/util/registry/RegistryManagerImpl.kt +++ b/platform/platform-impl/src/com/intellij/openapi/util/registry/RegistryManagerImpl.kt @@ -59,11 +59,11 @@ internal class RegistryManagerImpl(coroutineScope: CoroutineScope) : PersistentS override fun stringValue(key: String): @NlsSafe String = Registry._getWithoutStateCheck(key).asString() override fun intValue(key: String, defaultValue: Int): Int { - return try { - Registry._getWithoutStateCheck(key).asInteger() + try { + return Registry._getWithoutStateCheck(key).asInteger() } catch (ignore: MissingResourceException) { - defaultValue + return defaultValue } } @@ -76,11 +76,11 @@ internal class RegistryManagerImpl(coroutineScope: CoroutineScope) : PersistentS override fun getState(): Element = Registry.getInstance().getState() override fun noStateLoaded() { - Registry.loadState(/* state = */ null, /* earlyAccess = */ EarlyAccessRegistryManager.getOrLoadMap()) + Registry.loadState(state = null, earlyAccess = EarlyAccessRegistryManager.getOrLoadMap()) } override fun loadState(state: Element) { - log(Registry.loadState(/* state = */ state, /* earlyAccess = */ EarlyAccessRegistryManager.getOrLoadMap())) + log(Registry.loadState(state = state, earlyAccess = EarlyAccessRegistryManager.getOrLoadMap())) } private fun log(userProperties: Map) { @@ -89,13 +89,12 @@ internal class RegistryManagerImpl(coroutineScope: CoroutineScope) : PersistentS } val keys = ArrayUtilRt.toStringArray(userProperties.keys) - Arrays.sort(keys) + keys.sort() val builder = StringBuilder("Registry values changed by user: ") for (key in keys) { - if ("ide.firstStartup" == key) { - continue + if ("ide.firstStartup" != key) { + builder.append(key).append(" = ").append(userProperties[key]).append(", ") } - builder.append(key).append(" = ").append(userProperties[key]).append(", ") } logger().info(builder.substring(0, builder.length - 2)) } diff --git a/platform/util/api-dump-unreviewed.txt b/platform/util/api-dump-unreviewed.txt index af9bb65b9f6d..e395ade2f8e3 100644 --- a/platform/util/api-dump-unreviewed.txt +++ b/platform/util/api-dump-unreviewed.txt @@ -1493,7 +1493,6 @@ c:com.intellij.openapi.util.registry.RegistryValue - f:getSelectedOption():java.lang.String - isBoolean():Z - isChangedFromDefault():Z -- f:isChangedFromDefault(java.lang.String,com.intellij.openapi.util.registry.Registry):Z - f:isChangedSinceAppStart():Z - f:isMultiValue():Z - f:isOptionEnabled(java.lang.String):Z diff --git a/platform/util/src/com/intellij/openapi/util/registry/Registry.kt b/platform/util/src/com/intellij/openapi/util/registry/Registry.kt index 595734feb115..3a85d319b9a6 100644 --- a/platform/util/src/com/intellij/openapi/util/registry/Registry.kt +++ b/platform/util/src/com/intellij/openapi/util/registry/Registry.kt @@ -208,7 +208,7 @@ class Registry { val keysToProcess = HashSet(userProperties.keys) for ((key, value) in map) { val registryValue = registry.resolveValue(key) - val currentValue = registryValue.resolveNotRequiredValue(key = key, defaultValue = null) + val currentValue = registryValue.resolveNotRequiredValue(key) // currentValue == null means value is not in the bundle. Ignore it if (currentValue != null && currentValue != value) { registryValue.setValue(value) @@ -259,17 +259,17 @@ class Registry { val keys = bundle?.keys ?: emptySet() val result = ArrayList() // don't use getInstance here - https://youtrack.jetbrains.com/issue/IDEA-271748 - val instance = registry - val contributedKeys = instance.contributedKeys + val registry = registry + val contributedKeys = registry.contributedKeys for (key in keys) { if (key.endsWith(".description") || key.endsWith(".restartRequired") || contributedKeys.containsKey(key)) { continue } - result.add(instance.resolveValue(key)) + result.add(registry.resolveValue(key)) } for (key in contributedKeys.keys) { - result.add(instance.resolveValue(key)) + result.add(registry.resolveValue(key)) } return result @@ -317,7 +317,7 @@ class Registry { val map = fromState(state) for ((key, value) in map) { val registryValue = registry.resolveValue(key) - if (registryValue.isChangedFromDefault(value, registry)) { + if (value != registry.getBundleValueOrNull(registryValue.key)) { userProperties.put(key, value) registryValue.resetCache() } @@ -328,6 +328,7 @@ class Registry { // yes, earlyAccess overrides user properties userProperties.putAll(earlyAccess) } + registry.isLoaded = true registry.loadFuture.complete(null) return userProperties diff --git a/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.kt b/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.kt index 4a036f5780bf..4cff98e716fb 100644 --- a/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.kt +++ b/platform/util/src/com/intellij/openapi/util/registry/RegistryValue.kt @@ -120,7 +120,7 @@ open class RegistryValue @Internal constructor( } private fun computeDouble(): Double { - return resolveNotRequiredValue(key = key, defaultValue = null)?.toDoubleOrNull() + return resolveNotRequiredValue(key)?.toDoubleOrNull() ?: keyDescriptor?.defaultValue?.toDouble() ?: registry.getBundleValueOrNull(key)?.toDouble() ?: 0.0 @@ -145,33 +145,33 @@ open class RegistryValue @Internal constructor( } open val description: @NlsSafe String - get() = keyDescriptor?.description ?: resolveNotRequiredValue(key = "$key.description", defaultValue = "")!! + get() = keyDescriptor?.description ?: resolveNotRequiredValue(key = "$key.description") ?: "" open fun isRestartRequired(): Boolean { - if (keyDescriptor != null) { + if (keyDescriptor == null) { + return resolveNotRequiredValue(key = "$key.restartRequired").toBoolean() + } + else { return keyDescriptor.isRestartRequired } - return resolveNotRequiredValue(key = "$key.restartRequired", defaultValue = "false").toBoolean() } - open fun isChangedFromDefault(): Boolean = isChangedFromDefault(asString(), registry) + open fun isChangedFromDefault(): Boolean { + return (stringCachedValue ?: resolveNotRequiredValue(key)) != registry.getBundleValueOrNull(key) + } val pluginId: String? get() = keyDescriptor?.pluginId - fun isChangedFromDefault(newValue: String, registry: Registry): Boolean { - return newValue != registry.getBundleValueOrNull(key) - } - private fun getAsValue(key: @NonNls String): String? { if (stringCachedValue == null) { - stringCachedValue = resolveNotRequiredValue(key = key, defaultValue = null) + stringCachedValue = resolveNotRequiredValue(key) } return stringCachedValue?.takeIf { it.isNotEmpty() } } @Internal - fun resolveNotRequiredValue(key: @NonNls String, defaultValue: String?): String? { + fun resolveNotRequiredValue(key: @NonNls String): String? { registry.getUserProperties().get(key)?.let { return it } @@ -181,7 +181,7 @@ open class RegistryValue @Internal constructor( } checkIsLoaded(key) - return registry.getBundleValueOrNull(key) ?: defaultValue + return registry.getBundleValueOrNull(key) } @Throws(MissingResourceException::class) @@ -236,7 +236,7 @@ open class RegistryValue @Internal constructor( listener.afterValueChanged(this) } - if (!isRestartRequired() && resolveNotRequiredValue(key = key, defaultValue = null) == registry.getBundleValueOrNull(key)) { + if (!isRestartRequired() && resolveNotRequiredValue(key) == registry.getBundleValueOrNull(key)) { registry.getUserProperties().remove(key) } diff --git a/platform/util/testSrc/com/intellij/openapi/util/registry/RegistryTest.java b/platform/util/testSrc/com/intellij/openapi/util/registry/RegistryTest.java index 11c48da201e7..70a141c34882 100644 --- a/platform/util/testSrc/com/intellij/openapi/util/registry/RegistryTest.java +++ b/platform/util/testSrc/com/intellij/openapi/util/registry/RegistryTest.java @@ -149,7 +149,7 @@ public class RegistryTest { Registry.Companion.loadState(registryElementFromMap(secondMap), null); assertEquals(secondValue, Registry.get(key).asString()); RegistryValue newRegistryValue = Registry.get(newKey); - String loadedNewValue = newRegistryValue.resolveNotRequiredValue(newRegistryValue.getKey(), null); + String loadedNewValue = newRegistryValue.resolveNotRequiredValue(newRegistryValue.getKey()); assertNull(loadedNewValue); assertThat(changedPairs).hasSize(1); }