| // A test that non-owning method parameters are really treated as @MustCall({}) |
| // wrt polymorphic types. Based on some false positives in Zookeeper. |
| // |
| // This version is modified to expect that owning/notowning annotations do nothing, |
| // for the -AnoLightweightOwnership flag. |
| |
| import java.io.*; |
| import org.checkerframework.checker.mustcall.qual.*; |
| |
| class NonOwningPolyInteraction { |
| void foo(@NotOwning InputStream instream) { |
| @MustCall({}) BufferedInputStream bis = new BufferedInputStream(instream); |
| @MustCall({"close"}) BufferedInputStream bis2 = new BufferedInputStream(instream); |
| } |
| |
| void bar(@Owning InputStream instream) { |
| @MustCall({}) BufferedInputStream bis = new BufferedInputStream(instream); |
| @MustCall({"close"}) BufferedInputStream bis2 = new BufferedInputStream(instream); |
| } |
| |
| // default anno for params in @NotOwning |
| void baz(InputStream instream) { |
| @MustCall({}) BufferedInputStream bis = new BufferedInputStream(instream); |
| @MustCall({"close"}) BufferedInputStream bis2 = new BufferedInputStream(instream); |
| } |
| |
| NonOwningPolyInteraction(@NotOwning InputStream instream) { |
| @MustCall({}) BufferedInputStream bis = new BufferedInputStream(instream); |
| @MustCall({"close"}) BufferedInputStream bis2 = new BufferedInputStream(instream); |
| } |
| |
| // extra param(s) here and on the next constructor because Java requires constructors to have |
| // different signatures. |
| NonOwningPolyInteraction(@Owning InputStream instream, int x) { |
| @MustCall({}) BufferedInputStream bis = new BufferedInputStream(instream); |
| @MustCall({"close"}) BufferedInputStream bis2 = new BufferedInputStream(instream); |
| } |
| |
| // default anno for params in @NotOwning |
| NonOwningPolyInteraction(InputStream instream, int x, int y) { |
| @MustCall({}) BufferedInputStream bis = new BufferedInputStream(instream); |
| @MustCall({"close"}) BufferedInputStream bis2 = new BufferedInputStream(instream); |
| } |
| } |