smart completion in groovy to suggest members of expected class (IDEA-66975)

This commit is contained in:
peter
2011-04-07 19:50:10 +02:00
parent c65ff63395
commit 5fe80ddaa8
9 changed files with 144 additions and 22 deletions
@@ -60,6 +60,7 @@ import com.intellij.util.IncorrectOperationException;
import com.intellij.util.NullableFunction;
import com.intellij.util.PairConsumer;
import com.intellij.util.PairFunction;
import com.intellij.util.containers.CollectionFactory;
import com.intellij.util.containers.HashMap;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NonNls;
@@ -668,29 +669,34 @@ public class JavaCompletionUtil {
public static LookupItem qualify(final LookupItem ret) {
if (!(ret instanceof JavaMethodCallElement)) {
final PsiMember completionElement = (PsiMember)ret.getObject();
String prefix = "";
PsiClass containingClass = completionElement.getContainingClass();
while (containingClass != null) {
final String className = containingClass.getName();
if (className == null) {
break;
}
prefix = className + "." + prefix;
final PsiElement parent = containingClass.getParent();
if (!(parent instanceof PsiClass)) {
break;
}
containingClass = (PsiClass)parent;
}
if (StringUtil.isNotEmpty(prefix)) {
ret.setLookupString(prefix + ret.getLookupString());
for (String s : getAllLookupStrings((PsiMember)ret.getObject())) {
ret.setLookupString(s);
}
}
return ret.forceQualify();
}
public static Set<String> getAllLookupStrings(@NotNull PsiMember member) {
Set<String> allLookupStrings = CollectionFactory.linkedHashSet();
String name = member.getName();
allLookupStrings.add(name);
PsiClass containingClass = member.getContainingClass();
while (containingClass != null) {
final String className = containingClass.getName();
if (className == null) {
break;
}
name = className + "." + name;
allLookupStrings.add(name);
final PsiElement parent = containingClass.getParent();
if (!(parent instanceof PsiClass)) {
break;
}
containingClass = (PsiClass)parent;
}
return allLookupStrings;
}
public static LookupItem setShowFQN(final LookupItem ret) {
final PsiClass psiClass = (PsiClass)ret.getObject();
@NonNls String packageName = PsiFormatUtil.getPackageDisplayName(psiClass);
@@ -10,6 +10,7 @@ import com.intellij.psi.PsiSubstitutor;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Set;
import static com.intellij.util.ObjectUtils.assertNotNull;
@@ -56,6 +57,11 @@ public class JavaGlobalMemberLookupElement extends LookupElement implements Stat
return assertNotNull(getObject().getName());
}
@Override
public Set<String> getAllLookupStrings() {
return JavaCompletionUtil.getAllLookupStrings(getObject());
}
@Override
public void renderElement(LookupElementPresentation presentation) {
presentation.setIcon(DefaultLookupItemRenderer.getRawIcon(this, presentation.isReal()));