1 package net.sourceforge.pmd.typeresolution;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNull;
5
6 import java.io.InputStream;
7 import java.io.InputStreamReader;
8 import java.util.ArrayList;
9 import java.util.List;
10
11 import net.sourceforge.pmd.lang.LanguageVersion;
12 import net.sourceforge.pmd.lang.LanguageVersionHandler;
13 import net.sourceforge.pmd.lang.java.ast.ASTAllocationExpression;
14 import net.sourceforge.pmd.lang.java.ast.ASTBooleanLiteral;
15 import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceDeclaration;
16 import net.sourceforge.pmd.lang.java.ast.ASTClassOrInterfaceType;
17 import net.sourceforge.pmd.lang.java.ast.ASTCompilationUnit;
18 import net.sourceforge.pmd.lang.java.ast.ASTExpression;
19 import net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration;
20 import net.sourceforge.pmd.lang.java.ast.ASTFormalParameter;
21 import net.sourceforge.pmd.lang.java.ast.ASTImportDeclaration;
22 import net.sourceforge.pmd.lang.java.ast.ASTLiteral;
23 import net.sourceforge.pmd.lang.java.ast.ASTNullLiteral;
24 import net.sourceforge.pmd.lang.java.ast.ASTReferenceType;
25 import net.sourceforge.pmd.lang.java.ast.ASTStatementExpression;
26 import net.sourceforge.pmd.lang.java.ast.ASTType;
27 import net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration;
28 import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclarator;
29 import net.sourceforge.pmd.lang.java.ast.ASTVariableDeclaratorId;
30 import net.sourceforge.pmd.lang.java.ast.TypeNode;
31 import net.sourceforge.pmd.lang.java.typeresolution.ClassTypeResolver;
32 import net.sourceforge.pmd.typeresolution.testdata.AnonymousInnerClass;
33 import net.sourceforge.pmd.typeresolution.testdata.ArrayListFound;
34 import net.sourceforge.pmd.typeresolution.testdata.ExtraTopLevelClass;
35 import net.sourceforge.pmd.typeresolution.testdata.InnerClass;
36 import net.sourceforge.pmd.typeresolution.testdata.Literals;
37 import net.sourceforge.pmd.typeresolution.testdata.Operators;
38 import net.sourceforge.pmd.typeresolution.testdata.Promotion;
39
40 import org.jaxen.JaxenException;
41 import org.junit.Test;
42
43
44 public class ClassTypeResolverTest {
45
46 @Test
47 public void testClassNameExists() {
48 ClassTypeResolver classTypeResolver = new ClassTypeResolver();
49 assertEquals(true, classTypeResolver.classNameExists("java.lang.System"));
50 assertEquals(false, classTypeResolver.classNameExists("im.sure.that.this.does.not.Exist"));
51 assertEquals(true, classTypeResolver.classNameExists("java.awt.List"));
52 }
53
54 @Test
55 public void acceptanceTest() {
56 ASTCompilationUnit acu = parseAndTypeResolveForClass(ArrayListFound.class);
57 assertEquals(ArrayListFound.class, acu.getFirstDescendantOfType(ASTTypeDeclaration.class).getType());
58 assertEquals(ArrayListFound.class, acu.getFirstDescendantOfType(ASTClassOrInterfaceDeclaration.class).getType());
59 ASTImportDeclaration id = acu.getFirstDescendantOfType(ASTImportDeclaration.class);
60 assertEquals("java.util", id.getPackage().getName());
61 assertEquals(java.util.ArrayList.class, id.getType());
62 assertEquals(ArrayList.class, acu.getFirstDescendantOfType(ASTClassOrInterfaceType.class).getType());
63 assertEquals(ArrayList.class, acu.getFirstDescendantOfType(ASTReferenceType.class).getType());
64 assertEquals(ArrayList.class, acu.getFirstDescendantOfType(ASTType.class).getType());
65 assertEquals(ArrayList.class, acu.getFirstDescendantOfType(ASTVariableDeclaratorId.class).getType());
66 assertEquals(ArrayList.class, acu.getFirstDescendantOfType(ASTVariableDeclarator.class).getType());
67 assertEquals(ArrayList.class, acu.getFirstDescendantOfType(ASTFieldDeclaration.class).getType());
68 }
69
70 @Test
71 public void testExtraTopLevelClass() throws ClassNotFoundException {
72 ASTCompilationUnit acu = parseAndTypeResolveForClass(ExtraTopLevelClass.class);
73 Class<?> theExtraTopLevelClass = Class.forName("net.sourceforge.pmd.typeresolution.testdata.TheExtraTopLevelClass");
74
75 ASTTypeDeclaration typeDeclaration = (ASTTypeDeclaration)acu.jjtGetChild(1);
76 assertEquals(ExtraTopLevelClass.class, typeDeclaration.getType());
77 assertEquals(ExtraTopLevelClass.class,
78 typeDeclaration.getFirstDescendantOfType(ASTClassOrInterfaceDeclaration.class).getType());
79
80 typeDeclaration = (ASTTypeDeclaration)acu.jjtGetChild(2);
81 assertEquals(theExtraTopLevelClass, typeDeclaration.getType());
82 assertEquals(theExtraTopLevelClass,
83 typeDeclaration.getFirstDescendantOfType(ASTClassOrInterfaceDeclaration.class).getType());
84 }
85
86 @Test
87 public void testInnerClass() throws ClassNotFoundException {
88 ASTCompilationUnit acu = parseAndTypeResolveForClass(InnerClass.class);
89 Class<?> theInnerClass = Class.forName("net.sourceforge.pmd.typeresolution.testdata.InnerClass$TheInnerClass");
90
91 ASTTypeDeclaration typeDeclaration = acu.getFirstDescendantOfType(ASTTypeDeclaration.class);
92 assertEquals(InnerClass.class, typeDeclaration.getType());
93 ASTClassOrInterfaceDeclaration outerClassDeclaration = typeDeclaration.getFirstDescendantOfType(ASTClassOrInterfaceDeclaration.class);
94 assertEquals(InnerClass.class, outerClassDeclaration.getType());
95
96 assertEquals(theInnerClass,
97 outerClassDeclaration.getFirstDescendantOfType(ASTClassOrInterfaceDeclaration.class).getType());
98
99 ASTFormalParameter formalParameter = typeDeclaration.getFirstDescendantOfType(ASTFormalParameter.class);
100 assertEquals(theInnerClass, formalParameter.getTypeNode().getType());
101 }
102
103 @Test
104 public void testAnonymousInnerClass() throws ClassNotFoundException {
105 ASTCompilationUnit acu = parseAndTypeResolveForClass(AnonymousInnerClass.class);
106 Class<?> theAnonymousInnerClass = Class.forName("net.sourceforge.pmd.typeresolution.testdata.AnonymousInnerClass$1");
107
108 ASTTypeDeclaration typeDeclaration = acu.getFirstDescendantOfType(ASTTypeDeclaration.class);
109 assertEquals(AnonymousInnerClass.class, typeDeclaration.getType());
110 ASTClassOrInterfaceDeclaration outerClassDeclaration = typeDeclaration.getFirstDescendantOfType(ASTClassOrInterfaceDeclaration.class);
111 assertEquals(AnonymousInnerClass.class, outerClassDeclaration.getType());
112
113 assertEquals(theAnonymousInnerClass,
114 outerClassDeclaration.getFirstDescendantOfType(ASTAllocationExpression.class).getType());
115 }
116
117 @Test
118 @SuppressWarnings("unchecked")
119 public void testLiterals() throws JaxenException {
120 ASTCompilationUnit acu = parseAndTypeResolveForClass(Literals.class);
121 List<ASTLiteral> literals = acu.findChildNodesWithXPath("//Literal");
122 int index = 0;
123
124
125 assertEquals(0, literals.get(index).jjtGetNumChildren());
126 assertEquals(String.class, literals.get(index++).getType());
127
128
129 assertEquals(Boolean.TYPE, literals.get(index).getFirstDescendantOfType(ASTBooleanLiteral.class).getType());
130 assertEquals(Boolean.TYPE, literals.get(index++).getType());
131
132
133 assertEquals(Boolean.TYPE, literals.get(index).getFirstDescendantOfType(ASTBooleanLiteral.class).getType());
134 assertEquals(Boolean.TYPE, literals.get(index++).getType());
135
136
137 assertNull(literals.get(index).getFirstDescendantOfType(ASTNullLiteral.class).getType());
138 assertNull(literals.get(index++).getType());
139
140
141 assertEquals(0, literals.get(index).jjtGetNumChildren());
142 assertEquals(Integer.TYPE, literals.get(index++).getType());
143
144
145 assertEquals(0, literals.get(index).jjtGetNumChildren());
146 assertEquals(Integer.TYPE, literals.get(index++).getType());
147
148
149 assertEquals(0, literals.get(index).jjtGetNumChildren());
150 assertEquals(Integer.TYPE, literals.get(index++).getType());
151
152
153 assertEquals(0, literals.get(index).jjtGetNumChildren());
154 assertEquals(Integer.TYPE, literals.get(index++).getType());
155
156
157 assertEquals(0, literals.get(index).jjtGetNumChildren());
158 assertEquals(Integer.TYPE, literals.get(index++).getType());
159
160
161 assertEquals(0, literals.get(index).jjtGetNumChildren());
162 assertEquals(Integer.TYPE, literals.get(index++).getType());
163
164
165 assertEquals(0, literals.get(index).jjtGetNumChildren());
166 assertEquals(Integer.TYPE, literals.get(index++).getType());
167
168
169 assertEquals(0, literals.get(index).jjtGetNumChildren());
170 assertEquals(Integer.TYPE, literals.get(index++).getType());
171
172
173 assertEquals(0, literals.get(index).jjtGetNumChildren());
174 assertEquals(Integer.TYPE, literals.get(index++).getType());
175
176
177 assertEquals(0, literals.get(index).jjtGetNumChildren());
178 assertEquals(Character.TYPE, literals.get(index++).getType());
179
180
181 assertEquals(0, literals.get(index).jjtGetNumChildren());
182 assertEquals(Integer.TYPE, literals.get(index++).getType());
183
184
185 assertEquals(0, literals.get(index).jjtGetNumChildren());
186 assertEquals(Integer.TYPE, literals.get(index++).getType());
187
188
189 assertEquals(0, literals.get(index).jjtGetNumChildren());
190 assertEquals(Integer.TYPE, literals.get(index++).getType());
191
192
193 assertEquals(0, literals.get(index).jjtGetNumChildren());
194 assertEquals(Character.TYPE, literals.get(index++).getType());
195
196
197 assertEquals(0, literals.get(index).jjtGetNumChildren());
198 assertEquals(Integer.TYPE, literals.get(index++).getType());
199
200
201 assertEquals(0, literals.get(index).jjtGetNumChildren());
202 assertEquals(Integer.TYPE, literals.get(index++).getType());
203
204
205 assertEquals(0, literals.get(index).jjtGetNumChildren());
206 assertEquals(Integer.TYPE, literals.get(index++).getType());
207
208
209 assertEquals(0, literals.get(index).jjtGetNumChildren());
210 assertEquals(Long.TYPE, literals.get(index++).getType());
211
212
213 assertEquals(0, literals.get(index).jjtGetNumChildren());
214 assertEquals(Long.TYPE, literals.get(index++).getType());
215
216
217 assertEquals(0, literals.get(index).jjtGetNumChildren());
218 assertEquals(Long.TYPE, literals.get(index++).getType());
219
220
221 assertEquals(0, literals.get(index).jjtGetNumChildren());
222 assertEquals(Character.TYPE, literals.get(index++).getType());
223
224
225 assertEquals(0, literals.get(index).jjtGetNumChildren());
226 assertEquals(Float.TYPE, literals.get(index++).getType());
227
228
229 assertEquals(0, literals.get(index).jjtGetNumChildren());
230 assertEquals(Float.TYPE, literals.get(index++).getType());
231
232
233 assertEquals(0, literals.get(index).jjtGetNumChildren());
234 assertEquals(Float.TYPE, literals.get(index++).getType());
235
236
237 assertEquals(0, literals.get(index).jjtGetNumChildren());
238 assertEquals(Integer.TYPE, literals.get(index++).getType());
239
240
241 assertEquals(0, literals.get(index).jjtGetNumChildren());
242 assertEquals(Character.TYPE, literals.get(index++).getType());
243
244
245 assertEquals(0, literals.get(index).jjtGetNumChildren());
246 assertEquals(Double.TYPE, literals.get(index++).getType());
247
248
249 assertEquals(0, literals.get(index).jjtGetNumChildren());
250 assertEquals(Double.TYPE, literals.get(index++).getType());
251
252
253 assertEquals(0, literals.get(index).jjtGetNumChildren());
254 assertEquals(Double.TYPE, literals.get(index++).getType());
255
256
257 assertEquals(0, literals.get(index).jjtGetNumChildren());
258 assertEquals(Integer.TYPE, literals.get(index++).getType());
259
260
261 assertEquals(0, literals.get(index).jjtGetNumChildren());
262 assertEquals(Character.TYPE, literals.get(index++).getType());
263
264
265 assertEquals("All literals not tested", index, literals.size());
266 }
267
268 @Test
269 @SuppressWarnings("unchecked")
270 public void testUnaryNumericPromotion() throws JaxenException {
271 ASTCompilationUnit acu = parseAndTypeResolveForClass(Promotion.class);
272 List<ASTExpression> expressions = acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'unaryNumericPromotion']]//Expression[UnaryExpression]");
273 int index = 0;
274
275 assertEquals(Integer.TYPE, expressions.get(index++).getType());
276 assertEquals(Integer.TYPE, expressions.get(index++).getType());
277 assertEquals(Integer.TYPE, expressions.get(index++).getType());
278 assertEquals(Integer.TYPE, expressions.get(index++).getType());
279 assertEquals(Long.TYPE, expressions.get(index++).getType());
280 assertEquals(Float.TYPE, expressions.get(index++).getType());
281 assertEquals(Double.TYPE, expressions.get(index++).getType());
282
283
284 assertEquals("All expressions not tested", index, expressions.size());
285 }
286
287 @Test
288 @SuppressWarnings("unchecked")
289 public void testBinaryNumericPromotion() throws JaxenException {
290 ASTCompilationUnit acu = parseAndTypeResolveForClass(Promotion.class);
291 List<ASTExpression> expressions = acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'binaryNumericPromotion']]//Expression[AdditiveExpression]");
292 int index = 0;
293
294
295 assertEquals(Integer.TYPE, expressions.get(index++).getType());
296 assertEquals(Integer.TYPE, expressions.get(index++).getType());
297 assertEquals(Integer.TYPE, expressions.get(index++).getType());
298 assertEquals(Integer.TYPE, expressions.get(index++).getType());
299 assertEquals(Long.TYPE, expressions.get(index++).getType());
300 assertEquals(Float.TYPE, expressions.get(index++).getType());
301 assertEquals(Double.TYPE, expressions.get(index++).getType());
302
303 assertEquals(Integer.TYPE, expressions.get(index++).getType());
304 assertEquals(Integer.TYPE, expressions.get(index++).getType());
305 assertEquals(Integer.TYPE, expressions.get(index++).getType());
306 assertEquals(Integer.TYPE, expressions.get(index++).getType());
307 assertEquals(Long.TYPE, expressions.get(index++).getType());
308 assertEquals(Float.TYPE, expressions.get(index++).getType());
309 assertEquals(Double.TYPE, expressions.get(index++).getType());
310
311 assertEquals(Integer.TYPE, expressions.get(index++).getType());
312 assertEquals(Integer.TYPE, expressions.get(index++).getType());
313 assertEquals(Integer.TYPE, expressions.get(index++).getType());
314 assertEquals(Integer.TYPE, expressions.get(index++).getType());
315 assertEquals(Long.TYPE, expressions.get(index++).getType());
316 assertEquals(Float.TYPE, expressions.get(index++).getType());
317 assertEquals(Double.TYPE, expressions.get(index++).getType());
318
319 assertEquals(Integer.TYPE, expressions.get(index++).getType());
320 assertEquals(Integer.TYPE, expressions.get(index++).getType());
321 assertEquals(Integer.TYPE, expressions.get(index++).getType());
322 assertEquals(Integer.TYPE, expressions.get(index++).getType());
323 assertEquals(Long.TYPE, expressions.get(index++).getType());
324 assertEquals(Float.TYPE, expressions.get(index++).getType());
325 assertEquals(Double.TYPE, expressions.get(index++).getType());
326
327 assertEquals(Long.TYPE, expressions.get(index++).getType());
328 assertEquals(Long.TYPE, expressions.get(index++).getType());
329 assertEquals(Long.TYPE, expressions.get(index++).getType());
330 assertEquals(Long.TYPE, expressions.get(index++).getType());
331 assertEquals(Long.TYPE, expressions.get(index++).getType());
332 assertEquals(Float.TYPE, expressions.get(index++).getType());
333 assertEquals(Double.TYPE, expressions.get(index++).getType());
334
335 assertEquals(Float.TYPE, expressions.get(index++).getType());
336 assertEquals(Float.TYPE, expressions.get(index++).getType());
337 assertEquals(Float.TYPE, expressions.get(index++).getType());
338 assertEquals(Float.TYPE, expressions.get(index++).getType());
339 assertEquals(Float.TYPE, expressions.get(index++).getType());
340 assertEquals(Float.TYPE, expressions.get(index++).getType());
341 assertEquals(Double.TYPE, expressions.get(index++).getType());
342
343 assertEquals(Double.TYPE, expressions.get(index++).getType());
344 assertEquals(Double.TYPE, expressions.get(index++).getType());
345 assertEquals(Double.TYPE, expressions.get(index++).getType());
346 assertEquals(Double.TYPE, expressions.get(index++).getType());
347 assertEquals(Double.TYPE, expressions.get(index++).getType());
348 assertEquals(Double.TYPE, expressions.get(index++).getType());
349 assertEquals(Double.TYPE, expressions.get(index++).getType());
350
351
352 assertEquals("All expressions not tested", index, expressions.size());
353 }
354
355 @Test
356 @SuppressWarnings("unchecked")
357 public void testBinaryStringPromotion() throws JaxenException {
358 ASTCompilationUnit acu = parseAndTypeResolveForClass(Promotion.class);
359 List<ASTExpression> expressions = acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'binaryStringPromotion']]//Expression");
360 int index = 0;
361
362 assertEquals(String.class, expressions.get(index++).getType());
363 assertEquals(String.class, expressions.get(index++).getType());
364 assertEquals(String.class, expressions.get(index++).getType());
365 assertEquals(String.class, expressions.get(index++).getType());
366 assertEquals(String.class, expressions.get(index++).getType());
367
368
369 assertEquals("All expressions not tested", index, expressions.size());
370 }
371
372 @Test
373 @SuppressWarnings("unchecked")
374 public void testUnaryLogicalOperators() throws JaxenException {
375 ASTCompilationUnit acu = parseAndTypeResolveForClass(Operators.class);
376 List<ASTExpression> expressions = acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'unaryLogicalOperators']]//Expression");
377 int index = 0;
378
379 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
380 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
381
382
383 assertEquals("All expressions not tested", index, expressions.size());
384 }
385
386 @Test
387 @SuppressWarnings("unchecked")
388 public void testBinaryLogicalOperators() throws JaxenException {
389 ASTCompilationUnit acu = parseAndTypeResolveForClass(Operators.class);
390 List<ASTExpression> expressions = acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'binaryLogicalOperators']]//Expression");
391 int index = 0;
392
393 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
394 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
395 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
396 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
397 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
398 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
399 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
400 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
401 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
402 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
403 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
404 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
405 assertEquals(Boolean.TYPE, expressions.get(index++).getType());
406
407
408 assertEquals("All expressions not tested", index, expressions.size());
409 }
410
411 @Test
412 @SuppressWarnings("unchecked")
413 public void testUnaryNumericOperators() throws JaxenException {
414 ASTCompilationUnit acu = parseAndTypeResolveForClass(Operators.class);
415 List<TypeNode> expressions = new ArrayList<TypeNode>();
416 expressions.addAll(acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'unaryNumericOperators']]//Expression"));
417 expressions.addAll(acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'unaryNumericOperators']]//PostfixExpression"));
418 expressions.addAll(acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'unaryNumericOperators']]//PreIncrementExpression"));
419 expressions.addAll(acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'unaryNumericOperators']]//PreDecrementExpression"));
420 int index = 0;
421
422 assertEquals(Integer.TYPE, expressions.get(index++).getType());
423 assertEquals(Integer.TYPE, expressions.get(index++).getType());
424 assertEquals(Double.TYPE, expressions.get(index++).getType());
425 assertEquals(Double.TYPE, expressions.get(index++).getType());
426 assertEquals(Double.TYPE, expressions.get(index++).getType());
427 assertEquals(Double.TYPE, expressions.get(index++).getType());
428
429
430 assertEquals("All expressions not tested", index, expressions.size());
431 }
432
433 @Test
434 @SuppressWarnings("unchecked")
435 public void testBinaryNumericOperators() throws JaxenException {
436 ASTCompilationUnit acu = parseAndTypeResolveForClass(Operators.class);
437 List<ASTExpression> expressions = acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'binaryNumericOperators']]//Expression");
438 int index = 0;
439
440 assertEquals(Integer.TYPE, expressions.get(index++).getType());
441 assertEquals(Integer.TYPE, expressions.get(index++).getType());
442 assertEquals(Integer.TYPE, expressions.get(index++).getType());
443 assertEquals(Integer.TYPE, expressions.get(index++).getType());
444 assertEquals(Integer.TYPE, expressions.get(index++).getType());
445 assertEquals(Integer.TYPE, expressions.get(index++).getType());
446 assertEquals(Integer.TYPE, expressions.get(index++).getType());
447 assertEquals(Integer.TYPE, expressions.get(index++).getType());
448
449
450 assertEquals("All expressions not tested", index, expressions.size());
451 }
452
453 @Test
454 @SuppressWarnings("unchecked")
455 public void testAssignmentOperators() throws JaxenException {
456 ASTCompilationUnit acu = parseAndTypeResolveForClass(Operators.class);
457 List<ASTStatementExpression> expressions = acu.findChildNodesWithXPath("//Block[preceding-sibling::MethodDeclarator[@Image = 'assignmentOperators']]//StatementExpression");
458 int index = 0;
459
460 assertEquals(Long.TYPE, expressions.get(index++).getType());
461 assertEquals(Long.TYPE, expressions.get(index++).getType());
462 assertEquals(Long.TYPE, expressions.get(index++).getType());
463 assertEquals(Long.TYPE, expressions.get(index++).getType());
464 assertEquals(Long.TYPE, expressions.get(index++).getType());
465 assertEquals(Long.TYPE, expressions.get(index++).getType());
466 assertEquals(Long.TYPE, expressions.get(index++).getType());
467 assertEquals(Long.TYPE, expressions.get(index++).getType());
468 assertEquals(Long.TYPE, expressions.get(index++).getType());
469 assertEquals(Long.TYPE, expressions.get(index++).getType());
470 assertEquals(Long.TYPE, expressions.get(index++).getType());
471 assertEquals(Long.TYPE, expressions.get(index++).getType());
472
473
474 assertEquals("All expressions not tested", index, expressions.size());
475 }
476
477 public static junit.framework.Test suite() {
478 return new junit.framework.JUnit4TestAdapter(ClassTypeResolverTest.class);
479 }
480
481
482
483
484 private ASTCompilationUnit parseAndTypeResolveForClass(Class<?> clazz) {
485 String sourceFile = clazz.getName().replace('.', '/') + ".java";
486 InputStream is = ClassTypeResolverTest.class.getClassLoader().getResourceAsStream(sourceFile);
487 if (is == null) {
488 throw new IllegalArgumentException("Unable to find source file " + sourceFile + " for " + clazz);
489 }
490 LanguageVersionHandler languageVersionHandler = LanguageVersion.JAVA_15.getLanguageVersionHandler();
491 ASTCompilationUnit acu = (ASTCompilationUnit)languageVersionHandler.getParser(languageVersionHandler.getDefaultParserOptions()).parse(null, new InputStreamReader(is));
492 languageVersionHandler.getSymbolFacade().start(acu);
493 languageVersionHandler.getTypeResolutionFacade(ClassTypeResolverTest.class.getClassLoader()).start(acu);
494 return acu;
495 }
496 }