| import org.checkerframework.checker.testchecker.wholeprograminference.qual.DefaultType; |
| import org.checkerframework.checker.testchecker.wholeprograminference.qual.WholeProgramInferenceBottom; |
| |
| // The @DefaultType annotation, which is the default for every location, is forbidden to be written |
| // anywhere. This class attempts to infer @DefaultType in several locations, and the annotated |
| // version of this class (in the annotated folder) should have no explicit @DefaultType annotations. |
| public class DefaultsTest { |
| String defaultField = ""; |
| String defaultField2; |
| |
| void test() { |
| @SuppressWarnings("all") // To allow the use of the explicit @DefaultType. |
| @DefaultType String explicitDefault = ""; |
| defaultField2 = explicitDefault; |
| } |
| |
| // This method's return type should not be updated by the whole-program inference |
| // since it is the default. |
| String lubTest() { |
| if (Math.random() > 0.5) { |
| return ""; // @DefaultType |
| } else { |
| @SuppressWarnings("cast.unsafe") |
| @WholeProgramInferenceBottom String s = (@WholeProgramInferenceBottom String) ""; |
| return s; |
| } |
| } |
| } |