88 import java.lang.invoke.MethodType; |
88 import java.lang.invoke.MethodType; |
89 import java.util.HashMap; |
89 import java.util.HashMap; |
90 import java.util.Map; |
90 import java.util.Map; |
91 |
91 |
92 class StaticClassIntrospector extends FacetIntrospector { |
92 class StaticClassIntrospector extends FacetIntrospector { |
93 StaticClassIntrospector(Class<?> clazz) { |
93 StaticClassIntrospector(final Class<?> clazz) { |
94 super(clazz, false); |
94 super(clazz, false); |
95 } |
95 } |
96 |
96 |
97 @Override |
97 @Override |
98 Map<String, MethodHandle> getInnerClassGetters() { |
98 Map<String, MethodHandle> getInnerClassGetters() { |
99 final Map<String, MethodHandle> map = new HashMap<>(); |
99 final Map<String, MethodHandle> map = new HashMap<>(); |
100 for(Class<?> innerClass: membersLookup.getInnerClasses()) { |
100 for(final Class<?> innerClass: membersLookup.getInnerClasses()) { |
101 map.put(innerClass.getSimpleName(), editMethodHandle(MethodHandles.constant(StaticClass.class, |
101 map.put(innerClass.getSimpleName(), editMethodHandle(MethodHandles.constant(StaticClass.class, |
102 StaticClass.forClass(innerClass)))); |
102 StaticClass.forClass(innerClass)))); |
103 } |
103 } |
104 return map; |
104 return map; |
105 } |
105 } |
106 |
106 |
107 @Override |
107 @Override |
108 MethodHandle editMethodHandle(MethodHandle mh) { |
108 MethodHandle editMethodHandle(final MethodHandle mh) { |
109 return editStaticMethodHandle(mh); |
109 return editStaticMethodHandle(mh); |
110 } |
110 } |
111 |
111 |
112 static MethodHandle editStaticMethodHandle(MethodHandle mh) { |
112 static MethodHandle editStaticMethodHandle(final MethodHandle mh) { |
113 return dropReceiver(mh, Object.class); |
113 return dropReceiver(mh, Object.class); |
114 } |
114 } |
115 |
115 |
116 static MethodHandle editConstructorMethodHandle(MethodHandle cmh) { |
116 static MethodHandle editConstructorMethodHandle(final MethodHandle cmh) { |
117 return dropReceiver(cmh, StaticClass.class); |
117 return dropReceiver(cmh, StaticClass.class); |
118 } |
118 } |
119 |
119 |
120 private static MethodHandle dropReceiver(final MethodHandle mh, final Class<?> receiverClass) { |
120 private static MethodHandle dropReceiver(final MethodHandle mh, final Class<?> receiverClass) { |
121 MethodHandle newHandle = MethodHandles.dropArguments(mh, 0, receiverClass); |
121 MethodHandle newHandle = MethodHandles.dropArguments(mh, 0, receiverClass); |