inference: process supertypes starting from self to find valid parameterization (IDEA-204125)

This commit is contained in:
Anna.Kozlova
2019-01-22 11:36:28 +01:00
parent 7a1fe1b38d
commit 1f24e30346
3 changed files with 14 additions and 1 deletions

View File

@@ -2001,8 +2001,9 @@ public class InferenceSession {
final PsiClass tClass = PsiUtil.resolveClassInClassTypeOnly(tBound);
if (tClass != null) {
final LinkedHashSet<PsiClass> tSupers = InheritanceUtil.getSuperClasses(tClass);
final LinkedHashSet<PsiClass> tSupers = new LinkedHashSet<>();
tSupers.add(tClass);
tSupers.addAll(InheritanceUtil.getSuperClasses(tClass));
tSupers.retainAll(superClasses);
for (PsiClass gClass : tSupers) {

View File

@@ -0,0 +1,11 @@
import java.util.*;
class MyTest {
{
consume(new HashSet<ListProperty<?>>());
}
static <_L extends ListProperty<String>> void consume(HashSet<? super _L> a) {}
}
interface ListProperty<A> extends Set<List<A>>{}

View File

@@ -167,6 +167,7 @@ public class GraphInferenceHighlightingTest extends LightDaemonAnalyzerTestCase
}
public void testNameConflictBetweenFreshVariables() { doTest(); }
public void testOrderOfGenericsParameterizations() { doTest(); }
public void testCreateFreshVariablesOnlyForWildcardPlacesDuringReturnTypeProcessing() { doTest(); }
public void testCapturedConversionDuringDirectSuperCheck() { doTest(); }
//public void _testResolutionOrderForVariableCycles() { doTest(); }