mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-74249 Wrong global name completion of static method in same class
This commit is contained in:
@@ -446,7 +446,7 @@ public class JavaCompletionUtil {
|
||||
}
|
||||
|
||||
if (javaReference instanceof PsiReferenceExpression && !((PsiReferenceExpression)javaReference).isQualified()) {
|
||||
final StaticMemberProcessor memberProcessor = JavaGlobalMemberNameCompletionContributor.completeStaticMembers(element);
|
||||
final StaticMemberProcessor memberProcessor = JavaGlobalMemberNameCompletionContributor.completeStaticMembers(parameters);
|
||||
memberProcessor.processMembersOfRegisteredClasses(matcher, new PairConsumer<PsiMember, PsiClass>() {
|
||||
@Override
|
||||
public void consume(PsiMember member, PsiClass psiClass) {
|
||||
|
||||
+9
-3
@@ -35,14 +35,18 @@ public class JavaGlobalMemberNameCompletionContributor extends CompletionContrib
|
||||
return;
|
||||
}
|
||||
|
||||
completeStaticMembers(position).processStaticMethodsGlobally(result);
|
||||
completeStaticMembers(parameters).processStaticMethodsGlobally(result);
|
||||
}
|
||||
|
||||
public static StaticMemberProcessor completeStaticMembers(final PsiElement position) {
|
||||
public static StaticMemberProcessor completeStaticMembers(CompletionParameters parameters) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
final PsiElement originalPosition = parameters.getOriginalPosition();
|
||||
final StaticMemberProcessor processor = new StaticMemberProcessor(position) {
|
||||
@NotNull
|
||||
@Override
|
||||
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull final PsiClass containingClass, final boolean shouldImport) {
|
||||
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull final PsiClass containingClass, boolean shouldImport) {
|
||||
shouldImport |= originalPosition != null && PsiTreeUtil.isAncestor(containingClass, originalPosition, false);
|
||||
|
||||
if (member instanceof PsiMethod) {
|
||||
final JavaMethodCallElement element = new JavaMethodCallElement((PsiMethod)member, true, false);
|
||||
element.setShouldBeImported(shouldImport);
|
||||
@@ -55,6 +59,8 @@ public class JavaGlobalMemberNameCompletionContributor extends CompletionContrib
|
||||
protected LookupElement createLookupElement(@NotNull List<PsiMethod> overloads,
|
||||
@NotNull PsiClass containingClass,
|
||||
boolean shouldImport) {
|
||||
shouldImport |= originalPosition != null && PsiTreeUtil.isAncestor(containingClass, originalPosition, false);
|
||||
|
||||
final JavaMethodCallElement element = new JavaMethodCallElement(overloads.get(0), true, true);
|
||||
element.putUserData(JavaCompletionUtil.ALL_METHODS_ATTRIBUTE, overloads);
|
||||
element.setShouldBeImported(shouldImport);
|
||||
|
||||
@@ -106,7 +106,7 @@ public class JavaMethodCallElement extends LookupItem<PsiMethod> implements Type
|
||||
context.commitDocument();
|
||||
if (myHelper != null && willBeImported()) {
|
||||
final PsiReferenceExpression ref = PsiTreeUtil.findElementOfClassAtOffset(file, startOffset, PsiReferenceExpression.class, false);
|
||||
if (ref != null && myContainingClass != null) {
|
||||
if (ref != null && myContainingClass != null && !ref.isReferenceTo(method)) {
|
||||
ref.bindToElementViaStaticImport(myContainingClass);
|
||||
}
|
||||
return;
|
||||
|
||||
+26
@@ -161,6 +161,32 @@ class Bar {{ abcmethod1()<caret> }}"""
|
||||
assertOrderedEquals myFixture.lookupElementStrings, "abcmethod", "abcmethod1"
|
||||
}
|
||||
|
||||
public void testMethodFromTheSameClass() {
|
||||
myFixture.configureByText("a.java", """
|
||||
class A {
|
||||
static void foo() {}
|
||||
|
||||
static void goo() {
|
||||
f<caret>
|
||||
}
|
||||
}
|
||||
""")
|
||||
def element = myFixture.complete(CompletionType.CLASS_NAME)[0]
|
||||
def presentation = new LookupElementPresentation()
|
||||
element.renderElement(presentation)
|
||||
assert 'foo' == presentation.itemText
|
||||
myFixture.type '\n'
|
||||
myFixture.checkResult '''
|
||||
class A {
|
||||
static void foo() {}
|
||||
|
||||
static void goo() {
|
||||
foo();<caret>
|
||||
}
|
||||
}
|
||||
'''
|
||||
}
|
||||
|
||||
private void doTest(String input, boolean importStatic, String output) {
|
||||
myFixture.configureByText("a.java", input)
|
||||
|
||||
|
||||
+7
-4
@@ -242,7 +242,7 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
|
||||
if (StringUtil.isEmpty(result.getPrefixMatcher().getPrefix())) return;
|
||||
|
||||
completeStaticMembers(position).processStaticMethodsGlobally(result);
|
||||
completeStaticMembers(parameters).processStaticMethodsGlobally(result);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -448,7 +448,7 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
});
|
||||
|
||||
if (qualifier == null) {
|
||||
completeStaticMembers(position).processMembersOfRegisteredClasses(null, new PairConsumer<PsiMember, PsiClass>() {
|
||||
completeStaticMembers(parameters).processMembersOfRegisteredClasses(null, new PairConsumer<PsiMember, PsiClass>() {
|
||||
@Override
|
||||
public void consume(PsiMember member, PsiClass psiClass) {
|
||||
if (member instanceof GrAccessorMethod) {
|
||||
@@ -485,11 +485,14 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
}
|
||||
|
||||
private static StaticMemberProcessor completeStaticMembers(PsiElement position) {
|
||||
private static StaticMemberProcessor completeStaticMembers(CompletionParameters parameters) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
final PsiElement originalPosition = parameters.getOriginalPosition();
|
||||
final StaticMemberProcessor processor = new StaticMemberProcessor(position) {
|
||||
@NotNull
|
||||
@Override
|
||||
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull PsiClass containingClass, boolean shouldImport) {
|
||||
shouldImport |= originalPosition != null && PsiTreeUtil.isAncestor(containingClass, originalPosition, false);
|
||||
return createGlobalMemberElement(member, containingClass, shouldImport);
|
||||
}
|
||||
|
||||
@@ -497,6 +500,7 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
protected LookupElement createLookupElement(@NotNull List<PsiMethod> overloads,
|
||||
@NotNull PsiClass containingClass,
|
||||
boolean shouldImport) {
|
||||
shouldImport |= originalPosition != null && PsiTreeUtil.isAncestor(containingClass, originalPosition, false);
|
||||
return new JavaGlobalMemberLookupElement(overloads, containingClass, QUALIFIED_METHOD_INSERT_HANDLER, STATIC_IMPORT_INSERT_HANDLER,
|
||||
shouldImport);
|
||||
}
|
||||
@@ -539,7 +543,6 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
return new JavaGlobalMemberLookupElement(member, containingClass, QUALIFIED_METHOD_INSERT_HANDLER, STATIC_IMPORT_INSERT_HANDLER, shouldImport);
|
||||
}
|
||||
|
||||
private static final String DUMMY_IDENTIFIER_TRIMMED_DECAPITALIZED = "intelliJIdeaRulezzz";
|
||||
private static final String DUMMY_IDENTIFIER_DECAPITALIZED = "intelliJIdeaRulezzz ";
|
||||
|
||||
public void beforeCompletion(@NotNull final CompletionInitializationContext context) {
|
||||
|
||||
+24
@@ -268,5 +268,29 @@ Zoooo<caret>x""")
|
||||
assertOneElement(myFixture.completeBasic())
|
||||
}
|
||||
|
||||
public void testMethodFromTheSameClass() {
|
||||
myFixture.configureByText("a.groovy", """
|
||||
class A {
|
||||
static void foo() {}
|
||||
|
||||
static void goo() {
|
||||
f<caret>
|
||||
}
|
||||
}
|
||||
""")
|
||||
assert 'foo' == renderElement(myFixture.complete(CompletionType.CLASS_NAME)[0]).itemText
|
||||
myFixture.type '\n'
|
||||
myFixture.checkResult '''
|
||||
class A {
|
||||
static void foo() {}
|
||||
|
||||
static void goo() {
|
||||
foo()<caret>
|
||||
}
|
||||
}
|
||||
'''
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user