File: Overriding.java

package info (click to toggle)
checker-framework-java 3.2.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,104 kB
  • sloc: java: 145,916; xml: 839; sh: 518; makefile: 404; perl: 26
file content (160 lines) | stat: -rw-r--r-- 3,851 bytes parent folder | download | duplicates (3)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import org.checkerframework.checker.lock.qual.*;
import org.checkerframework.dataflow.qual.*;

public class Overriding {

    class SuperClass {
        protected Object a, b, c;

        @Holding("a")
        void guardedByOne() {}

        @Holding({"a", "b"})
        void guardedByTwo() {}

        @Holding({"a", "b", "c"})
        void guardedByThree() {}

        @ReleasesNoLocks
        void rnlMethod() {
            // :: error: (method.guarantee.violated)
            mrlMethod();
            rnlMethod();
            implicitRnlMethod();
            lfMethod();
        }

        void implicitRnlMethod() {
            // :: error: (method.guarantee.violated)
            mrlMethod();
            rnlMethod();
            implicitRnlMethod();
            lfMethod();
        }

        @LockingFree
        void lfMethod() {
            // :: error: (method.guarantee.violated)
            mrlMethod();
            // :: error: (method.guarantee.violated)
            rnlMethod();
            // :: error: (method.guarantee.violated)
            implicitRnlMethod();
            lfMethod();
        }

        @MayReleaseLocks
        void mrlMethod() {
            mrlMethod();
            rnlMethod();
            implicitRnlMethod();
            lfMethod();
        }

        @ReleasesNoLocks
        void rnlMethod2() {}

        void implicitRnlMethod2() {}

        @LockingFree
        void lfMethod2() {}

        @MayReleaseLocks
        void mrlMethod2() {}

        @ReleasesNoLocks
        void rnlMethod3() {}

        void implicitRnlMethod3() {}

        @LockingFree
        void lfMethod3() {}
    }

    class SubClass extends SuperClass {
        @Holding({"a", "b"}) // error
        @Override
        // :: error: (contracts.precondition.override.invalid)
        void guardedByOne() {}

        @Holding({"a", "b"})
        @Override
        void guardedByTwo() {}

        @Holding({"a", "b"})
        @Override
        void guardedByThree() {}

        @MayReleaseLocks
        @Override
        // :: error: (override.sideeffect.invalid)
        void rnlMethod() {}

        @MayReleaseLocks
        @Override
        // :: error: (override.sideeffect.invalid)
        void implicitRnlMethod() {}

        @ReleasesNoLocks
        @Override
        // :: error: (override.sideeffect.invalid)
        void lfMethod() {}

        @MayReleaseLocks
        @Override
        void mrlMethod() {}

        @ReleasesNoLocks
        @Override
        void rnlMethod2() {}

        @Override
        void implicitRnlMethod2() {}

        @LockingFree
        @Override
        void lfMethod2() {}

        @ReleasesNoLocks
        @Override
        void mrlMethod2() {}

        @LockingFree
        @Override
        void rnlMethod3() {}

        @LockingFree
        @Override
        void implicitRnlMethod3() {}

        @SideEffectFree
        @Override
        void lfMethod3() {}
    }

    // Test overriding @Holding with JCIP @GuardedBy.
    class SubClassJcip extends SuperClass {
        @net.jcip.annotations.GuardedBy({"a", "b"}) @Override
        // :: error: (contracts.precondition.override.invalid)
        void guardedByOne() {}

        @net.jcip.annotations.GuardedBy({"a", "b"}) @Override
        void guardedByTwo() {}

        @net.jcip.annotations.GuardedBy({"a", "b"}) @Override
        void guardedByThree() {}
    }

    // Test overriding @Holding with Javax @GuardedBy.
    class SubClassJavax extends SuperClass {
        @javax.annotation.concurrent.GuardedBy({"a", "b"}) @Override
        // :: error: (contracts.precondition.override.invalid)
        void guardedByOne() {}

        @javax.annotation.concurrent.GuardedBy({"a", "b"}) @Override
        void guardedByTwo() {}

        @javax.annotation.concurrent.GuardedBy({"a", "b"}) @Override
        void guardedByThree() {}
    }
}