mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-63563 add "tip of the day" for using Ctrl-Alt-Space to complete static methods
This commit is contained in:
-2
@@ -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
|
||||
|
||||
+31
-19
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user