diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterApacheCommons.java b/java/java-tests/testData/codeInsight/completion/logger/afterApacheCommons.java new file mode 100644 index 000000000000..869e33653928 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/afterApacheCommons.java @@ -0,0 +1,10 @@ +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +public class A { + private static final Log log = LogFactory.getLog(A.class); + + void foo() { + log + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionAfterDot.java b/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionAfterDot.java new file mode 100644 index 000000000000..e8a55f48d823 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionAfterDot.java @@ -0,0 +1,11 @@ +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class A { + + private static final Logger log = LoggerFactory.getLogger(A.class); + + void foo() { + log. + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterLog4j.java b/java/java-tests/testData/codeInsight/completion/logger/afterLog4j.java new file mode 100644 index 000000000000..97b951c01c2b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/afterLog4j.java @@ -0,0 +1,9 @@ +import org.apache.log4j.Logger; + +public class A { + private static final Logger log = Logger.getLogger(A.class); + + void foo() { + log + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterLog4j2.java b/java/java-tests/testData/codeInsight/completion/logger/afterLog4j2.java new file mode 100644 index 000000000000..981ab5d1e912 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/afterLog4j2.java @@ -0,0 +1,10 @@ +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class A { + private static final Logger log = LogManager.getLogger(A.class); + + void foo() { + log + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterMultipleLoggers.java b/java/java-tests/testData/codeInsight/completion/logger/afterMultipleLoggers.java new file mode 100644 index 000000000000..981ab5d1e912 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/afterMultipleLoggers.java @@ -0,0 +1,10 @@ +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class A { + private static final Logger log = LogManager.getLogger(A.class); + + void foo() { + log + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterNestedClasses.java b/java/java-tests/testData/codeInsight/completion/logger/afterNestedClasses.java new file mode 100644 index 000000000000..980698221c84 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/afterNestedClasses.java @@ -0,0 +1,12 @@ +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class A { + private static final Logger log = LoggerFactory.getLogger(A.class); + + public static class B { + void foo() { + log + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterSlf4j.java b/java/java-tests/testData/codeInsight/completion/logger/afterSlf4j.java new file mode 100644 index 000000000000..5d9aa9ed35e8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/afterSlf4j.java @@ -0,0 +1,10 @@ +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class A { + private static final Logger log = LoggerFactory.getLogger(A.class); + + void foo() { + log + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterStaticQualifierWithLocalVariable.java b/java/java-tests/testData/codeInsight/completion/logger/afterStaticQualifierWithLocalVariable.java new file mode 100644 index 000000000000..bcb4f213692d --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/afterStaticQualifierWithLocalVariable.java @@ -0,0 +1,12 @@ +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class A { + + private static final Logger log = LoggerFactory.getLogger(A.class); + + void foo() { + int log = 10; + A.log + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeApacheCommons.java b/java/java-tests/testData/codeInsight/completion/logger/beforeApacheCommons.java new file mode 100644 index 000000000000..7cbfbce5e498 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeApacheCommons.java @@ -0,0 +1,5 @@ +public class A { + void foo() { + lo + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionAfterDot.java b/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionAfterDot.java new file mode 100644 index 000000000000..39a2531fc472 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionAfterDot.java @@ -0,0 +1,6 @@ +public class A { + + void foo() { + log + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeLog4j.java b/java/java-tests/testData/codeInsight/completion/logger/beforeLog4j.java new file mode 100644 index 000000000000..7cbfbce5e498 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeLog4j.java @@ -0,0 +1,5 @@ +public class A { + void foo() { + lo + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeLog4j2.java b/java/java-tests/testData/codeInsight/completion/logger/beforeLog4j2.java new file mode 100644 index 000000000000..7cbfbce5e498 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeLog4j2.java @@ -0,0 +1,5 @@ +public class A { + void foo() { + lo + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeMultipleLoggers.java b/java/java-tests/testData/codeInsight/completion/logger/beforeMultipleLoggers.java new file mode 100644 index 000000000000..7cbfbce5e498 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeMultipleLoggers.java @@ -0,0 +1,5 @@ +public class A { + void foo() { + lo + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeNestedClasses.java b/java/java-tests/testData/codeInsight/completion/logger/beforeNestedClasses.java new file mode 100644 index 000000000000..a4101fb36947 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeNestedClasses.java @@ -0,0 +1,7 @@ +public class A { + public static class B { + void foo() { + lo + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeSlf4j.java b/java/java-tests/testData/codeInsight/completion/logger/beforeSlf4j.java new file mode 100644 index 000000000000..7cbfbce5e498 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeSlf4j.java @@ -0,0 +1,5 @@ +public class A { + void foo() { + lo + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeStaticQualifierWithLocalVariable.java b/java/java-tests/testData/codeInsight/completion/logger/beforeStaticQualifierWithLocalVariable.java new file mode 100644 index 000000000000..d21ed46f1a7a --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeStaticQualifierWithLocalVariable.java @@ -0,0 +1,7 @@ +public class A { + + void foo() { + int log = 10; + lo + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/loggerAlreadyExists.java b/java/java-tests/testData/codeInsight/completion/logger/loggerAlreadyExists.java new file mode 100644 index 000000000000..fdeff92651d7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/logger/loggerAlreadyExists.java @@ -0,0 +1,11 @@ + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class A { + private static final Logger log = LoggerFactory.getLogger(A.class); + + void foo() { + lo + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/LoggerCompletionTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/LoggerCompletionTest.kt new file mode 100644 index 000000000000..4de6ea2f22fe --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/LoggerCompletionTest.kt @@ -0,0 +1,89 @@ +// 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.java.codeInsight.completion + +import com.intellij.JavaTestUtil +import com.intellij.codeInsight.CodeInsightSettings +import com.intellij.codeInsight.completion.JvmLoggerLookupElement +import com.intellij.codeInsight.completion.LightFixtureCompletionTestCase +import com.intellij.java.codeInsight.JvmLoggerTestSetupUtil +import junit.framework.TestCase + +class LoggerCompletionTest : LightFixtureCompletionTestCase() { + fun testSlf4j() { + JvmLoggerTestSetupUtil.setupSlf4j(myFixture) + doTest(1, "long", "log", "clone") + } + + fun testLog4j2() { + JvmLoggerTestSetupUtil.setupLog4j2(myFixture) + doTest(1, "long", "log", "clone") + } + + fun testLog4j() { + JvmLoggerTestSetupUtil.setupLog4j(myFixture) + doTest(1, "long", "log", "clone") + } + + fun testApacheCommons() { + JvmLoggerTestSetupUtil.setupApacheCommons(myFixture) + doTest(1, "long", "log", "clone") + } + + fun testNestedClasses() { + JvmLoggerTestSetupUtil.setupSlf4j(myFixture) + doTest(1, "long", "log", "clone") + } + + fun testMultipleLoggers() { + JvmLoggerTestSetupUtil.setupSlf4j(myFixture) + JvmLoggerTestSetupUtil.setupLog4j2(myFixture) + doTest(2, "long", "log", "log", "clone") + } + + fun testLoggerAlreadyExists() { + JvmLoggerTestSetupUtil.setupSlf4j(myFixture) + val name = getTestName(false) + configureByFile("$name.java") + assertStringItems("log", "long", "clone") + + TestCase.assertFalse( + lookup.items.any { + it is JvmLoggerLookupElement + } + ) + } + + fun testStaticQualifierWithLocalVariable() { + JvmLoggerTestSetupUtil.setupSlf4j(myFixture) + doTest(2, "log", "long", "log", "clone") + } + + fun testAutoCompletionAfterDot() { + var isAutoComplete = true + try { + isAutoComplete = CodeInsightSettings.getInstance().isSelectAutopopupSuggestionsByChars + CodeInsightSettings.getInstance().isSelectAutopopupSuggestionsByChars = true + JvmLoggerTestSetupUtil.setupSlf4j(myFixture) + val name = getTestName(false) + configureByFile("before$name.java") + + myFixture.type(".") + checkResultByFile("after$name.java") + } + finally { + CodeInsightSettings.getInstance().isSelectAutopopupSuggestionsByChars = isAutoComplete + } + } + + override fun getBasePath() = JavaTestUtil.getRelativeJavaTestDataPath() + "/codeInsight/completion/logger" + + private fun doTest(position: Int, vararg names: String) { + val name = getTestName(false) + configureByFile("before$name.java") + assertStringItems(*names) + + val item = lookup.items[position] + selectItem(item) + checkResultByFile("after$name.java") + } +} \ No newline at end of file