This is an automated email from the ASF dual-hosted git repository.
engelen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko.git
The following commit(s) were added to refs/heads/main by this push:
new 67211737da fix: improve workaround for Scala3 bug 18248 (#1349)
67211737da is described below
commit 67211737daa9b3f6d24ed63563efc78fc9945fef
Author: Arnout Engelen <[email protected]>
AuthorDate: Tue Jun 4 13:56:37 2024 +0200
fix: improve workaround for Scala3 bug 18248 (#1349)
Towards #325
---
.../actor/typed/internal/ExtensionsImpl.scala | 61 +++++++++++-----------
1 file changed, 30 insertions(+), 31 deletions(-)
diff --git
a/actor-typed/src/main/scala/org/apache/pekko/actor/typed/internal/ExtensionsImpl.scala
b/actor-typed/src/main/scala/org/apache/pekko/actor/typed/internal/ExtensionsImpl.scala
index 09854cd264..0c0d5d5cdf 100644
---
a/actor-typed/src/main/scala/org/apache/pekko/actor/typed/internal/ExtensionsImpl.scala
+++
b/actor-typed/src/main/scala/org/apache/pekko/actor/typed/internal/ExtensionsImpl.scala
@@ -38,44 +38,43 @@ private[pekko] trait ExtensionsImpl extends Extensions {
self: ActorSystem[_] wi
* Hook for ActorSystem to load extensions on startup
*/
def loadExtensions(): Unit = {
+ loadExtensionsFor("pekko.actor.typed.library-extensions", throwOnLoadFail
= true)
+ loadExtensionsFor("pekko.actor.typed.extensions", throwOnLoadFail = false)
+ }
- /*
- * @param throwOnLoadFail Throw exception when an extension fails to load
(needed for backwards compatibility)
- */
- def loadExtensionsFor(key: String, throwOnLoadFail: Boolean): Unit = {
-
- settings.config.getStringList(key).asScala.foreach { extensionIdFQCN =>
- // it is either a Scala object or it is a Java class with a static
singleton accessor
- val idTry =
dynamicAccess.getObjectFor[AnyRef](extensionIdFQCN).recoverWith {
- case _ => idFromJavaSingletonAccessor(extensionIdFQCN)
- }
+ /*
+ * @param throwOnLoadFail Throw exception when an extension fails to load
(needed for backwards compatibility)
+ */
+ private def loadExtensionsFor(key: String, throwOnLoadFail: Boolean): Unit =
{
- idTry match {
- case Success(id: ExtensionId[_]) => registerExtension(id)
- case Success(_) =>
- if (!throwOnLoadFail) log.error("[{}] is not an 'ExtensionId',
skipping...", extensionIdFQCN)
- else throw new RuntimeException(s"[$extensionIdFQCN] is not an
'ExtensionId'")
- case Failure(problem) =>
- if (!throwOnLoadFail)
- log.error(s"While trying to load extension $extensionIdFQCN,
skipping...", problem)
- else throw new RuntimeException(s"While trying to load extension
[$extensionIdFQCN]", problem)
- }
+ settings.config.getStringList(key).asScala.foreach { extensionIdFQCN =>
+ // it is either a Scala object or it is a Java class with a static
singleton accessor
+ val idTry =
dynamicAccess.getObjectFor[AnyRef](extensionIdFQCN).recoverWith {
+ case _ => idFromJavaSingletonAccessor(extensionIdFQCN)
}
- }
- def idFromJavaSingletonAccessor(extensionIdFQCN: String):
Try[ExtensionId[Extension]] =
-
dynamicAccess.getClassFor[ExtensionId[Extension]](extensionIdFQCN).flatMap[ExtensionId[Extension]]
{
- (clazz: Class[_]) =>
- Try {
- val singletonAccessor = clazz.getDeclaredMethod("getInstance")
- singletonAccessor.invoke(null).asInstanceOf[ExtensionId[Extension]]
- }
+ idTry match {
+ case Success(id: ExtensionId[_]) => registerExtension(id)
+ case Success(_) =>
+ if (!throwOnLoadFail) log.error("[{}] is not an 'ExtensionId',
skipping...", extensionIdFQCN)
+ else throw new RuntimeException(s"[$extensionIdFQCN] is not an
'ExtensionId'")
+ case Failure(problem) =>
+ if (!throwOnLoadFail)
+ log.error(s"While trying to load extension $extensionIdFQCN,
skipping...", problem)
+ else throw new RuntimeException(s"While trying to load extension
[$extensionIdFQCN]", problem)
}
-
- loadExtensionsFor("pekko.actor.typed.library-extensions", throwOnLoadFail
= true)
- loadExtensionsFor("pekko.actor.typed.extensions", throwOnLoadFail = false)
+ }
}
+ private def idFromJavaSingletonAccessor(extensionIdFQCN: String):
Try[ExtensionId[Extension]] =
+
dynamicAccess.getClassFor[ExtensionId[Extension]](extensionIdFQCN).flatMap[ExtensionId[Extension]]
{
+ (clazz: Class[_]) =>
+ Try {
+ val singletonAccessor = clazz.getDeclaredMethod("getInstance")
+ singletonAccessor.invoke(null).asInstanceOf[ExtensionId[Extension]]
+ }
+ }
+
final override def hasExtension(ext: ExtensionId[_ <: Extension]): Boolean =
findExtension(ext) != null
final override def extension[T <: Extension](ext: ExtensionId[T]): T =
findExtension(ext) match {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]