IDEA-63563 add "tip of the day" for using Ctrl-Alt-Space to complete static methods

This commit is contained in:
peter.gromov
2010-12-28 21:25:49 +03:00
parent 338ae427c1
commit c49ecdd58d
7 changed files with 49 additions and 28 deletions
@@ -28,8 +28,6 @@ public class ImportStaticLookupActionProvider implements LookupActionProvider {
consumer.consume(new LookupElementAction(icon, "Import statically") {
@Override
public Result performLookupAction() {
FeatureUsageTracker.getInstance().triggerFeatureUsed(JavaCompletionFeatures.IMPORT_STATIC);
item.setShouldBeImported(!item.willBeImported());
return Result.REFRESH_ITEM;
}
@@ -361,6 +361,18 @@ public class JavaCompletionContributor extends CompletionContributor {
public String advertise(@NotNull final CompletionParameters parameters) {
if (!(parameters.getOriginalFile() instanceof PsiJavaFile)) return null;
if (parameters.getCompletionType() == CompletionType.BASIC && parameters.getInvocationCount() > 0) {
PsiElement position = parameters.getPosition();
if (psiElement().withParent(psiReferenceExpression().withFirstChild(psiReferenceExpression().referencing(psiClass()))).accepts(position)) {
if (CompletionUtil.shouldShowFeature(parameters, JavaCompletionFeatures.GLOBAL_MEMBER_NAME)) {
final String shortcut = getActionShortcut(IdeActions.ACTION_CLASS_NAME_COMPLETION);
if (shortcut != null) {
return "Pressing " + shortcut + " without a class qualifier would show all accessible static methods";
}
}
}
}
if (parameters.getCompletionType() != CompletionType.SMART && shouldSuggestSmartCompletion(parameters.getPosition())) {
if (CompletionUtil.shouldShowFeature(parameters, CodeCompletionFeatures.EDITING_COMPLETION_SMARTTYPE_GENERAL)) {
final String shortcut = getActionShortcut(IdeActions.ACTION_SMART_TYPE_COMPLETION);
@@ -25,7 +25,7 @@ public interface JavaCompletionFeatures {
@NonNls String SECOND_SMART_COMPLETION_TOAR = "editing.completion.second.smarttype.toar";
@NonNls String SECOND_SMART_COMPLETION_ASLIST = "editing.completion.second.smarttype.aslist";
@NonNls String SECOND_SMART_COMPLETION_ARRAY_MEMBER = "editing.completion.second.smarttype.array.member";
@NonNls String IMPORT_STATIC = "editing.completion.import.static";
@NonNls String GLOBAL_MEMBER_NAME = "editing.completion.global.member.name";
@NonNls String AFTER_NEW = "editing.completion.smarttype.afternew";
@NonNls String AFTER_NEW_ANONYMOUS = "editing.completion.smarttype.afternew";
}
@@ -44,6 +44,8 @@ public abstract class StaticMemberProcessor {
}
public void processStaticMethodsGlobally(final CompletionResultSet resultSet) {
FeatureUsageTracker.getInstance().triggerFeatureUsed(JavaCompletionFeatures.GLOBAL_MEMBER_NAME);
final Consumer<LookupElement> consumer = new Consumer<LookupElement>() {
@Override
public void consume(LookupElement element) {
@@ -64,10 +66,7 @@ public abstract class StaticMemberProcessor {
if (classes.add(containingClass)) {
final boolean shouldImport = myStaticImportedClasses.contains(containingClass);
if (!myHintShown &&
!shouldImport &&
FeatureUsageTracker.getInstance().isToBeShown(JavaCompletionFeatures.IMPORT_STATIC, myProject) &&
CompletionService.getCompletionService().getAdvertisementText() == null) {
if (!myHintShown && !shouldImport && CompletionService.getCompletionService().getAdvertisementText() == null) {
final String shortcut = CompletionContributor.getActionShortcut("EditorRight");
if (shortcut != null) {
CompletionService.getCompletionService().setAdvertisementText("To import a method statically, press " + shortcut);
@@ -49,7 +49,7 @@ editing.completion.second.smarttype.chain=Second smart type completion: chained
editing.completion.second.smarttype.toar=Second smart type completion: toArray() conversion
editing.completion.second.smarttype.aslist=Second smart type completion: asList() conversion
editing.completion.second.smarttype.array.member=Second smart type completion: array member access
editing.completion.import.static=Static import via code completion
editing.completion.global.member.name=Global method name code completion
editing.completion.variable.name=Variable name completion
editing.completion.replace=Replace By when using lookup
editing.completion.finishByDotEtc=Finish lookup by special characters
@@ -19,6 +19,7 @@ import com.intellij.codeInsight.TailTypes;
import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
import com.intellij.openapi.util.Iconable;
@@ -272,23 +273,6 @@ public class GroovyCompletionContributor extends CompletionContributor {
}
public GroovyCompletionContributor() {
extend(CompletionType.BASIC, psiElement(PsiElement.class), new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters parameters,
ProcessingContext context,
@NotNull final CompletionResultSet result) {
final PsiElement reference = parameters.getPosition().getParent();
if (reference instanceof GrReferenceElement) {
if (reference.getParent() instanceof GrImportStatement && ((GrReferenceElement)reference).getQualifier() != null) {
result.addElement(LookupElementBuilder.create("*"));
}
completeReference(parameters, result, (GrReferenceElement)reference);
}
}
});
//provide 'this' and 'super' completions in ClassName.<caret>
extend(CompletionType.BASIC, AFTER_DOT, new CompletionProvider<CompletionParameters>() {
@Override
@@ -305,6 +289,15 @@ public class GroovyCompletionContributor extends CompletionContributor {
GrReferenceExpression referenceExpression = (GrReferenceExpression)qualifier;
final PsiElement resolved = referenceExpression.resolve();
if (!(resolved instanceof PsiClass)) return;
if (CompletionService.getCompletionService().getAdvertisementText() == null && parameters.getInvocationCount() > 0 &&
CompletionUtil.shouldShowFeature(parameters, JavaCompletionFeatures.GLOBAL_MEMBER_NAME)) {
final String shortcut = getActionShortcut(IdeActions.ACTION_CLASS_NAME_COMPLETION);
if (shortcut != null) {
CompletionService.getCompletionService().setAdvertisementText("Pressing " + shortcut + " without a class qualifier would show all accessible static methods");
}
}
if (!PsiUtil.hasEnclosingInstanceInScope((PsiClass)resolved, position, false)) return;
for (String keyword : THIS_SUPER) {
@@ -313,6 +306,23 @@ public class GroovyCompletionContributor extends CompletionContributor {
}
});
extend(CompletionType.BASIC, psiElement(PsiElement.class), new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters parameters,
ProcessingContext context,
@NotNull final CompletionResultSet result) {
final PsiElement reference = parameters.getPosition().getParent();
if (reference instanceof GrReferenceElement) {
if (reference.getParent() instanceof GrImportStatement && ((GrReferenceElement)reference).getQualifier() != null) {
result.addElement(LookupElementBuilder.create("*"));
}
completeReference(parameters, result, (GrReferenceElement)reference);
}
}
});
extend(CompletionType.BASIC, TYPE_IN_VARIABLE_DECLARATION_AFTER_MODIFIER, new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters parameters,
@@ -525,8 +535,10 @@ public class GroovyCompletionContributor extends CompletionContributor {
}
private static void showInfo() {
CompletionService.getCompletionService()
.setAdvertisementText(GroovyBundle.message("invoke.completion.second.time.to.show.skipped.methods"));
if (StringUtil.isEmpty(CompletionService.getCompletionService().getAdvertisementText())) {
CompletionService.getCompletionService()
.setAdvertisementText(GroovyBundle.message("invoke.completion.second.time.to.show.skipped.methods"));
}
}
private static StaticMemberProcessor completeStaticMembers(PsiElement position) {
@@ -176,7 +176,7 @@
<dependency id="editing.completion.smarttype.general"/>
</feature>
<feature
id="editing.completion.import.static"
id="editing.completion.global.member.name"
tip-file="CompletionImportStatic.html"
min-usage-count="8"
first-show="10"