aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/kotlin/plugability
diff options
context:
space:
mode:
authorPaweł Marks <pmarks@virtuslab.com>2019-11-14 15:18:56 +0100
committerBłażej Kardyś <bkardys@virtuslab.com>2019-11-25 16:24:16 +0100
commitdac6ba2a589aa1e8a9f4a9c7af32026be77776b3 (patch)
treef7be54609c482f0a0e5b021db38410c0dee8a82f /core/src/main/kotlin/plugability
parentd3bd543f569656e66112e584ad86af95ae7ea000 (diff)
downloaddokka-dac6ba2a589aa1e8a9f4a9c7af32026be77776b3.tar.gz
dokka-dac6ba2a589aa1e8a9f4a9c7af32026be77776b3.tar.bz2
dokka-dac6ba2a589aa1e8a9f4a9c7af32026be77776b3.zip
First plugin draft
Diffstat (limited to 'core/src/main/kotlin/plugability')
-rw-r--r--core/src/main/kotlin/plugability/DokkaContext.kt27
-rw-r--r--core/src/main/kotlin/plugability/DokkaPlugin.kt6
2 files changed, 33 insertions, 0 deletions
diff --git a/core/src/main/kotlin/plugability/DokkaContext.kt b/core/src/main/kotlin/plugability/DokkaContext.kt
new file mode 100644
index 00000000..7da4d9a7
--- /dev/null
+++ b/core/src/main/kotlin/plugability/DokkaContext.kt
@@ -0,0 +1,27 @@
+package org.jetbrains.dokka.plugability
+
+import java.io.File
+import java.net.URLClassLoader
+import java.util.*
+
+
+class DokkaContext private constructor() {
+ private val plugins = mutableListOf<DokkaPlugin>()
+
+ val pluginNames: List<String>
+ get() = plugins.map { it.name }
+
+ private fun install(plugin: DokkaPlugin) {
+ plugins += plugin
+ plugin.install(this)
+ }
+
+ companion object {
+ 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)) }
+ .forEach { install(it) }
+ }
+ }
+} \ No newline at end of file
diff --git a/core/src/main/kotlin/plugability/DokkaPlugin.kt b/core/src/main/kotlin/plugability/DokkaPlugin.kt
new file mode 100644
index 00000000..2654bcee
--- /dev/null
+++ b/core/src/main/kotlin/plugability/DokkaPlugin.kt
@@ -0,0 +1,6 @@
+package org.jetbrains.dokka.plugability
+
+interface DokkaPlugin {
+ val name: String
+ fun install(context: DokkaContext)
+} \ No newline at end of file