forked from typetools/checker-framework
-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathAnnotatedForWithUse.java
More file actions
37 lines (33 loc) · 1.65 KB
/
AnnotatedForWithUse.java
File metadata and controls
37 lines (33 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
* @test
*
* @summary Test different defaults applied to unannotated code.
* @compile/fail/ref=AnnotatedForWithUseNoFlag.out -XDrawDiagnostics -Xlint:unchecked -processor org.checkerframework.checker.nullness.NullnessChecker AnnotatedForWithUse.java
* @compile/fail/ref=AnnotatedForWithUseOnlyAnnotatedFor.out -XDrawDiagnostics -Xlint:unchecked -processor org.checkerframework.checker.nullness.NullnessChecker -AonlyAnnotatedFor AnnotatedForWithUse.java
* @compile/fail/ref=AnnotatedForWithUseConservativeDefault.out -XDrawDiagnostics -Xlint:unchecked -processor org.checkerframework.checker.nullness.NullnessChecker -AuseConservativeDefaultsForUncheckedCode=source AnnotatedForWithUse.java
* @compile/fail/ref=AnnotatedForWithUseOptimisticDefault.out -XDrawDiagnostics -Xlint:unchecked -processor org.checkerframework.checker.nullness.NullnessChecker -AuseOptimisticDefaultsForUncheckedCode=source AnnotatedForWithUse.java
*/
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.framework.qual.AnnotatedFor;
public class AnnotatedForWithUse {
class Unannotated {
Object o;
Object get() {
return null;
}
void set(Object of) {}
}
@AnnotatedFor("nullness")
class AnnotatedUse {
void use(Unannotated u) {
// 1: OK, 2: OK, 3: Err. 4: OK
@NonNull Object obj = u.o;
// 1. Err, 2: Err, TODO want OK, 3: OK, TODO want Err, 4: Err, TODO want OK
u.o = null;
// 1: OK, 2: OK, 3: Err, 4: OK
u.get().toString();
// 1: Err, 2: Err TODO want OK, 3: Err, 4: OK
u.set(null);
}
}
}