/**
* This test came from running the ant check-compilermsgs in the checker-framework/checker directory
* It's to test the result of type argument inference. We used to have the following
* return.type.incompatible found: FlowAnalysis[ extends @UnknownPropertyKey
* CFAbstractAnalysis<Value[ extends @UnknownPropertyKey CFAbstractValue<Value[
* extends @UnknownPropertyKey CFAbstractValue<Value> super @UnknownPropertyKey Void]>
* super @UnknownPropertyKey Void], Store[ extends @UnknownPropertyKey CFAbstractStore<Value[
* extends @UnknownPropertyKey CFAbstractValue<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value> super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], Store[
* extends @UnknownPropertyKey CFAbstractStore<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], Store>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], TransferFunction[
* extends @UnknownPropertyKey CFAbstractTransfer<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], Store[
* extends @UnknownPropertyKey CFAbstractStore<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], Store[
* extends @UnknownPropertyKey CFAbstractStore<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], Store>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], TransferFunction[
* extends @UnknownPropertyKey CFAbstractTransfer<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], Store[
* extends @UnknownPropertyKey CFAbstractStore<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], Store[
* extends @UnknownPropertyKey CFAbstractStore<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], Store>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void], TransferFunction>
* super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void]> super @UnknownPropertyKey Void]
* required: FlowAnalysis[ extends @UnknownPropertyKey CFAbstractAnalysis<Value[
* extends @UnknownPropertyKey CFAbstractValue<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value> super @Bottom Void]> super @Bottom Void], Store[
* extends @UnknownPropertyKey CFAbstractStore<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value> super @Bottom Void]>
* super @Bottom Void], Store[ extends @UnknownPropertyKey CFAbstractStore<Value[
* extends @UnknownPropertyKey CFAbstractValue<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value> super @Bottom Void]> super @Bottom Void], Store> super @Bottom Void]>
* super @Bottom Void], TransferFunction[ extends @UnknownPropertyKey CFAbstractTransfer<Value[
* extends @UnknownPropertyKey CFAbstractValue<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value> super @Bottom Void]> super @Bottom Void], Store[
* extends @UnknownPropertyKey CFAbstractStore<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value> super @Bottom Void]>
* super @Bottom Void], Store[ extends @UnknownPropertyKey CFAbstractStore<Value[
* extends @UnknownPropertyKey CFAbstractValue<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value> super @Bottom Void]> super @Bottom Void], Store> super @Bottom Void]>
* super @Bottom Void], TransferFunction[ extends @UnknownPropertyKey CFAbstractTransfer<Value[
* extends @UnknownPropertyKey CFAbstractValue<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value> super @Bottom Void]> super @Bottom Void], Store[
* extends @UnknownPropertyKey CFAbstractStore<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value[ extends @UnknownPropertyKey CFAbstractValue<Value> super @Bottom Void]>
* super @Bottom Void], Store[ extends @UnknownPropertyKey CFAbstractStore<Value[
* extends @UnknownPropertyKey CFAbstractValue<Value[ extends @UnknownPropertyKey
* CFAbstractValue<Value> super @Bottom Void]> super @Bottom Void], Store> super @Bottom Void]>
* super @Bottom Void], TransferFunction> super @Bottom Void]> super @Bottom Void]> super @Bottom
* Void]
*/
class CFAbstractValue<V extends CFAbstractValue<V>> {}
class CFAbstractAnalysis<V extends CFAbstractValue<V>> {}
class GenericAnnotatedTypeFactory<
Value extends CFAbstractValue<Value>, FlowAnalysis extends CFAbstractAnalysis<Value>> {
@SuppressWarnings("immutability:type.argument.type.incompatible")
protected FlowAnalysis createFlowAnalysis() {
FlowAnalysis result = invokeConstructorFor();
return result;
}
@SuppressWarnings({
"nullness:return.type.incompatible",
"lock:return.type.incompatible",
"immutabilitysub:type.argument.type.incompatible"
})
public static <T> T invokeConstructorFor() {
return null;
}
}