< prev index next >

src/jdk.jfr/share/classes/jdk/jfr/internal/EventHandlerCreator.java

Print this page




 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;


< prev index next >