View Javadoc
1   /*
2   RequireThis
3   checkFields = (default)true
4   checkMethods = (default)true
5   validateOnlyOverlapping = (default)true
6   
7   
8   */
9   
10  package com.puppycrawl.tools.checkstyle.checks.coding.requirethis;
11  
12  import java.util.BitSet;
13  
14  public class InputRequireThisValidateOnlyOverlappingTrue {
15  
16      private static String fieldStatic = "fieldStatic";
17  
18      private final long fieldFinal1;
19      private final long fieldFinal2;
20      private final BitSet fieldFinal3;
21  
22      private String field1;
23      private String field2;
24      private String field3 = "some string";
25      private boolean booleanField;
26      private int intField;
27  
28      public InputRequireThisValidateOnlyOverlappingTrue(String field1) {
29          field1 = field1; // violation 'Reference to instance variable 'field1' needs "this.".'
30          fieldFinal1 = 0;
31          fieldFinal2 = 0;
32          fieldFinal3 = new BitSet();
33      }
34  
35      public InputRequireThisValidateOnlyOverlappingTrue(long value) {
36          fieldFinal1 = value;
37          fieldFinal2 = 0;
38          fieldFinal3 = new BitSet();
39      }
40  
41      public InputRequireThisValidateOnlyOverlappingTrue() {
42          fieldFinal1 = 0;
43          long fieldFinal2 = 0L;
44          fieldFinal2 = 1L;
45          this.fieldFinal2 = fieldFinal2;
46          fieldFinal3 = new BitSet();
47      }
48  
49      public InputRequireThisValidateOnlyOverlappingTrue(String name, long id) {
50          fieldFinal1 = 0;
51          long field1 = 0L;
52          field1 = field1; // violation 'Reference to instance variable 'field1' needs "this.".'
53          this.fieldFinal2 = 1L;
54          fieldFinal3 = new BitSet();
55      }
56  
57      public InputRequireThisValidateOnlyOverlappingTrue(int param) {
58          fieldFinal2 = 0L;
59          fieldFinal3 = new BitSet();
60          long finalField1 = 1L;
61          try {
62              finalField1 = 2L;
63          }
64          catch (Exception ex) {}
65          this.fieldFinal1 = finalField1;
66      }
67  
68      public InputRequireThisValidateOnlyOverlappingTrue(BitSet fieldFinal3) {
69          fieldFinal1 = 1L;
70          fieldFinal2 = 0L;
71          fieldFinal3 = new BitSet();
72          if (true) {
73              fieldFinal3 = (BitSet) fieldFinal3.clone();
74          }
75          this.fieldFinal3 = fieldFinal3;
76      }
77  
78      void foo1(String methodParam) {
79          methodParam = methodParam;
80      }
81  
82      void foo2() {
83          String localVar = "values";
84          localVar = localVar;
85      }
86  
87      void foo3() {
88          String field1 = "values";
89          field1 = field1; // violation 'Reference to instance variable 'field1' needs "this.".'
90      }
91  
92      void foo4(String methodParam) {
93          fieldStatic = methodParam;
94      }
95  
96      void foo5(String methodParam) {
97          methodParam = methodParam + "string";
98      }
99  
100     void foo6(String field1) {
101         field1 = this.field1 + field1;
102         this.field1 = field1 + field1;
103         field1 = field1 + this.field1;
104         field1 = this.field1 + this.field1;
105         this.field1 = this.field1 + this.field1;
106         this.field1 = this.field1 + field1;
107         field1 += field1;
108     }
109 
110     String addSuffixToParameter(String methodParam) {
111         return methodParam += "suffix";
112     }
113 
114     String addSuf2F(String field1) {
115         return field1 += "suffix";
116     }
117 
118     String addSuffixToThisField(String field1) {
119         return this.field1 += "suffix";
120     }
121 
122     static void foo7(String fieldStatic) {
123 //        this.fieldStatic = fieldStatic; <- fieldStatic cannot be referenced from a static context
124         fieldStatic = fieldStatic;
125     }
126 
127     void foo8(Long field1) {
128         field1 += field1; // violation 'Reference to instance variable 'field1' needs "this.".'
129     }
130 
131     void foo9(Long fieldFinal1) {
132 //        this.fieldFinal1 += fieldFinal1; <- cannot assign value to a final variable
133         fieldFinal1 += fieldFinal1;
134     }
135 
136     void method1() {
137         field1 = "2";
138     }
139 
140     void method2() {
141         method1();
142     }
143 
144     void method3() {
145         staticFoo();
146         staticTwoArgs("message", "arg");
147         staticTwoArgs("message", 1);
148         this.method1() ;
149     }
150 
151     static void staticFoo() { }
152 
153     static void foo10() {
154         staticFoo();
155         staticTwoArgs("message", "arg");
156     }
157 
158 //    void staticFoo() {} -> compile-time error. Already defined in the scope.
159 
160     static void staticTwoArgs(String message1, String argument) {}
161 
162     void staticTwoArgs(String message1, int argument) {}
163 
164     static void foo16() {
165         long fieldFinal1 = 5L;
166 // this.fieldFinal1 = fieldFinal1; // compile-time error: cannot be referenced from a static context
167         fieldFinal1 = 11L;
168     }
169 
170     static void foo17() {
171         String fieldStatic = "";
172 // this.fieldStatic = fieldStatic; // compile-time error: cannot be referenced from a static context
173         fieldStatic = "Hello, World!";
174     }
175 
176     InputRequireThisValidateOnlyOverlappingTrue(boolean flag) {
177         fieldFinal1 = 0L;
178         fieldFinal2 = 0L;
179         fieldFinal3 = new BitSet();
180         long field1 = 1L;
181         field1 = field1; // violation 'Reference to instance variable 'field1' needs "this.".'
182     }
183 
184     InputRequireThisValidateOnlyOverlappingTrue(boolean flag, String name) {
185         fieldFinal1 = 0L;
186         fieldFinal2 = 0L;
187         fieldFinal3 = new BitSet();
188         long field1 = 1L;
189         field1 = field1; // violation 'Reference to instance variable 'field1' needs "this.".'
190         return;
191     }
192 
193     void foo18() {
194         field1 = "Hello";
195     }
196 
197     void foo19(String field1) {
198         field1 = "Hello";
199     }
200 
201     void foo20() {
202         boolean foo21 = this.foo21("");
203         if (foo21) {
204 
205         }
206     }
207 
208     boolean foo21(String s) {
209         return true;
210     }
211 
212     void foo22() {
213         long fieldFinal1 = 1L;
214 //        this.fieldFinal1 = fieldFinal1; <- cannot assign value to a final variable
215         fieldFinal1 = fieldFinal1;
216     }
217 
218     void foo23() {
219         field1 = "Hello!";
220     }
221 
222     void foo24() {
223         String field1 = "Hello";
224         field1 = "Java";
225         this.booleanField = true;
226         this.booleanField = booleanField;
227     }
228 
229     void foo25() {
230         try {
231             if (true) {
232                 String field1 = "Hello, World!";
233                 if (true) {
234                     field1 = new String();
235                 }
236                 else {
237                     field1 = new String();
238                 }
239             }
240         }
241         catch (Exception ex) {
242 
243         }
244     }
245 
246     void foo26(String field1) {
247         field1 = field1.replace('/', '*'); // violation '.* variable 'field1' needs "this.".'
248     }
249 
250     void foo27() {
251         int intField = -1;
252         if (intField == -1) {
253             intField = 20;
254         }
255         else {
256             intField = this.intField / 100;
257         }
258     }
259 
260     void foo28() {
261         boolean booleanField = true;
262         booleanField = !booleanField; // violation '.* variable 'booleanField' needs "this.".'
263     }
264 
265     static void foo29(String field1) {
266 //this.field1 = true ? "field1" : field1; compile error: cannot be referenced from a static context
267         field1 = true ? "field1" : field1;
268     }
269 
270     void foo30(String field1) {
271         field1 = true ? "field1" : field1; // violation '.* variable 'field1' needs "this.".'
272     }
273 
274     void foo31(String field1) {
275         field1 = this.field1;
276     }
277 
278     String foo32(String field1) {
279         field1 = addSuf2F(field1); //no violation! modification of parameter which is returned
280         return field1;
281     }
282 
283     String foo33(String field1) {
284         field1 = addSuf2F(field1); // violation '.* variable 'field1' needs "this.".'
285         return "New String";
286     }
287 
288     String foo34(String field1) {
289         field1 = field1.replace('A', 'B');
290         if (field1.contains("C")) {
291             return field1;
292         }
293         else {
294             return field1 + 'C';
295         }
296     }
297 
298     String foo35() {
299         String field1 = "values";
300         field1 = field1;
301         return field1;
302     }
303 
304     void foo36(String field1) {
305         field1 = field1.replace('/', '*');
306         field1 = this.field1;
307     }
308 
309     String foo37(String field1) {
310         field1 += "suffix"; // violation 'Reference to instance variable 'field1' needs "this.".'
311         return "New string";
312     }
313 
314     static void foo38() {
315 //        this.fieldStatic = ""; <-- compile-time error: cannot be referenced from a static context
316         fieldStatic = "";
317     }
318 
319     static void foo39() {
320         boolean booleanField = true;
321 //this.booleanField = !booleanField;  compile-time error: cannot be referenced from a static context
322         booleanField = !booleanField;
323     }
324 
325     static void foo40() {
326         try {
327             boolean booleanField = true;
328 //this.booleanField = !booleanField; compile-time error: cannot be referenced from a static context
329             booleanField = !booleanField;
330         }
331         catch (Exception e) {}
332     }
333 
334     static {
335         fieldStatic = "";
336     }
337 
338 //    {
339 //        if we assign variable to a final variable in initialization block,
340 //        it will lead to compile-time error in constructor block: variable migh have been
341 //        already assigned
342 
343 //        fieldFinal1 = 1;
344 //    }
345 
346     {
347         String field1 = "";
348         field1 = field1; // violation 'Reference to instance variable 'field1' needs "this.".'
349     }
350 
351     static {
352         fieldStatic = "";
353         String field1 = "";
354 //        this.field1 = field1; <-- compile-time error: cannot be referenced from a static context
355         field1 = field1;
356     }
357 
358     void foo41(long fieldFinal1) {
359 //        this.fieldFinal1 = 1L; <- cannot assign value to a final variable
360         fieldFinal1 = fieldFinal1;
361     }
362 
363     void foo42(String fieldStatic) {
364         this.fieldStatic = fieldStatic;
365     }
366 
367     void foo43(String fieldStatic) {
368         fieldStatic = fieldStatic;
369     }
370 
371     void foo44(String fieldStatic) {
372         fieldStatic = this.fieldStatic;
373     }
374 
375     private String servletRelativeAction;
376 
377     public String getServletRelativeAction() {
378         return this.servletRelativeAction;
379     }
380 
381     public String foo45() {
382         String servletRelativeAction = getServletRelativeAction();
383         if (true) {
384             return processAction("action");
385         }
386         else if (servletRelativeAction.endsWith("/")) {
387             if (servletRelativeAction.startsWith("/")) {
388                 servletRelativeAction = "" + servletRelativeAction;
389             }
390         }
391         servletRelativeAction = "servletRelativeAction";
392         return processAction(servletRelativeAction);
393     }
394 
395     private String processAction(String servletRelativeAction) {
396         return "";
397     }
398 
399     public InputRequireThisValidateOnlyOverlappingTrue(long fieldFinal1, long fieldFinal2,
400                                                        BitSet fieldFinal3, boolean booleanField) {
401         this.fieldFinal1 = fieldFinal1;
402         this.fieldFinal2 = fieldFinal2;
403         this.fieldFinal3 = fieldFinal3;
404 
405         booleanField = this.booleanField;
406         if (booleanField) {
407             booleanField = "Hello, World!".equals("Hello, Checkstyle!");
408         }
409 
410         this.booleanField = booleanField;
411     }
412 
413     void foo46(boolean booleanField) {
414         booleanField = this.booleanField;
415         if (booleanField) {
416             booleanField = "Hello, World!".equals("Hello, Checkstyle!");
417         }
418 
419         this.booleanField = booleanField;
420     }
421 
422     static void foo47(String fieldStatic) {
423         fieldStatic = "Andrei";
424     }
425 
426     void foo48(long fieldFinal1) {
427         fieldFinal1 = 1L;
428     }
429 
430     private boolean foo49(boolean booleanField) {
431         boolean suppressionSourceExists = true;
432         try {
433 
434         }
435         catch (Exception ex) {
436             suppressionSourceExists = false;
437         }
438         finally {
439             if (booleanField) {
440                 try {
441                 }
442                 catch (Exception ignored) {
443                     this.booleanField = false;
444                 }
445             }
446         }
447         return suppressionSourceExists;
448     }
449 
450     void foo50(String fieldStatic) {
451         fieldStatic = fieldStatic;
452     }
453 
454     void foo51(String methodParam) {
455         fieldStatic = methodParam;
456     }
457 
458     void foo52(String fieldStatic) {
459         fieldStatic += fieldStatic;
460     }
461 
462     void foo53(String fieldStatic) {
463         fieldStatic += fieldStatic;
464     }
465 
466     void foo54(String methodParam) {
467         fieldStatic += methodParam;
468     }
469 
470     void foo55(String methodParam) {
471         fieldStatic += fieldStatic;
472     }
473 
474     void foo56(boolean booleanField) { booleanField = this.booleanField; }
475 
476     boolean foo57(boolean booleanField) { booleanField = !booleanField;  return booleanField; }
477 }