most specific: do not start java 8 algorithm for provided type args (IDEA-125855)

This commit is contained in:
Anna Kozlova
2014-06-03 18:41:27 +04:00
parent 12a99d8210
commit d13982bd06
3 changed files with 26 additions and 1 deletions
@@ -696,7 +696,10 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
PsiMethod method2,
PsiSubstitutor siteSubstitutor1) {
if (languageLevel.isAtLeast(LanguageLevel.JDK_1_8) && method2 != null && method1.getTypeParameters().length > 0 && myArgumentsList instanceof PsiExpressionList) {
return InferenceSession.isMoreSpecific(method2, method1, siteSubstitutor1, ((PsiExpressionList)myArgumentsList).getExpressions(), myArgumentsList, varargsPosition);
final PsiElement parent = myArgumentsList.getParent();
if (parent instanceof PsiCallExpression && ((PsiCallExpression)parent).getTypeArguments().length == 0) {
return InferenceSession.isMoreSpecific(method2, method1, siteSubstitutor1, ((PsiExpressionList)myArgumentsList).getExpressions(), myArgumentsList, varargsPosition);
}
}
final int applicabilityLevel = PsiUtil.getApplicabilityLevel(method1, methodSubstitutor1, types2AtSite, languageLevel, false, varargsPosition);
return applicabilityLevel > MethodCandidateInfo.ApplicabilityLevel.NOT_APPLICABLE;
@@ -0,0 +1,18 @@
import java.util.Collection;
import java.util.List;
class Test {
private static <E> void <warning descr="Private method 'x(java.util.Collection<E>)' is never used">x</warning>(Collection<E> collection) {
System.out.println(collection);
}
private static <E> void x(List<E> list) {
System.out.println(list);
}
public static void main(List list) {
Test.<Object[]>x(list);
}
}
@@ -107,6 +107,10 @@ public class MostSpecificResolutionTest extends LightDaemonAnalyzerTestCase {
doTest(false);
}
public void testIDEA125855() throws Exception {
doTest();
}
private void doTest() {
doTest(true);
}