mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
[Java. Logging] Add base for tests for resolving logger methods in java
IDEA-342484 GitOrigin-RevId: fd2666c64933e2c82e546e20b752f2a4a4775c02
This commit is contained in:
committed by
intellij-monorepo-bot
parent
eec7243d08
commit
c3bc0c82af
@@ -2,6 +2,7 @@
|
||||
package com.intellij.analysis.logging.resolve
|
||||
|
||||
import com.intellij.codeInspection.logging.*
|
||||
import com.intellij.codeInspection.logging.PlaceholderLoggerType.*
|
||||
import com.intellij.model.Symbol
|
||||
import com.intellij.model.psi.PsiExternalReferenceHost
|
||||
import com.intellij.model.psi.PsiSymbolReference
|
||||
@@ -9,9 +10,7 @@ import com.intellij.model.psi.PsiSymbolReferenceHints
|
||||
import com.intellij.model.psi.PsiSymbolReferenceProvider
|
||||
import com.intellij.model.search.SearchRequest
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.codeInspection.logging.PlaceholderLoggerType.*
|
||||
import org.jetbrains.uast.*
|
||||
|
||||
class JvmLoggerSymbolReferenceProvider : PsiSymbolReferenceProvider {
|
||||
@@ -56,7 +55,7 @@ fun getLogArgumentReferences(literalExpression: UExpression): List<PsiSymbolRefe
|
||||
|
||||
val loggerReferenceList = rangeWithParameterList.map { (range, parameter) ->
|
||||
if (range == null) return null
|
||||
val alignedRange = range.shiftTextRange(offset)
|
||||
val alignedRange = range.shiftRight(offset)
|
||||
val parameterPsi = parameter.sourcePsi ?: return null
|
||||
JvmLoggerArgumentSymbolReference(psiLiteralExpression, alignedRange, parameterPsi)
|
||||
}
|
||||
@@ -72,8 +71,6 @@ fun getLogArgumentReferences(literalExpression: UExpression): List<PsiSymbolRefe
|
||||
}
|
||||
}
|
||||
|
||||
private fun TextRange.shiftTextRange(shift: Int): TextRange = TextRange(this.startOffset + shift, this.endOffset + shift)
|
||||
|
||||
private fun getOffsetInText(expression: PsiElement, value: String): Int? {
|
||||
val text = expression.text
|
||||
if (text == null) return null
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.intellij.jvm.analysis.internal.testFramework.logging
|
||||
|
||||
import com.intellij.jvm.analysis.testFramework.LightJvmCodeInsightFixtureTestCase
|
||||
|
||||
abstract class LoggingArgumentSymbolReferenceProviderTestBase : LightJvmCodeInsightFixtureTestCase() {
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
LoggingTestUtils.addSlf4J(myFixture)
|
||||
LoggingTestUtils.addLog4J(myFixture)
|
||||
LoggingTestUtils.addJUL(myFixture)
|
||||
LoggingTestUtils.addKotlinAdapter(myFixture)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.intellij.logging.resolve
|
||||
|
||||
import com.intellij.analysis.logging.resolve.JvmLoggerArgumentSymbol
|
||||
import com.intellij.jvm.analysis.internal.testFramework.logging.LoggingArgumentSymbolReferenceProviderTestBase
|
||||
import com.intellij.model.psi.PsiSymbolReference
|
||||
import com.intellij.model.psi.PsiSymbolReferenceService
|
||||
import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.psi.PsiLiteralExpression
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import junit.framework.TestCase
|
||||
import org.jetbrains.uast.ULiteralExpression
|
||||
|
||||
class JavaLoggingArgumentSymbolReferenceProviderTest : LoggingArgumentSymbolReferenceProviderTestBase() {
|
||||
override fun getProjectDescriptor(): LightProjectDescriptor = JAVA_LATEST_WITH_LATEST_JDK
|
||||
|
||||
fun `test log4j2`() {
|
||||
myFixture.configureByText("Logging.java", """
|
||||
import org.apache.logging.log4j.*;
|
||||
class Logging {
|
||||
private static final Logger LOG = LogManager.getLogger();
|
||||
void m(int i) {
|
||||
LOG.info("<caret>{}", i);
|
||||
}
|
||||
}
|
||||
""".trimIndent())
|
||||
doTest(mapOf(TextRange(1, 3) to "i"))
|
||||
}
|
||||
|
||||
|
||||
private fun doTest(bindings : Map<TextRange, String>) {
|
||||
val literal = PsiTreeUtil.getParentOfType(myFixture.file.findElementAt(myFixture.editor.caretModel.offset), PsiLiteralExpression::class.java)
|
||||
TestCase.assertFalse(literal == null)
|
||||
val refs: Collection<PsiSymbolReference> = PsiSymbolReferenceService.getService().getReferences(literal!!)
|
||||
refs.forEach {ref ->
|
||||
assertEquals(literal, ref.element)
|
||||
val symbols = ref.resolveReference()
|
||||
assertEquals(bindings.size, symbols.size)
|
||||
val symbol = symbols.single()
|
||||
assertTrue(symbol is JvmLoggerArgumentSymbol)
|
||||
val formatSymbol = symbol as JvmLoggerArgumentSymbol
|
||||
assertTrue(formatSymbol.getPlaceholderString() is ULiteralExpression)
|
||||
val expressionText = formatSymbol.expression.text
|
||||
assertEquals(bindings[ref.rangeInElement], expressionText)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user