mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 04:51:24 +07:00
IDEA-230334 Make first Ctrl+Space work in Class.forName literal
GitOrigin-RevId: 96cbc8f8a65b6853c1a7cd7b9977b4d33ff56062
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a4d6d00243
commit
571af6bb9c
@@ -1224,7 +1224,7 @@
|
||||
<lookup.charFilter implementation="com.intellij.codeInsight.completion.JavaCharFilter" id="java"/>
|
||||
<completion.contributor language="JAVA" id="javaMethodHandle" order="last, before javaLegacy"
|
||||
implementationClass="com.intellij.psi.impl.source.resolve.reference.impl.JavaMethodHandleCompletionContributor"/>
|
||||
<completion.contributor language="JAVA" id="javaReflection" order="last, before javaLegacy"
|
||||
<completion.contributor language="JAVA" id="javaReflection" order="before javaLegacy, before javaClassReference"
|
||||
implementationClass="com.intellij.psi.impl.source.resolve.reference.impl.JavaReflectionCompletionContributor"/>
|
||||
<completion.contributor language="JAVA" id="javaSmart" order="last, before default"
|
||||
implementationClass="com.intellij.codeInsight.completion.JavaSmartCompletionContributor"/>
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.intellij.psi.filters.ClassFilter;
|
||||
import com.intellij.psi.filters.ElementFilter;
|
||||
import com.intellij.psi.filters.TrueFilter;
|
||||
import com.intellij.psi.filters.element.ExcludeDeclaredFilter;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.providers.JavaClassReference;
|
||||
import com.intellij.psi.javadoc.PsiDocComment;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.searches.DirectClassInheritorsSearch;
|
||||
@@ -84,6 +85,12 @@ public class JavaClassNameCompletionContributor extends CompletionContributor {
|
||||
@NotNull final Consumer<? super LookupElement> consumer) {
|
||||
final PsiElement insertedElement = parameters.getPosition();
|
||||
|
||||
JavaClassReference ref =
|
||||
JavaClassReferenceCompletionContributor.findJavaClassReference(insertedElement.getContainingFile(), parameters.getOffset());
|
||||
if (ref != null && ref.getContext() instanceof PsiClass) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (JavaCompletionContributor.getAnnotationNameIfInside(insertedElement) != null) {
|
||||
MultiMap<String, PsiClass> annoMap = getAllAnnotationClasses(insertedElement, matcher);
|
||||
Processor<PsiClass> processor = new LimitedAccessibleClassPreprocessor(parameters, filterByScope, anno -> {
|
||||
|
||||
@@ -93,6 +93,9 @@ public class JavaReflectionCompletionContributor extends CompletionContributor {
|
||||
else if (BEGINNING_OF_CONSTRUCTOR_ARGUMENTS.accepts(position)) {
|
||||
addVariants(position, (psiClass, isDeclared) -> addConstructorParameterTypes(psiClass, isDeclared, result));
|
||||
}
|
||||
else if (JavaReflectionReferenceContributor.Holder.CLASS_PATTERN.accepts(position.getParent())) {
|
||||
JavaClassNameCompletionContributor.addAllClasses(parameters, parameters.getInvocationCount() <= 1, result.getPrefixMatcher(), result);
|
||||
}
|
||||
}
|
||||
|
||||
private static void addVariants(PsiElement position, BiConsumer<? super PsiClass, ? super Boolean> variantAdder) {
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class Main {
|
||||
void foo() throws ReflectiveOperationException {
|
||||
Class.forName("StringBu<caret>");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
class Main {
|
||||
void foo() throws ReflectiveOperationException {
|
||||
Class.forName("java.lang.StringBuffer<caret>");
|
||||
}
|
||||
}
|
||||
@@ -168,7 +168,11 @@ public class JavaReflectionCompletionTest extends LightFixtureCompletionTestCase
|
||||
public void testClassForNamePackages() {
|
||||
myFixture.addClass("package foo.bar.one; public class FirstClass {}");
|
||||
myFixture.addClass("package foo.bar.two; public class SecondClass {}");
|
||||
doTest(0, "one", "two");
|
||||
doTest(2, "FirstClass", "SecondClass", "one", "two");
|
||||
}
|
||||
|
||||
public void testClassForNameShortName() {
|
||||
doTest(0, "StringBuffer", "StringBuilder");
|
||||
}
|
||||
|
||||
public void testClassForNameNestedAutocomplete() {
|
||||
|
||||
Reference in New Issue
Block a user