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