Enhance Java builder completion for superclasses and generics

This commit is contained in:
Kyle Thomson
2017-07-24 15:27:58 +02:00
committed by peter
parent 48d5e58c53
commit bf4df4a979
4 changed files with 52 additions and 4 deletions
@@ -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
}
@@ -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() {}
}
}
@@ -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() {}
}
}
@@ -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();