blob: e2f0aaf3b3f296f22c986a82ee7d38130cc41dc4 [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.
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) {
// :: error: assignment
@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) {
// :: error: assignment
@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);
}
}