// Path: src/main/java/org/gwtproject/event/shared/Event.java
// public abstract class Event<H> {
//   /**
//    * Type class used to register events with an {@link EventBus}.
//    *
//    * @param <H> handler type
//    */
//   public static class Type<H> {
//     private static int nextHashCode;
//     private final int index;
// 
//     /** Constructor. */
//     public Type() {
//       index = ++nextHashCode;
//     }
// 
//     @Override
//     public final int hashCode() {
//       return index;
//     }
// 
//     @Override
//     public String toString() {
//       return "Event type";
//     }
//   }
// 
//   private Object source;
// 
//   /** Constructor. */
//   protected Event() {}
// 
//   /**
//    * Returns the {@link Type} used to register this event, allowing an {@link EventBus} to find
//    * handlers of the appropriate class.
//    *
//    * @return the type
//    */
//   public abstract Type<H> getAssociatedType();
// 
//   /**
//    * Returns the source for this event. The type and meaning of the source is arbitrary, and is most
//    * useful as a secondary key for handler registration. (See {@link EventBus#addHandlerToSource},
//    * which allows a handler to register for events of a particular type, tied to a particular
//    * source.)
//    *
//    * <p>Note that the source is actually set at dispatch time, e.g. via {@link
//    * EventBus#fireEventFromSource(Event, Object)}.
//    *
//    * @return object representing the source of this event
//    */
//   public Object getSource() {
//     return source;
//   }
// 
//   /**
//    * This is a method used primarily for debugging. It gives a string representation of the event
//    * details. This does not override the toString method because the compiler cannot always optimize
//    * toString out correctly. Event types should override as desired.
//    *
//    * @return a string representing the event's specifics.
//    */
//   public String toDebugString() {
//     String name = this.getClass().getName();
//     name = name.substring(name.lastIndexOf(".") + 1);
//     return "event: " + name + ":";
//   }
// 
//   /**
//    * The toString() for abstract event is overridden to avoid accidently including class literals in
//    * the compiled output. Use {@link Event} #toDebugString to get more information about the event.
//    */
//   @Override
//   public String toString() {
//     return "An event type";
//   }
// 
//   /**
//    * Implemented by subclasses to to invoke their handlers in a type safe manner. Intended to be
//    * called by {@link EventBus#fireEvent(Event)} or {@link EventBus#fireEventFromSource(Event,
//    * Object)}.
//    *
//    * @param handler handler
//    * @see EventBus#dispatchEvent(Event, Object)
//    */
//   protected abstract void dispatch(H handler);
// 
//   /**
//    * Set the source that triggered this event. Intended to be called by the {@link EventBus} during
//    * dispatch.
//    *
//    * @param source the source of this event.
//    * @see EventBus#fireEventFromSource(Event, Object)
//    * @see EventBus#setSourceOfEvent(Event, Object)
//    */
//   protected void setSource(Object source) {
//     this.source = source;
//   }
// }
// 
// Path: src/main/java/org/gwtproject/event/shared/HasHandlers.java
// public interface HasHandlers {
// 
//   /**
//    * Fires the given event to the handlers listening to the event's type.
//    *
//    * <p>Any exceptions thrown by handlers will be bundled into a {@link UmbrellaException} and then
//    * re-thrown after all handlers have completed. An exception thrown by a handler will not prevent
//    * other handlers from executing.
//    *
//    * @param event the event
//    */
//   void fireEvent(Event<?> event);
// }


import org.gwtproject.event.shared.Event;
import org.gwtproject.event.shared.HasHandlers;
    this.end = end;
  }

  // Because of type erasure, our static type is
  // wild carded, yet the "real" type should use our I param.
  @SuppressWarnings("unchecked")
  @Override
  public final Type<ShowRangeHandler<V>> getAssociatedType() {
    return (Type) TYPE;
  }

  /**
   * Gets the end of the range.
   *
   * @return end of the range
   */
  public V getEnd() {
    return end;
  }

  /**
   * Gets the start of the range.
   *
   * @return start of the range
   */
  public V getStart() {
    return start;
  }

  @Override
// Path: src/main/java/org/gwtproject/event/shared/Event.java
// public abstract class Event<H> {
//   /**
//    * Type class used to register events with an {@link EventBus}.
//    *
//    * @param <H> handler type
//    */
//   public static class Type<H> {
//     private static int nextHashCode;
//     private final int index;
// 
//     /** Constructor. */
//     public Type() {
//       index = ++nextHashCode;
//     }
// 
//     @Override
//     public final int hashCode() {
//       return index;
//     }
// 
//     @Override
//     public String toString() {
//       return "Event type";
//     }
//   }
// 
//   private Object source;
// 
//   /** Constructor. */
//   protected Event() {}
// 
//   /**
//    * Returns the {@link Type} used to register this event, allowing an {@link EventBus} to find
//    * handlers of the appropriate class.
//    *
//    * @return the type
//    */
//   public abstract Type<H> getAssociatedType();
// 
//   /**
//    * Returns the source for this event. The type and meaning of the source is arbitrary, and is most
//    * useful as a secondary key for handler registration. (See {@link EventBus#addHandlerToSource},
//    * which allows a handler to register for events of a particular type, tied to a particular
//    * source.)
//    *
//    * <p>Note that the source is actually set at dispatch time, e.g. via {@link
//    * EventBus#fireEventFromSource(Event, Object)}.
//    *
//    * @return object representing the source of this event
//    */
//   public Object getSource() {
//     return source;
//   }
// 
//   /**
//    * This is a method used primarily for debugging. It gives a string representation of the event
//    * details. This does not override the toString method because the compiler cannot always optimize
//    * toString out correctly. Event types should override as desired.
//    *
//    * @return a string representing the event's specifics.
//    */
//   public String toDebugString() {
//     String name = this.getClass().getName();
//     name = name.substring(name.lastIndexOf(".") + 1);
//     return "event: " + name + ":";
//   }
// 
//   /**
//    * The toString() for abstract event is overridden to avoid accidently including class literals in
//    * the compiled output. Use {@link Event} #toDebugString to get more information about the event.
//    */
//   @Override
//   public String toString() {
//     return "An event type";
//   }
// 
//   /**
//    * Implemented by subclasses to to invoke their handlers in a type safe manner. Intended to be
//    * called by {@link EventBus#fireEvent(Event)} or {@link EventBus#fireEventFromSource(Event,
//    * Object)}.
//    *
//    * @param handler handler
//    * @see EventBus#dispatchEvent(Event, Object)
//    */
//   protected abstract void dispatch(H handler);
// 
//   /**
//    * Set the source that triggered this event. Intended to be called by the {@link EventBus} during
//    * dispatch.
//    *
//    * @param source the source of this event.
//    * @see EventBus#fireEventFromSource(Event, Object)
//    * @see EventBus#setSourceOfEvent(Event, Object)
//    */
//   protected void setSource(Object source) {
//     this.source = source;
//   }
// }
// 
// Path: src/main/java/org/gwtproject/event/shared/HasHandlers.java
// public interface HasHandlers {
// 
//   /**
//    * Fires the given event to the handlers listening to the event's type.
//    *
//    * <p>Any exceptions thrown by handlers will be bundled into a {@link UmbrellaException} and then
//    * re-thrown after all handlers have completed. An exception thrown by a handler will not prevent
//    * other handlers from executing.
//    *
//    * @param event the event
//    */
//   void fireEvent(Event<?> event);
// }


// Path: logical/src/main/java/org/gwtproject/event/logical/shared/ShowRangeEvent.java
import org.gwtproject.event.shared.Event;
import org.gwtproject.event.shared.HasHandlers;

    this.end = end;
  }

  // Because of type erasure, our static type is
  // wild carded, yet the "real" type should use our I param.
  @SuppressWarnings("unchecked")
  @Override
  public final Type<ShowRangeHandler<V>> getAssociatedType() {
    return (Type) TYPE;
  }

  /**
   * Gets the end of the range.
   *
   * @return end of the range
   */
  public V getEnd() {
    return end;
  }

  /**
   * Gets the start of the range.
   *
   * @return start of the range
   */
  public V getStart() {
    return start;
  }

  @Override
  protected void dispatch(ShowRangeHandler<V> handler) {