mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-13 15:52:01 +07:00
[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:
committed by
intellij-monorepo-bot
parent
3529ce4b26
commit
b0b5b8763c
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user