From 0aa5f02322fbd373425e9445b7e445aa4f3fe461 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 31 Jan 2017 11:38:23 +0100 Subject: [PATCH] IDEA-166301 Idea autocompletes {@code n} as {@code {@code null}} --- .../JavaDocCompletionContributor.java | 30 ++++++++++++++----- .../completion/JavadocCompletionTest.groovy | 6 ++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java index 661a1ca45cf7..becc0f135570 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java @@ -196,14 +196,7 @@ public class JavaDocCompletionContributor extends CompletionContributor { suggestLinkWrappingVariants(parameters, result.withPrefixMatcher(CompletionUtil.findJavaIdentifierPrefix(parameters)), position); - if (!result.getPrefixMatcher().getPrefix().isEmpty()) { - for (String keyword : ContainerUtil.ar("null", "true", "false")) { - String tagText = "{@code " + keyword + "}"; - result.addElement(LookupElementBuilder.create(keyword).withPresentableText(tagText).withInsertHandler( - (context, item) -> context.getDocument().replaceString(context.getStartOffset(), context.getTailOffset(), tagText)) - ); - } - } + suggestCodeLiterals(result, position); return; } @@ -211,6 +204,27 @@ public class JavaDocCompletionContributor extends CompletionContributor { super.fillCompletionVariants(parameters, result); } + private static void suggestCodeLiterals(@NotNull CompletionResultSet result, PsiElement position) { + PsiElement parent = position.getParent(); + if (parent instanceof PsiInlineDocTag && !"code".equals(((PsiInlineDocTag)parent).getName())) { + return; + } + + if (!result.getPrefixMatcher().getPrefix().isEmpty()) { + for (String keyword : ContainerUtil.ar("null", "true", "false")) { + LookupElementBuilder element = LookupElementBuilder.create(keyword); + result.addElement(parent instanceof PsiInlineDocTag ? element : wrapIntoCodeTag(element)); + } + } + } + + @NotNull + private static LookupElementBuilder wrapIntoCodeTag(LookupElementBuilder element) { + String tagText = "{@code " + element.getLookupString() + "}"; + return element.withPresentableText(tagText).withInsertHandler( + (context, item) -> context.getDocument().replaceString(context.getStartOffset(), context.getTailOffset(), tagText)); + } + private void suggestLinkWrappingVariants(@NotNull CompletionParameters parameters, @NotNull CompletionResultSet result, PsiElement position) { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.groovy index 8f3c2251e33e..09dc2da83894 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavadocCompletionTest.groovy @@ -665,6 +665,12 @@ class Foo { myFixture.checkResult "/** {@code null} */" } + void "test null inside code tag"() { + myFixture.configureByText 'a.java', "/** {@code nul} */" + myFixture.completeBasic() + myFixture.checkResult "/** {@code null} */" + } + void "test completing inside qualified name"() { myFixture.configureByText 'a.java', "/** @see java.io. */" myFixture.completeBasic()