1 /* 2 * Copyright 2022 The JSpecify Authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 import org.jspecify.annotations.NullMarked; 17 import org.jspecify.annotations.Nullable; 18 import org.jspecify.annotations.NullnessUnspecified; 19 20 @NullMarked 21 interface SuperVsSuperNullable { 22 interface Receiver<T extends @Nullable Object> {} 23 24 interface Other<T> {} 25 x(Receiver<? super T> r, Other<T> o)26 default <T> void x(Receiver<? super T> r, Other<T> o) { 27 useNonNullBounded(r, o); 28 // jspecify_nullness_not_enough_information 29 useUnspecBounded(r, o); 30 // jspecify_nullness_mismatch 31 useUnionNullBounded(r, o); 32 } 33 x1(Receiver<? super @NullnessUnspecified T> r, Other<T> o)34 default <T> void x1(Receiver<? super @NullnessUnspecified T> r, Other<T> o) { 35 useNonNullBounded(r, o); 36 // jspecify_nullness_not_enough_information 37 useUnspecBounded(r, o); 38 // jspecify_nullness_not_enough_information 39 useUnionNullBounded(r, o); 40 } 41 x2(Receiver<? super @Nullable T> r, Other<T> o)42 default <T> void x2(Receiver<? super @Nullable T> r, Other<T> o) { 43 useNonNullBounded(r, o); 44 useUnspecBounded(r, o); 45 useUnionNullBounded(r, o); 46 } 47 useNonNullBounded(Receiver<? super T> r, Other<T> o)48 <T> void useNonNullBounded(Receiver<? super T> r, Other<T> o); 49 useUnspecBounded(Receiver<? super @NullnessUnspecified T> r, Other<T> o)50 <T> void useUnspecBounded(Receiver<? super @NullnessUnspecified T> r, Other<T> o); 51 useUnionNullBounded(Receiver<? super @Nullable T> r, Other<T> o)52 <T> void useUnionNullBounded(Receiver<? super @Nullable T> r, Other<T> o); 53 } 54