package io.vertx.ext.unit.impl;

import io.vertx.core.Handler;
import io.vertx.ext.unit.TestContext;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.function.Supplier;

Author:Julien Viet
/** * @author <a href="mailto:julien@julienviet.com">Julien Viet</a> */
public class Helper {
JVM hack to throw a throwable as unchecked.
Params:
  • throwable – the throwable to throw
/** * JVM hack to throw a throwable as unchecked. * * @param throwable the throwable to throw */
public static void uncheckedThrow(Throwable throwable) { Helper.<RuntimeException>throwIt(throwable); } private static <T extends Throwable> void throwIt(Throwable throwable) throws T { throw (T)throwable; } public static Handler<TestContext> invoker(Method method, Supplier<?> instance) { Class<?>[] paramTypes = method.getParameterTypes(); if (!(paramTypes.length == 0 || (paramTypes.length == 1 && paramTypes[0].equals(TestContext.class)))) { throw new IllegalArgumentException("Incorrect method handler mapping " + method); } return context -> { try { Object o = instance.get(); if (paramTypes.length == 0) { method.invoke(o); } else { method.invoke(o, context); } } catch (IllegalAccessException e) { Helper.uncheckedThrow(e); } catch (InvocationTargetException e) { Helper.uncheckedThrow(e.getCause()); } }; } }