From 42de05f3facce6642589dddfe31fdcf234213dfa Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 5 Jan 2018 17:48:26 +0100 Subject: [PATCH] Improve diagnostic for missing BuiltInsLoader implementation Also initialize it lazily to avoid wrapping the exception into ExceptionInInitializerError #KT-20575 --- .../src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt index e899ac7c0d1..6974d51fa1d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsLoader.kt @@ -34,7 +34,12 @@ interface BuiltInsLoader { ): PackageFragmentProvider companion object { - val Instance: BuiltInsLoader = - ServiceLoader.load(BuiltInsLoader::class.java, BuiltInsLoader::class.java.classLoader).first() + val Instance: BuiltInsLoader by lazy(LazyThreadSafetyMode.PUBLICATION) { + val implementations = ServiceLoader.load(BuiltInsLoader::class.java, BuiltInsLoader::class.java.classLoader) + implementations.firstOrNull() ?: throw IllegalStateException( + "No BuiltInsLoader implementation was found. Please ensure that the META-INF/services/ is not stripped " + + "from your application and that the Java virtual machine is not running under a security manager" + ) + } } }