mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
prefer expected type generics suggestions in java completion, overwrite existing type arguments (IDEA-145119)
This commit is contained in:
@@ -150,6 +150,7 @@ public class PreferByKindWeigher extends LookupElementWeigher {
|
||||
superMethodParameters,
|
||||
field,
|
||||
expectedTypeConstant,
|
||||
expectedTypeArgument,
|
||||
getter,
|
||||
normal,
|
||||
collectionFactory,
|
||||
@@ -208,6 +209,9 @@ public class PreferByKindWeigher extends LookupElementWeigher {
|
||||
if (expectedTypeMember != null) {
|
||||
return expectedTypeMember ? (object instanceof PsiField ? MyResult.expectedTypeConstant : MyResult.expectedTypeMethod) : MyResult.classNameOrGlobalStatic;
|
||||
}
|
||||
if (item instanceof TypeArgumentCompletionProvider.TypeArgsLookupElement) {
|
||||
return MyResult.expectedTypeArgument;
|
||||
}
|
||||
final JavaChainLookupElement chain = item.as(JavaChainLookupElement.CLASS_CONDITION_KEY);
|
||||
if (chain != null) {
|
||||
Object qualifier = chain.getQualifier().getObject();
|
||||
|
||||
+9
-2
@@ -94,7 +94,6 @@ class TypeArgumentCompletionProvider extends CompletionProvider<CompletionParame
|
||||
final PsiClass expectedClass = expectedType.getElement();
|
||||
|
||||
if (!InheritanceUtil.isInheritorOrSelf(actualClass, expectedClass, true)) return;
|
||||
assert expectedClass != null;
|
||||
|
||||
final PsiSubstitutor currentSubstitutor = TypeConversionUtil.getClassSubstitutor(expectedClass, actualClass, PsiSubstitutor.EMPTY);
|
||||
assert currentSubstitutor != null;
|
||||
@@ -246,7 +245,15 @@ class TypeArgumentCompletionProvider extends CompletionProvider<CompletionParame
|
||||
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context) {
|
||||
context.getDocument().deleteString(context.getStartOffset(), context.getTailOffset());
|
||||
context.commitDocument();
|
||||
PsiReferenceParameterList list = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiReferenceParameterList.class, false);
|
||||
PsiTypeElement[] typeElements = list != null ? list.getTypeParameterElements() : PsiTypeElement.EMPTY_ARRAY;
|
||||
if (typeElements.length == 0) {
|
||||
return;
|
||||
}
|
||||
int listEnd = typeElements[typeElements.length - 1].getTextRange().getEndOffset();
|
||||
context.setTailOffset(listEnd);
|
||||
context.getDocument().deleteString(context.getStartOffset(), listEnd);
|
||||
for (int i = 0; i < myTypeItems.size(); i++) {
|
||||
PsiTypeLookupItem typeItem = myTypeItems.get(i);
|
||||
CompletionUtil.emulateInsertion(context, context.getTailOffset(), typeItem);
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import java.util.*;
|
||||
|
||||
class Foo {
|
||||
|
||||
void bar() {
|
||||
Map<Integer, String> a = new HashMap<Integer, String>(<caret>);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
import java.util.*;
|
||||
|
||||
class Foo {
|
||||
|
||||
void bar() {
|
||||
Map<Integer, String> a = new HashMap<<caret>, String>();
|
||||
}
|
||||
|
||||
}
|
||||
+1
-2
@@ -1324,8 +1324,7 @@ class XInternalError {}
|
||||
|
||||
public void testSuggestAllTypeArguments() {
|
||||
configure()
|
||||
assert 'String, String' == lookup.items[1].lookupString
|
||||
lookup.currentItem = lookup.items[1]
|
||||
assert 'String, String' == lookup.items[0].lookupString
|
||||
type '\n'
|
||||
checkResult()
|
||||
}
|
||||
|
||||
+1
@@ -909,6 +909,7 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
public void testTypeArgs2() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
public void testTypeArgsOverwrite() { doTest(); }
|
||||
|
||||
public void testIfConditionExpectedType() throws Exception { doTest(); }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user