diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JvmLoggerCompletionContributor.kt b/java/java-impl/src/com/intellij/codeInsight/completion/JvmLoggerCompletionContributor.kt index febcfb9c05bf..d441b5f92e2a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JvmLoggerCompletionContributor.kt +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JvmLoggerCompletionContributor.kt @@ -5,36 +5,21 @@ import com.intellij.lang.logging.JvmLogger import com.intellij.openapi.module.ModuleUtil import com.intellij.patterns.PlatformPatterns.psiElement import com.intellij.patterns.StandardPatterns -import com.intellij.psi.* +import com.intellij.psi.PsiReferenceExpression import com.intellij.util.ProcessingContext +import com.siyeh.ig.psiutils.ExpressionUtils class JvmLoggerCompletionContributor : CompletionContributor() { init { extend(CompletionType.BASIC, StandardPatterns.or( - psiElement() - .withSuperParent(2, PsiExpressionStatement::class.java) - .afterLeaf(StandardPatterns.or( - psiElement(PsiJavaToken::class.java).withElementType(JavaTokenType.SEMICOLON), - psiElement(PsiJavaToken::class.java).withElementType(JavaTokenType.COLON), - psiElement(PsiJavaToken::class.java).withElementType(JavaTokenType.LBRACE), - psiElement(PsiJavaToken::class.java).withElementType(JavaTokenType.RBRACE), - psiElement(PsiJavaToken::class.java).withElementType(JavaTokenType.ARROW), - psiElement(PsiJavaToken::class.java).withElementType(JavaTokenType.RPARENTH).and( - StandardPatterns.or( - psiElement().withParent(PsiIfStatement::class.java), - psiElement().withParent(PsiForStatement::class.java), - psiElement().withParent(PsiForeachStatement::class.java), - psiElement().withParent(PsiWhileStatement::class.java) - ) - ) - )), - psiElement().withSuperParent(2, PsiLambdaExpression::class.java).afterLeaf( - psiElement(PsiJavaToken::class.java).withElementType(JavaTokenType.ARROW) - ) - ), + psiElement().withParent(PsiReferenceExpression::class.java)), object : CompletionProvider() { override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, result: CompletionResultSet) { + val parent = parameters.position.parent ?: return + if (parent !is PsiReferenceExpression || + !ExpressionUtils.isVoidContext(parent) || + JavaKeywordCompletion.isInstanceofPlace(parameters.position)) return val javaResultWithSorting = JavaCompletionSorting.addJavaSorting(parameters, result) val module = ModuleUtil.findModuleForFile(parameters.originalFile) ?: return val availableLoggers = JvmLogger.findSuitableLoggers(module, true) diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionInLambdaExpression.java b/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionInLambdaExpression.java index b3f134810f60..4a309e4bb67c 100644 --- a/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionInLambdaExpression.java +++ b/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionInLambdaExpression.java @@ -1,10 +1,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.function.Consumer; + public class A { private static final Logger log = LoggerFactory.getLogger(A.class); void foo() { - Consumer s = (param) -> log + Consumer s = (String param) -> log } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionInSwitchExpression.java b/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionInSwitchExpression.java index d4687eb90d22..a9acc3a1481b 100644 --- a/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionInSwitchExpression.java +++ b/java/java-tests/testData/codeInsight/completion/logger/afterAutoCompletionInSwitchExpression.java @@ -6,7 +6,7 @@ public class A { public static void main(String[] args) { String x = ""; - String s = switch(x) { + switch(x) { case "name" -> log default -> "String"; }; diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionInLambdaExpression.java b/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionInLambdaExpression.java index 9b998bacd25b..315f3ef21bf4 100644 --- a/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionInLambdaExpression.java +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionInLambdaExpression.java @@ -1,5 +1,7 @@ +import java.util.function.Consumer; + public class A { void foo() { - Consumer s = (param) -> lo + Consumer s = (String param) -> lo } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionInSwitchExpression.java b/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionInSwitchExpression.java index 9c9de59e3eef..bab9b9c3195c 100644 --- a/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionInSwitchExpression.java +++ b/java/java-tests/testData/codeInsight/completion/logger/beforeAutoCompletionInSwitchExpression.java @@ -1,7 +1,7 @@ public class A { public static void main(String[] args) { String x = ""; - String s = switch(x) { + switch(x) { case "name" -> lo default -> "String"; };