mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-20 13:31:28 +07:00
ambiguity (IDEA-123352)
This commit is contained in:
@@ -550,15 +550,17 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
|
||||
final PsiSubstitutor methodSubstitutor2 = calculateMethodSubstitutor(typeParameters2, method2, siteSubstitutor2, types2, types1AtSite, languageLevel);
|
||||
boolean applicable21 = isApplicableTo(types1AtSite, method2, languageLevel, varargsPosition, methodSubstitutor2, method1, siteSubstitutor2);
|
||||
|
||||
final boolean typeArgsApplicable12 = GenericsUtil.isTypeArgumentsApplicable(typeParameters1, methodSubstitutor1, myArgumentsList, !applicable21);
|
||||
final boolean typeArgsApplicable21 = GenericsUtil.isTypeArgumentsApplicable(typeParameters2, methodSubstitutor2, myArgumentsList, !applicable12);
|
||||
if (!myLanguageLevel.isAtLeast(LanguageLevel.JDK_1_8)) {
|
||||
final boolean typeArgsApplicable12 = GenericsUtil.isTypeArgumentsApplicable(typeParameters1, methodSubstitutor1, myArgumentsList, !applicable21);
|
||||
final boolean typeArgsApplicable21 = GenericsUtil.isTypeArgumentsApplicable(typeParameters2, methodSubstitutor2, myArgumentsList, !applicable12);
|
||||
|
||||
if (!typeArgsApplicable12) {
|
||||
applicable12 = false;
|
||||
}
|
||||
if (!typeArgsApplicable12) {
|
||||
applicable12 = false;
|
||||
}
|
||||
|
||||
if (!typeArgsApplicable21) {
|
||||
applicable21 = false;
|
||||
if (!typeArgsApplicable21) {
|
||||
applicable21 = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (applicable12 || applicable21) {
|
||||
@@ -718,7 +720,7 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{
|
||||
if (!substitutor.getSubstitutionMap().containsKey(typeParameter)) {
|
||||
PsiType type = siteSubstitutor.substitute(typeParameter);
|
||||
if (type instanceof PsiClassType && ((PsiClassType)type).resolve() instanceof PsiTypeParameter) {
|
||||
type = TypeConversionUtil.erasure(type, substitutor);
|
||||
type = TypeConversionUtil.erasure(type, siteSubstitutor);
|
||||
}
|
||||
substitutor = substitutor.put(typeParameter, type);
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import java.util.*;
|
||||
|
||||
class Test {
|
||||
class Predicate<T> {
|
||||
<S extends T> boolean test(final Collection<T> src) {
|
||||
return true;
|
||||
}
|
||||
<S extends T> boolean test(final Iterable<T> iterable) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void testPredicate() {
|
||||
final Predicate<Integer> predicate = new Predicate<>();
|
||||
predicate.test(new ArrayList<Integer>());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
import java.util.*;
|
||||
|
||||
class Test {
|
||||
class Predicate<T> {
|
||||
private <<warning descr="Type parameter 'S' is never used">S</warning> extends T> boolean test(final Collection<T> src) {
|
||||
System.out.println(src);
|
||||
return true;
|
||||
}
|
||||
private <<warning descr="Type parameter 'S' is never used">S</warning> extends T> boolean <warning descr="Private method 'test(java.lang.Iterable<T>)' is never used">test</warning>(final Iterable<T> iterable) {
|
||||
System.out.println(iterable);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void testPredicate() {
|
||||
final Predicate<Integer> predicate = new Predicate<>();
|
||||
predicate.test(new ArrayList<Integer>());
|
||||
}
|
||||
}
|
||||
@@ -341,6 +341,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase {
|
||||
public void testIDEA120563() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
|
||||
public void testIDEA121400() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
|
||||
public void testIDEA123316() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
|
||||
public void testIDEA123352() { doTest(LanguageLevel.JDK_1_7, JavaSdkVersion.JDK_1_7, false); }
|
||||
|
||||
public void testJavaUtilCollections_NoVerify() throws Exception {
|
||||
PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));
|
||||
|
||||
@@ -71,6 +71,10 @@ public class MostSpecificResolutionTest extends LightDaemonAnalyzerTestCase {
|
||||
doTest();
|
||||
}
|
||||
|
||||
public void testIDEA123352() throws Exception {
|
||||
doTest();
|
||||
}
|
||||
|
||||
private void doTest() {
|
||||
doTest(true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user