[Java. Logging] Migrate to the storing id in the settings instead of the toString() implementation for the JvmLogger

IDEA-345098

GitOrigin-RevId: 56f156ddb27e80d71187b05762be249d4222248f
This commit is contained in:
Georgii Ustinov
2024-02-22 14:42:53 +02:00
committed by intellij-monorepo-bot
parent 3529ce4b26
commit b0b5b8763c
7 changed files with 35 additions and 43 deletions

View File

@@ -100,22 +100,19 @@ class GenerateLoggerHandler : CodeInsightActionHandler {
0 -> null
1 -> availableLoggers.first()
else -> {
val preferredLogger = JvmLogger.getLoggerByName(project.service<JvmLoggingSettingsStorage>().state.loggerName)
val preferredLogger = JvmLogger.getLoggerById(project.service<JvmLoggingSettingsStorage>().state.loggerId)
val selectedLogger = (if (preferredLogger in availableLoggers) preferredLogger else availableLoggers.first()) ?: return null
val chooseLoggerDialog = ChooseLoggerDialogWrapper(
project,
availableLoggers.map { it.toString() },
(if (preferredLogger in availableLoggers) {
preferredLogger
}
else {
availableLoggers.first()
}).toString(),
availableLoggers,
selectedLogger,
)
chooseLoggerDialog.show()
if (chooseLoggerDialog.exitCode != DialogWrapper.OK_EXIT_CODE) return null
JvmLogger.getLoggerByName(chooseLoggerDialog.selectedLogger)
chooseLoggerDialog.selectedLogger
}
}
saveLoggerAfterFirstTime(project, selectedLogger)
@@ -126,8 +123,8 @@ class GenerateLoggerHandler : CodeInsightActionHandler {
private fun saveLoggerAfterFirstTime(project: Project, logger: JvmLogger?) {
if (logger == null) return
val settings = project.service<JvmLoggingSettingsStorage>().state
if (settings.loggerName == UnspecifiedLogger.UNSPECIFIED_LOGGER_NAME) {
settings.loggerName = logger.toString()
if (settings.loggerId == UnspecifiedLogger.UNSPECIFIED_LOGGER_ID) {
settings.loggerId = logger.id
}
}

View File

@@ -2,6 +2,7 @@
package com.intellij.codeInsight.generation.ui
import com.intellij.java.JavaBundle
import com.intellij.lang.logging.JvmLogger
import com.intellij.openapi.components.service
import com.intellij.openapi.options.ShowSettingsUtil
import com.intellij.openapi.project.Project
@@ -11,19 +12,18 @@ import com.intellij.ui.dsl.builder.Cell
import com.intellij.ui.dsl.builder.panel
import com.intellij.ui.logging.JvmLoggingConfigurable
import com.intellij.ui.logging.JvmLoggingSettingsStorage
import org.jetbrains.annotations.Nls
import org.jetbrains.annotations.TestOnly
import javax.swing.JComponent
class ChooseLoggerDialogWrapper(
private val project: Project,
private val availableLoggers: List<String>,
selectedLogger: String,
private val availableLoggers: List<JvmLogger>,
selectedLogger: JvmLogger,
) : DialogWrapper(project, true) {
var selectedLogger: String = selectedLogger
var selectedLogger: JvmLogger = selectedLogger
private set
private lateinit var comboBox: Cell<ComboBox<String>>
private lateinit var comboBox: Cell<ComboBox<JvmLogger>>
private val settings = project.service<JvmLoggingSettingsStorage>().state
init {
@@ -32,7 +32,7 @@ class ChooseLoggerDialogWrapper(
}
@TestOnly
fun setComboBoxItem(@Nls item: String) {
fun setComboBoxItem(item: JvmLogger) {
comboBox.component.item = item
}
@@ -41,14 +41,16 @@ class ChooseLoggerDialogWrapper(
row {
label(JavaBundle.message("label.configurable.logger.type"))
comboBox = comboBox(availableLoggers)
.onChanged { selectedLogger = it.item }
.apply { this.component.item = settings.loggerName }
.onChanged {
selectedLogger = it.item
}
.apply { this.component.item = JvmLogger.getLoggerById(settings.loggerId) }
}
row {
text(JavaBundle.message("link.configurable.logger.generator.display.name")) {
ShowSettingsUtil.getInstance().showSettingsDialog(project, JvmLoggingConfigurable::class.java)
val savedLoggerName = settings.loggerName
comboBox.component.item = savedLoggerName
val savedLoggerName = settings.loggerId
comboBox.component.item = JvmLogger.getLoggerById(savedLoggerName)
}
}
}

View File

@@ -1,7 +1,6 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.lang.logging
import com.intellij.lang.logging.UnspecifiedLogger.Companion.UNSPECIFIED_LOGGER_NAME
import com.intellij.openapi.extensions.ExtensionPointName
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.Project
@@ -83,17 +82,12 @@ interface JvmLogger {
companion object {
private val EP_NAME = ExtensionPointName<JvmLogger>("com.intellij.jvm.logging")
fun getAllLoggersNames(isOnlyOnStartup: Boolean): List<String> {
return getAllLoggers(isOnlyOnStartup).map { it.toString() }
}
fun getAllLoggers(isOnlyOnStartup: Boolean): List<JvmLogger> {
return EP_NAME.extensionList.filter { if (!isOnlyOnStartup) !it.isOnlyOnStartup() else true }.sortedByDescending { it.priority }
}
fun getLoggerByName(loggerName: String?): JvmLogger? {
if (loggerName == UNSPECIFIED_LOGGER_NAME) return null
return EP_NAME.extensionList.find { it.toString() == loggerName }
fun getLoggerById(loggerId: String?): JvmLogger? {
return EP_NAME.extensionList.find { loggerId == it.id }
}
}
}

View File

@@ -12,7 +12,7 @@ import com.intellij.psi.PsiElement
* "unspecified" state, e.g. where there is no preferred logger selected.
*/
class UnspecifiedLogger : JvmLogger {
override val id: String = UNSPECIFIED_LOGGER_NAME
override val id: String = UNSPECIFIED_LOGGER_ID
override val loggerTypeName: String = "Unspecified"
override val priority: Int = 1000
@@ -32,6 +32,6 @@ class UnspecifiedLogger : JvmLogger {
override fun toString(): String = JavaBundle.message("java.configurable.logger.unspecified")
companion object {
const val UNSPECIFIED_LOGGER_NAME: String = "Unspecified"
const val UNSPECIFIED_LOGGER_ID: String = "Unspecified"
}
}

View File

@@ -27,13 +27,14 @@ class JvmLoggingConfigurable(private val project: Project) : SearchableConfigura
override fun getId(): String = JavaBundle.message("jvm.logging.configurable.id")
override fun createComponent(): JComponent {
val loggers = JvmLogger.getAllLoggersNames(settings.loggerName == UnspecifiedLogger.UNSPECIFIED_LOGGER_NAME)
val loggers = JvmLogger.getAllLoggers(settings.loggerId == UnspecifiedLogger.UNSPECIFIED_LOGGER_ID)
panel = panel {
group(JavaBundle.message("jvm.logging.configurable.java.group.display.name")) {
row {
label(JavaBundle.message("label.configurable.logger.type"))
comboBox(loggers)
.bindItem(settings::loggerName.toNullableProperty())
.bindItem({ JvmLogger.getLoggerById(settings.loggerId) },
{ settings.loggerId = it?.id })
.onChanged { updateWarningRow(it.item) }
}
warningRow = row {
@@ -42,16 +43,14 @@ class JvmLoggingConfigurable(private val project: Project) : SearchableConfigura
}.visible(false)
}
}
updateWarningRow(settings.loggerName)
updateWarningRow(JvmLogger.getLoggerById(settings.loggerId))
return panel
}
private fun updateWarningRow(loggerDisplayName: String?) {
ReadAction.nonBlocking<Boolean> {
JvmLogger.getLoggerByName(loggerDisplayName)?.isAvailable(project) == false
}.finishOnUiThread(ModalityState.any()) { isVisible ->
warningRow.visible(isVisible)
}.submit(AppExecutorUtil.getAppExecutorService())
private fun updateWarningRow(logger: JvmLogger?) {
ReadAction.nonBlocking<Boolean> { logger?.isAvailable(project) == false && logger !is UnspecifiedLogger }
.finishOnUiThread(ModalityState.any()) { isVisible -> warningRow.visible(isVisible) }
.submit(AppExecutorUtil.getAppExecutorService())
}
override fun isModified(): Boolean = panel.isModified()

View File

@@ -9,7 +9,7 @@ import com.intellij.openapi.components.*
storages = [Storage(StoragePathMacros.WORKSPACE_FILE)])
class JvmLoggingSettingsStorage : SimplePersistentStateComponent<JvmLoggingSettingsStorage.State>(State()) {
class State : BaseState() {
var loggerName: String? by string(UnspecifiedLogger.UNSPECIFIED_LOGGER_NAME)
var loggerId: String? by string(UnspecifiedLogger.UNSPECIFIED_LOGGER_ID)
}
}

View File

@@ -99,9 +99,9 @@ class GenerateLoggerTest : LightJavaCodeInsightFixtureTestCase() {
fun testSaveSettings() {
JvmLoggerTestSetupUtil.setupLog4j(myFixture)
assertEquals(project.service<JvmLoggingSettingsStorage>().state.loggerName, UnspecifiedLogger.UNSPECIFIED_LOGGER_NAME)
assertEquals(project.service<JvmLoggingSettingsStorage>().state.loggerId, UnspecifiedLogger.UNSPECIFIED_LOGGER_ID)
doTest()
assertEquals(project.service<JvmLoggingSettingsStorage>().state.loggerName, "Log4j")
assertEquals(project.service<JvmLoggingSettingsStorage>().state.loggerId, "Log4j")
}
override fun getProjectDescriptor(): LightProjectDescriptor = JAVA_21