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

Class ObjectModelAdaptor

output/java8/1.4.13/ObjectModelAdaptor.java:40–155  ·  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 @Override
58 public synchronized Object getProperty(Interpreter interp, ST self, Object o, Object property, String propertyName) throws STNoSuchPropertyException {
59 if ( o==null ) {
60 throw new NullPointerException("o");
61 }
62 Class<?> c = o.getClass();
63 if ( property==null ) {
64 return throwNoSuchProperty(c, propertyName, null);
65 }
66 Member member = findMember(c, propertyName);
67 if ( member!=null ) {
68 try {
69 if ( member instanceof Method ) {
70 return ((Method)member).invoke(o);
71 }
72 else if ( member instanceof Field ) {
73 return ((Field)member).get(o);
74 }
75 }
76 catch (Exception e) {
77 throwNoSuchProperty(c, propertyName, e);
78 }
79 }
80 return throwNoSuchProperty(c, propertyName, null);
81 }
82
83 protected static Member findMember(Class<?> clazz, String memberName) {
84 if ( clazz==null ) {
85 throw new NullPointerException("clazz");
86 }
87 if ( memberName==null ) {
88 throw new NullPointerException("memberName");
89 }
90 synchronized (membersCache) {
91 Map<String, Member> members = membersCache.get(clazz);
92 Member member;
93 if ( members!=null ) {
94 member = members.get(memberName);
95 if ( member!=null ) {
96 return member!= INVALID_MEMBER ? member : null;
97 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected