upcoming changes to the spec and javac (JDK-8145614; JDK-8142876)

This commit is contained in:
Anna.Kozlova
2016-05-20 15:08:04 +02:00
parent 3226d3e996
commit ad6352ce0b
2 changed files with 28 additions and 26 deletions

View File

@@ -177,15 +177,17 @@ public class FunctionalInterfaceParameterizationUtil {
final PsiSubstitutor substitutor = result.getSubstitutor();
final HashSet<PsiTypeParameter> typeParametersSet = ContainerUtil.newHashSet(typeParameters);
for (int i = 0; i < typeParameters.length; i++) {
next: for (int i = 0; i < typeParameters.length; i++) {
PsiType paramType = substitutor.substitute(typeParameters[i]);
if (paramType instanceof PsiWildcardType) {
final PsiType bound = ((PsiWildcardType)paramType).getBound();
for (PsiClassType paramBound : typeParameters[i].getExtendsListTypes()) {
if (PsiPolyExpressionUtil.mentionsTypeParameters(paramBound, typeParametersSet)) {
return null;
newParameters[i] = bound;
continue next;
}
}
final PsiType bound = ((PsiWildcardType)paramType).getBound();
if (((PsiWildcardType)paramType).isSuper()) {
newParameters[i] = bound;
}

View File

@@ -7,16 +7,16 @@ class SimpleDependency {
}
{
I<? extends String, ? extends String> k = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends String, String> k1 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends List<String>, List<String>> k2 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends List<String>, ? extends List<String>> k3 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends String, ? extends String> k = () -> null;
I<? extends String, String> k1 = () -> null;
I<? extends List<String>, List<String>> k2 = () -> null;
I<? extends List<String>, ? extends List<String>> k3 = () -> null;
I<? extends List<? extends String>, ? extends List<String>> k4 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends List<? extends String>, List<? extends String>> k5 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends List<? extends String>, ? extends List<? extends String>> k6 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends List<? extends String>, List<? extends String>> k5 = () -> null;
I<? extends List<? extends String>, ? extends List<? extends String>> k6 = () -> null;
I<? super String, String> s = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? super List<String>, List<? extends String>> s1 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? super String, String> s = () -> null;
I<? super List<String>, List<? extends String>> s1 = () -> null;
}
}
@@ -36,18 +36,18 @@ class ExtendsList {
}
{
I<?, ? extends String> n = <error descr="Cannot infer functional interface type">() -> null</error>;
I<?, ?> n1 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<?, String> n2 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<?, ? extends String> n = () -> null;
I<?, ?> n1 = () -> null;
I<?, String> n2 = () -> null;
I<? extends List<?>, String> e1 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends List<?>, ?> e2 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends List<String>, ? extends String> e3 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends List<String>, ? extends String> e3 = () -> null;
I<? extends List<? extends String>, ? extends String> e4 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? super List<String>, ? extends String> s1 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? super List<String>, String> s2 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? super List<String>, ? extends String> s1 = () -> null;
I<? super List<String>, String> s2 = () -> null;
}
}
@@ -59,12 +59,12 @@ class MultipleBounds {
interface LC<K> extends List<K>, Comparable<K> {}
{
I<?, String> n = <error descr="Cannot infer functional interface type">() -> null</error>;
I<?, String> n = () -> null;
I<? extends List<String>, ? extends String> e1 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends Comparable<String>, ? extends String> e2 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, ? extends String> e3 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, String> e4 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, ? extends String> e3 = () -> null;
I<? extends LC<String>, String> e4 = () -> null;
I<? extends LC<? extends String>, String> e5 = <error descr="Cannot infer functional interface type">() -> null</error>;
}
}
@@ -77,12 +77,12 @@ class FirstIndependentBound {
interface LC<K> extends List<String>, Comparable<K> {}
{
I<?, String> n = <error descr="Cannot infer functional interface type">() -> null</error>;
I<?, String> n = () -> null;
I<? extends List<String>, ? extends String> e1 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends Comparable<String>, ? extends String> e2 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, ? extends String> e3 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, String> e4 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, ? extends String> e3 = () -> null;
I<? extends LC<String>, String> e4 = () -> null;
I<? extends LC<? extends String>, String> e5 = <error descr="Cannot infer functional interface type">() -> null</error>;
}
}
@@ -96,12 +96,12 @@ class SecondIndependentBound {
interface LC<K> extends List<String>, Comparable<K> {}
{
I<?, String> n = <error descr="Cannot infer functional interface type">() -> null</error>;
I<?, String> n = () -> null;
I<? extends List<String>, ? extends String> e1 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends Comparable<String>, ? extends String> e2 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, ? extends String> e3 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, String> e4 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<String>, ? extends String> e3 = () -> null;
I<? extends LC<String>, String> e4 = () -> null;
I<? extends LC<? extends String>, String> e5 = <error descr="Cannot infer functional interface type">() -> null</error>;
I<? extends LC<? extends String>, ? extends String> e6 = <error descr="Cannot infer functional interface type">() -> null</error>;
}