From 93bef428ae2e1f4952a22adfd4a2aa679ddd7605 Mon Sep 17 00:00:00 2001 From: Kamil Doległo Date: Fri, 22 Mar 2019 11:58:29 +0100 Subject: Rework configuration, fix Gradle plugin --- integration/build.gradle | 13 ++-- .../kotlin/org/jetbrains/dokka/configuration.kt | 53 ++++++--------- .../org/jetbrains/dokka/defaultConfiguration.kt | 79 ++++++++++++++++++++++ 3 files changed, 108 insertions(+), 37 deletions(-) create mode 100644 integration/src/main/kotlin/org/jetbrains/dokka/defaultConfiguration.kt (limited to 'integration') diff --git a/integration/build.gradle b/integration/build.gradle index 24d59edf..ce95844c 100644 --- a/integration/build.gradle +++ b/integration/build.gradle @@ -1,18 +1,21 @@ buildscript { + repositories { jcenter() } + dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version" } } apply plugin: 'kotlin' - +apply plugin: 'kotlinx-serialization' sourceCompatibility = 1.8 tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { - languageVersion = "1.2" - apiVersion = "1.1" + languageVersion = language_version + apiVersion = language_version jvmTarget = "1.8" } } @@ -20,7 +23,5 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { dependencies { compileOnly group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib', version: kotlin_for_gradle_runtime_version compileOnly group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: kotlin_for_gradle_runtime_version - compile('com.github.yole:jkid:8fc7f12e1a') { - transitive = false - } + compile "org.jetbrains.kotlinx:kotlinx-serialization-runtime:0.10.0" } \ No newline at end of file diff --git a/integration/src/main/kotlin/org/jetbrains/dokka/configuration.kt b/integration/src/main/kotlin/org/jetbrains/dokka/configuration.kt index 12efd252..717fa477 100644 --- a/integration/src/main/kotlin/org/jetbrains/dokka/configuration.kt +++ b/integration/src/main/kotlin/org/jetbrains/dokka/configuration.kt @@ -1,22 +1,26 @@ package org.jetbrains.dokka -import ru.yole.jkid.CustomSerializer -import ru.yole.jkid.ValueSerializer -import ru.yole.jkid.deserialization.JKidException -import java.io.Serializable +import kotlinx.serialization.* +import kotlinx.serialization.internal.StringDescriptor import java.net.URL -class UrlSerializer : ValueSerializer { - override fun fromJsonValue(jsonValue: Any?): URL? { - if (jsonValue !is String?) - throw JKidException("Expected string representation of URL, got: $jsonValue") - return jsonValue?.let { URL(jsonValue) } +@Serializer(forClass = URL::class) +object UrlSerializer: KSerializer { + + override val descriptor: SerialDescriptor = + StringDescriptor.withName("WithCustomDefault") + + override fun deserialize(decoder: Decoder): URL { + return URL(decoder.decodeString()) } - override fun toJsonValue(value: URL?): Any? = value?.toExternalForm() + override fun serialize(encoder: Encoder, obj: URL) { + encoder.encodeString(obj.toExternalForm()) + } } + enum class Platform(val key: String) { jvm("jvm"), js("js"), @@ -93,8 +97,8 @@ interface DokkaConfiguration { } interface ExternalDocumentationLink { - @CustomSerializer(UrlSerializer::class) val url: URL - @CustomSerializer(UrlSerializer::class) val packageListUrl: URL + @Serializable(with = UrlSerializer::class) val url: URL + @Serializable(with = UrlSerializer::class) val packageListUrl: URL open class Builder(open var url: URL? = null, open var packageListUrl: URL? = null) { @@ -102,25 +106,12 @@ interface DokkaConfiguration { constructor(root: String, packageList: String? = null) : this(URL(root), packageList?.let { URL(it) }) fun build(): DokkaConfiguration.ExternalDocumentationLink = - if (packageListUrl != null && url != null) - ExternalDocumentationLinkImpl(url!!, packageListUrl!!) - else if (url != null) - ExternalDocumentationLinkImpl(url!!, URL(url!!, "package-list")) - else - throw IllegalArgumentException("url or url && packageListUrl must not be null for external documentation link") + if (packageListUrl != null && url != null) + ExternalDocumentationLinkImpl(url!!, packageListUrl!!) + else if (url != null) + ExternalDocumentationLinkImpl(url!!, URL(url!!, "package-list")) + else + throw IllegalArgumentException("url or url && packageListUrl must not be null for external documentation link") } } } - -data class SerializeOnlyDokkaConfiguration( - override val outputDir: String, - override val format: String, - override val generateIndexPages: Boolean, - override val cacheRoot: String?, - override val impliedPlatforms: List, - override val passesConfigurations: List -) : DokkaConfiguration - - -data class ExternalDocumentationLinkImpl(@CustomSerializer(UrlSerializer::class) override val url: URL, - @CustomSerializer(UrlSerializer::class) override val packageListUrl: URL) : Serializable, DokkaConfiguration.ExternalDocumentationLink \ No newline at end of file diff --git a/integration/src/main/kotlin/org/jetbrains/dokka/defaultConfiguration.kt b/integration/src/main/kotlin/org/jetbrains/dokka/defaultConfiguration.kt new file mode 100644 index 00000000..615f0215 --- /dev/null +++ b/integration/src/main/kotlin/org/jetbrains/dokka/defaultConfiguration.kt @@ -0,0 +1,79 @@ +package org.jetbrains.dokka + +import kotlinx.serialization.Serializable +import java.io.File +import java.net.URL + +@Serializable +data class DokkaConfigurationImpl( + override val outputDir: String, + override val format: String, + override val generateIndexPages: Boolean, + override val cacheRoot: String?, + override val impliedPlatforms: List, + override val passesConfigurations: List +) : DokkaConfiguration + +@Serializable +data class PassConfigurationImpl ( + override val moduleName: String, + override val classpath: List, + override val sourceRoots: List, + override val samples: List, + override val includes: List, + override val includeNonPublic: Boolean, + override val includeRootPackage: Boolean, + override val reportUndocumented: Boolean, + override val skipEmptyPackages: Boolean, + override val skipDeprecated: Boolean, + override val jdkVersion: Int, + override val sourceLinks: List, + override val perPackageOptions: List, + override var externalDocumentationLinks: List, + override val languageVersion: String?, + override val apiVersion: String?, + override val noStdlibLink: Boolean, + override val noJdkLink: Boolean, + override val suppressedFiles: List, + override val collectInheritedExtensionsFromLibraries: Boolean, + override val analysisPlatform: Platform, + override val targets: List, + override val sinceKotlin: String +) : DokkaConfiguration.PassConfiguration + +@Serializable +data class SourceRootImpl( + override val path: String +): DokkaConfiguration.SourceRoot + +@Serializable +data class SourceLinkDefinitionImpl( + override val path: String, + override val url: String, + override val lineSuffix: String? +): DokkaConfiguration.SourceLinkDefinition { + companion object { + fun parseSourceLinkDefinition(srcLink: String): SourceLinkDefinitionImpl { + val (path, urlAndLine) = srcLink.split('=') + return SourceLinkDefinitionImpl( + File(path).canonicalPath, + urlAndLine.substringBefore("#"), + urlAndLine.substringAfter("#", "").let { if (it.isEmpty()) null else "#$it" }) + } + } +} + +@Serializable +data class PackageOptionsImpl( + override val prefix: String, + override val includeNonPublic: Boolean, + override val reportUndocumented: Boolean, + override val skipDeprecated: Boolean, + override val suppress: Boolean +): DokkaConfiguration.PackageOptions + + +@Serializable +data class ExternalDocumentationLinkImpl(@Serializable(with = UrlSerializer::class) override val url: URL, + @Serializable(with = UrlSerializer::class) override val packageListUrl: URL +) : DokkaConfiguration.ExternalDocumentationLink \ No newline at end of file -- cgit