11
11
12
12
class AtomicOperationsCombinedDetectorTest extends AbstractIntegrationTest {
13
13
14
- public static final String OPERATIONS_ARE_NOT_ATOMIC = "AT_COMBINED_ATOMIC_OPERATIONS_ARE_NOT_ATOMIC" ;
15
- public static final String NEEDS_SYNCHRONIZATION = "AT_ATOMIC_OPERATION_NEEDS_SYNCHRONIZATION" ;
14
+ private static final String OPERATIONS_ARE_NOT_ATOMIC = "AT_COMBINED_ATOMIC_OPERATIONS_ARE_NOT_ATOMIC" ;
15
+ private static final String NEEDS_SYNCHRONIZATION = "AT_ATOMIC_OPERATION_NEEDS_SYNCHRONIZATION" ;
16
16
17
17
@ Test
18
18
void testSafeSynchronizedList () {
@@ -31,26 +31,26 @@ void testSafeSynchronizedList() {
31
31
@ Test
32
32
void testUnsafeSynchronizedList () {
33
33
performAnalysis ("atomicMethods/UnsafeSynchronizedList.class" );
34
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 1 );
35
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
36
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedList" , "addAndPrintNumbers" , 13 );
34
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 1 );
35
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
36
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedList" , "addAndPrintNumbers" , 13 );
37
37
}
38
38
39
39
@ Test
40
40
void testUnsafeSynchronizedListWithMultipleSync () {
41
41
performAnalysis ("atomicMethods/UnsafeSynchronizedListWithMultipleSync.class" );
42
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 1 );
43
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
44
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListWithMultipleSync" , "addAndPrintNumbers" , 32 );
42
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 1 );
43
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
44
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListWithMultipleSync" , "addAndPrintNumbers" , 32 );
45
45
}
46
46
47
47
@ Test
48
48
void testUnsafeSynchronizedListWithMethodInit () {
49
49
performAnalysis ("atomicMethods/UnsafeSynchronizedListWithMethodInit.class" );
50
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 1 );
51
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 1 );
52
- assertBug (NEEDS_SYNCHRONIZATION , "UnsafeSynchronizedListWithMethodInit" , "init" , 12 );
53
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListWithMethodInit" , "addAndPrintNumbers" , 17 );
50
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 1 );
51
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 1 );
52
+ assertBugInMethodAtLine (NEEDS_SYNCHRONIZATION , "UnsafeSynchronizedListWithMethodInit" , "init" , 12 );
53
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListWithMethodInit" , "addAndPrintNumbers" , 17 );
54
54
}
55
55
56
56
@ Test
@@ -68,19 +68,19 @@ void testUnsafeSynchronizedSet() {
68
68
"atomicMethods/UnsafeSynchronizedSet.class" ,
69
69
"atomicMethods/UnsafeSynchronizedSortedSet.class" ,
70
70
"atomicMethods/UnsafeSynchronizedNavigableSet.class" );
71
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 3 );
72
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
73
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSet" , "addAndPrintNumbers" , 13 );
74
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSortedSet" , "addAndPrintNumbers" , 12 );
75
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedNavigableSet" , "addAndPrintNumbers" , 12 );
71
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 3 );
72
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
73
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSet" , "addAndPrintNumbers" , 13 );
74
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSortedSet" , "addAndPrintNumbers" , 12 );
75
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedNavigableSet" , "addAndPrintNumbers" , 12 );
76
76
}
77
77
78
78
@ Test
79
79
void testUnsafeSynchronizedCollection () {
80
80
performAnalysis ("atomicMethods/UnsafeSynchronizedCollection.class" );
81
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 1 );
82
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
83
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedCollection" , "addAndPrintNumbers" , 12 );
81
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 1 );
82
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
83
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedCollection" , "addAndPrintNumbers" , 12 );
84
84
}
85
85
86
86
@ Test
@@ -89,11 +89,11 @@ void testUnsafeSynchronizedMap() {
89
89
"atomicMethods/UnsafeSynchronizedMap.class" ,
90
90
"atomicMethods/UnsafeSynchronizedNavigableMap.class" ,
91
91
"atomicMethods/UnsafeSynchronizedSortedMap.class" );
92
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 3 );
93
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
94
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedMap" , "addAndPrintNumbers" , 13 );
95
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedNavigableMap" , "addAndPrintNumbers" , 12 );
96
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSortedMap" , "addAndPrintNumbers" , 12 );
92
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 3 );
93
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
94
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedMap" , "addAndPrintNumbers" , 13 );
95
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedNavigableMap" , "addAndPrintNumbers" , 12 );
96
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSortedMap" , "addAndPrintNumbers" , 12 );
97
97
}
98
98
99
99
@ Test
@@ -108,36 +108,36 @@ void testSynchronizedListInSynchronizedMethod() {
108
108
@ Test
109
109
void testUnsafeSynchronizedListAndSet () {
110
110
performAnalysis ("atomicMethods/UnsafeSynchronizedListAndSet.class" );
111
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 2 );
112
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
113
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListAndSet" , "addAndPrintNumbers" , 16 );
114
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListAndSet" , "addAndPrintNumbers" , 20 );
111
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 2 );
112
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
113
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListAndSet" , "addAndPrintNumbers" , 16 );
114
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListAndSet" , "addAndPrintNumbers" , 20 );
115
115
}
116
116
117
117
@ Test
118
118
void testPartialSynchronizedListAndSet () {
119
119
performAnalysis ("atomicMethods/PartialSynchronizedListAndSet.class" , "atomicMethods/PartialSynchronizedListAndSet2.class" );
120
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 2 );
121
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
122
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "PartialSynchronizedListAndSet" , "addAndPrintNumbers" , 16 );
123
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "PartialSynchronizedListAndSet2" , "addAndPrintNumbers" , 22 );
120
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 2 );
121
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
122
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "PartialSynchronizedListAndSet" , "addAndPrintNumbers" , 16 );
123
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "PartialSynchronizedListAndSet2" , "addAndPrintNumbers" , 22 );
124
124
}
125
125
126
126
@ Test
127
127
void testUnsafeSynchronizedListWithPrivateMethods () {
128
128
performAnalysis ("atomicMethods/UnsafeSynchronizedListWithPrivateMethods.class" );
129
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 1 );
130
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
131
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListWithPrivateMethods" , "addAndPrintNumbers" , 13 );
129
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 1 );
130
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
131
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedListWithPrivateMethods" , "addAndPrintNumbers" , 13 );
132
132
}
133
133
134
134
@ Test
135
135
void testUnsafeSynchronizedSetInMultipleMethods () {
136
136
performAnalysis ("atomicMethods/UnsafeSynchronizedSetInMultipleMethods.class" );
137
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 2 );
138
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
139
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSetInMultipleMethods" , "addAndPrintNumbers" , 13 );
140
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSetInMultipleMethods" , "removeAndPrintNumbers" , 19 );
137
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 2 );
138
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
139
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSetInMultipleMethods" , "addAndPrintNumbers" , 13 );
140
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedSetInMultipleMethods" , "removeAndPrintNumbers" , 19 );
141
141
}
142
142
143
143
@ Test
@@ -149,10 +149,10 @@ void testSafeSynchronizedMapIncrement() {
149
149
@ Test
150
150
void testUnsafeSynchronizedMapIncrement () {
151
151
performAnalysis ("atomicMethods/UnsafeSynchronizedMapIncrement.class" );
152
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 1 );
153
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 1 );
154
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedMapIncrement" , "increment" , 17 );
155
- assertBug (NEEDS_SYNCHRONIZATION , "UnsafeSynchronizedMapIncrement" , "getCount" , 21 );
152
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 1 );
153
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 1 );
154
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeSynchronizedMapIncrement" , "increment" , 17 );
155
+ assertBugInMethodAtLine (NEEDS_SYNCHRONIZATION , "UnsafeSynchronizedMapIncrement" , "getCount" , 21 );
156
156
}
157
157
158
158
@ Test
@@ -170,29 +170,29 @@ void testUnsafeAtomicReference() {
170
170
"atomicMethods/UnsafeAtomicReference4.class" ,
171
171
"atomicMethods/UnsafeAtomicReference4$Inner.class" ,
172
172
"atomicMethods/UnsafeAtomicReference5.class" );
173
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 11 );
174
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 3 );
175
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference" , "update" , 17 );
176
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference" , "add" , 22 );
177
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference2" , "incrementAtomicInteger" , 18 );
178
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference2" , "incrementAtomicInteger" , 18 );
179
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference2" , "incrementAtomicInteger2" , 26 );
180
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference2" , "incrementAtomicInteger2" , 26 );
181
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference3" , "preparation" , 11 );
182
- assertBug (NEEDS_SYNCHRONIZATION , "UnsafeAtomicReference3" , "run" , 15 );
183
- assertBug (NEEDS_SYNCHRONIZATION , "UnsafeAtomicReference3" , "after" , 19 );
184
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference4" , "initProcessing" , 22 );
185
- assertBug (NEEDS_SYNCHRONIZATION , "UnsafeAtomicReference4" , "finishProcessing" , 33 );
186
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference5" , "lambda$incrementAtomicInteger$0" , 15 );
173
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 11 );
174
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 3 );
175
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference" , "update" , 17 );
176
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference" , "add" , 22 );
177
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference2" , "incrementAtomicInteger" , 18 );
178
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference2" , "incrementAtomicInteger" , 18 );
179
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference2" , "incrementAtomicInteger2" , 26 );
180
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference2" , "incrementAtomicInteger2" , 26 );
181
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference3" , "preparation" , 11 );
182
+ assertBugInMethodAtLine (NEEDS_SYNCHRONIZATION , "UnsafeAtomicReference3" , "run" , 15 );
183
+ assertBugInMethodAtLine (NEEDS_SYNCHRONIZATION , "UnsafeAtomicReference3" , "after" , 19 );
184
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference4" , "initProcessing" , 22 );
185
+ assertBugInMethodAtLine (NEEDS_SYNCHRONIZATION , "UnsafeAtomicReference4" , "finishProcessing" , 33 );
186
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReference5" , "lambda$incrementAtomicInteger$0" , 15 );
187
187
}
188
188
189
189
@ Test
190
190
void testUnsafeAtomicReferenceValueSet () {
191
191
performAnalysis ("atomicMethods/UnsafeAtomicReferenceValueSet.class" );
192
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 1 );
193
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 1 );
194
- assertBug (NEEDS_SYNCHRONIZATION , "UnsafeAtomicReferenceValueSet" , "init" , 10 );
195
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReferenceValueSet" , "update" , 15 );
192
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 1 );
193
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 1 );
194
+ assertBugInMethodAtLine (NEEDS_SYNCHRONIZATION , "UnsafeAtomicReferenceValueSet" , "init" , 10 );
195
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeAtomicReferenceValueSet" , "update" , 15 );
196
196
}
197
197
198
198
@ Test
@@ -204,9 +204,9 @@ void testSafeLocalAtomicInteger() {
204
204
@ Test
205
205
void testUnsafeLocalAtomicInteger () {
206
206
performAnalysis ("atomicMethods/UnsafeLocalAtomicInteger.class" );
207
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 1 );
208
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
209
- assertBug (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeLocalAtomicInteger" , "increment" , 23 );
207
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 1 );
208
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
209
+ assertBugInMethodAtLine (OPERATIONS_ARE_NOT_ATOMIC , "UnsafeLocalAtomicInteger" , "increment" , 23 );
210
210
}
211
211
212
212
@ Test
@@ -234,23 +234,7 @@ void testSafeAtomicCallsWithLambda() {
234
234
}
235
235
236
236
private void assertZeroBugs () {
237
- assertNumOfBugs (OPERATIONS_ARE_NOT_ATOMIC , 0 );
238
- assertNumOfBugs (NEEDS_SYNCHRONIZATION , 0 );
239
- }
240
-
241
- private void assertNumOfBugs (String bugType , int num ) {
242
- final BugInstanceMatcher bugTypeMatcher = new BugInstanceMatcherBuilder ()
243
- .bugType (bugType ).build ();
244
- assertThat (getBugCollection (), containsExactly (num , bugTypeMatcher ));
245
- }
246
-
247
- private void assertBug (String bugType , String className , String methodName , int line ) {
248
- final BugInstanceMatcher bugInstanceMatcher = new BugInstanceMatcherBuilder ()
249
- .bugType (bugType )
250
- .inClass (className )
251
- .inMethod (methodName )
252
- .atLine (line )
253
- .build ();
254
- assertThat (getBugCollection (), hasItem (bugInstanceMatcher ));
237
+ assertBugTypeCount (OPERATIONS_ARE_NOT_ATOMIC , 0 );
238
+ assertBugTypeCount (NEEDS_SYNCHRONIZATION , 0 );
255
239
}
256
240
}
0 commit comments