| public class WildCardCrash {} |
| |
| abstract class AbstractTransfer123< |
| IndexStore extends CFAbstractStore123<CFValue123, IndexStore>, |
| MySelf extends AbstractTransfer123<IndexStore, MySelf>> |
| extends CFAbstractTransfer123<CFValue123, IndexStore, MySelf> { |
| void method() { |
| // There was a crash when checking the assignment of analysis to the formal parameter. |
| SomeGen<IndexStore> rfi = new SomeGen<>(analysis); |
| } |
| } |
| |
| class SomeGen<IndexStore extends Store123<IndexStore>> { |
| public SomeGen(CFAbstractAnalysis123<CFValue123, ?, ?> analysis) {} |
| } |
| |
| class CFValue123 extends CFAbstractValue123<CFValue123> {} |
| |
| @SuppressWarnings({"initialization", "initializedfields:contracts.postcondition"}) |
| class CFAbstractTransfer123< |
| V extends CFAbstractValue123<V>, |
| S extends CFAbstractStore123<V, S>, |
| T extends CFAbstractTransfer123<V, S, T>> |
| implements TransferFunction123<V, S> { |
| protected CFAbstractAnalysis123<V, S, T> analysis; |
| } |
| |
| class CFAbstractValue123<V extends CFAbstractValue123<V>> implements AbstractValue123<V> {} |
| |
| class CFAbstractStore123<V extends CFAbstractValue123<V>, S extends CFAbstractStore123<V, S>> |
| implements Store123<S> {} |
| |
| abstract class CFAbstractAnalysis123< |
| V extends CFAbstractValue123<V>, |
| S extends CFAbstractStore123<V, S>, |
| T extends CFAbstractTransfer123<V, S, T>> |
| extends Analysis123<V, S, T> {} |
| |
| interface AbstractValue123<V extends AbstractValue123<V>> {} |
| |
| interface Store123<T extends Store123<T>> {} |
| |
| interface TransferFunction123<A extends AbstractValue123<A>, S extends Store123<S>> {} |
| |
| class Analysis123< |
| A extends AbstractValue123<A>, S extends Store123<S>, T extends TransferFunction123<A, S>> {} |