mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
complete siblings of statically imported fields, too (java)
This commit is contained in:
@@ -883,7 +883,7 @@ public class JavaCompletionUtil {
|
||||
}
|
||||
}
|
||||
|
||||
JavaGlobalMemberNameCompletionContributor.completeStaticMembers(element).processMethodsOfRegisteredClasses(matcher, new Consumer<LookupElement>() {
|
||||
JavaGlobalMemberNameCompletionContributor.completeStaticMembers(element).processMembersOfRegisteredClasses(matcher, new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement element) {
|
||||
set.add(element);
|
||||
|
||||
+20
-4
@@ -1,8 +1,10 @@
|
||||
package com.intellij.codeInsight.completion;
|
||||
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.VariableLookupItem;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
@@ -39,11 +41,25 @@ public class JavaGlobalMemberNameCompletionContributor extends CompletionContrib
|
||||
final StaticMemberProcessor processor = new StaticMemberProcessor(position) {
|
||||
@NotNull
|
||||
@Override
|
||||
protected LookupElement createLookupElement(@NotNull PsiMethod method, @NotNull PsiClass containingClass, boolean shouldImport) {
|
||||
final JavaMethodCallElement element = new JavaMethodCallElement(method, true);
|
||||
element.setShouldBeImported(shouldImport);
|
||||
return element;
|
||||
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull final PsiClass containingClass, boolean shouldImport) {
|
||||
if (member instanceof PsiMethod) {
|
||||
final JavaMethodCallElement element = new JavaMethodCallElement((PsiMethod)member, true);
|
||||
element.setShouldBeImported(shouldImport);
|
||||
return element;
|
||||
}
|
||||
return new VariableLookupItem((PsiVariable)member) {
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context) {
|
||||
context.commitDocument();
|
||||
final PsiReferenceExpression ref = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiReferenceExpression.class, false);
|
||||
if (ref != null) {
|
||||
ref.bindToElementViaStaticImport(containingClass);
|
||||
}
|
||||
super.handleInsert(context);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
};
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
|
||||
@@ -64,7 +64,7 @@ public abstract class StaticMemberProcessor {
|
||||
for (final PsiMethod method : methods) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
processMethod(method, consumer);
|
||||
processMember(method, consumer);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -73,7 +73,7 @@ public abstract class StaticMemberProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
public void processMethodsOfRegisteredClasses(@Nullable final PrefixMatcher matcher, final Consumer<LookupElement> consumer) {
|
||||
public void processMembersOfRegisteredClasses(@Nullable final PrefixMatcher matcher, final Consumer<LookupElement> consumer) {
|
||||
for (final PsiClass psiClass : myStaticImportedClasses) {
|
||||
final PsiMethod[] classMethods = ApplicationManager.getApplication().runReadAction(new Computable<PsiMethod[]>() {
|
||||
public PsiMethod[] compute() {
|
||||
@@ -84,7 +84,21 @@ public abstract class StaticMemberProcessor {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
if (matcher == null || matcher.prefixMatches(method.getName())) {
|
||||
processMethod(method, consumer);
|
||||
processMember(method, consumer);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
final PsiField[] fields = ApplicationManager.getApplication().runReadAction(new Computable<PsiField[]>() {
|
||||
public PsiField[] compute() {
|
||||
return psiClass.getAllFields();
|
||||
}
|
||||
});
|
||||
for (final PsiField field : fields) {
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
if (matcher == null || matcher.prefixMatches(field.getName())) {
|
||||
processMember(field, consumer);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -93,11 +107,12 @@ public abstract class StaticMemberProcessor {
|
||||
}
|
||||
|
||||
|
||||
private void processMethod(final PsiMethod method, final Consumer<LookupElement> consumer) {
|
||||
if (method.hasModifierProperty(PsiModifier.STATIC) && myResolveHelper.isAccessible(method, myPosition, null)) {
|
||||
final PsiClass containingClass = method.getContainingClass();
|
||||
private void processMember(final PsiMember member, final Consumer<LookupElement> consumer) {
|
||||
if (member.hasModifierProperty(PsiModifier.STATIC) && myResolveHelper.isAccessible(member, myPosition, null)) {
|
||||
final PsiClass containingClass = member.getContainingClass();
|
||||
if (containingClass != null) {
|
||||
if (!JavaCompletionUtil.isInExcludedPackage(containingClass) && !StaticImportMethodFix.isExcluded(method)) {
|
||||
if (!JavaCompletionUtil.isInExcludedPackage(containingClass) &&
|
||||
(!(member instanceof PsiMethod) || !StaticImportMethodFix.isExcluded((PsiMethod)member))) {
|
||||
final boolean shouldImport = myStaticImportedClasses.contains(containingClass);
|
||||
if (!myHintShown &&
|
||||
!shouldImport &&
|
||||
@@ -110,7 +125,7 @@ public abstract class StaticMemberProcessor {
|
||||
myHintShown = true;
|
||||
}
|
||||
|
||||
consumer.consume(createLookupElement(method, containingClass, shouldImport));
|
||||
consumer.consume(createLookupElement(member, containingClass, shouldImport));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -118,5 +133,5 @@ public abstract class StaticMemberProcessor {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected abstract LookupElement createLookupElement(@NotNull PsiMethod method, @NotNull PsiClass containingClass, boolean shouldImport);
|
||||
protected abstract LookupElement createLookupElement(@NotNull PsiMember member, @NotNull PsiClass containingClass, boolean shouldImport);
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
import static Bar.BAR;
|
||||
import static Bar.FOO;
|
||||
|
||||
class Bar {
|
||||
static String FOO;
|
||||
static String BAR;
|
||||
}
|
||||
|
||||
class Foo {
|
||||
|
||||
Object[] foo() {
|
||||
String a = FOO;
|
||||
String b = BAR;<caret>
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
import static Bar.FOO;
|
||||
|
||||
class Bar {
|
||||
static String FOO;
|
||||
static String BAR;
|
||||
}
|
||||
|
||||
class Foo {
|
||||
|
||||
Object[] foo() {
|
||||
String a = FOO;
|
||||
String b = BA<caret>
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
import static Bar.FOO
|
||||
|
||||
class Bar {
|
||||
static String FOO;
|
||||
static String BAR;
|
||||
}
|
||||
|
||||
class Foo {
|
||||
|
||||
Object[] foo() {
|
||||
String b = FOO;<caret>
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
import static Bar.FOO
|
||||
|
||||
class Bar {
|
||||
static String FOO;
|
||||
static String BAR;
|
||||
}
|
||||
|
||||
class Foo {
|
||||
|
||||
Object[] foo() {
|
||||
String b = FO<caret>
|
||||
}
|
||||
}
|
||||
+3
@@ -936,6 +936,9 @@ public class SmartTypeCompletionTest extends LightCompletionTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testStaticallyImportedField() throws Throwable { doTest(); }
|
||||
public void testSiblingOfAStaticallyImportedField() throws Throwable { doTest(); }
|
||||
|
||||
public void testInferFromCall() throws Throwable {
|
||||
doTest();
|
||||
}
|
||||
|
||||
+6
-3
@@ -160,7 +160,7 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
});
|
||||
|
||||
completeStaticMembers(position).processMethodsOfRegisteredClasses(result.getPrefixMatcher(), new Consumer<LookupElement>() {
|
||||
completeStaticMembers(position).processMembersOfRegisteredClasses(result.getPrefixMatcher(), new Consumer<LookupElement>() {
|
||||
@Override
|
||||
public void consume(LookupElement element) {
|
||||
result.addElement(element);
|
||||
@@ -389,8 +389,11 @@ public class GroovyCompletionContributor extends CompletionContributor {
|
||||
final StaticMemberProcessor processor = new StaticMemberProcessor(position) {
|
||||
@NotNull
|
||||
@Override
|
||||
protected LookupElement createLookupElement(@NotNull PsiMethod method, @NotNull PsiClass containingClass, boolean shouldImport) {
|
||||
return new JavaGlobalMemberLookupElement(method, containingClass, QUALIFIED_METHOD_INSERT_HANDLER, STATIC_IMPORT_INSERT_HANDLER, shouldImport);
|
||||
protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull PsiClass containingClass, boolean shouldImport) {
|
||||
if (member instanceof PsiMethod) {
|
||||
return new JavaGlobalMemberLookupElement((PsiMethod)member, containingClass, QUALIFIED_METHOD_INSERT_HANDLER, STATIC_IMPORT_INSERT_HANDLER, shouldImport);
|
||||
}
|
||||
return GroovyCompletionUtil.getLookupElement(member); //todo;
|
||||
}
|
||||
};
|
||||
final PsiFile file = position.getContainingFile();
|
||||
|
||||
Reference in New Issue
Block a user