package org.testng.internal.invokers; import org.testng.IInvokedMethodListener; import org.testng.IInvokedMethodListener2; import org.testng.TestNGException; /** * Indicates whether a {@link InvokedMethodListenerMethod} is to be called on a simple or an * extended invoked method listener. All {@link IInvokedMethodListener}s are considered * {@link #SIMPLE_LISTENER}, instances of {@link IInvokedMethodListener2} are all considered * {@link #EXTENDED_LISTENER}. * * @author Ansgar Konermann */ enum InvokedMethodListenerSubtype { EXTENDED_LISTENER(IInvokedMethodListener2.class), SIMPLE_LISTENER(IInvokedMethodListener.class); private Class<? extends IInvokedMethodListener> m_matchingInterface; private InvokedMethodListenerSubtype(Class<? extends IInvokedMethodListener> listenerClass) { m_matchingInterface = listenerClass; } private boolean isInstance(IInvokedMethodListener listenerInstance) { return m_matchingInterface.isInstance(listenerInstance); } public static InvokedMethodListenerSubtype fromListener(IInvokedMethodListener listenerInstance) { if (EXTENDED_LISTENER.isInstance(listenerInstance)) { return EXTENDED_LISTENER; } else if (SIMPLE_LISTENER.isInstance(listenerInstance)) { return SIMPLE_LISTENER; } throw new TestNGException("Illegal " + IInvokedMethodListener.class.getSimpleName() + " instance: " + listenerInstance.getClass().getName() + "."); } }