Mercurial > hg > truffle
comparison graal/com.oracle.graal.api.meta.test/src/com/oracle/graal/api/meta/test/TestResolvedJavaType.java @ 7056:2841e28b5f41
added test for ResolvedJavaType.findFieldWithOffset
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Tue, 27 Nov 2012 20:32:52 +0100 |
parents | 7ac6e4c10e37 |
children | c37022832f1a |
comparison
equal
deleted
inserted
replaced
7055:ec2e696fc3bc | 7056:2841e28b5f41 |
---|---|
43 | 43 |
44 public TestResolvedJavaType() { | 44 public TestResolvedJavaType() { |
45 } | 45 } |
46 | 46 |
47 @Test | 47 @Test |
48 public void findInstanceFieldWithOffsetTest() { | |
49 for (Class c : classes) { | |
50 ResolvedJavaType type = runtime.lookupJavaType(c); | |
51 Set<Field> reflectionFields = getInstanceFields(c, true); | |
52 for (Field f : reflectionFields) { | |
53 ResolvedJavaField rf = lookupField(type.getInstanceFields(true), f); | |
54 assertNotNull(rf); | |
55 long offset = isStatic(f.getModifiers()) ? unsafe.staticFieldOffset(f) : unsafe.objectFieldOffset(f); | |
56 ResolvedJavaField result = type.findFieldWithOffset(offset); | |
57 assertNotNull(result); | |
58 assertTrue(fieldsEqual(f, result)); | |
59 } | |
60 } | |
61 } | |
62 | |
63 @Test | |
48 public void isInterfaceTest() { | 64 public void isInterfaceTest() { |
49 for (Class c : classes) { | 65 for (Class c : classes) { |
50 ResolvedJavaType type = runtime.lookupJavaType(c); | 66 ResolvedJavaType type = runtime.lookupJavaType(c); |
51 boolean expected = c.isInterface(); | 67 boolean expected = c.isInterface(); |
52 boolean actual = type.isInterface(); | 68 boolean actual = type.isInterface(); |
440 result.addAll(getInstanceFields(c.getSuperclass(), true)); | 456 result.addAll(getInstanceFields(c.getSuperclass(), true)); |
441 } | 457 } |
442 return result; | 458 return result; |
443 } | 459 } |
444 | 460 |
445 public static boolean containsField(ResolvedJavaField[] fields, Field f) { | 461 public static boolean fieldsEqual(Field f, ResolvedJavaField rjf) { |
462 return rjf.getDeclaringClass().isClass(f.getDeclaringClass()) && | |
463 rjf.getName().equals(f.getName()) && | |
464 rjf.getType().resolve(rjf.getDeclaringClass()).isClass(f.getType()); | |
465 } | |
466 | |
467 public static ResolvedJavaField lookupField(ResolvedJavaField[] fields, Field key) { | |
446 for (ResolvedJavaField rf : fields) { | 468 for (ResolvedJavaField rf : fields) { |
447 if (rf.getName().equals(f.getName()) && rf.getType().resolve(rf.getDeclaringClass()).isClass(f.getType())) { | 469 if (fieldsEqual(key, rf)) { |
448 assert f.getModifiers() == rf.getModifiers() : f; | 470 assert key.getModifiers() == rf.getModifiers() : key; |
449 return true; | 471 return rf; |
450 } | 472 } |
451 } | 473 } |
452 return false; | 474 return null; |
453 } | 475 } |
454 | 476 |
455 public static boolean containsField(Set<Field> fields, ResolvedJavaField rf) { | 477 public static Field lookupField(Set<Field> fields, ResolvedJavaField key) { |
456 for (Field f : fields) { | 478 for (Field f : fields) { |
457 if (f.getName().equals(rf.getName()) && rf.getType().resolve(rf.getDeclaringClass()).isClass(f.getType())) { | 479 if (fieldsEqual(f, key)) { |
458 assert rf.getModifiers() == f.getModifiers() : rf; | 480 assert key.getModifiers() == f.getModifiers() : key; |
459 return true; | 481 return f; |
460 } | 482 } |
461 } | 483 } |
462 return false; | 484 return null; |
463 } | 485 } |
464 | 486 |
465 private static boolean isHiddenFromReflection(ResolvedJavaField f) { | 487 private static boolean isHiddenFromReflection(ResolvedJavaField f) { |
466 if (f.getDeclaringClass().isClass(Throwable.class) && f.getName().equals("backtrace")) { | 488 if (f.getDeclaringClass().isClass(Throwable.class) && f.getName().equals("backtrace")) { |
467 return true; | 489 return true; |
478 ResolvedJavaType type = runtime.lookupJavaType(c); | 500 ResolvedJavaType type = runtime.lookupJavaType(c); |
479 for (boolean includeSuperclasses : new boolean[] {true, false}) { | 501 for (boolean includeSuperclasses : new boolean[] {true, false}) { |
480 Set<Field> expected = getInstanceFields(c, includeSuperclasses); | 502 Set<Field> expected = getInstanceFields(c, includeSuperclasses); |
481 ResolvedJavaField[] actual = type.getInstanceFields(includeSuperclasses); | 503 ResolvedJavaField[] actual = type.getInstanceFields(includeSuperclasses); |
482 for (Field f : expected) { | 504 for (Field f : expected) { |
483 assertTrue(containsField(actual, f)); | 505 assertNotNull(lookupField(actual, f)); |
484 } | 506 } |
485 for (ResolvedJavaField rf : actual) { | 507 for (ResolvedJavaField rf : actual) { |
486 if (!isHiddenFromReflection(rf)) { | 508 if (!isHiddenFromReflection(rf)) { |
487 assertEquals(containsField(expected, rf), !rf.isInternal()); | 509 assertEquals(lookupField(expected, rf) != null, !rf.isInternal()); |
488 } | 510 } |
489 } | 511 } |
490 | 512 |
491 // Test stability of getInstanceFields | 513 // Test stability of getInstanceFields |
492 ResolvedJavaField[] actual2 = type.getInstanceFields(includeSuperclasses); | 514 ResolvedJavaField[] actual2 = type.getInstanceFields(includeSuperclasses); |