mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Enhance Java builder completion for superclasses and generics
This commit is contained in:
@@ -44,10 +44,11 @@ internal class BuilderCompletion(private val expectedType: PsiClassType, private
|
||||
}
|
||||
|
||||
private fun methodsReturning(containingClass: PsiClass, returnedClass: PsiClass, isStatic: Boolean): Collection<List<PsiMethod>> {
|
||||
return containingClass.methods
|
||||
.filter { it.hasModifierProperty(PsiModifier.STATIC) == isStatic &&
|
||||
returnedClass == PsiUtil.resolveClassInClassTypeOnly(it.returnType) &&
|
||||
PsiUtil.isAccessible(it, place, null) }
|
||||
return containingClass.allMethodsAndTheirSubstitutors
|
||||
.filter { it.first.hasModifierProperty(PsiModifier.STATIC) == isStatic &&
|
||||
returnedClass == PsiUtil.resolveClassInClassTypeOnly(it.second.substitute(it.first.returnType)) &&
|
||||
PsiUtil.isAccessible(it.first, place, null) }
|
||||
.map { it.first }
|
||||
.groupBy { it.name }
|
||||
.values
|
||||
}
|
||||
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
public class S {
|
||||
|
||||
{
|
||||
Map m = Map.build()<caret>.get();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Map {
|
||||
static MapBuilder build() {}
|
||||
|
||||
interface BaseBuilder<T> {
|
||||
T get();
|
||||
}
|
||||
|
||||
interface MapBuilder extends BaseBuilder<Map> {
|
||||
|
||||
}
|
||||
|
||||
static class Builder implements MapBuilder {
|
||||
Map get() {}
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
public class S {
|
||||
|
||||
{
|
||||
Map m = bui<caret>
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Map {
|
||||
static MapBuilder build() {}
|
||||
|
||||
interface BaseBuilder<T> {
|
||||
T get();
|
||||
}
|
||||
|
||||
interface MapBuilder extends BaseBuilder<Map> {
|
||||
|
||||
}
|
||||
|
||||
static class Builder implements MapBuilder {
|
||||
Map get() {}
|
||||
}
|
||||
}
|
||||
+1
@@ -1249,6 +1249,7 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase {
|
||||
|
||||
public void testStaticBuilder() { doTest(); }
|
||||
public void testStaticBuilderWithArguments() { doTest(); }
|
||||
public void testStaticBuilderWithInterfaceAndGenerics() { doTest(); }
|
||||
|
||||
public void testStaticBuilderWithGenerics() {
|
||||
configureByTestName();
|
||||
|
||||
Reference in New Issue
Block a user