117 // ignore
118 }
119 c = c.getSuperclass();
120 }
121 if (internalName != null) {
122 fieldInfos.add(new FieldInfo(fieldName, fieldDescriptor, internalName));
123 } else {
124 throw new InternalError("Could not locate field " + fieldName + " for event type" + type.getName());
125 }
126 }
127 }
128 return fieldInfos;
129 }
130
131 public Class<? extends EventHandler> makeEventHandlerClass() {
132 buildClassInfo();
133 buildConstructor();
134 buildWriteMethod();
135 byte[] bytes = classWriter.toByteArray();
136 ASMToolkit.logASM(className, bytes);
137 return SecuritySupport.defineClass(className, bytes, Event.class.getClassLoader()).asSubclass(EventHandler.class);
138 }
139
140 public static EventHandler instantiateEventHandler(Class<? extends EventHandler> handlerClass, boolean registered, EventType eventType, EventControl eventControl) throws Error {
141 final Constructor<?> cc;
142 try {
143 cc = handlerClass.getDeclaredConstructors()[0];
144 } catch (Exception e) {
145 throw (Error) new InternalError("Could not get handler constructor for " + eventType.getName()).initCause(e);
146 }
147 // Users should not be allowed to create instances of the event handler
148 // so we need to unlock it here.
149 SecuritySupport.setAccessible(cc);
150 try {
151 List<SettingInfo> settingInfos = eventControl.getSettingInfos();
152 Object[] arguments = new Object[3 + settingInfos.size()];
153 arguments[0] = registered;
154 arguments[1] = eventType;
155 arguments[2] = eventControl;
156 for (SettingInfo si : settingInfos) {
157 arguments[si.index + 3] = si.settingControl;
|
117 // ignore
118 }
119 c = c.getSuperclass();
120 }
121 if (internalName != null) {
122 fieldInfos.add(new FieldInfo(fieldName, fieldDescriptor, internalName));
123 } else {
124 throw new InternalError("Could not locate field " + fieldName + " for event type" + type.getName());
125 }
126 }
127 }
128 return fieldInfos;
129 }
130
131 public Class<? extends EventHandler> makeEventHandlerClass() {
132 buildClassInfo();
133 buildConstructor();
134 buildWriteMethod();
135 byte[] bytes = classWriter.toByteArray();
136 ASMToolkit.logASM(className, bytes);
137 return SecuritySupport.defineClass(EventHandler.class, bytes).asSubclass(EventHandler.class);
138 }
139
140 public static EventHandler instantiateEventHandler(Class<? extends EventHandler> handlerClass, boolean registered, EventType eventType, EventControl eventControl) throws Error {
141 final Constructor<?> cc;
142 try {
143 cc = handlerClass.getDeclaredConstructors()[0];
144 } catch (Exception e) {
145 throw (Error) new InternalError("Could not get handler constructor for " + eventType.getName()).initCause(e);
146 }
147 // Users should not be allowed to create instances of the event handler
148 // so we need to unlock it here.
149 SecuritySupport.setAccessible(cc);
150 try {
151 List<SettingInfo> settingInfos = eventControl.getSettingInfos();
152 Object[] arguments = new Object[3 + settingInfos.size()];
153 arguments[0] = registered;
154 arguments[1] = eventType;
155 arguments[2] = eventControl;
156 for (SettingInfo si : settingInfos) {
157 arguments[si.index + 3] = si.settingControl;
|