mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-08-26 15:27:45 +07:00
capture conversion: add upper bound for ? super if corresponding type parameter has upper bounds( IDEA-128328; IDEA-128972)
This commit is contained in:
+30
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+1
-1
@@ -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>
|
||||
}
|
||||
|
||||
+2
-2
@@ -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>;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user