1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.puppycrawl.tools.checkstyle.checks.coding;
21
22 import static com.google.common.truth.Truth.assertWithMessage;
23 import static com.puppycrawl.tools.checkstyle.checks.coding.HiddenFieldCheck.MSG_KEY;
24
25 import java.io.File;
26 import java.util.Optional;
27 import java.util.function.Predicate;
28
29 import org.junit.jupiter.api.Test;
30
31 import com.puppycrawl.tools.checkstyle.AbstractModuleTestSupport;
32 import com.puppycrawl.tools.checkstyle.JavaParser;
33 import com.puppycrawl.tools.checkstyle.api.DetailAST;
34 import com.puppycrawl.tools.checkstyle.api.TokenTypes;
35 import com.puppycrawl.tools.checkstyle.internal.utils.TestUtil;
36 import com.puppycrawl.tools.checkstyle.utils.CommonUtil;
37
38 public class HiddenFieldCheckTest
39 extends AbstractModuleTestSupport {
40
41 @Override
42 public String getPackageLocation() {
43 return "com/puppycrawl/tools/checkstyle/checks/coding/hiddenfield";
44 }
45
46 @Test
47 public void testStaticVisibilityFromLambdas() throws Exception {
48 final String[] expected = {
49 "31:34: " + getCheckMessage(MSG_KEY, "value"),
50 "64:31: " + getCheckMessage(MSG_KEY, "languageCode"),
51 "74:35: " + getCheckMessage(MSG_KEY, "number"),
52 "87:35: " + getCheckMessage(MSG_KEY, "id"),
53 "115:33: " + getCheckMessage(MSG_KEY, "note"),
54 "141:48: " + getCheckMessage(MSG_KEY, "stringValue"),
55 "141:69: " + getCheckMessage(MSG_KEY, "intValue"),
56 "155:69: " + getCheckMessage(MSG_KEY, "doubleValue"),
57 "168:51: " + getCheckMessage(MSG_KEY, "firstString"),
58 "168:64: " + getCheckMessage(MSG_KEY, "secondString"),
59 "187:49: " + getCheckMessage(MSG_KEY, "first"),
60 "214:62: " + getCheckMessage(MSG_KEY, "mPi"),
61 "231:27: " + getCheckMessage(MSG_KEY, "justSomeList"),
62 "231:61: " + getCheckMessage(MSG_KEY, "justSomeMap"),
63 "246:55: " + getCheckMessage(MSG_KEY, "someObject"),
64 "255:52: " + getCheckMessage(MSG_KEY, "someObject"),
65 };
66 verifyWithInlineConfigParser(
67 getPath("InputHiddenFieldLambdas.java"), expected);
68 }
69
70 @Test
71 public void testStaticVisibilityFromAnonymousClasses() throws Exception {
72 final String[] expected = {
73 "22:45: " + getCheckMessage(MSG_KEY, "other"),
74 "28:42: " + getCheckMessage(MSG_KEY, "other"),
75 "36:49: " + getCheckMessage(MSG_KEY, "other"),
76 "46:53: " + getCheckMessage(MSG_KEY, "other"),
77 "58:26: " + getCheckMessage(MSG_KEY, "someField"),
78 };
79 verifyWithInlineConfigParser(
80 getPath("InputHiddenFieldStaticVisibility.java"), expected);
81 }
82
83 @Test
84 public void testHiddenFieldBasic() throws Exception {
85 final String[] expected = {
86 "21:13: " + getCheckMessage(MSG_KEY, "hidden"),
87 "30:13: " + getCheckMessage(MSG_KEY, "hidden"),
88 "35:18: " + getCheckMessage(MSG_KEY, "hidden"),
89 "50:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
90 "59:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
91 "60:17: " + getCheckMessage(MSG_KEY, "hidden"),
92 "65:22: " + getCheckMessage(MSG_KEY, "innerHidden"),
93 "69:22: " + getCheckMessage(MSG_KEY, "hidden"),
94 "81:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
95 "82:17: " + getCheckMessage(MSG_KEY, "hidden"),
96 "87:13: " + getCheckMessage(MSG_KEY, "hidden"),
97 };
98 verifyWithInlineConfigParser(
99 getPath("InputHiddenFieldBasic.java"), expected);
100 }
101
102 @Test
103 public void testHiddenFieldInterface() throws Exception {
104 final String[] expected = {
105 };
106 verifyWithInlineConfigParser(
107 getPath("InputHiddenFieldInterface.java"), expected);
108 }
109
110 @Test
111 public void testHiddenFieldStatic() throws Exception {
112 final String[] expected = {
113 "22:13: " + getCheckMessage(MSG_KEY, "hidden"),
114 "27:13: " + getCheckMessage(MSG_KEY, "hidden"),
115 "32:13: " + getCheckMessage(MSG_KEY, "hidden"),
116 "36:13: " + getCheckMessage(MSG_KEY, "hidden"),
117
118 };
119 verifyWithInlineConfigParser(
120 getPath("InputHiddenFieldStatic.java"), expected);
121 }
122
123 @Test
124 public void testHiddenFieldPropertySetter() throws Exception {
125 final String[] expected = {
126 };
127 verifyWithInlineConfigParser(
128 getPath("InputHiddenFieldPropertySetter.java"), expected);
129 }
130
131 @Test
132 public void testHiddenFieldEnum() throws Exception {
133 final String[] expected = {
134 "30:17: " + getCheckMessage(MSG_KEY, "hidden"),
135 "47:13: " + getCheckMessage(MSG_KEY, "hidden"),
136 "53:13: " + getCheckMessage(MSG_KEY, "hiddenStatic"),
137 };
138 verifyWithInlineConfigParser(
139 getPath("InputHiddenFieldEnum.java"), expected);
140 }
141
142 @Test
143 public void testHiddenFieldMisc() throws Exception {
144 final String[] expected = {
145 };
146 verifyWithInlineConfigParser(
147 getPath("InputHiddenFieldMisc.java"), expected);
148 }
149
150 @Test
151 public void testHiddenField2Basic() throws Exception {
152 final String[] expected = {
153 "21:13: " + getCheckMessage(MSG_KEY, "hidden"),
154 "24:39: " + getCheckMessage(MSG_KEY, "hidden"),
155 "31:13: " + getCheckMessage(MSG_KEY, "hidden"),
156 "36:18: " + getCheckMessage(MSG_KEY, "hidden"),
157 "41:33: " + getCheckMessage(MSG_KEY, "hidden"),
158 "52:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
159 "55:26: " + getCheckMessage(MSG_KEY, "innerHidden"),
160 "61:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
161 "62:17: " + getCheckMessage(MSG_KEY, "hidden"),
162 "67:22: " + getCheckMessage(MSG_KEY, "innerHidden"),
163 "71:22: " + getCheckMessage(MSG_KEY, "hidden"),
164 "76:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
165 "78:17: " + getCheckMessage(MSG_KEY, "hidden"),
166 "84:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
167 "85:17: " + getCheckMessage(MSG_KEY, "hidden"),
168 "90:13: " + getCheckMessage(MSG_KEY, "hidden"),
169 };
170 verifyWithInlineConfigParser(
171 getPath("InputHiddenField2Basic.java"), expected);
172 }
173
174 @Test
175 public void testHiddenField2Interface() throws Exception {
176 final String[] expected = {
177 };
178 verifyWithInlineConfigParser(
179 getPath("InputHiddenField2Interface.java"), expected);
180 }
181
182 @Test
183 public void testHiddenField2Static() throws Exception {
184 final String[] expected = {
185 "22:13: " + getCheckMessage(MSG_KEY, "hidden"),
186 "27:13: " + getCheckMessage(MSG_KEY, "hidden"),
187 "32:13: " + getCheckMessage(MSG_KEY, "hidden"),
188 "36:13: " + getCheckMessage(MSG_KEY, "hidden"),
189 "63:23: " + getCheckMessage(MSG_KEY, "y"),
190 };
191 verifyWithInlineConfigParser(
192 getPath("InputHiddenField2Static.java"), expected);
193 }
194
195 @Test
196 public void testHiddenField2PropertySetter() throws Exception {
197 final String[] expected = {
198 "21:29: " + getCheckMessage(MSG_KEY, "prop"),
199 "27:29: " + getCheckMessage(MSG_KEY, "prop"),
200 "33:29: " + getCheckMessage(MSG_KEY, "prop"),
201 "45:28: " + getCheckMessage(MSG_KEY, "prop"),
202 "64:41: " + getCheckMessage(MSG_KEY, "prop"),
203 "78:29: " + getCheckMessage(MSG_KEY, "prop"),
204 "89:42: " + getCheckMessage(MSG_KEY, "prop2"),
205 };
206 verifyWithInlineConfigParser(
207 getPath("InputHiddenField2PropertySetter.java"), expected);
208 }
209
210 @Test
211 public void testHiddenField2Enum() throws Exception {
212 final String[] expected = {
213 "30:17: " + getCheckMessage(MSG_KEY, "hidden"),
214 "40:31: " + getCheckMessage(MSG_KEY, "hidden"),
215 "47:13: " + getCheckMessage(MSG_KEY, "hidden"),
216 "53:13: " + getCheckMessage(MSG_KEY, "hiddenStatic"),
217 };
218 verifyWithInlineConfigParser(
219 getPath("InputHiddenField2Enum.java"), expected);
220 }
221
222 @Test
223 public void testHiddenField2Misc() throws Exception {
224 final String[] expected = {
225 "19:45: " + getCheckMessage(MSG_KEY, "x"),
226 "24:34: " + getCheckMessage(MSG_KEY, "xAxis"),
227 "31:23: " + getCheckMessage(MSG_KEY, "i"),
228 };
229 verifyWithInlineConfigParser(
230 getPath("InputHiddenField2Misc.java"), expected);
231 }
232
233 @Test
234 public void testHiddenField3Basic() throws Exception {
235 final String[] expected = {
236 "21:13: " + getCheckMessage(MSG_KEY, "hidden"),
237 "24:39: " + getCheckMessage(MSG_KEY, "hidden"),
238 "31:13: " + getCheckMessage(MSG_KEY, "hidden"),
239 "36:18: " + getCheckMessage(MSG_KEY, "hidden"),
240 "41:33: " + getCheckMessage(MSG_KEY, "hidden"),
241 "62:17: " + getCheckMessage(MSG_KEY, "hidden"),
242 "71:22: " + getCheckMessage(MSG_KEY, "hidden"),
243 "78:17: " + getCheckMessage(MSG_KEY, "hidden"),
244 "85:17: " + getCheckMessage(MSG_KEY, "hidden"),
245 "90:13: " + getCheckMessage(MSG_KEY, "hidden"),
246 };
247 verifyWithInlineConfigParser(
248 getPath("InputHiddenField3Basic.java"), expected);
249 }
250
251 @Test
252 public void testHiddenField3Interface() throws Exception {
253 final String[] expected = {
254 };
255 verifyWithInlineConfigParser(
256 getPath("InputHiddenField3Interface.java"), expected);
257 }
258
259 @Test
260 public void testHiddenField3Static() throws Exception {
261 final String[] expected = {
262 "22:13: " + getCheckMessage(MSG_KEY, "hidden"),
263 "27:13: " + getCheckMessage(MSG_KEY, "hidden"),
264 "32:13: " + getCheckMessage(MSG_KEY, "hidden"),
265 "36:13: " + getCheckMessage(MSG_KEY, "hidden"),
266 "63:23: " + getCheckMessage(MSG_KEY, "y"),
267 };
268 verifyWithInlineConfigParser(
269 getPath("InputHiddenField3Static.java"), expected);
270 }
271
272 @Test
273 public void testHiddenField3PropertySetter() throws Exception {
274 final String[] expected = {
275 "21:29: " + getCheckMessage(MSG_KEY, "prop"),
276 "27:29: " + getCheckMessage(MSG_KEY, "prop"),
277 "33:29: " + getCheckMessage(MSG_KEY, "prop"),
278 "45:28: " + getCheckMessage(MSG_KEY, "prop"),
279 "64:41: " + getCheckMessage(MSG_KEY, "prop"),
280 "78:29: " + getCheckMessage(MSG_KEY, "prop"),
281 "89:42: " + getCheckMessage(MSG_KEY, "prop2"),
282 };
283 verifyWithInlineConfigParser(
284 getPath("InputHiddenField3PropertySetter.java"), expected);
285 }
286
287 @Test
288 public void testHiddenField3Enum() throws Exception {
289 final String[] expected = {
290 "30:17: " + getCheckMessage(MSG_KEY, "hidden"),
291 "40:31: " + getCheckMessage(MSG_KEY, "hidden"),
292 "47:13: " + getCheckMessage(MSG_KEY, "hidden"),
293 "53:13: " + getCheckMessage(MSG_KEY, "hiddenStatic"),
294 };
295 verifyWithInlineConfigParser(
296 getPath("InputHiddenField3Enum.java"), expected);
297 }
298
299 @Test
300 public void testHiddenField3Misc() throws Exception {
301 final String[] expected = {
302 "18:45: " + getCheckMessage(MSG_KEY, "x"),
303 "23:34: " + getCheckMessage(MSG_KEY, "xAxis"),
304 };
305 verifyWithInlineConfigParser(
306 getPath("InputHiddenField3Misc.java"), expected);
307 }
308
309 @Test
310 public void testHiddenField4Basic() throws Exception {
311 final String[] expected = {
312 "21:13: " + getCheckMessage(MSG_KEY, "hidden"),
313 "24:39: " + getCheckMessage(MSG_KEY, "hidden"),
314 "31:13: " + getCheckMessage(MSG_KEY, "hidden"),
315 "36:18: " + getCheckMessage(MSG_KEY, "hidden"),
316 "41:33: " + getCheckMessage(MSG_KEY, "hidden"),
317 "52:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
318 "55:26: " + getCheckMessage(MSG_KEY, "innerHidden"),
319 "61:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
320 "62:17: " + getCheckMessage(MSG_KEY, "hidden"),
321 "67:22: " + getCheckMessage(MSG_KEY, "innerHidden"),
322 "71:22: " + getCheckMessage(MSG_KEY, "hidden"),
323 "76:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
324 "78:17: " + getCheckMessage(MSG_KEY, "hidden"),
325 "84:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
326 "85:17: " + getCheckMessage(MSG_KEY, "hidden"),
327 "90:13: " + getCheckMessage(MSG_KEY, "hidden"),
328 };
329 verifyWithInlineConfigParser(
330 getPath("InputHiddenField4Basic.java"), expected);
331 }
332
333 @Test
334 public void testHiddenField4Interface() throws Exception {
335 final String[] expected = {
336 };
337 verifyWithInlineConfigParser(
338 getPath("InputHiddenField4Interface.java"), expected);
339 }
340
341 @Test
342 public void testHiddenField4Static() throws Exception {
343 final String[] expected = {
344 "22:13: " + getCheckMessage(MSG_KEY, "hidden"),
345 "27:13: " + getCheckMessage(MSG_KEY, "hidden"),
346 "32:13: " + getCheckMessage(MSG_KEY, "hidden"),
347 "36:13: " + getCheckMessage(MSG_KEY, "hidden"),
348 "63:23: " + getCheckMessage(MSG_KEY, "y"),
349 };
350 verifyWithInlineConfigParser(
351 getPath("InputHiddenField4Static.java"), expected);
352 }
353
354 @Test
355 public void testHiddenField4PropertySetter() throws Exception {
356 final String[] expected = {
357 "27:29: " + getCheckMessage(MSG_KEY, "prop"),
358 "33:29: " + getCheckMessage(MSG_KEY, "prop"),
359 "45:28: " + getCheckMessage(MSG_KEY, "prop"),
360 "64:41: " + getCheckMessage(MSG_KEY, "prop"),
361 "89:42: " + getCheckMessage(MSG_KEY, "prop2"),
362 };
363 verifyWithInlineConfigParser(
364 getPath("InputHiddenField4PropertySetter.java"), expected);
365 }
366
367 @Test
368 public void testHiddenField4Enum() throws Exception {
369 final String[] expected = {
370 "30:17: " + getCheckMessage(MSG_KEY, "hidden"),
371 "40:31: " + getCheckMessage(MSG_KEY, "hidden"),
372 "47:13: " + getCheckMessage(MSG_KEY, "hidden"),
373 "53:13: " + getCheckMessage(MSG_KEY, "hiddenStatic"),
374 };
375 verifyWithInlineConfigParser(
376 getPath("InputHiddenField4Enum.java"), expected);
377 }
378
379 @Test
380 public void testHiddenField4Misc() throws Exception {
381 final String[] expected = {
382 "21:45: " + getCheckMessage(MSG_KEY, "x"),
383 "44:45: " + getCheckMessage(MSG_KEY, "prop"),
384 "69:46: " + getCheckMessage(MSG_KEY, "prop2"),
385 };
386 verifyWithInlineConfigParser(
387 getPath("InputHiddenField4Misc.java"), expected);
388 }
389
390
391 @Test
392 public void testHiddenField5Basic() throws Exception {
393 final String[] expected = {
394 "21:13: " + getCheckMessage(MSG_KEY, "hidden"),
395 "24:39: " + getCheckMessage(MSG_KEY, "hidden"),
396 "31:13: " + getCheckMessage(MSG_KEY, "hidden"),
397 "36:18: " + getCheckMessage(MSG_KEY, "hidden"),
398 "41:33: " + getCheckMessage(MSG_KEY, "hidden"),
399 "52:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
400 "55:26: " + getCheckMessage(MSG_KEY, "innerHidden"),
401 "61:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
402 "62:17: " + getCheckMessage(MSG_KEY, "hidden"),
403 "67:22: " + getCheckMessage(MSG_KEY, "innerHidden"),
404 "71:22: " + getCheckMessage(MSG_KEY, "hidden"),
405 "76:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
406 "78:17: " + getCheckMessage(MSG_KEY, "hidden"),
407 "84:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
408 "85:17: " + getCheckMessage(MSG_KEY, "hidden"),
409 "90:13: " + getCheckMessage(MSG_KEY, "hidden"),
410 };
411 verifyWithInlineConfigParser(
412 getPath("InputHiddenField5Basic.java"), expected);
413 }
414
415 @Test
416 public void testHiddenField5Interface() throws Exception {
417 final String[] expected = {
418 };
419 verifyWithInlineConfigParser(
420 getPath("InputHiddenField5Interface.java"), expected);
421 }
422
423 @Test
424 public void testHiddenField5PropertySetter() throws Exception {
425 final String[] expected = {
426 "27:29: " + getCheckMessage(MSG_KEY, "prop"),
427 "33:29: " + getCheckMessage(MSG_KEY, "prop"),
428 "45:28: " + getCheckMessage(MSG_KEY, "prop"),
429 };
430 verifyWithInlineConfigParser(
431 getPath("InputHiddenField5PropertySetter.java"), expected);
432 }
433
434 @Test
435 public void testHiddenField5Static() throws Exception {
436 final String[] expected = {
437 "22:13: " + getCheckMessage(MSG_KEY, "hidden"),
438 "27:13: " + getCheckMessage(MSG_KEY, "hidden"),
439 "32:13: " + getCheckMessage(MSG_KEY, "hidden"),
440 "36:13: " + getCheckMessage(MSG_KEY, "hidden"),
441 "63:23: " + getCheckMessage(MSG_KEY, "y"),
442 };
443 verifyWithInlineConfigParser(
444 getPath("InputHiddenField5Static.java"), expected);
445 }
446
447 @Test
448 public void testHiddenField5Enum() throws Exception {
449 final String[] expected = {
450 "30:17: " + getCheckMessage(MSG_KEY, "hidden"),
451 "40:31: " + getCheckMessage(MSG_KEY, "hidden"),
452 "47:13: " + getCheckMessage(MSG_KEY, "hidden"),
453 "53:13: " + getCheckMessage(MSG_KEY, "hiddenStatic"),
454 };
455 verifyWithInlineConfigParser(
456 getPath("InputHiddenField5Enum.java"), expected);
457 }
458
459 @Test
460 public void testHiddenField5Misc() throws Exception {
461 final String[] expected = {
462 "20:45: " + getCheckMessage(MSG_KEY, "x"),
463 };
464 verifyWithInlineConfigParser(
465 getPath("InputHiddenField5Misc.java"), expected);
466 }
467
468
469 @Test
470 public void testIgnoreConstructorParameter()
471 throws Exception {
472 final String[] expected = {
473 "29:13: " + getCheckMessage(MSG_KEY, "hidden"),
474 "38:13: " + getCheckMessage(MSG_KEY, "hidden"),
475 "43:18: " + getCheckMessage(MSG_KEY, "hidden"),
476 "48:33: " + getCheckMessage(MSG_KEY, "hidden"),
477 "59:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
478 "68:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
479 "69:17: " + getCheckMessage(MSG_KEY, "hidden"),
480 "74:22: " + getCheckMessage(MSG_KEY, "innerHidden"),
481 "78:22: " + getCheckMessage(MSG_KEY, "hidden"),
482 "83:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
483 "85:17: " + getCheckMessage(MSG_KEY, "hidden"),
484 "91:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
485 "92:17: " + getCheckMessage(MSG_KEY, "hidden"),
486 "97:13: " + getCheckMessage(MSG_KEY, "hidden"),
487 "115:29: " + getCheckMessage(MSG_KEY, "prop"),
488 "121:29: " + getCheckMessage(MSG_KEY, "prop"),
489 "127:29: " + getCheckMessage(MSG_KEY, "prop"),
490 "139:28: " + getCheckMessage(MSG_KEY, "prop"),
491 "153:13: " + getCheckMessage(MSG_KEY, "hidden"),
492 "158:13: " + getCheckMessage(MSG_KEY, "hidden"),
493 "163:13: " + getCheckMessage(MSG_KEY, "hidden"),
494 "167:13: " + getCheckMessage(MSG_KEY, "hidden"),
495 "194:23: " + getCheckMessage(MSG_KEY, "y"),
496 "215:17: " + getCheckMessage(MSG_KEY, "hidden"),
497 "232:13: " + getCheckMessage(MSG_KEY, "hidden"),
498 "238:13: " + getCheckMessage(MSG_KEY, "hiddenStatic"),
499 "245:41: " + getCheckMessage(MSG_KEY, "x"),
500 "251:30: " + getCheckMessage(MSG_KEY, "xAxis"),
501 "268:41: " + getCheckMessage(MSG_KEY, "prop"),
502 "282:29: " + getCheckMessage(MSG_KEY, "prop"),
503 "293:42: " + getCheckMessage(MSG_KEY, "prop2"),
504 "305:19: " + getCheckMessage(MSG_KEY, "i"),
505 };
506 verifyWithInlineConfigParser(
507 getPath("InputHiddenField6.java"), expected);
508 }
509
510
511 @Test
512 public void testReordered()
513 throws Exception {
514 final String[] expected = {
515 "30:13: " + getCheckMessage(MSG_KEY, "hidden"),
516 "33:40: " + getCheckMessage(MSG_KEY, "hidden"),
517 "40:13: " + getCheckMessage(MSG_KEY, "hidden"),
518 "45:18: " + getCheckMessage(MSG_KEY, "hidden"),
519 "50:33: " + getCheckMessage(MSG_KEY, "hidden"),
520 "61:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
521 "64:26: " + getCheckMessage(MSG_KEY, "innerHidden"),
522 "70:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
523 "71:17: " + getCheckMessage(MSG_KEY, "hidden"),
524 "76:22: " + getCheckMessage(MSG_KEY, "innerHidden"),
525 "80:22: " + getCheckMessage(MSG_KEY, "hidden"),
526 "85:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
527 "87:17: " + getCheckMessage(MSG_KEY, "hidden"),
528 "93:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
529 "94:17: " + getCheckMessage(MSG_KEY, "hidden"),
530 "100:13: " + getCheckMessage(MSG_KEY, "hidden"),
531 "122:17: " + getCheckMessage(MSG_KEY, "hidden"),
532 "135:21: " + getCheckMessage(MSG_KEY, "hidden"),
533 "142:13: " + getCheckMessage(MSG_KEY, "hidden"),
534 "148:13: " + getCheckMessage(MSG_KEY, "hiddenStatic"),
535 };
536 verifyWithInlineConfigParser(
537 getPath("InputHiddenFieldReorder.java"), expected);
538 }
539
540 @Test
541 public void testIgnoreAbstractMethods() throws Exception {
542
543 final String[] expected = {
544 "30:13: " + getCheckMessage(MSG_KEY, "hidden"),
545 "33:34: " + getCheckMessage(MSG_KEY, "hidden"),
546 "40:13: " + getCheckMessage(MSG_KEY, "hidden"),
547 "45:18: " + getCheckMessage(MSG_KEY, "hidden"),
548 "50:33: " + getCheckMessage(MSG_KEY, "hidden"),
549 "61:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
550 "64:26: " + getCheckMessage(MSG_KEY, "innerHidden"),
551 "70:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
552 "71:17: " + getCheckMessage(MSG_KEY, "hidden"),
553 "76:22: " + getCheckMessage(MSG_KEY, "innerHidden"),
554 "80:22: " + getCheckMessage(MSG_KEY, "hidden"),
555 "85:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
556 "87:17: " + getCheckMessage(MSG_KEY, "hidden"),
557 "93:17: " + getCheckMessage(MSG_KEY, "innerHidden"),
558 "94:17: " + getCheckMessage(MSG_KEY, "hidden"),
559 "99:13: " + getCheckMessage(MSG_KEY, "hidden"),
560 "117:29: " + getCheckMessage(MSG_KEY, "prop"),
561 "123:29: " + getCheckMessage(MSG_KEY, "prop"),
562 "129:29: " + getCheckMessage(MSG_KEY, "prop"),
563 "141:28: " + getCheckMessage(MSG_KEY, "prop"),
564 "155:13: " + getCheckMessage(MSG_KEY, "hidden"),
565 "160:13: " + getCheckMessage(MSG_KEY, "hidden"),
566 "165:13: " + getCheckMessage(MSG_KEY, "hidden"),
567 "169:13: " + getCheckMessage(MSG_KEY, "hidden"),
568 "196:23: " + getCheckMessage(MSG_KEY, "y"),
569 "217:17: " + getCheckMessage(MSG_KEY, "hidden"),
570 "227:22: " + getCheckMessage(MSG_KEY, "hidden"),
571 "234:13: " + getCheckMessage(MSG_KEY, "hidden"),
572 "240:13: " + getCheckMessage(MSG_KEY, "hiddenStatic"),
573 "253:30: " + getCheckMessage(MSG_KEY, "xAxis"),
574 "270:41: " + getCheckMessage(MSG_KEY, "prop"),
575 "284:29: " + getCheckMessage(MSG_KEY, "prop"),
576 "295:42: " + getCheckMessage(MSG_KEY, "prop2"),
577 "307:19: " + getCheckMessage(MSG_KEY, "i"),
578 };
579 verifyWithInlineConfigParser(
580 getPath("InputHiddenField7.java"), expected);
581 }
582
583 @Test
584 public void testReceiverParameter() throws Exception {
585 final String[] expected = CommonUtil.EMPTY_STRING_ARRAY;
586 verifyWithInlineConfigParser(
587 getPath("InputHiddenFieldReceiver.java"), expected);
588 }
589
590 @Test
591 public void testHiddenFieldEnhancedInstanceof() throws Exception {
592
593 final String[] expected = {
594 "26:39: " + getCheckMessage(MSG_KEY, "price"),
595 "37:35: " + getCheckMessage(MSG_KEY, "hiddenStaticField"),
596 };
597 verifyWithInlineConfigParser(
598 getPath("InputHiddenFieldEnhancedInstanceof.java"), expected);
599 }
600
601 @Test
602 public void testHiddenFieldSwitchExpression() throws Exception {
603
604 final String[] expected = {
605 "28:13: " + getCheckMessage(MSG_KEY, "x"),
606 "32:30: " + getCheckMessage(MSG_KEY, "word"),
607 "33:35: " + getCheckMessage(MSG_KEY, "otherWord"),
608 "35:21: " + getCheckMessage(MSG_KEY, "y"),
609 "39:21: " + getCheckMessage(MSG_KEY, "z"),
610 "43:21: " + getCheckMessage(MSG_KEY, "a"),
611 "47:21: " + getCheckMessage(MSG_KEY, "b"),
612 "54:13: " + getCheckMessage(MSG_KEY, "x"),
613 "58:30: " + getCheckMessage(MSG_KEY, "word"),
614 "59:35: " + getCheckMessage(MSG_KEY, "otherWord"),
615 "61:21: " + getCheckMessage(MSG_KEY, "y"),
616 "65:21: " + getCheckMessage(MSG_KEY, "z"),
617 "69:21: " + getCheckMessage(MSG_KEY, "a"),
618 "73:21: " + getCheckMessage(MSG_KEY, "b"),
619 };
620 verifyWithInlineConfigParser(
621 getPath("InputHiddenFieldSwitchExpression.java"), expected);
622 }
623
624 @Test
625 public void testHiddenFieldRecords() throws Exception {
626
627 final String[] expected = {
628 "23:17: " + getCheckMessage(MSG_KEY, "myHiddenInt"),
629 "28:17: " + getCheckMessage(MSG_KEY, "myHiddenInt"),
630 "36:17: " + getCheckMessage(MSG_KEY, "hiddenField"),
631 "44:39: " + getCheckMessage(MSG_KEY, "hiddenStaticField"),
632 "59:39: " + getCheckMessage(MSG_KEY, "price"),
633 "68:21: " + getCheckMessage(MSG_KEY, "x"),
634 "72:20: " + getCheckMessage(MSG_KEY, "string"),
635 "82:21: " + getCheckMessage(MSG_KEY, "x"),
636 "86:20: " + getCheckMessage(MSG_KEY, "string"),
637 };
638 verifyWithInlineConfigParser(
639 getPath("InputHiddenFieldRecords.java"), expected);
640 }
641
642 @Test
643 public void testHiddenFieldLambdasInNestedScope() throws Exception {
644 final String[] expected = {
645 "21:34: " + getCheckMessage(MSG_KEY, "value"),
646 };
647 verifyWithInlineConfigParser(
648 getPath("InputHiddenFieldLambdas2.java"), expected);
649 }
650
651 @Test
652 public void testClassNestedInRecord() throws Exception {
653
654 final String[] expected = {
655 "23:26: " + getCheckMessage(MSG_KEY, "a"),
656 };
657 verifyWithInlineConfigParser(
658 getPath("InputHiddenFieldClassNestedInRecord.java"),
659 expected);
660 }
661
662 @Test
663 public void testHiddenFieldInnerRecordsImplicitlyStatic() throws Exception {
664
665 final String[] expected = {
666 "35:30: " + getCheckMessage(MSG_KEY, "pointer"),
667 };
668
669 verifyWithInlineConfigParser(
670 getPath("InputHiddenFieldInnerRecordsImplicitlyStatic.java"),
671 expected);
672 }
673
674 @Test
675 public void testHiddenFieldRecordsImplicitlyStaticClassComparison() throws Exception {
676
677 final String[] expected = {
678 "46:27: " + getCheckMessage(MSG_KEY, "x"),
679 };
680
681 verifyWithInlineConfigParser(
682 getPath("InputHiddenFieldRecordsImplicitlyStaticClassComparison.java"),
683 expected);
684 }
685
686 @Test
687 public void testHiddenFieldRecordPattern() throws Exception {
688
689 final String[] expected = {
690 "24:46: " + getCheckMessage(MSG_KEY, "s"),
691 "24:53: " + getCheckMessage(MSG_KEY, "x"),
692 "32:39: " + getCheckMessage(MSG_KEY, "s"),
693 "32:46: " + getCheckMessage(MSG_KEY, "x"),
694 "41:45: " + getCheckMessage(MSG_KEY, "s"),
695 "41:52: " + getCheckMessage(MSG_KEY, "x"),
696 "41:63: " + getCheckMessage(MSG_KEY, "z"),
697 "49:37: " + getCheckMessage(MSG_KEY, "s"),
698 "49:44: " + getCheckMessage(MSG_KEY, "x"),
699 };
700 verifyWithInlineConfigParser(
701 getNonCompilablePath("InputHiddenFieldRecordPattern.java"), expected);
702 }
703
704
705
706
707
708
709
710
711 @Test
712 public void testClearState() throws Exception {
713 final HiddenFieldCheck check = new HiddenFieldCheck();
714 final DetailAST root = JavaParser.parseFile(new File(getPath("InputHiddenField8.java")),
715 JavaParser.Options.WITHOUT_COMMENTS);
716 final Optional<DetailAST> classDef = TestUtil.findTokenInAstByPredicate(root,
717 ast -> ast.getType() == TokenTypes.CLASS_DEF);
718
719 assertWithMessage("Ast should contain CLASS_DEF")
720 .that(classDef.isPresent())
721 .isTrue();
722 assertWithMessage("State is not cleared on beginTree")
723 .that(
724 TestUtil.isStatefulFieldClearedDuringBeginTree(check, classDef.orElseThrow(),
725 "frame", new CheckIfStatefulFieldCleared()))
726 .isTrue();
727 }
728
729 private static final class CheckIfStatefulFieldCleared implements Predicate<Object> {
730
731 @Override
732 public boolean test(Object frame) {
733 boolean result = frame != null;
734
735
736 if (result
737 && (TestUtil.getInternalState(frame, "parent", Boolean.class) != null
738 || !TestUtil.<Boolean>getInternalState(frame, "staticType", Boolean.class)
739 || TestUtil.getInternalState(frame, "frameName", Boolean.class) != null)) {
740 result = false;
741 }
742
743 return result;
744 }
745
746 }
747
748 }