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); return (JetParameterList) findChildByType(JetNodeTypes.VALUE_PARAMETER_LIST);
} }
@Override
@NotNull @NotNull
public List<JetParameter> getValueParameters() { public List<JetParameter> getValueParameters() {
JetParameterList list = getValueParameterList(); JetParameterList list = getValueParameterList();
@@ -16,6 +16,8 @@
package org.jetbrains.jet.plugin.caches; 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.ChooseByNameContributor;
import com.intellij.navigation.NavigationItem; import com.intellij.navigation.NavigationItem;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
@@ -48,7 +50,7 @@ public class GotoSymbolContributor implements ChooseByNameContributor {
final Collection<? extends NavigationItem> functions = StubIndex.getInstance().get( final Collection<? extends NavigationItem> functions = StubIndex.getInstance().get(
JetIndexKeys.FUNCTIONS_SHORT_NAME_KEY, name, project, scope); 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); return ArrayUtil.toObjectArray(items, NavigationItem.class);
} }
} }
@@ -16,11 +16,15 @@
package org.jetbrains.jet.plugin.presentation; 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.ColoredItemPresentation;
import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.ItemPresentation;
import com.intellij.navigation.ItemPresentationProvider; import com.intellij.navigation.ItemPresentationProvider;
import com.intellij.openapi.editor.colors.TextAttributesKey; 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.JetNamedFunction;
import org.jetbrains.jet.lang.psi.JetParameter;
import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.psi.JetTypeReference; import org.jetbrains.jet.lang.psi.JetTypeReference;
import org.jetbrains.jet.lang.resolve.name.FqName; 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 org.jetbrains.jet.util.QualifiedNamesUtil;
import javax.swing.*; import javax.swing.*;
import java.util.Collection;
/** /**
* @author Nikolay Krasko * @author Nikolay Krasko
@@ -43,15 +48,35 @@ public class JetFunctionPresenter implements ItemPresentationProvider<JetNamedFu
@Override @Override
public String getPresentableText() { 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 @Override
public String getLocationString() { public String getLocationString() {
FqName name = JetPsiUtil.getFQName(function); FqName name = JetPsiUtil.getFQName(function);
if (name != null) { if (name != null) {
JetTypeReference typeRef = function.getReturnTypeRef(); JetTypeReference receiverTypeRef = function.getReceiverTypeRef();
String extensionLocation = typeRef != null ? "for " + typeRef.getText() + " " : ""; String extensionLocation = receiverTypeRef != null ? "for " + receiverTypeRef.getText() + " " : "";
return String.format("(%sin %s)", extensionLocation, QualifiedNamesUtil.withoutLastSegment(name)); return String.format("(%sin %s)", extensionLocation, QualifiedNamesUtil.withoutLastSegment(name));
} }