IDEA-166301 Idea autocompletes {@code n} as {@code {@code null}}

This commit is contained in:
peter
2017-01-31 15:49:08 +01:00
parent d1d548b8b8
commit 0aa5f02322
2 changed files with 28 additions and 8 deletions
@@ -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) {
@@ -665,6 +665,12 @@ class Foo {
myFixture.checkResult "/** {@code null}<caret> */"
}
void "test null inside code tag"() {
myFixture.configureByText 'a.java', "/** {@code nul<caret>} */"
myFixture.completeBasic()
myFixture.checkResult "/** {@code null<caret>} */"
}
void "test completing inside qualified name"() {
myFixture.configureByText 'a.java', "/** @see java.io.<caret> */"
myFixture.completeBasic()