MCPcopy Index your code
hub / github.com/antlr/codebuff / ObjectModelAdaptor

Class ObjectModelAdaptor

output/java8/1.4.14/ObjectModelAdaptor.java:40–164  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38
39
40public class ObjectModelAdaptor implements ModelAdaptor {
41 protected static final Member INVALID_MEMBER;
42 static {
43 Member invalidMember;
44 try {
45 invalidMember = ObjectModelAdaptor.class.getDeclaredField("INVALID_MEMBER");
46 }
47 catch (NoSuchFieldException ex) {
48 invalidMember = null;
49 }
50 catch (SecurityException ex) {
51 invalidMember = null;
52 }
53 INVALID_MEMBER = invalidMember;
54 }
55
56 protected static final Map<Class<?>, Map<String, Member>> membersCache = new HashMap<Class<?>, Map<String, Member>>();
57
58 @Override
59 public synchronized Object getProperty(Interpreter interp, ST self, Object o, Object property, String propertyName) throws STNoSuchPropertyException {
60 if ( o==null ) {
61 throw new NullPointerException("o");
62 }
63 Class<?> c = o.getClass();
64 if ( property==null ) {
65 return throwNoSuchProperty(c, propertyName, null);
66 }
67 Member member = findMember(c, propertyName);
68 if ( member!=null ) {
69 try {
70 if ( member instanceof Method ) {
71 return ((Method)member).invoke(o);
72 }
73 else if ( member instanceof Field ) {
74 return ((Field)member).get(o);
75 }
76 }
77 catch (Exception e) {
78 throwNoSuchProperty(c, propertyName, e);
79 }
80 }
81 return throwNoSuchProperty(c, propertyName, null);
82 }
83
84 protected static Member findMember(Class<?> clazz, String memberName) {
85 if ( clazz==null ) {
86 throw new NullPointerException("clazz");
87 }
88 if ( memberName==null ) {
89 throw new NullPointerException("memberName");
90 }
91 synchronized (membersCache) {
92 Map<String, Member> members = membersCache.get(clazz);
93 Member member;
94 if ( members!=null ) {
95 member = members.get(memberName);
96 if ( member!=null ) {
97 return member!= INVALID_MEMBER ? member : null;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected