mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
[Java. Logging] Add Lombok Slf4 logger
IDEA-331693 GitOrigin-RevId: 6cd26276b28bba8b8082717001300c876ff910ce
This commit is contained in:
committed by
intellij-monorepo-bot
parent
bf968f0dee
commit
7ef6316e14
@@ -98,7 +98,7 @@ class GenerateLoggerHandler : CodeInsightActionHandler {
|
||||
if (psiField.name == JvmLogger.LOGGER_IDENTIFIER) return false
|
||||
|
||||
for (logger in JvmLogger.getAllLoggers(false)) {
|
||||
if (logger.loggerName == typeName) return false
|
||||
if (logger.loggerTypeName == typeName) return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
||||
@@ -8,17 +8,16 @@ import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiField
|
||||
|
||||
interface JvmLogger {
|
||||
val loggerName: String
|
||||
val loggerTypeName: String
|
||||
|
||||
val priority: Int
|
||||
|
||||
fun isOnlyOnStartup() = false
|
||||
|
||||
fun insertLoggerAtClass(project: Project, clazz: PsiClass): PsiElement? {
|
||||
val logger = createLoggerElementText(project, clazz) as? PsiField ?: return null
|
||||
val logger = createLoggerElementText(project, clazz) ?: return null
|
||||
return WriteAction.compute<PsiElement?, Exception> {
|
||||
insertLoggerAtClass(project, clazz, logger)
|
||||
}
|
||||
|
||||
@@ -12,13 +12,13 @@ class JvmLoggerFieldDelegate(
|
||||
private val factoryName: String,
|
||||
private val methodName: String,
|
||||
private val classNamePattern: String,
|
||||
override val loggerName: String,
|
||||
override val loggerTypeName: String,
|
||||
override val priority: Int,
|
||||
) : JvmLogger {
|
||||
override fun createLoggerElementText(project: Project, clazz: PsiClass): PsiField? {
|
||||
val factory = JavaPsiFacade.getElementFactory(project)
|
||||
val className = clazz.name ?: return null
|
||||
val fieldText = "$loggerName ${JvmLogger.LOGGER_IDENTIFIER} = ${factoryName}.$methodName(${
|
||||
val fieldText = "$loggerTypeName ${JvmLogger.LOGGER_IDENTIFIER} = ${factoryName}.$methodName(${
|
||||
String.format(classNamePattern, className)
|
||||
});"
|
||||
return factory.createFieldFromText(fieldText, clazz).apply {
|
||||
@@ -33,7 +33,7 @@ class JvmLoggerFieldDelegate(
|
||||
return clazz.add(logger)
|
||||
}
|
||||
|
||||
override fun isAvailable(project: Project?): Boolean = JavaLibraryUtil.hasLibraryClass(project, loggerName)
|
||||
override fun isAvailable(project: Project?): Boolean = JavaLibraryUtil.hasLibraryClass(project, loggerTypeName)
|
||||
|
||||
override fun isAvailable(module: Module?): Boolean = JavaLibraryUtil.hasLibraryClass(module, loggerName)
|
||||
override fun isAvailable(module: Module?): Boolean = JavaLibraryUtil.hasLibraryClass(module, loggerTypeName)
|
||||
}
|
||||
@@ -7,7 +7,7 @@ import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiElement
|
||||
|
||||
class UnspecifiedLogger : JvmLogger {
|
||||
override val loggerName: String = "Unspecified"
|
||||
override val loggerTypeName: String = "Unspecified"
|
||||
override val priority: Int = 100
|
||||
|
||||
override fun isOnlyOnStartup() = true
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package de.plushnikov.intellij.plugin.logging
|
||||
|
||||
import com.intellij.java.library.JavaLibraryUtil
|
||||
import com.intellij.logging.JvmLogger
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.JavaPsiFacade
|
||||
import com.intellij.psi.PsiAnnotation
|
||||
import com.intellij.psi.PsiClass
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager
|
||||
import de.plushnikov.intellij.plugin.util.LombokLibraryUtil
|
||||
|
||||
class JvmLoggerAnnotationDelegate(
|
||||
private val fieldLoggerName: String,
|
||||
override val loggerTypeName: String,
|
||||
override val priority: Int
|
||||
) : JvmLogger {
|
||||
override fun insertLoggerAtClass(project: Project, clazz: PsiClass, logger: PsiElement): PsiElement? {
|
||||
if (logger !is PsiAnnotation) return null
|
||||
JavaCodeStyleManager.getInstance(project).shortenClassReferences(logger)
|
||||
return clazz.modifierList?.addAfter(logger, null)
|
||||
}
|
||||
|
||||
override fun isAvailable(project: Project?): Boolean {
|
||||
return project != null && JavaLibraryUtil.hasLibraryClass(project, fieldLoggerName) && LombokLibraryUtil.hasLombokLibrary(project)
|
||||
}
|
||||
|
||||
override fun isAvailable(module: Module?): Boolean {
|
||||
return module != null && JavaLibraryUtil.hasLibraryClass(module, fieldLoggerName) && LombokLibraryUtil.hasLombokClasses(module)
|
||||
}
|
||||
|
||||
override fun createLoggerElementText(project: Project, clazz: PsiClass): PsiAnnotation {
|
||||
val factory = JavaPsiFacade.getElementFactory(project)
|
||||
return factory.createAnnotationFromText("@$loggerTypeName", clazz)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package de.plushnikov.intellij.plugin.logging
|
||||
|
||||
object LombokLoggingUtils {
|
||||
const val SLF4J_ANNOTATION = "lombok.extern.slf4j.Slf4j"
|
||||
const val LOG4J2_ANNOTATION = "lombok.extern.log4j.Log4j2"
|
||||
const val LOG4J_ANNOTATION = "lombok.extern.log4j.Log4j"
|
||||
const val APACHE_ANNOTATION = "lombok.extern.apachecommons.CommonsLog"
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package de.plushnikov.intellij.plugin.logging
|
||||
|
||||
import com.intellij.logging.JvmLogger
|
||||
import com.siyeh.ig.psiutils.JavaLoggingUtils
|
||||
|
||||
class LombokSlf4jLogger : JvmLogger by JvmLoggerAnnotationDelegate(
|
||||
JavaLoggingUtils.SLF4J,
|
||||
LombokLoggingUtils.SLF4J_ANNOTATION,
|
||||
90
|
||||
) {
|
||||
override fun toString(): String = "Lombok SLf4j"
|
||||
}
|
||||
@@ -245,6 +245,8 @@
|
||||
<dependencySupport coordinate="org.projectlombok:lombok" kind="java" displayName="Lombok"/>
|
||||
|
||||
<iconMapper mappingFile="LombokIconMappings.json"/>
|
||||
|
||||
<jvm.logging implementation="de.plushnikov.intellij.plugin.logging.LombokSlf4jLogger"/>
|
||||
</extensions>
|
||||
|
||||
<projectListeners>
|
||||
|
||||
Reference in New Issue
Block a user