mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
take into account container class type parameters: return type
detection if return type mentions type parameters should include types specified on outer class
This commit is contained in:
+8
-3
@@ -106,10 +106,15 @@ public class PsiPolyExpressionUtil {
|
||||
@Nullable
|
||||
@Override
|
||||
public Boolean visitClassType(PsiClassType classType) {
|
||||
for (PsiType type : classType.getParameters()) {
|
||||
if (type.accept(this)) return true;
|
||||
PsiClassType.ClassResolveResult result = classType.resolveGenerics();
|
||||
final PsiClass psiClass = result.getElement();
|
||||
if (psiClass != null) {
|
||||
PsiSubstitutor substitutor = result.getSubstitutor();
|
||||
for (PsiTypeParameter parameter : PsiUtil.typeParametersIterable(psiClass)) {
|
||||
PsiType type = substitutor.substitute(parameter);
|
||||
if (type != null && type.accept(this)) return true;
|
||||
}
|
||||
}
|
||||
final PsiClass psiClass = classType.resolve();
|
||||
return psiClass instanceof PsiTypeParameter && typeParameters.contains(psiClass);
|
||||
}
|
||||
|
||||
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
class Outer<T> {
|
||||
private class Inner{}
|
||||
|
||||
{
|
||||
Outer<String>.Inner inner = foo(foo(null));
|
||||
}
|
||||
|
||||
private static <K> Outer<K>.Inner foo(Outer<K>.Inner u){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+1
@@ -171,6 +171,7 @@ public class GraphInferenceHighlightingTest extends LightDaemonAnalyzerTestCase
|
||||
public void testPostponeUnresolvedVariables() { doTest(); }
|
||||
public void testErasureOfReturnTypeIffUncheckedConversionWasNecessaryDuringApplicabilityCheckOnly() { doTest(); }
|
||||
public void testTwoDifferentParameterizationCheckWithInterfaceTypeArguments() { doTest(); }
|
||||
public void testNonGenericInnerClassOfGenericsOuterInReturnType() { doTest(); }
|
||||
public void testUncheckedConversionDuringProperTypeExpressionConstraintResolution() { doTest(); }
|
||||
//public void _testAssignabilityOfStandaloneExpressionsDuringApplicabilityCheck() { doTest(); }
|
||||
public void testRecursiveTypeWithCapture() { doTest(); }
|
||||
|
||||
Reference in New Issue
Block a user