mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 21:41:24 +07:00
IDEA-54220 Code Completion for value() method in @interfaces could be added
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.completion.util.ParenthesesInsertHandler;
|
||||
import com.intellij.codeInsight.lookup.*;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -33,6 +34,7 @@ import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.refactoring.introduceField.InplaceIntroduceFieldPopup;
|
||||
import com.intellij.refactoring.introduceVariable.IntroduceVariableBase;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.PlatformIcons;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashSet;
|
||||
@@ -81,8 +83,8 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
public void addCompletions(@NotNull final CompletionParameters parameters, final ProcessingContext matchingContext, @NotNull final CompletionResultSet result) {
|
||||
final Set<LookupElement> lookupSet = new THashSet<LookupElement>();
|
||||
final PsiField variable = (PsiField)parameters.getPosition().getParent();
|
||||
completeFieldName(lookupSet, variable, result.getPrefixMatcher(), parameters.getInvocationCount() >= 1);
|
||||
completeMethodName(lookupSet, variable, result.getPrefixMatcher());
|
||||
completeFieldName(lookupSet, variable, result.getPrefixMatcher(), parameters.getInvocationCount() >= 1);
|
||||
for (final LookupElement item : lookupSet) {
|
||||
result.addElement(item);
|
||||
}
|
||||
@@ -248,7 +250,7 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
final VariableKind variableKind = JavaCodeStyleManager.getInstance(project).getVariableKind(var);
|
||||
|
||||
final String prefix = matcher.getPrefix();
|
||||
if (PsiType.VOID.equals(var.getType()) || psiField().inClass(psiClass().isInterface()).accepts(var)) {
|
||||
if (PsiType.VOID.equals(var.getType()) || psiField().inClass(psiClass().isInterface().andNot(psiClass().isAnnotationType())).accepts(var)) {
|
||||
completeVariableNameForRefactoring(project, set, matcher, var.getType(), variableKind, includeOverlapped, true);
|
||||
return;
|
||||
}
|
||||
@@ -340,6 +342,14 @@ public class JavaMemberNameCompletionContributor extends CompletionContributor {
|
||||
|
||||
PsiClass ourClassParent = PsiTreeUtil.getParentOfType(element, PsiClass.class);
|
||||
if (ourClassParent == null) return;
|
||||
|
||||
if (ourClassParent.isAnnotationType() && matcher.prefixMatches(PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME)) {
|
||||
set.add(LookupElementBuilder.create(PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME)
|
||||
.setIcon(PlatformIcons.METHOD_ICON)
|
||||
.setTailText("()")
|
||||
.setInsertHandler(ParenthesesInsertHandler.NO_PARAMETERS));
|
||||
}
|
||||
|
||||
addLookupItems(set, null, matcher, element.getProject(), getUnresolvedReferences(ourClassParent, true));
|
||||
|
||||
addLookupItems(set, null, matcher, element.getProject(), getPropertiesHandlersNames(
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
@interface Some {
|
||||
String v<caret>
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
@interface Some {
|
||||
String value()<caret>
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
public class Foo {
|
||||
public void a() {
|
||||
int i = createStylesheetCombobox();
|
||||
}
|
||||
|
||||
private int createStylesheetCombobox<caret>
|
||||
}
|
||||
@@ -94,7 +94,7 @@ public class HeavyNormalCompletionTest extends JavaCodeInsightFixtureTestCase {
|
||||
myFixture.configureByFile("/codeInsight/completion/normal/" + getTestName(false) + ".java");
|
||||
assertInstanceOf(myFixture.getFile().getVirtualFile().getFileSystem(), LocalFileSystem.class); // otherwise the completion copy won't be preserved which is critical here
|
||||
myFixture.completeBasic();
|
||||
assertOrderedEquals(myFixture.getLookupElementStrings(), "gAnInt", "getAaa", "getBbb");
|
||||
assertOrderedEquals(myFixture.getLookupElementStrings(), "getAaa", "getBbb");
|
||||
myFixture.getEditor().getCaretModel().moveToOffset(myFixture.getEditor().getCaretModel().getOffset() + 2);
|
||||
assertNull(myFixture.completeBasic());
|
||||
}
|
||||
|
||||
@@ -138,8 +138,7 @@ public class VariablesCompletionTest extends LightFixtureCompletionTestCase {
|
||||
public void testUnresolvedMethodName() throws Exception {
|
||||
configureByFile(FILE_PREFIX + "locals/" + "UnresolvedMethodName.java");
|
||||
complete();
|
||||
checkResultByFile(FILE_PREFIX + "locals/" + "UnresolvedMethodName.java");
|
||||
assert myFixture.lookupElementStrings.containsAll(["creAnInt", "createStylesheetCombobox"])
|
||||
checkResultByFile(FILE_PREFIX + "locals/" + "UnresolvedMethodName_after.java");
|
||||
}
|
||||
|
||||
public void testArrayMethodName() throws Throwable {
|
||||
@@ -172,6 +171,11 @@ public class VariablesCompletionTest extends LightFixtureCompletionTestCase {
|
||||
configureByFile(FILE_PREFIX + getTestName(false) + ".java")
|
||||
}
|
||||
|
||||
public void testAnnotationValue() {
|
||||
configure()
|
||||
checkResultByFile(FILE_PREFIX + getTestName(false) + "_after.java")
|
||||
}
|
||||
|
||||
public void testConstructorParameterName() {
|
||||
configure()
|
||||
assertStringItems("color");
|
||||
|
||||
@@ -61,6 +61,12 @@ public class PsiClassPattern extends PsiMemberPattern<PsiClass, PsiClassPattern>
|
||||
return psiClass.isInterface();
|
||||
}
|
||||
});}
|
||||
public PsiClassPattern isAnnotationType() {
|
||||
return with(new PatternCondition<PsiClass>("isAnnotationType") {
|
||||
public boolean accepts(@NotNull final PsiClass psiClass, final ProcessingContext context) {
|
||||
return psiClass.isAnnotationType();
|
||||
}
|
||||
});}
|
||||
|
||||
public PsiClassPattern withMethod(final boolean checkDeep, final ElementPattern<? extends PsiMethod> memberPattern) {
|
||||
return with(new PatternCondition<PsiClass>("withMethod") {
|
||||
|
||||
Reference in New Issue
Block a user