blob: a93deae7637ba12cd13f73099c5b85d35c9cd033 [file] [log] [blame]
// 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);
}
}