From 0a11af2159f235ace7bc0aa29b4abe84360fe018 Mon Sep 17 00:00:00 2001 From: Kirill Plyashkevich Date: Tue, 9 Jul 2019 16:42:47 +0300 Subject: [PATCH] In Java 9 `java.lang.Class.newInstance` was deprecated in favour of `java.lang.reflect.Constructor.newInstance`. In order to be able to at least compile Akka on Java 9+ provided changes are currently sufficient. --- akka-actor/src/main/scala/akka/io/Dns.scala | 4 ++-- akka-actor/src/main/scala/akka/util/Reflect.scala | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/akka-actor/src/main/scala/akka/io/Dns.scala b/akka-actor/src/main/scala/akka/io/Dns.scala index 0186903172..5d009de77f 100644 --- a/akka-actor/src/main/scala/akka/io/Dns.scala +++ b/akka-actor/src/main/scala/akka/io/Dns.scala @@ -116,7 +116,7 @@ class DnsExt private[akka] (val system: ExtendedActorSystem, resolverName: Strin override def apply(r: String): ActorRef = { val settings = new Settings(system.settings.config.getConfig("akka.io.dns"), "async-dns") - val provider = system.dynamicAccess.getClassFor[DnsProvider](settings.ProviderObjectName).get.newInstance() + val provider = system.dynamicAccess.createInstanceFor[DnsProvider](settings.ProviderObjectName, Nil).get system.log.info("Creating async dns resolver {} with manager name {}", settings.Resolver, managerName) system.systemActorOf( props = Props( @@ -163,7 +163,7 @@ class DnsExt private[akka] (val system: ExtendedActorSystem, resolverName: Strin // System DNS resolver val provider: DnsProvider = - system.dynamicAccess.getClassFor[DnsProvider](Settings.ProviderObjectName).get.newInstance() + system.dynamicAccess.createInstanceFor[DnsProvider](Settings.ProviderObjectName, Nil).get // System DNS cache val cache: Dns = provider.cache diff --git a/akka-actor/src/main/scala/akka/util/Reflect.scala b/akka-actor/src/main/scala/akka/util/Reflect.scala index 36b69ce129..c05c73c701 100644 --- a/akka-actor/src/main/scala/akka/util/Reflect.scala +++ b/akka-actor/src/main/scala/akka/util/Reflect.scala @@ -42,14 +42,15 @@ private[akka] object Reflect { * @param clazz the class which to instantiate an instance of * @return a new instance from the default constructor of the given class */ - private[akka] def instantiate[T](clazz: Class[T]): T = - try clazz.newInstance + private[akka] def instantiate[T](clazz: Class[T]): T = { + val ctor = clazz.getDeclaredConstructor() + try ctor.newInstance() catch { case _: IllegalAccessException => - val ctor = clazz.getDeclaredConstructor() ctor.setAccessible(true) ctor.newInstance() } + } /** * INTERNAL API