diff --git a/core/src/main/java/org/jdbi/v3/core/mapper/reflect/ConstructorInstanceFactory.java b/core/src/main/java/org/jdbi/v3/core/mapper/reflect/ConstructorInstanceFactory.java index 04b19d1b6..962a746a3 100644 --- a/core/src/main/java/org/jdbi/v3/core/mapper/reflect/ConstructorInstanceFactory.java +++ b/core/src/main/java/org/jdbi/v3/core/mapper/reflect/ConstructorInstanceFactory.java @@ -27,7 +27,7 @@ import java.util.function.Supplier; import java.util.stream.Stream; -import org.jdbi.v3.core.internal.exceptions.Unchecked; +import org.jdbi.v3.core.internal.exceptions.Sneaky; import static java.util.Collections.synchronizedMap; import static java.util.Objects.requireNonNull; @@ -35,7 +35,7 @@ class ConstructorInstanceFactory extends InstanceFactory { private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); - private static final Map CONSTRUCTOR_CACHE = synchronizedMap(new WeakHashMap<>()); + private static final Map, ConstructorHandleAndTypes> CONSTRUCTOR_CACHE = synchronizedMap(new WeakHashMap<>()); private final Constructor constructor; private final List types; @@ -54,9 +54,14 @@ List getTypes() { return types; } + @SuppressWarnings("unchecked") @Override T newInstance(Object... params) { - return (T) Unchecked.function(constructorHandle::invokeWithArguments).apply(params); + try { + return (T) constructorHandle.invokeWithArguments(params); + } catch (Throwable e) { + throw Sneaky.throwAnyway(e); + } } @Override