From a9974a522e7700b859ac2d04002933ca329db4fa Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 14 Jun 2018 16:53:48 +0200 Subject: [PATCH] Use correct class loader in kotlinx-metadata to load MetadataExtensions implementations By default, ServiceLoader.load uses thread context class loader, which can differ from the MetadataExtensions' class loader (which also loads JvmMetadataExtensions, since they're in the same .jar) in many cases, for example when used in annotation processing #KT-24881 Fixed --- libraries/kotlinx-metadata/jvm/ChangeLog.md | 1 + .../src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/kotlinx-metadata/jvm/ChangeLog.md b/libraries/kotlinx-metadata/jvm/ChangeLog.md index dfbcdd849b4..38b34461321 100644 --- a/libraries/kotlinx-metadata/jvm/ChangeLog.md +++ b/libraries/kotlinx-metadata/jvm/ChangeLog.md @@ -3,6 +3,7 @@ ## 0.0.3 - Support metadata of local delegated properties (see `JvmDeclarationContainerExtensionVisitor.visitLocalDelegatedProperty`) +- [`KT-24881`](https://youtrack.jetbrains.com/issue/KT-24881) Use correct class loader in kotlinx-metadata to load MetadataExtensions implementations ## 0.0.2 diff --git a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt index e6d36eb5066..a9c0f610670 100644 --- a/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt +++ b/libraries/kotlinx-metadata/src/kotlinx/metadata/impl/extensions/MetadataExtensions.kt @@ -46,7 +46,7 @@ interface MetadataExtensions { companion object { val INSTANCES: List by lazy { - ServiceLoader.load(MetadataExtensions::class.java).toList().also { + ServiceLoader.load(MetadataExtensions::class.java, MetadataExtensions::class.java.classLoader).toList().also { if (it.isEmpty()) error( "No MetadataExtensions instances found in the classpath. Please ensure that the META-INF/services/ " + "is not stripped from your application and that the Java virtual machine is not running " +