blob: 816ae0ebfa20f5ad9e313542a3b34a574f9fbd0c [file] [log] [blame]
import org.checkerframework.common.aliasing.qual.*;
public class UniqueAnnoTest {
// @Unique constructor
public @Unique UniqueAnnoTest() {}
// @Unique constructor leaking the "this" reference.
// Each unique.leaked error is a leak.
public @Unique UniqueAnnoTest(int i) {
notLeaked(this);
leakedToResult(this);
// :: error: (unique.leaked)
UniqueAnnoTest b = leakedToResult(this);
UniqueAnnoTest other = new UniqueAnnoTest();
// :: error: (unique.leaked)
other = this;
// :: error: (unique.leaked)
leaked(this);
// :: error: (unique.leaked)
leaked(other); // The receiver parameter is "this", so there is a leak.
}
// Not @Unique constructor. No warnings.
public UniqueAnnoTest(int i1, int i2) {
UniqueAnnoTest other = new UniqueAnnoTest();
other = this;
notLeaked(this);
}
void leaked(UniqueAnnoTest a) {}
void notLeaked(@NonLeaked UniqueAnnoTest this, @NonLeaked UniqueAnnoTest a) {}
UniqueAnnoTest leakedToResult(
@LeakedToResult UniqueAnnoTest this, @LeakedToResult UniqueAnnoTest a) {
return a;
}
}