mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java-completion] IDEA-292773 autocomplete should expand also the ".class" automatically when requested argument type is a java.lang.Class
GitOrigin-RevId: 064de8edd56681c0ef9720199ae002eb12e4ca92
This commit is contained in:
committed by
intellij-monorepo-bot
parent
db1020655b
commit
df4d5e6486
@@ -46,6 +46,7 @@ import com.intellij.psi.filters.classes.AssignableFromContextFilter;
|
||||
import com.intellij.psi.filters.classes.NoFinalLibraryClassesFilter;
|
||||
import com.intellij.psi.filters.element.ExcludeDeclaredFilter;
|
||||
import com.intellij.psi.filters.element.ModifierFilter;
|
||||
import com.intellij.psi.filters.getters.ClassLiteralGetter;
|
||||
import com.intellij.psi.filters.getters.ExpectedTypesGetter;
|
||||
import com.intellij.psi.filters.getters.JavaMembersGetter;
|
||||
import com.intellij.psi.filters.types.AssignableFromFilter;
|
||||
@@ -437,6 +438,12 @@ public final class JavaCompletionContributor extends CompletionContributor imple
|
||||
if (smart) {
|
||||
hasTypeMatchingSuggestions |= smartCompleteExpression(parameters, result, expectedInfos);
|
||||
smartCompleteNonExpression(parameters, result);
|
||||
} else {
|
||||
if (!JavaKeywordCompletion.AFTER_DOT.accepts(position)) {
|
||||
for (ExpectedTypeInfo info : expectedInfos) {
|
||||
ClassLiteralGetter.addCompletions(new JavaSmartCompletionParameters(parameters, info), result, matcher);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((!hasTypeMatchingSuggestions || parameters.getInvocationCount() >= 2) &&
|
||||
|
||||
@@ -4,6 +4,7 @@ package com.intellij.psi.filters.getters;
|
||||
import com.intellij.codeInsight.CodeInsightUtil;
|
||||
import com.intellij.codeInsight.completion.JavaSmartCompletionParameters;
|
||||
import com.intellij.codeInsight.completion.PrefixMatcher;
|
||||
import com.intellij.codeInsight.completion.PrioritizedLookupElement;
|
||||
import com.intellij.codeInsight.lookup.AutoCompletionPolicy;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -12,6 +13,7 @@ import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.siyeh.ig.psiutils.TypeUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -34,7 +36,8 @@ public final class ClassLiteralGetter {
|
||||
if (classParameter instanceof PsiWildcardType) {
|
||||
final PsiWildcardType wildcardType = (PsiWildcardType)classParameter;
|
||||
classParameter = wildcardType.isSuper() ? wildcardType.getSuperBound() : wildcardType.getExtendsBound();
|
||||
addInheritors = wildcardType.isExtends() && classParameter instanceof PsiClassType;
|
||||
addInheritors = !wildcardType.isSuper() && classParameter instanceof PsiClassType &&
|
||||
!(matcher.getPrefix().isEmpty() && TypeUtils.isJavaLangObject(classParameter));
|
||||
} else if (!matcher.getPrefix().isEmpty()) {
|
||||
addInheritors = true;
|
||||
classParameter = PsiType.getJavaLangObject(position.getManager(), position.getResolveScope());
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
}
|
||||
|
||||
class Foo {
|
||||
@TestFor(testForClass = { Object.class, Aaaaaaaaaaaaaaaaaaaaa<caret> } )
|
||||
@TestFor(testForClass = { Object.class, Aaaaaaaaaaaaaaaaaaaaa.class<caret> } )
|
||||
public void foo22() {}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
}
|
||||
|
||||
class Foo {
|
||||
@TestFor(testForClass = { Aaaaaaaaaaaaaaaaaaaaa<caret> } )
|
||||
@TestFor(testForClass = { Aaaaaaaaaaaaaaaaaaaaa.class<caret> } )
|
||||
public void foo22() {}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -621,7 +621,7 @@ interface TxANotAnno {}
|
||||
@NeedsIndex.ForStandardLibrary
|
||||
void testPreferClassesOfExpectedClassType() {
|
||||
myFixture.addClass "class XException extends Exception {}"
|
||||
checkPreferredItems 0, 'XException', 'XClass', 'XIntf'
|
||||
checkPreferredItems 0, 'XException.class', 'XException', 'XClass', 'XIntf'
|
||||
}
|
||||
|
||||
void testNoNumberValueOf() {
|
||||
|
||||
+19
-3
@@ -204,9 +204,11 @@ class NormalCompletionTest extends NormalCompletionTestCase {
|
||||
assertTrue("Exception not found", Arrays.binarySearch(myItems, "xxx") > 0)
|
||||
}
|
||||
|
||||
void testClassLiteralInArrayAnnoInitializer() throws Throwable { doTest() }
|
||||
@NeedsIndex.ForStandardLibrary
|
||||
void testClassLiteralInArrayAnnoInitializer() throws Throwable { doTest('\n') }
|
||||
|
||||
void testClassLiteralInArrayAnnoInitializer2() throws Throwable { doTest() }
|
||||
@NeedsIndex.ForStandardLibrary
|
||||
void testClassLiteralInArrayAnnoInitializer2() throws Throwable { doTest('\n') }
|
||||
|
||||
void testReferenceParameters() throws Exception {
|
||||
configureByFile("ReferenceParameters.java")
|
||||
@@ -1368,7 +1370,7 @@ class XInternalError {}
|
||||
@Anno(XInternal<caret>)
|
||||
"""
|
||||
myFixture.complete(CompletionType.BASIC, 2)
|
||||
assertFirstStringItems "XInternalError", "XInternalTimerServiceController"
|
||||
assertFirstStringItems "XInternalError.class", "XInternalError", "XInternalTimerServiceController.class", "XInternalTimerServiceController"
|
||||
}
|
||||
|
||||
@NeedsIndex.Full
|
||||
@@ -2660,4 +2662,18 @@ class Abc {
|
||||
myFixture.completeBasic()
|
||||
myFixture.checkResult("class Test {static void test() {int \u89D2\u8272 = 3;\u89D2\u8272}}")
|
||||
}
|
||||
|
||||
@NeedsIndex.ForStandardLibrary
|
||||
void testClassLiteralCompletion() {
|
||||
myFixture.configureByText("Test.java", "class Test {Class<? extends CharSequence> get() {return String<caret>}}")
|
||||
myFixture.completeBasic()
|
||||
myFixture.assertPreferredCompletionItems(0, 'String', 'String.class', 'StringBuffer.class', 'StringBuffer', 'StringBuilder.class', 'StringBuilder', 'StringIndexOutOfBoundsException')
|
||||
}
|
||||
|
||||
@NeedsIndex.ForStandardLibrary
|
||||
void testClassLiteralCompletionNoBound() {
|
||||
myFixture.configureByText("Test.java", "class Test {Class<?> get() {return String<caret>}}")
|
||||
myFixture.completeBasic()
|
||||
myFixture.assertPreferredCompletionItems(0, 'String', 'String.class', 'StringBuffer.class', 'StringBuffer', 'StringBuilder.class', 'StringBuilder', 'StringIndexOutOfBoundsException.class', 'StringIndexOutOfBoundsException')
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user