/*
 * EventHooke.java
 * 
 * Created on May 26, 2007, 3:12:11 PM
 * 
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.jruby.runtime;

import org.jruby.runtime.builtin.IRubyObject;

import java.util.Set;

Author:headius, hooligan495 Changed event hook to an enum that manages a collection of event handlers. There are now global event delgators for each event type. If a component is interested in being notified of an event they should register a handler with that event. one of the motivations of implementing the EventHook in this way is that we needed to handle modifying line numbers to be one based (and the RETURN type ine number for ruby needs to be offset by 2). If these rules ever change we can change them here.
/** * * @author headius * @author hooligan495 * Changed event hook to an enum that manages a collection of event handlers. * There are now global event delgators for each event type. If a component * is interested in being notified of an event they should register a handler * with that event. * one of the motivations of implementing the EventHook in this way is that we * needed to handle modifying line numbers to be one based (and the RETURN type * ine number for ruby needs to be offset by 2). If these rules ever change we * can change them here. * */
public abstract class EventHook { public void event(ThreadContext context, RubyEvent event, String file, int line, String name, IRubyObject type){ eventHandler(context, event.getName(), file, line, name, type); } public abstract void eventHandler(ThreadContext context, String eventName, String file, int line, String name, IRubyObject type); public abstract boolean isInterestedInEvent(RubyEvent event); public Set<RubyEvent> eventSet() { return RubyEvent.ALL_EVENTS; } public boolean needsDebug() { return eventSet().stream().anyMatch(evt -> evt.requiresDebug()); } }