KT-1719 Navigate -> Symbol... completions are not super helpful for extension functions

#KT-1719 fixed
This commit is contained in:
Nikolay Krasko
2012-05-29 17:50:43 +04:00
parent 1a77c36040
commit 8daeb735e4
3 changed files with 32 additions and 4 deletions
@@ -42,6 +42,7 @@ abstract public class JetFunction extends JetTypeParameterListOwner
return (JetParameterList) findChildByType(JetNodeTypes.VALUE_PARAMETER_LIST);
}
@Override
@NotNull
public List<JetParameter> getValueParameters() {
JetParameterList list = getValueParameterList();
@@ -16,6 +16,8 @@
package org.jetbrains.jet.plugin.caches;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import com.intellij.navigation.ChooseByNameContributor;
import com.intellij.navigation.NavigationItem;
import com.intellij.openapi.project.Project;
@@ -48,7 +50,7 @@ public class GotoSymbolContributor implements ChooseByNameContributor {
final Collection<? extends NavigationItem> functions = StubIndex.getInstance().get(
JetIndexKeys.FUNCTIONS_SHORT_NAME_KEY, name, project, scope);
final List<NavigationItem> items = new ArrayList<NavigationItem>(functions);
final List<NavigationItem> items = new ArrayList<NavigationItem>(Collections2.filter(functions, Predicates.notNull()));
return ArrayUtil.toObjectArray(items, NavigationItem.class);
}
}
@@ -16,11 +16,15 @@
package org.jetbrains.jet.plugin.presentation;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
import com.intellij.navigation.ColoredItemPresentation;
import com.intellij.navigation.ItemPresentation;
import com.intellij.navigation.ItemPresentationProvider;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import org.apache.commons.lang.StringUtils;
import org.jetbrains.jet.lang.psi.JetNamedFunction;
import org.jetbrains.jet.lang.psi.JetParameter;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.psi.JetTypeReference;
import org.jetbrains.jet.lang.resolve.name.FqName;
@@ -28,6 +32,7 @@ import org.jetbrains.jet.plugin.JetIconProvider;
import org.jetbrains.jet.util.QualifiedNamesUtil;
import javax.swing.*;
import java.util.Collection;
/**
* @author Nikolay Krasko
@@ -43,15 +48,35 @@ public class JetFunctionPresenter implements ItemPresentationProvider<JetNamedFu
@Override
public String getPresentableText() {
return function.getName();
StringBuilder presentation = new StringBuilder(function.getName());
Collection<String> paramsStrings = Collections2.transform(function.getValueParameters(), new Function<JetParameter, String>() {
@Override
public String apply(JetParameter parameter) {
if (parameter != null) {
JetTypeReference reference = parameter.getTypeReference();
if (reference != null) {
String text = reference.getText();
if (text != null) {
return text;
}
}
}
return "?";
}
});
presentation.append("(").append(StringUtils.join(paramsStrings, ",")).append(")");
return presentation.toString();
}
@Override
public String getLocationString() {
FqName name = JetPsiUtil.getFQName(function);
if (name != null) {
JetTypeReference typeRef = function.getReturnTypeRef();
String extensionLocation = typeRef != null ? "for " + typeRef.getText() + " " : "";
JetTypeReference receiverTypeRef = function.getReceiverTypeRef();
String extensionLocation = receiverTypeRef != null ? "for " + receiverTypeRef.getText() + " " : "";
return String.format("(%sin %s)", extensionLocation, QualifiedNamesUtil.withoutLastSegment(name));
}