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);