From 53d3772d786d9f83e55ce7dcfbd3f9c6381fbdd8 Mon Sep 17 00:00:00 2001 From: Ondra Pelech Date: Wed, 31 Mar 2021 12:31:04 +0200 Subject: [PATCH] JVM: Don't use deprecated Class#newInstance() --- .../portablescala/reflect/InstantiatableClass.scala | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/jvm/src/main/scala/org/portablescala/reflect/InstantiatableClass.scala b/jvm/src/main/scala/org/portablescala/reflect/InstantiatableClass.scala index b061479..5bb8480 100644 --- a/jvm/src/main/scala/org/portablescala/reflect/InstantiatableClass.scala +++ b/jvm/src/main/scala/org/portablescala/reflect/InstantiatableClass.scala @@ -1,5 +1,7 @@ package org.portablescala.reflect +import java.lang.reflect.InvocationTargetException + /** A wrapper for a class that can be instantiated. * * @param runtimeClass @@ -18,9 +20,13 @@ final class InstantiatableClass private[reflect] (val runtimeClass: Class[_]) { */ def newInstance(): Any = { try { - runtimeClass.newInstance() + runtimeClass.getDeclaredConstructor().newInstance() } catch { - case e: IllegalAccessException => + case e: InvocationTargetException if e.getCause != null => + throw e.getCause + case e: NoSuchMethodException => + throw new InstantiationException(runtimeClass.getName).initCause(e) + case _: IllegalAccessException => /* The constructor exists but is private; make it look like it does not * exist at all. */