From 7f9d595f604e269fb918dc69cf2f80c19aef58c2 Mon Sep 17 00:00:00 2001 From: Andrzej Ratajczak Date: Wed, 1 Apr 2020 17:02:18 +0200 Subject: Adds possibility to configure plugins --- core/src/main/kotlin/configuration.kt | 3 +++ core/src/main/kotlin/defaultConfiguration.kt | 3 ++- core/src/main/kotlin/plugability/DokkaPlugin.kt | 26 +++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) (limited to 'core/src') diff --git a/core/src/main/kotlin/configuration.kt b/core/src/main/kotlin/configuration.kt index 19835fa4..34671c4e 100644 --- a/core/src/main/kotlin/configuration.kt +++ b/core/src/main/kotlin/configuration.kt @@ -33,6 +33,7 @@ interface DokkaConfiguration { val passesConfigurations: List val impliedPlatforms: List val pluginsClasspath: List + val pluginsConfiguration: Map interface PassConfiguration { val moduleName: String @@ -100,3 +101,5 @@ interface DokkaConfiguration { } } } + + diff --git a/core/src/main/kotlin/defaultConfiguration.kt b/core/src/main/kotlin/defaultConfiguration.kt index b0c12015..ae674ea1 100644 --- a/core/src/main/kotlin/defaultConfiguration.kt +++ b/core/src/main/kotlin/defaultConfiguration.kt @@ -10,7 +10,8 @@ data class DokkaConfigurationImpl( override val cacheRoot: String?, override val impliedPlatforms: List, override val passesConfigurations: List, - override var pluginsClasspath: List + override val pluginsClasspath: List, + override val pluginsConfiguration: Map ) : DokkaConfiguration data class PassConfigurationImpl ( diff --git a/core/src/main/kotlin/plugability/DokkaPlugin.kt b/core/src/main/kotlin/plugability/DokkaPlugin.kt index d8fb7892..24f417d8 100644 --- a/core/src/main/kotlin/plugability/DokkaPlugin.kt +++ b/core/src/main/kotlin/plugability/DokkaPlugin.kt @@ -1,9 +1,12 @@ package org.jetbrains.dokka.plugability +import com.google.gson.Gson import org.jetbrains.dokka.DokkaConfiguration +import org.jetbrains.kotlin.utils.addToStdlib.cast import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty import kotlin.reflect.KProperty1 +import kotlin.reflect.full.createInstance private typealias ExtensionDelegate = ReadOnlyProperty> @@ -49,6 +52,18 @@ abstract class DokkaPlugin { } } +interface Configurable { + val pluginsConfiguration: Map +} + +interface ConfigurableBlock + +inline fun Configurable.pluginConfiguration(block: T.() -> Unit) { + val instance = T::class.createInstance().apply(block) + pluginsConfiguration.cast>()[P::class.qualifiedName!!] = + Gson().toJson(instance, T::class.java) +} + inline fun P.query(extension: P.() -> ExtensionPoint): List = context?.let { it[extension()] } ?: throwIllegalQuery() @@ -57,3 +72,14 @@ inline fun P.querySingle(extension: P fun throwIllegalQuery(): Nothing = throw IllegalStateException("Querying about plugins is only possible with dokka context initialised") + +inline fun configuration(context: DokkaContext): ReadOnlyProperty { + return object : ReadOnlyProperty { + override fun getValue(thisRef: Any?, property: KProperty<*>): R { + return context.configuration.pluginsConfiguration.get(T::class.qualifiedName + ?: throw AssertionError("Plugin must be named class")).let { + Gson().fromJson(it, R::class.java) + } + } + } +} \ No newline at end of file -- cgit