diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java index 053f4448e1d2..15ff6b92e4ac 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/DefaultCodeFragmentFactory.java @@ -81,7 +81,7 @@ public class DefaultCodeFragmentFactory extends CodeFragmentFactory { if (parameters.getInvocationCount() <= 1 && JavaCompletionUtil.mayHaveSideEffects(expression)) { final CompletionService service = CompletionService.getCompletionService(); - if (service.getAdvertisementText() == null && parameters.getInvocationCount() < 2) { + if (parameters.getInvocationCount() < 2) { service.setAdvertisementText("Invoke completion once more to see runtime type variants"); } return null; diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index 90aa28e95724..2bb455223430 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -265,13 +265,13 @@ public class JavaCompletionContributor extends CompletionContributor { } }); } else { - advertiseSecondCompletion(parameters.getPosition().getProject()); + advertiseSecondCompletion(parameters.getPosition().getProject(), result); } } - public static void advertiseSecondCompletion(Project project) { + public static void advertiseSecondCompletion(Project project, CompletionResultSet result) { if (FeatureUsageTracker.getInstance().isToBeAdvertisedInLookup(CodeCompletionFeatures.SECOND_BASIC_COMPLETION, project)) { - CompletionService.getCompletionService().setAdvertisementText("Press " + getActionShortcut(IdeActions.ACTION_CODE_COMPLETION) + " to see non-imported classes"); + result.addLookupAdvertisement("Press " + getActionShortcut(IdeActions.ACTION_CODE_COMPLETION) + " to see non-imported classes"); } } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java index e523c83dda0f..9a91e8f10f9d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java @@ -98,7 +98,7 @@ public abstract class StaticMemberProcessor { } private void showHint(boolean shouldImport) { - if (!myHintShown && !shouldImport && CompletionService.getCompletionService().getAdvertisementText() == null) { + if (!myHintShown && !shouldImport) { final String shortcut = CompletionContributor.getActionShortcut(IdeActions.ACTION_SHOW_INTENTION_ACTIONS); if (shortcut != null) { CompletionService.getCompletionService().setAdvertisementText("To import a method statically, press " + shortcut); diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionContributor.java b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionContributor.java index ff2360a82ce0..f2d05226f85c 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionContributor.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionContributor.java @@ -75,9 +75,7 @@ import java.util.List; * It's one of the item's lookup strings ({@link LookupElement#getAllLookupStrings()} that is matched against prefix matcher.

* * Q: How do I plug into those funny texts below the items in shown lookup?
- * A: Use {@link CompletionContributor#advertise(CompletionParameters)} or - * {@link CompletionService#setAdvertisementText(String)}. Don't forget to check whether you are in correct place - * (see {@link CompletionParameters}).

+ * A: Use {@link CompletionResultSet#addLookupAdvertisement(String)}

* * Q: How do I change the text that gets shown when there are no suitable variants at all?
* A: Use {@link CompletionContributor#handleEmptyLookup(CompletionParameters, Editor)}. @@ -179,7 +177,7 @@ public abstract class CompletionContributor { /** * @param parameters - * @deprecated use {@link com.intellij.codeInsight.completion.CompletionService#setAdvertisementText(String)} + * @deprecated use {@link com.intellij.codeInsight.completion.CompletionResultSet#addLookupAdvertisement(String)} * @return text to be shown at the bottom of lookup list */ @Nullable diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java index 9fc19839c3d2..5bcc12583567 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java @@ -66,6 +66,8 @@ public abstract class CompletionResultSet { @NotNull public abstract CompletionResultSet withRelevanceSorter(@NotNull CompletionSorter sorter); + public abstract void addLookupAdvertisement(@NotNull String text); + /** * @return A result set with the same prefix, but the lookup strings will be matched case-insensitively. Their lookup strings will * remain as they are though, so upon insertion the prefix case will be changed. diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionService.java b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionService.java index 590f5e2b7520..74f53b5b933d 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionService.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionService.java @@ -58,6 +58,7 @@ public abstract class CompletionService { /** * Set lookup advertisement text (at the bottom) at any time. Will do nothing if no completion process is in progress. * @param text + * @deprecated use {@link CompletionResultSet#addLookupAdvertisement(String)} */ public abstract void setAdvertisementText(@Nullable String text); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/FilePathCompletionContributor.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/FilePathCompletionContributor.java index a9d7020a83d5..c491bec4d4a0 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/FilePathCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/FilePathCompletionContributor.java @@ -71,7 +71,7 @@ public class FilePathCompletionContributor extends CompletionContributor { if (getReference(psiReference) != null && parameters.getInvocationCount() == 1) { final String shortcut = getActionShortcut(IdeActions.ACTION_CODE_COMPLETION); if (shortcut != null) { - CompletionService.getCompletionService().setAdvertisementText(CodeInsightBundle.message("class.completion.file.path", shortcut)); + result.addLookupAdvertisement(CodeInsightBundle.message("class.completion.file.path", shortcut)); } } } @@ -155,8 +155,7 @@ public class FilePathCompletionContributor extends CompletionContributor { if (set.getSuitableFileTypes().length > 0 && parameters.getInvocationCount() == 1) { final String shortcut = getActionShortcut(IdeActions.ACTION_CODE_COMPLETION); if (shortcut != null) { - CompletionService.getCompletionService() - .setAdvertisementText(CodeInsightBundle.message("class.completion.file.path.all.variants", shortcut)); + result.addLookupAdvertisement(CodeInsightBundle.message("class.completion.file.path.all.variants", shortcut)); } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java index 19362bb71cad..8ab05d80133f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java @@ -160,6 +160,11 @@ public class CompletionServiceImpl extends CompletionService{ return new CompletionResultSetImpl(getConsumer(), myTextBeforePosition, getPrefixMatcher(), myContributor, myParameters, (CompletionSorterImpl)sorter, myProcess, this); } + @Override + public void addLookupAdvertisement(@NotNull String text) { + getCompletionService().setAdvertisementText(text); + } + @NotNull @Override public CompletionResultSet caseInsensitive() { diff --git a/platform/lang-impl/src/com/intellij/ui/TextFieldWithAutoCompletionContributor.java b/platform/lang-impl/src/com/intellij/ui/TextFieldWithAutoCompletionContributor.java index 4f8a070af8fc..a9b7722f7403 100644 --- a/platform/lang-impl/src/com/intellij/ui/TextFieldWithAutoCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/ui/TextFieldWithAutoCompletionContributor.java @@ -59,18 +59,16 @@ public class TextFieldWithAutoCompletionContributor extends CompletionContrib final TextFieldWithAutoCompletionListProvider provider = file.getUserData(KEY); if (provider != null) { - if (CompletionService.getCompletionService().getAdvertisementText() == null) { - String adv = provider.getAdvertisement(); - if (adv == null) { - final String shortcut = getActionShortcut(IdeActions.ACTION_QUICK_JAVADOC); - if (shortcut != null) { - adv = provider.getQuickDocHotKeyAdvertisement(shortcut); - } - } - if (adv != null) { - CompletionService.getCompletionService().setAdvertisementText(adv); + String adv = provider.getAdvertisement(); + if (adv == null) { + final String shortcut = getActionShortcut(IdeActions.ACTION_QUICK_JAVADOC); + if (shortcut != null) { + adv = provider.getQuickDocHotKeyAdvertisement(shortcut); } } + if (adv != null) { + result.addLookupAdvertisement(adv); + } final String prefix = provider.getPrefix(parameters); if (prefix == null) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java index c5cc1e79a756..de8dc8f2affb 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java @@ -225,11 +225,11 @@ public class GroovyCompletionContributor extends CompletionContributor { final PsiElement resolved = referenceExpression.resolve(); if (!(resolved instanceof PsiClass)) return; - if (CompletionService.getCompletionService().getAdvertisementText() == null && parameters.getInvocationCount() > 0 && + if (parameters.getInvocationCount() > 0 && CompletionUtil.shouldShowFeature(parameters, JavaCompletionFeatures.GLOBAL_MEMBER_NAME)) { final String shortcut = getActionShortcut(IdeActions.ACTION_CODE_COMPLETION); if (shortcut != null) { - CompletionService.getCompletionService().setAdvertisementText("Pressing " + shortcut + " twice without a class qualifier would show all accessible static methods"); + result.addLookupAdvertisement("Pressing " + shortcut + " twice without a class qualifier would show all accessible static methods"); } } @@ -317,7 +317,7 @@ public class GroovyCompletionContributor extends CompletionContributor { if (parameters.getInvocationCount() >= 2) { addAllClasses(parameters, result, inheritors); } else { - JavaCompletionContributor.advertiseSecondCompletion(position.getProject()); + JavaCompletionContributor.advertiseSecondCompletion(position.getProject(), result); } } } @@ -536,10 +536,8 @@ public class GroovyCompletionContributor extends CompletionContributor { } private static void showInfo() { - if (StringUtil.isEmpty(CompletionService.getCompletionService().getAdvertisementText())) { - CompletionService.getCompletionService() - .setAdvertisementText(GroovyBundle.message("invoke.completion.second.time.to.show.skipped.methods")); - } + CompletionService.getCompletionService() + .setAdvertisementText(GroovyBundle.message("invoke.completion.second.time.to.show.skipped.methods")); } private static boolean checkForIterator(PsiMethod method) {