override/implement completion: show short types, not raw (IDEA-CR-19511)

This commit is contained in:
peter
2017-03-27 17:39:24 +02:00
parent f9e4cd70c8
commit 7372d02347
3 changed files with 30 additions and 3 deletions
@@ -22,6 +22,7 @@ import com.intellij.codeInspection.ex.GlobalInspectionContextBase;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.util.Iconable;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.infos.CandidateInfo;
import com.intellij.psi.util.*;
@@ -29,6 +30,7 @@ import com.intellij.ui.RowIcon;
import com.intellij.util.ObjectUtils;
import com.intellij.util.VisibilityUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.util.*;
@@ -162,9 +164,9 @@ public class JavaGenerateMemberCompletionContributor {
PsiType type = substitutor.substitute(prototype.getReturnType());
String signature = modifiers + (type == null ? "" : type.getPresentableText() + " ") + methodName;
String parameters = PsiFormatUtil.formatMethod(prototype, substitutor,
PsiFormatUtilBase.SHOW_PARAMETERS,
PsiFormatUtilBase.SHOW_NAME | PsiFormatUtilBase.SHOW_RAW_TYPE | PsiFormatUtilBase.SHOW_TYPE);
String parameters = "(" + StringUtil.join(prototype.getParameterList().getParameters(),
p -> getShortParameterName(substitutor, p) + " " + p.getName(),
", ") + ")";
String overrideSignature = " @Override " + signature; // leading space to make it a middle match, under all annotation suggestions
LookupElementBuilder element = LookupElementBuilder.create(prototype, signature).withLookupString(methodName).
@@ -176,4 +178,9 @@ public class JavaGenerateMemberCompletionContributor {
element.putUserData(GENERATE_ELEMENT, true);
return element;
}
@NotNull
private static String getShortParameterName(PsiSubstitutor substitutor, PsiParameter p) {
return PsiNameHelper.getShortClassName(substitutor.substitute(p.getType()).getPresentableText(false));
}
}
@@ -0,0 +1,13 @@
import java.util.List;
class Foo implements Bar {
methW<caret>
}
interface Bar {
<K> void methodWithTypeParam(K k);
void methodWithGenerics(List<String> k);
}
@@ -1522,6 +1522,13 @@ class XInternalError {}
checkResult()
}
void testImplementViaCompletionWithGenerics() {
configure()
myFixture.assertPreferredCompletionItems 0, 'public void methodWithGenerics', 'public void methodWithTypeParam'
assert LookupElementPresentation.renderElement(lookup.items[0]).tailText == '(List k) {...}'
assert LookupElementPresentation.renderElement(lookup.items[1]).tailText == '(K k) {...}'
}
void testImplementViaOverrideCompletion() {
configure()
myFixture.assertPreferredCompletionItems 0, 'Override', 'public void run'