aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/templating
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/base/src/main/kotlin/templating')
-rw-r--r--plugins/base/src/main/kotlin/templating/Command.kt9
-rw-r--r--plugins/base/src/main/kotlin/templating/ResolveLinkCommand.kt6
-rw-r--r--plugins/base/src/main/kotlin/templating/jsonMapperForPlugins.kt56
3 files changed, 71 insertions, 0 deletions
diff --git a/plugins/base/src/main/kotlin/templating/Command.kt b/plugins/base/src/main/kotlin/templating/Command.kt
new file mode 100644
index 00000000..e352ba32
--- /dev/null
+++ b/plugins/base/src/main/kotlin/templating/Command.kt
@@ -0,0 +1,9 @@
+package org.jetbrains.dokka.base.templating
+
+import com.fasterxml.jackson.annotation.JsonSubTypes
+import com.fasterxml.jackson.annotation.JsonSubTypes.Type
+import com.fasterxml.jackson.annotation.JsonTypeInfo
+import com.fasterxml.jackson.annotation.JsonTypeInfo.Id.CLASS
+
+@JsonTypeInfo(use= CLASS)
+interface Command
diff --git a/plugins/base/src/main/kotlin/templating/ResolveLinkCommand.kt b/plugins/base/src/main/kotlin/templating/ResolveLinkCommand.kt
new file mode 100644
index 00000000..83b7e0d8
--- /dev/null
+++ b/plugins/base/src/main/kotlin/templating/ResolveLinkCommand.kt
@@ -0,0 +1,6 @@
+package org.jetbrains.dokka.base.templating
+
+import com.fasterxml.jackson.annotation.JsonTypeInfo
+import org.jetbrains.dokka.links.DRI
+
+class ResolveLinkCommand(val dri: DRI): Command
diff --git a/plugins/base/src/main/kotlin/templating/jsonMapperForPlugins.kt b/plugins/base/src/main/kotlin/templating/jsonMapperForPlugins.kt
new file mode 100644
index 00000000..9b656309
--- /dev/null
+++ b/plugins/base/src/main/kotlin/templating/jsonMapperForPlugins.kt
@@ -0,0 +1,56 @@
+package org.jetbrains.dokka.base.templating
+
+import com.fasterxml.jackson.core.JsonGenerator
+import com.fasterxml.jackson.databind.DeserializationFeature
+import com.fasterxml.jackson.databind.SerializerProvider
+import com.fasterxml.jackson.databind.module.SimpleModule
+import com.fasterxml.jackson.databind.ser.std.StdScalarSerializer
+import com.fasterxml.jackson.databind.type.TypeFactory
+import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
+import com.fasterxml.jackson.module.kotlin.jacksonTypeRef
+import org.jetbrains.dokka.base.DokkaBase
+import java.io.File
+
+// THIS IS COPIED FROM BASE SINCE IT NEEDS TO BE INSTANTIATED ON THE SAME CLASS LOADER AS PLUGINS
+
+private val objectMapper = run {
+ val module = SimpleModule().apply {
+ addSerializer(FileSerializer)
+ }
+ jacksonObjectMapper()
+ .apply {
+ typeFactory = PluginTypeFactory()
+ }
+ .registerModule(module)
+ .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
+}
+
+@PublishedApi
+internal class TypeReference<T> private constructor(
+ internal val jackson: com.fasterxml.jackson.core.type.TypeReference<T>
+) {
+ companion object {
+ internal inline operator fun <reified T> invoke(): TypeReference<T> = TypeReference(jacksonTypeRef())
+ }
+}
+
+fun toJsonString(value: Any): String = objectMapper.writeValueAsString(value)
+
+inline fun <reified T : Any> parseJson(json: String): T = parseJson(json, TypeReference())
+
+
+@PublishedApi
+internal fun <T : Any> parseJson(json: String, typeReference: TypeReference<T>): T =
+ objectMapper.readValue(json, typeReference.jackson)
+
+
+private object FileSerializer : StdScalarSerializer<File>(File::class.java) {
+ override fun serialize(value: File, g: JsonGenerator, provider: SerializerProvider) {
+ g.writeString(value.path)
+ }
+}
+
+private class PluginTypeFactory: TypeFactory(null) {
+ override fun findClass(className: String): Class<out Any>? =
+ Class.forName(className, true, DokkaBase::class.java.classLoader) ?: super.findClass(className)
+} \ No newline at end of file