new inference: process varargs as separate method candidate/separate phase

(cherry picked from commit fdd6f66268d29bb996a103f69180851b92947d21)
This commit is contained in:
Anna Kozlova
2014-03-12 10:15:03 +01:00
parent 69c6b7b523
commit 10760d9bbf
16 changed files with 221 additions and 126 deletions
@@ -11,7 +11,7 @@ class Test {
}
static void foo2(final A<? extends Integer> bar) {
bar._<error descr="'_(capture<? extends java.lang.Integer>...)' in 'Test.A' cannot be applied to '(java.lang.String)'">("")</error>;
bar._<error descr="Cannot resolve method '_(java.lang.String)'">("")</error>;
}
@@ -7,8 +7,8 @@ public class Sample {
<B> B bar(G<B> gb) {return null;}
void f(G1 g1) {
<error descr="Incompatible types. Found: 'B', required: 'Sample.G<java.lang.String>'">G<String> l11 = bar(g1);</error>
<error descr="Incompatible types. Found: 'B', required: 'java.lang.String'">String l1 = bar(g1);</error>
<error descr="Incompatible types. Found: 'java.lang.Object', required: 'Sample.G<java.lang.String>'">G<String> l11 = bar(g1);</error>
<error descr="Incompatible types. Found: 'java.lang.Object', required: 'java.lang.String'">String l1 = bar(g1);</error>
Object o = bar(g1);
}
}
@@ -0,0 +1,26 @@
class A<T> {
A(T... t) {
}
{
A<String> a = new A<>("a", "b");
foo(new A<>("", ""));
bar(new A<>("", ""));
bar(new A<>(get()));
//bar(new A<>(get( ), ""));
}
void foo(A<String> s) {}
<T> void bar(A<T> s) {}
<K> K get() {return null;}
<M> A<M> s(M... m) {
return null;
}
{
bar(s(get()));
bar(s(get(), ""));
}
}
@@ -0,0 +1,8 @@
abstract class Im {
public static final Class[] EMPTY_CLASS_ARRAY = new Class[0];
public abstract <T> T createProxy(final Class<T> superClass, final Class... otherInterfaces);
void f(Class<?> implementation, Class rawType, boolean isInterface) {
createProxy(implementation, isInterface ? new Class[]{rawType} : EMPTY_CLASS_ARRAY);
}
}
@@ -1,4 +1,4 @@
public class Test {
class Test {
interface II {
int _();