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.
This commit is contained in:
Kirill Plyashkevich 2019-07-09 16:42:47 +03:00
parent d4167bc930
commit 0a11af2159
2 changed files with 6 additions and 5 deletions

View file

@ -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

View file

@ -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