new inference: cache substitutor for outer call conflict resolution

This commit is contained in:
Anna Kozlova
2014-03-07 18:02:48 +01:00
parent a5adf26660
commit dccb826526
9 changed files with 164 additions and 74 deletions
@@ -7,8 +7,8 @@ public class Sample {
<B> B bar(G<B> gb) {return null;}
void f(G1 g1) {
<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>
<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>
Object o = bar(g1);
}
}
@@ -13,12 +13,12 @@ class SortedOp<T> implements StatefulOp<T, T> {
}
}
class Usage<T> {
public <E, S extends BaseStream<E>> S pipeline(IntermediateOp<T, E> newOp) { return null; }
public <R> R pipeline(TerminalOp<T, R> terminal) { return null;}
class Usage<Ts> {
public <E, S extends BaseStream<E>> S pipeline(IntermediateOp<Ts, E> newOp) { return null; }
public <R> R pipeline(TerminalOp<Ts, R> terminal) { return null;}
public Stream<T> sorted(Comparator<? super T> comparator) {
public Stream<Ts> sorted(Comparator<? super Ts> comparator) {
return pipeline(new SortedOp<>(comparator));
}
}
@@ -0,0 +1,23 @@
import java.util.*;
class Test {
void m(Runnable p) { }
void m(List<Runnable> p) { }
{
m(foo());
m<error descr="Cannot resolve method 'm(java.lang.Object)'">(bar())</error>;
}
<T> List<T> foo() {
return null;
}
<T> T bar() {
return null;
}
}