1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.jexl3.internal.introspection;
19
20 import java.lang.reflect.Field;
21 import org.apache.commons.jexl3.introspection.JexlPropertyGet;
22
23
24
25
26 public final class FieldGetExecutor implements JexlPropertyGet {
27
28
29
30 private final Field field;
31
32
33
34
35
36
37
38
39
40 public static JexlPropertyGet discover(final Introspector is, final Class<?> clazz, final String identifier) {
41 if (identifier != null) {
42 final Field field = is.getField(clazz, identifier);
43 if (field != null) {
44 return new FieldGetExecutor(field);
45 }
46 }
47 return null;
48 }
49
50
51
52
53 private FieldGetExecutor(final Field theField) {
54 field = theField;
55 }
56
57 @Override
58 public Object invoke(final Object obj) throws Exception {
59 return field.get(obj);
60 }
61
62 @Override
63 public Object tryInvoke(final Object obj, final Object key) {
64 if (obj.getClass().equals(field.getDeclaringClass()) && key.equals(field.getName())) {
65 try {
66 return field.get(obj);
67 } catch (final IllegalAccessException xill) {
68 return Uberspect.TRY_FAILED;
69 }
70 }
71 return Uberspect.TRY_FAILED;
72 }
73
74 @Override
75 public boolean tryFailed(final Object rval) {
76 return rval == Uberspect.TRY_FAILED;
77 }
78
79 @Override
80 public boolean isCacheable() {
81 return true;
82 }
83
84 }