capture conversion: add upper bound for ? super if corresponding type parameter has upper bounds( IDEA-128328; IDEA-128972)

This commit is contained in:
Anna Kozlova
2014-08-27 20:59:32 +04:00
parent 66b21d3562
commit 624fa25d38
7 changed files with 65 additions and 7 deletions
@@ -0,0 +1,30 @@
class Test<T > {
interface Event{}
interface EventListener<V extends Event> {
void handleEvent(V event);
}
public void addListener(EventListener<? super T> listener) {
EventListener<? extends Event> localListener = listener;
<error descr="Incompatible types. Found: 'Test.EventListener<capture<? super T>>', required: 'Test.EventListener<? super Test.Event>'">EventListener<? super Event> localListener1 = listener;</error>
}
}
class Test1 {
public static class Entity<E extends Entity<E>> {
public final <T, V extends EntityVisitor<? super E, T>> T handle(final V visitor) {
return visitor.handle(this);
}
}
public interface EntityVisitor<E extends Entity<E>, T> {
T handle(Entity<? extends E> e);
}
}
@@ -9,7 +9,7 @@ abstract class ProcedureService {
abstract <C extends Command<Result>> Class<? extends Procedure<Command<Result>>> getProcedure(Class<C> cmd);
public <C extends Command<Result>> void execute(Class<? extends Command> aClass) {
Class<Procedure<Command<Result>>> procedureClass = getProcedure(aClass);
<error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends Procedure<Command<Result>>>>', required: 'java.lang.Class<Procedure<Command<Result>>>'">Class<Procedure<Command<Result>>> procedureClass = getProcedure(aClass);</error>
<error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends Command>>', required: 'java.lang.Class<Command>'">Class<Command> c = aClass;</error>
<error descr="Incompatible types. Found: 'java.lang.Class<capture<? extends Command>>', required: 'java.lang.Class<C>'">Class<C> c1 = aClass;</error>
}
@@ -20,7 +20,7 @@ class Bug2<T extends Integer>{
}
void bug1(Parametrized<? super T> param) {
<error descr="Inferred type 'capture<? super T>' for type parameter 'I' is not within its bound; should extend 'java.lang.Number'">foo(param)</error>;
foo(param);
}
@@ -35,7 +35,7 @@ class Test {
}
void bug1(Parametrized<? super T> param) {
<error descr="Inferred type 'java.io.Serializable' for type parameter 'I' is not within its bound; should extend 'java.lang.Number'">foo(param)</error>;
<error descr="Inferred type 'capture<? super T>' for type parameter 'I' is not within its bound; should extend 'java.lang.Number'">foo(param)</error>;
}