View Javadoc
1   package com.puppycrawl.tools.checkstyle.grammar.antlr4;
2   
3   import java.awt.*;
4   import java.lang.annotation.ElementType;
5   import java.lang.annotation.Target;
6   import java.lang.reflect.AnnotatedElement;
7   import java.util.List;
8   import java.util.Map;
9   import java.util.TreeSet;
10  
11  import javax.net.ssl.KeyManager;
12  
13  public class InputAntlr4AstRegressionNewTypeTree {
14          private static class Slot {
15          double sin2Phi = 2 * StrictMath.sin(1.618033988749895);
16          public int[] ci;
17      }
18  
19      private static class Transformer {
20  
21      }
22  
23      private static class Ef {
24          Transformer[] transformers = new Transformer[10];
25          static boolean forward = true;
26      }
27  
28      void goodMethod() {
29          Slot slot = new Slot();
30          slot.ci[5] = 10; // ok
31          slot.ci = new int[6]; // ok
32          double[] cZ = {1.1, 1.2}; // ok
33          final double   dnZ = slot.sin2Phi               * cZ[1]; // ok
34  
35          final Ef ef = new Ef();
36          final Transformer transformer =
37              ef.forward ? ef.transformers[ef.transformers.length - 1] // ok
38                      : ef.transformers[0]; // ok
39  
40      }
41  
42      void badMethod() {
43          Slot slot = new Slot();
44          slot.ci [5] = 10; // violation
45          slot.ci = new int [6]; // violation
46          double [] cZ = {1.1, 1.2}; // violation
47          final double   dnZ = slot.sin2Phi               * cZ [1]; // violation
48  
49          final Ef ef = new Ef();
50          final Transformer transformer =
51              ef.forward ? ef.transformers [ef.transformers.length - 1] // violation
52                      : ef.transformers [0]; // violation
53  
54          int[][
55                  ]
56                   a
57                    []
58                          [] ; // violation
59                  int[][
60                   ]
61                   b
62                   [] // violation
63                          [] ; // violation
64      }
65  
66      void varargLong(@I String @L [] @K [] @J ... vararg2) { } // ok
67      @SuppressWarnings("unused")
68      void withUpperBound(List<? extends int[][]> list) {}
69  
70      private static class SSLSecurity {
71          static KeyManager[] truncateArray(KeyManager[] kmaw,
72                                            KeyManager[] keyManagers) {
73              return null;
74          }
75      }
76  
77  
78      void method3(int x) {
79          KeyManager[] kmaw = null;
80           if (x == 1) {
81               kmaw = (javax.net.ssl.KeyManager[])
82                         SSLSecurity.truncateArray(kmaw,
83                             new javax.net.ssl.KeyManager [3]); // violation
84           }
85      }
86  
87      enum FPMethodArgs {
88  
89          IGNN,
90          IIGNN,
91          GNNII,
92          GNNC;
93  
94          public Class<?>[] getMethodArguments(boolean isFPType) {
95              Class<?> N = (isFPType) ? Float.TYPE : Integer.TYPE;
96              Class<?> G = (isFPType) ? Graphics2D.class : Graphics.class;
97              switch (this) {
98                  case IGNN:
99                      return new Class<?>[]{Integer.TYPE, G, N, N};
100                 case IIGNN:
101                     return new Class<?>[]{Integer.TYPE, Integer.TYPE, G, N, N};
102                 case GNNII:
103                     return new Class<?>[]{G, N, N, Integer.TYPE, Integer.TYPE};
104                 case GNNC:
105                     return new Class<?>[]{G, N, N, Character.TYPE};
106                 default:
107                     throw new RuntimeException("Unknown method arguments!");
108             }
109         }
110     }
111 
112     public static class IntData {
113         int[] xorData;
114 
115         IntData(Object srcPixel, Object xorPixel) {
116             this.xorData = (int[]) srcPixel; // violation
117             this.xorData = (int[]) xorPixel; // violation
118         }
119 
120         protected void xorPixel(Object pixData) {
121             int[] dstData = (int[]) pixData; // violation
122             for (int i = 0; i < dstData.length; i++) {
123                 dstData[i] ^= xorData[i];
124             }
125         }
126 
127         Object[] getXorData() {
128             return new Object[5];
129         }
130 
131         void method6() {
132             if (getXorData().length == 5
133                     && this.getXorData()[1] != IntData.class // ok
134                     || this.getXorData()[5] != IntData.class) {
135                 System.out.println(getXorData().length);
136             }
137         }
138 
139     }
140     protected TreeSet<byte []> sortedPrefixes = createTreeSet(); // violation
141 
142     TreeSet<byte[]> createTreeSet() { // ok
143         return null;
144     } // ok
145 
146     public Object newInstance(Object[] objects){
147             // Run constructor
148         InputAntlr4AstRegressionNewTypeTree tmpConstructor = null;
149         return tmpConstructor.newInstance((Object[])null);
150     }
151 
152     public TypeVariable<Class<String>>[] getTypeParameters() {
153         ClassRepository info = getGenericInfo();
154         if (info != null)
155             return (TypeVariable<Class<String>>[])info.getTypeParameters();
156         else
157             return (TypeVariable<Class<String>>[])new TypeVariable<?>[0];
158     }
159     class ClassRepository {
160 
161         public Object getTypeParameters() {
162             return null;
163         }
164     }
165     class TypeVariable<E> {
166 
167     }
168 
169     private ClassRepository getGenericInfo() {
170         return null;
171     }
172     String[] c, d[]; // ok
173     String [] e, f []; // violation
174 
175     public enum Stooge {
176         MOE, CURLY, LARRY,
177     }
178     static void checkArrayTypes1(ArrayTypes at, AnnotatedElement e) {
179         if (!(at.cls()[0]  == Map.class    &&
180               at.e()[0]    == Stooge.MOE  )) {
181 
182         }
183     }
184 
185     static class ArrayTypes {
186         Object[] cls;
187 
188         public Stooge[] e() {
189             return null;
190         }
191 
192 
193 
194         Object[] cls() {
195             return cls;
196         }
197 
198         public int[] a() {
199             return null;
200         }
201     }
202     int[][
203     ]
204      w
205      [] // violation
206             [] ; // violation
207     int[][
208      ]
209      z
210     [] // violation
211             [] ; // violation
212 
213     static class P {
214         private int x;
215 
216         public void set3(P p) {
217               synchronized (this) { // violation
218                   p.x = get()[0];
219               }
220           }
221 
222         public void set4(P p) {
223               synchronized(this) { // ok
224                   p.x = get()[0];
225               }
226           }
227 
228         private int[] get() {
229             return null;
230         }
231     }
232 
233     private @Nullable int array2 @Nullable [] @Nullable [];
234 }
235 
236 
237 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
238 @interface Nullable{}
239 
240 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
241 @interface I {}
242 
243 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
244 @interface J {}
245 
246 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
247 @interface K {}
248 
249 @Target({ElementType.TYPE_USE, ElementType.TYPE_PARAMETER})
250 @interface L {}