1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.onami.factoryannotation;
20
21 import java.lang.reflect.AccessibleObject;
22 import java.security.AccessController;
23 import java.security.PrivilegedAction;
24
25 class AccessibleHelper<T extends AccessibleObject>
26 implements PrivilegedAction<T>
27 {
28
29 private final T object;
30
31 private final AccessibleHelperCallback<T> callback;
32
33 public AccessibleHelper( final T object, final AccessibleHelperCallback<T> callback )
34 {
35
36 this.object = object;
37 this.callback = callback;
38 }
39
40 public T run()
41 {
42 final boolean accessible = object.isAccessible();
43 if ( !accessible )
44 {
45 object.setAccessible( true );
46 }
47
48 callback.execute( object );
49
50 object.setAccessible( accessible );
51
52 return object;
53 }
54
55 public static final <T extends AccessibleObject> void executePrivileged( final T object,
56 final AccessibleHelperCallback<T> callback )
57 {
58
59 AccessController.doPrivileged( new AccessibleHelper<T>( object, callback ) );
60 }
61
62 static interface AccessibleHelperCallback<T>
63 {
64
65 void execute( T accessibleObject );
66
67 }
68
69 }