diff options
author | Paweł Marks <pmarks@virtuslab.com> | 2019-11-15 10:23:35 +0100 |
---|---|---|
committer | Błażej Kardyś <bkardys@virtuslab.com> | 2019-11-25 16:24:16 +0100 |
commit | 007aacb9ae3b228d0cef45ff5beb066b1dcd4cdc (patch) | |
tree | fa0477b575f9e10605c1b7f9a7d6aa2882c23a84 | |
parent | e7c23a65606a5a844d1664552c935590a06bf58d (diff) | |
download | dokka-007aacb9ae3b228d0cef45ff5beb066b1dcd4cdc.tar.gz dokka-007aacb9ae3b228d0cef45ff5beb066b1dcd4cdc.tar.bz2 dokka-007aacb9ae3b228d0cef45ff5beb066b1dcd4cdc.zip |
Adds simplest classpath checking for plugins
-rw-r--r-- | core/src/main/kotlin/plugability/DokkaContext.kt | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/core/src/main/kotlin/plugability/DokkaContext.kt b/core/src/main/kotlin/plugability/DokkaContext.kt index 7da4d9a7..b54d8ed0 100644 --- a/core/src/main/kotlin/plugability/DokkaContext.kt +++ b/core/src/main/kotlin/plugability/DokkaContext.kt @@ -20,8 +20,17 @@ class DokkaContext private constructor() { fun from(pluginsClasspath: Iterable<File>) = DokkaContext().apply { pluginsClasspath.map { it.relativeTo(File(".").absoluteFile).toURI().toURL() } .toTypedArray() - .let { ServiceLoader.load(DokkaPlugin::class.java, URLClassLoader(it, this.javaClass.classLoader)) } + .let { URLClassLoader(it, this.javaClass.classLoader) } + .also { checkClasspath(it) } + .let { ServiceLoader.load(DokkaPlugin::class.java, it) } .forEach { install(it) } } } -}
\ No newline at end of file + + private fun checkClasspath(classLoader: URLClassLoader) { + classLoader.findResource(javaClass.name.replace('.','/') + ".class")?.also { + throw AssertionError("Dokka API found on plugins classpath. This will lead to subtle bugs. " + + "Please fix your plugins dependencies or exclude dokka api artifact from plugin classpath") + } + } +} |