diff options
author | Ignat Beresnev <ignat.beresnev@jetbrains.com> | 2023-11-10 11:46:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-10 11:46:54 +0100 |
commit | 8e5c63d035ef44a269b8c43430f43f5c8eebfb63 (patch) | |
tree | 1b915207b2b9f61951ddbf0ff2e687efd053d555 /core/test-api | |
parent | a44efd4ba0c2e4ab921ff75e0f53fc9335aa79db (diff) | |
download | dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.gz dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.tar.bz2 dokka-8e5c63d035ef44a269b8c43430f43f5c8eebfb63.zip |
Restructure the project to utilize included builds (#3174)
* Refactor and simplify artifact publishing
* Update Gradle to 8.4
* Refactor and simplify convention plugins and build scripts
Fixes #3132
---------
Co-authored-by: Adam <897017+aSemy@users.noreply.github.com>
Co-authored-by: Oleg Yukhnevich <whyoleg@gmail.com>
Diffstat (limited to 'core/test-api')
6 files changed, 0 insertions, 783 deletions
diff --git a/core/test-api/api/test-api.api b/core/test-api/api/test-api.api deleted file mode 100644 index e0969258..00000000 --- a/core/test-api/api/test-api.api +++ /dev/null @@ -1,198 +0,0 @@ -public final class org/jetbrains/dokka/testApi/context/MockContext : org/jetbrains/dokka/plugability/DokkaContext { - public fun <init> ([Lkotlin/Pair;Lorg/jetbrains/dokka/DokkaConfiguration;Ljava/util/List;)V - public synthetic fun <init> ([Lkotlin/Pair;Lorg/jetbrains/dokka/DokkaConfiguration;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public fun get (Lorg/jetbrains/dokka/plugability/ExtensionPoint;)Ljava/util/List; - public fun getConfiguration ()Lorg/jetbrains/dokka/DokkaConfiguration; - public fun getLogger ()Lorg/jetbrains/dokka/utilities/DokkaLogger; - public fun getUnusedPoints ()Ljava/util/Collection; - public fun plugin (Lkotlin/reflect/KClass;)Lorg/jetbrains/dokka/plugability/DokkaPlugin; - public fun single (Lorg/jetbrains/dokka/plugability/ExtensionPoint;)Ljava/lang/Object; -} - -public final class org/jetbrains/dokka/testApi/logger/TestLogger : org/jetbrains/dokka/utilities/DokkaLogger { - public fun <init> (Lorg/jetbrains/dokka/utilities/DokkaLogger;)V - public fun debug (Ljava/lang/String;)V - public fun error (Ljava/lang/String;)V - public final fun getDebugMessages ()Ljava/util/List; - public final fun getErrorMessages ()Ljava/util/List; - public fun getErrorsCount ()I - public final fun getInfoMessages ()Ljava/util/List; - public final fun getProgressMessages ()Ljava/util/List; - public final fun getWarnMessages ()Ljava/util/List; - public fun getWarningsCount ()I - public fun info (Ljava/lang/String;)V - public fun progress (Ljava/lang/String;)V - public fun setErrorsCount (I)V - public fun setWarningsCount (I)V - public fun warn (Ljava/lang/String;)V -} - -public abstract class org/jetbrains/dokka/testApi/testRunner/AbstractTest { - public static final field Companion Lorg/jetbrains/dokka/testApi/testRunner/AbstractTest$Companion; - public fun <init> (Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function4;Lorg/jetbrains/dokka/testApi/logger/TestLogger;)V - protected final fun dokkaConfiguration (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/dokka/DokkaConfigurationImpl; - protected final fun getCommonStdlibPath ()Ljava/lang/String; - protected final fun getDokkaTestGenerator ()Lkotlin/jvm/functions/Function4; - protected final fun getJsStdlibPath ()Ljava/lang/String; - protected final fun getJvmStdlibPath ()Ljava/lang/String; - protected final fun getLogger ()Lorg/jetbrains/dokka/testApi/logger/TestLogger; - protected final fun getStdlibExternalDocumentationLink ()Lorg/jetbrains/dokka/ExternalDocumentationLinkImpl; - protected final fun getTestBuilder ()Lkotlin/jvm/functions/Function0; - protected final fun getTestDataDir (Ljava/lang/String;)Ljava/nio/file/Path; - protected final fun testFromData (Lorg/jetbrains/dokka/DokkaConfigurationImpl;ZZLjava/util/List;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun testFromData$default (Lorg/jetbrains/dokka/testApi/testRunner/AbstractTest;Lorg/jetbrains/dokka/DokkaConfigurationImpl;ZZLjava/util/List;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V - protected final fun testInline (Ljava/lang/String;Lorg/jetbrains/dokka/DokkaConfigurationImpl;ZLjava/util/List;Lorg/jetbrains/dokka/utilities/DokkaLogger;Lkotlin/jvm/functions/Function1;)V - public static synthetic fun testInline$default (Lorg/jetbrains/dokka/testApi/testRunner/AbstractTest;Ljava/lang/String;Lorg/jetbrains/dokka/DokkaConfigurationImpl;ZLjava/util/List;Lorg/jetbrains/dokka/utilities/DokkaLogger;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V -} - -public final class org/jetbrains/dokka/testApi/testRunner/AbstractTest$Companion { -} - -public class org/jetbrains/dokka/testApi/testRunner/CoreTestMethods : org/jetbrains/dokka/testApi/testRunner/TestMethods { - public fun <init> (Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V - public fun getDocumentablesCreationStage ()Lkotlin/jvm/functions/Function1; - public fun getDocumentablesMergingStage ()Lkotlin/jvm/functions/Function1; - public fun getDocumentablesTransformationStage ()Lkotlin/jvm/functions/Function1; - public fun getPagesGenerationStage ()Lkotlin/jvm/functions/Function1; - public fun getPagesTransformationStage ()Lkotlin/jvm/functions/Function1; - public fun getPluginsSetupStage ()Lkotlin/jvm/functions/Function1; - public fun getRenderingStage ()Lkotlin/jvm/functions/Function2; - public fun getVerificationStage ()Lkotlin/jvm/functions/Function1; -} - -public abstract class org/jetbrains/dokka/testApi/testRunner/DokkaTestGenerator { - public fun <init> (Lorg/jetbrains/dokka/DokkaConfiguration;Lorg/jetbrains/dokka/utilities/DokkaLogger;Lorg/jetbrains/dokka/testApi/testRunner/TestMethods;Ljava/util/List;)V - public synthetic fun <init> (Lorg/jetbrains/dokka/DokkaConfiguration;Lorg/jetbrains/dokka/utilities/DokkaLogger;Lorg/jetbrains/dokka/testApi/testRunner/TestMethods;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public abstract fun generate ()V - protected final fun getAdditionalPlugins ()Ljava/util/List; - protected final fun getConfiguration ()Lorg/jetbrains/dokka/DokkaConfiguration; - protected final fun getLogger ()Lorg/jetbrains/dokka/utilities/DokkaLogger; - protected final fun getTestMethods ()Lorg/jetbrains/dokka/testApi/testRunner/TestMethods; -} - -public abstract class org/jetbrains/dokka/testApi/testRunner/TestBuilder { - public fun <init> ()V - public abstract fun build ()Lorg/jetbrains/dokka/testApi/testRunner/TestMethods; -} - -public abstract interface class org/jetbrains/dokka/testApi/testRunner/TestMethods { -} - -public abstract interface annotation class testApi/testRunner/DokkaConfigurationDsl : java/lang/annotation/Annotation { -} - -public final class testApi/testRunner/DokkaSourceSetBuilder { - public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/List;ZLjava/util/Set;ZZZILjava/lang/String;Ljava/lang/String;ZZLjava/util/List;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V - public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/List;ZLjava/util/Set;ZZZILjava/lang/String;Ljava/lang/String;ZZLjava/util/List;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V - public final fun build ()Lorg/jetbrains/dokka/DokkaSourceSetImpl; - public final fun getAnalysisPlatform ()Ljava/lang/String; - public final fun getApiVersion ()Ljava/lang/String; - public final fun getClasspath ()Ljava/util/List; - public final fun getDependentSourceSets ()Ljava/util/Set; - public final fun getDisplayName ()Ljava/lang/String; - public final fun getDocumentedVisibilities ()Ljava/util/Set; - public final fun getExternalDocumentationLinks ()Ljava/util/List; - public final fun getIncludeNonPublic ()Z - public final fun getIncludes ()Ljava/util/List; - public final fun getJdkVersion ()I - public final fun getLanguageVersion ()Ljava/lang/String; - public final fun getName ()Ljava/lang/String; - public final fun getNoJdkLink ()Z - public final fun getNoStdlibLink ()Z - public final fun getPerPackageOptions ()Ljava/util/List; - public final fun getReportUndocumented ()Z - public final fun getSamples ()Ljava/util/List; - public final fun getSkipDeprecated ()Z - public final fun getSkipEmptyPackages ()Z - public final fun getSourceLinks ()Ljava/util/List; - public final fun getSourceRoots ()Ljava/util/List; - public final fun getSuppressedFiles ()Ljava/util/List; - public final fun setAnalysisPlatform (Ljava/lang/String;)V - public final fun setApiVersion (Ljava/lang/String;)V - public final fun setClasspath (Ljava/util/List;)V - public final fun setDependentSourceSets (Ljava/util/Set;)V - public final fun setDisplayName (Ljava/lang/String;)V - public final fun setDocumentedVisibilities (Ljava/util/Set;)V - public final fun setExternalDocumentationLinks (Ljava/util/List;)V - public final fun setIncludeNonPublic (Z)V - public final fun setIncludes (Ljava/util/List;)V - public final fun setJdkVersion (I)V - public final fun setLanguageVersion (Ljava/lang/String;)V - public final fun setName (Ljava/lang/String;)V - public final fun setNoJdkLink (Z)V - public final fun setNoStdlibLink (Z)V - public final fun setPerPackageOptions (Ljava/util/List;)V - public final fun setReportUndocumented (Z)V - public final fun setSamples (Ljava/util/List;)V - public final fun setSkipDeprecated (Z)V - public final fun setSkipEmptyPackages (Z)V - public final fun setSourceLinks (Ljava/util/List;)V - public final fun setSourceRoots (Ljava/util/List;)V - public final fun setSuppressedFiles (Ljava/util/List;)V -} - -public final class testApi/testRunner/SourceSetsBuilder : java/util/ArrayList { - public fun <init> (Ljava/lang/String;)V - public final fun contains (Ljava/lang/Object;)Z - public fun contains (Lkotlin/Lazy;)Z - public final fun getModuleName ()Ljava/lang/String; - public fun getSize ()I - public final fun indexOf (Ljava/lang/Object;)I - public fun indexOf (Lkotlin/Lazy;)I - public final fun lastIndexOf (Ljava/lang/Object;)I - public fun lastIndexOf (Lkotlin/Lazy;)I - public final fun remove (I)Lkotlin/Lazy; - public final fun remove (Ljava/lang/Object;)Z - public fun remove (Lkotlin/Lazy;)Z - public fun removeAt (I)Lkotlin/Lazy; - public final fun size ()I - public final fun sourceSet (Lkotlin/jvm/functions/Function1;)Lkotlin/Lazy; -} - -public final class testApi/testRunner/TestDokkaConfigurationBuilder { - public fun <init> ()V - public final fun build ()Lorg/jetbrains/dokka/DokkaConfigurationImpl; - public final fun getCacheRoot ()Ljava/lang/String; - public final fun getDelayTemplateSubstitution ()Z - public final fun getFailOnWarning ()Z - public final fun getFormat ()Ljava/lang/String; - public final fun getIncludes ()Ljava/util/List; - public final fun getModuleName ()Ljava/lang/String; - public final fun getModuleVersion ()Ljava/lang/String; - public final fun getModules ()Ljava/util/List; - public final fun getOfflineMode ()Z - public final fun getOutputDir ()Ljava/io/File; - public final fun getPluginsClasspath ()Ljava/util/List; - public final fun getPluginsConfigurations ()Ljava/util/List; - public final fun getSuppressInheritedMembers ()Z - public final fun getSuppressObviousFunctions ()Z - public final fun setCacheRoot (Ljava/lang/String;)V - public final fun setDelayTemplateSubstitution (Z)V - public final fun setFailOnWarning (Z)V - public final fun setFormat (Ljava/lang/String;)V - public final fun setIncludes (Ljava/util/List;)V - public final fun setModuleName (Ljava/lang/String;)V - public final fun setModuleVersion (Ljava/lang/String;)V - public final fun setModules (Ljava/util/List;)V - public final fun setOfflineMode (Z)V - public final fun setOutputDir (Ljava/io/File;)V - public final fun setPluginsClasspath (Ljava/util/List;)V - public final fun setPluginsConfigurations (Ljava/util/List;)V - public final fun setSuppressInheritedMembers (Z)V - public final fun setSuppressObviousFunctions (Z)V - public final fun sourceSet (Lkotlin/jvm/functions/Function1;)Lkotlin/Lazy; - public final fun sourceSets (Lkotlin/jvm/functions/Function1;)V - public final fun unattachedSourceSet (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/dokka/DokkaSourceSetImpl; -} - -public final class testApi/testRunner/TestDokkaConfigurationBuilderKt { - public static final fun dModule (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Ljava/util/Set;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/DModule; - public static synthetic fun dModule$default (Ljava/lang/String;Ljava/util/List;Ljava/util/Map;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Ljava/util/Set;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/DModule; - public static final fun dPackage (Lorg/jetbrains/dokka/links/DRI;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Ljava/util/Set;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)Lorg/jetbrains/dokka/model/DPackage; - public static synthetic fun dPackage$default (Lorg/jetbrains/dokka/links/DRI;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/Map;Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Ljava/util/Set;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)Lorg/jetbrains/dokka/model/DPackage; - public static final fun documentationNode ([Ljava/lang/String;)Lorg/jetbrains/dokka/model/doc/DocumentationNode; - public static final fun dokkaConfiguration (Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/dokka/DokkaConfigurationImpl; - public static final fun getDefaultSourceSet ()Lorg/jetbrains/dokka/DokkaSourceSetImpl; - public static final fun sourceSet (Ljava/lang/String;)Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet; -} - diff --git a/core/test-api/build.gradle.kts b/core/test-api/build.gradle.kts deleted file mode 100644 index 7a067d1e..00000000 --- a/core/test-api/build.gradle.kts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -import org.jetbrains.registerDokkaArtifactPublication - -plugins { - id("org.jetbrains.conventions.kotlin-jvm") - id("org.jetbrains.conventions.maven-publish") -} - -dependencies { - api(projects.core) - - implementation(kotlin("reflect")) -} - -registerDokkaArtifactPublication("dokkaTestApi") { - artifactId = "dokka-test-api" -} diff --git a/core/test-api/src/main/kotlin/testApi/context/MockContext.kt b/core/test-api/src/main/kotlin/testApi/context/MockContext.kt deleted file mode 100644 index 06ea2dad..00000000 --- a/core/test-api/src/main/kotlin/testApi/context/MockContext.kt +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.testApi.context - -import org.jetbrains.dokka.DokkaConfiguration -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.DokkaPlugin -import org.jetbrains.dokka.plugability.ExtensionPoint -import org.jetbrains.dokka.utilities.DokkaConsoleLogger -import org.jetbrains.dokka.utilities.DokkaLogger -import org.jetbrains.dokka.utilities.LoggingLevel -import kotlin.reflect.KClass -import kotlin.reflect.KMutableProperty -import kotlin.reflect.full.memberProperties - -@Suppress("UNCHECKED_CAST") // It is only usable from tests so we do not care about safety -public class MockContext( - vararg extensions: Pair<ExtensionPoint<*>, (DokkaContext) -> Any>, - private val testConfiguration: DokkaConfiguration? = null, - private val unusedExtensionPoints: List<ExtensionPoint<*>>? = null -) : DokkaContext { - private val extensionMap by lazy { - extensions.groupBy(Pair<ExtensionPoint<*>, (DokkaContext) -> Any>::first) { - it.second(this) - } - } - - private val plugins = mutableMapOf<KClass<out DokkaPlugin>, DokkaPlugin>() - - override fun <T : DokkaPlugin> plugin(kclass: KClass<T>): T = plugins.getOrPut(kclass) { - kclass.constructors.single { it.parameters.isEmpty() }.call().also { it.injectContext(this) } - } as T - - override fun <T : Any, E : ExtensionPoint<T>> get(point: E): List<T> = extensionMap[point].orEmpty() as List<T> - - override fun <T : Any, E : ExtensionPoint<T>> single(point: E): T = get(point).single() - - override val logger: DokkaLogger = DokkaConsoleLogger(LoggingLevel.DEBUG) - - override val configuration: DokkaConfiguration - get() = testConfiguration ?: throw IllegalStateException("This mock context doesn't provide configuration") - - override val unusedPoints: Collection<ExtensionPoint<*>> - get() = unusedExtensionPoints - ?: throw IllegalStateException("This mock context doesn't provide unused extension points") -} - -private fun DokkaPlugin.injectContext(context: DokkaContext) { - (DokkaPlugin::class.memberProperties.single { it.name == "context" } as KMutableProperty<*>) - .setter.call(this, context) -} diff --git a/core/test-api/src/main/kotlin/testApi/logger/TestLogger.kt b/core/test-api/src/main/kotlin/testApi/logger/TestLogger.kt deleted file mode 100644 index c285a663..00000000 --- a/core/test-api/src/main/kotlin/testApi/logger/TestLogger.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.testApi.logger - -import org.jetbrains.dokka.utilities.DokkaLogger -import java.util.* - -/* - * Even in tests it be used in a concurrent environment, so needs to be thread safe - */ -public class TestLogger(private val logger: DokkaLogger) : DokkaLogger { - override var warningsCount: Int by logger::warningsCount - override var errorsCount: Int by logger::errorsCount - - private var _debugMessages = synchronizedMutableListOf<String>() - public val debugMessages: List<String> get() = _debugMessages.toList() - - private var _infoMessages = synchronizedMutableListOf<String>() - public val infoMessages: List<String> get() = _infoMessages.toList() - - private var _progressMessages = synchronizedMutableListOf<String>() - public val progressMessages: List<String> get() = _progressMessages.toList() - - private var _warnMessages = synchronizedMutableListOf<String>() - public val warnMessages: List<String> get() = _warnMessages.toList() - - private var _errorMessages = synchronizedMutableListOf<String>() - public val errorMessages: List<String> get() = _errorMessages.toList() - - override fun debug(message: String) { - _debugMessages.add(message) - logger.debug(message) - } - - override fun info(message: String) { - _infoMessages.add(message) - logger.info(message) - } - - override fun progress(message: String) { - _progressMessages.add(message) - logger.progress(message) - } - - override fun warn(message: String) { - _warnMessages.add(message) - logger.warn(message) - } - - override fun error(message: String) { - _errorMessages.add(message) - logger.error(message) - } - - private fun <T> synchronizedMutableListOf(): MutableList<T> = Collections.synchronizedList(mutableListOf()) -} diff --git a/core/test-api/src/main/kotlin/testApi/testRunner/TestDokkaConfigurationBuilder.kt b/core/test-api/src/main/kotlin/testApi/testRunner/TestDokkaConfigurationBuilder.kt deleted file mode 100644 index 4c451fed..00000000 --- a/core/test-api/src/main/kotlin/testApi/testRunner/TestDokkaConfigurationBuilder.kt +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package testApi.testRunner - -import org.jetbrains.dokka.* -import org.jetbrains.dokka.links.DRI -import org.jetbrains.dokka.model.* -import org.jetbrains.dokka.model.doc.CustomDocTag -import org.jetbrains.dokka.model.doc.Description -import org.jetbrains.dokka.model.doc.DocumentationNode -import org.jetbrains.dokka.model.doc.Text -import org.jetbrains.dokka.model.properties.PropertyContainer -import java.io.File - -public fun dokkaConfiguration(block: TestDokkaConfigurationBuilder.() -> Unit): DokkaConfigurationImpl = - TestDokkaConfigurationBuilder().apply(block).build() - -@DslMarker -public annotation class DokkaConfigurationDsl - -// TODO this class heavily relies on `DokkaSourceSetImpl`, should be refactored to `DokkaSourceSet` -@DokkaConfigurationDsl -public class TestDokkaConfigurationBuilder { - - public var moduleName: String = "root" - set(value) { - check(lazySourceSets.isEmpty()) { "Cannot set moduleName after adding source sets" } - field = value - } - public var moduleVersion: String = "1.0-SNAPSHOT" - public var outputDir: File = File("out") - public var format: String = "html" - public var offlineMode: Boolean = false - public var cacheRoot: String? = null - public var pluginsClasspath: List<File> = emptyList() - public var pluginsConfigurations: MutableList<PluginConfigurationImpl> = mutableListOf() - public var failOnWarning: Boolean = false - public var modules: List<DokkaModuleDescriptionImpl> = emptyList() - public var suppressObviousFunctions: Boolean = DokkaDefaults.suppressObviousFunctions - public var includes: List<File> = emptyList() - public var suppressInheritedMembers: Boolean = DokkaDefaults.suppressInheritedMembers - public var delayTemplateSubstitution: Boolean = DokkaDefaults.delayTemplateSubstitution - private val lazySourceSets = mutableListOf<Lazy<DokkaSourceSetImpl>>() - - public fun build(): DokkaConfigurationImpl = DokkaConfigurationImpl( - moduleName = moduleName, - moduleVersion = moduleVersion, - outputDir = outputDir, - cacheRoot = cacheRoot?.let(::File), - offlineMode = offlineMode, - sourceSets = lazySourceSets.map { it.value }.toList(), - pluginsClasspath = pluginsClasspath, - pluginsConfiguration = pluginsConfigurations, - modules = modules, - failOnWarning = failOnWarning, - suppressObviousFunctions = suppressObviousFunctions, - includes = includes.toSet(), - suppressInheritedMembers = suppressInheritedMembers, - delayTemplateSubstitution = delayTemplateSubstitution, - finalizeCoroutines = false - ) - - public fun sourceSets(block: SourceSetsBuilder.() -> Unit) { - lazySourceSets.addAll(SourceSetsBuilder(moduleName).apply(block)) - } - - public fun sourceSet(block: DokkaSourceSetBuilder.() -> Unit): Lazy<DokkaSourceSetImpl> { - val lazySourceSet = lazy { DokkaSourceSetBuilder(moduleName).apply(block).build() } - lazySourceSets.add(lazySourceSet) - return lazySourceSet - } - - public fun unattachedSourceSet(block: DokkaSourceSetBuilder.() -> Unit): DokkaSourceSetImpl { - return DokkaSourceSetBuilder(moduleName).apply(block).build() - } -} - -@DokkaConfigurationDsl -public class SourceSetsBuilder( - public val moduleName: String -) : ArrayList<Lazy<DokkaSourceSetImpl>>() { - public fun sourceSet(block: DokkaSourceSetBuilder.() -> Unit): Lazy<DokkaConfiguration.DokkaSourceSet> { - return lazy { DokkaSourceSetBuilder(moduleName).apply(block).build() }.apply(::add) - } -} - -@DokkaConfigurationDsl -public class DokkaSourceSetBuilder( - private val moduleName: String, - public var name: String = "main", - public var displayName: String = "JVM", - public var classpath: List<String> = emptyList(), - public var sourceRoots: List<String> = emptyList(), - public var dependentSourceSets: Set<DokkaSourceSetID> = emptySet(), - public var samples: List<String> = emptyList(), - public var includes: List<String> = emptyList(), - @Deprecated(message = "Use [documentedVisibilities] property for a more flexible control over documented visibilities") - public var includeNonPublic: Boolean = false, - public var documentedVisibilities: Set<DokkaConfiguration.Visibility> = DokkaDefaults.documentedVisibilities, - public var reportUndocumented: Boolean = false, - public var skipEmptyPackages: Boolean = false, - public var skipDeprecated: Boolean = false, - public var jdkVersion: Int = 8, - public var languageVersion: String? = null, - public var apiVersion: String? = null, - public var noStdlibLink: Boolean = false, - public var noJdkLink: Boolean = false, - public var suppressedFiles: List<String> = emptyList(), - public var analysisPlatform: String = "jvm", - public var perPackageOptions: List<PackageOptionsImpl> = emptyList(), - public var externalDocumentationLinks: List<ExternalDocumentationLinkImpl> = emptyList(), - public var sourceLinks: List<SourceLinkDefinitionImpl> = emptyList() -) { - @Suppress("DEPRECATION") - public fun build(): DokkaSourceSetImpl { - return DokkaSourceSetImpl( - displayName = displayName, - sourceSetID = DokkaSourceSetID(moduleName, name), - classpath = classpath.map(::File), - sourceRoots = sourceRoots.map(::File).toSet(), - dependentSourceSets = dependentSourceSets, - samples = samples.map(::File).toSet(), - includes = includes.map(::File).toSet(), - includeNonPublic = includeNonPublic, - documentedVisibilities = documentedVisibilities, - reportUndocumented = reportUndocumented, - skipEmptyPackages = skipEmptyPackages, - skipDeprecated = skipDeprecated, - jdkVersion = jdkVersion, - sourceLinks = sourceLinks.toSet(), - perPackageOptions = perPackageOptions.toList(), - externalDocumentationLinks = externalDocumentationLinks.toSet(), - languageVersion = languageVersion, - apiVersion = apiVersion, - noStdlibLink = noStdlibLink, - noJdkLink = noJdkLink, - suppressedFiles = suppressedFiles.map(::File).toSet(), - analysisPlatform = Platform.fromString(analysisPlatform) - ) - } -} - -public val defaultSourceSet: DokkaSourceSetImpl = DokkaSourceSetImpl( - displayName = "DEFAULT", - sourceSetID = DokkaSourceSetID("DEFAULT", "DEFAULT"), - classpath = emptyList(), - sourceRoots = emptySet(), - dependentSourceSets = emptySet(), - samples = emptySet(), - includes = emptySet(), - includeNonPublic = false, - documentedVisibilities = DokkaDefaults.documentedVisibilities, - reportUndocumented = false, - skipEmptyPackages = true, - skipDeprecated = false, - jdkVersion = 8, - sourceLinks = emptySet(), - perPackageOptions = emptyList(), - externalDocumentationLinks = emptySet(), - languageVersion = null, - apiVersion = null, - noStdlibLink = false, - noJdkLink = false, - suppressedFiles = emptySet(), - analysisPlatform = Platform.DEFAULT -) - -public fun sourceSet(name: String): DokkaConfiguration.DokkaSourceSet { - return defaultSourceSet.copy( - displayName = name, - sourceSetID = defaultSourceSet.sourceSetID.copy(sourceSetName = name) - ) -} - -public fun dModule( - name: String, - packages: List<DPackage> = emptyList(), - documentation: SourceSetDependent<DocumentationNode> = emptyMap(), - expectPresentInSet: DokkaConfiguration.DokkaSourceSet? = null, - sourceSets: Set<DokkaConfiguration.DokkaSourceSet> = emptySet(), - extra: PropertyContainer<DModule> = PropertyContainer.empty() -): DModule = DModule( - name = name, - packages = packages, - documentation = documentation, - expectPresentInSet = expectPresentInSet, - sourceSets = sourceSets, - extra = extra -) - -public fun dPackage( - dri: DRI, - functions: List<DFunction> = emptyList(), - properties: List<DProperty> = emptyList(), - classlikes: List<DClasslike> = emptyList(), - typealiases: List<DTypeAlias> = emptyList(), - documentation: SourceSetDependent<DocumentationNode> = emptyMap(), - expectPresentInSet: DokkaConfiguration.DokkaSourceSet? = null, - sourceSets: Set<DokkaConfiguration.DokkaSourceSet> = emptySet(), - extra: PropertyContainer<DPackage> = PropertyContainer.empty() -): DPackage = DPackage( - dri = dri, - functions = functions, - properties = properties, - classlikes = classlikes, - typealiases = typealiases, - documentation = documentation, - expectPresentInSet = expectPresentInSet, - sourceSets = sourceSets, - extra = extra -) - -public fun documentationNode(vararg texts: String): DocumentationNode { - return DocumentationNode( - texts.toList() - .map { Description(CustomDocTag(listOf(Text(it)), name = "MARKDOWN_FILE")) }) -} diff --git a/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt b/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt deleted file mode 100644 index 1f7ee060..00000000 --- a/core/test-api/src/main/kotlin/testApi/testRunner/TestRunner.kt +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.testApi.testRunner - -import org.jetbrains.dokka.DokkaConfiguration -import org.jetbrains.dokka.DokkaConfigurationImpl -import org.jetbrains.dokka.ExternalDocumentationLinkImpl -import org.jetbrains.dokka.model.DModule -import org.jetbrains.dokka.pages.RootPageNode -import org.jetbrains.dokka.plugability.DokkaContext -import org.jetbrains.dokka.plugability.DokkaPlugin -import org.jetbrains.dokka.testApi.logger.TestLogger -import org.jetbrains.dokka.utilities.DokkaLogger -import testApi.testRunner.TestDokkaConfigurationBuilder -import java.io.File -import java.net.URL -import java.nio.charset.Charset -import java.nio.file.Files -import java.nio.file.InvalidPathException -import java.nio.file.Path -import java.nio.file.Paths - -// TODO: take dokka configuration from file -public abstract class AbstractTest<M : TestMethods, T : TestBuilder<M>, D : DokkaTestGenerator<M>>( - protected val testBuilder: () -> T, - protected val dokkaTestGenerator: (DokkaConfiguration, DokkaLogger, M, List<DokkaPlugin>) -> D, - protected val logger: TestLogger, -) { - protected fun getTestDataDir(name: String): Path { - return File("src/test/resources/$name").takeIf { it.exists() }?.toPath() - ?: throw InvalidPathException(name, "Cannot be found") - } - - /** - * @param cleanupOutput if set to true, any temporary files will be cleaned up after execution. If set to false, - * it will be left to the user or the OS to delete it. Has no effect if [useOutputLocationFromConfig] - * is also set to true. - * @param useOutputLocationFromConfig if set to true, output location specified in [DokkaConfigurationImpl.outputDir] - * will be used. If set to false, a temporary folder will be used instead. - */ - protected fun testFromData( - configuration: DokkaConfigurationImpl, - cleanupOutput: Boolean = true, - useOutputLocationFromConfig: Boolean = false, - pluginOverrides: List<DokkaPlugin> = emptyList(), - block: T.() -> Unit, - ) { - if (useOutputLocationFromConfig) { - runTests( - configuration = configuration, - pluginOverrides = pluginOverrides, - testLogger = logger, - block = block - ) - } else { - withTempDirectory(cleanUpAfterUse = cleanupOutput) { tempDir -> - if (!cleanupOutput) { - logger.info("Output will be generated under: ${tempDir.absolutePath}") - } - runTests( - configuration = configuration.copy(outputDir = tempDir), - pluginOverrides = pluginOverrides, - testLogger = logger, - block = block - ) - } - } - } - - protected fun testInline( - query: String, - configuration: DokkaConfigurationImpl, - cleanupOutput: Boolean = true, - pluginOverrides: List<DokkaPlugin> = emptyList(), - loggerForTest: DokkaLogger = logger, - block: T.() -> Unit, - ) { - withTempDirectory(cleanUpAfterUse = cleanupOutput) { tempDir -> - if (!cleanupOutput) { - loggerForTest.info("Output will be generated under: ${tempDir.absolutePath}") - } - - val fileMap = query.toFileMap() - fileMap.materializeFiles(tempDir.toPath().toAbsolutePath()) - - val newConfiguration = configuration.copy( - outputDir = tempDir, - sourceSets = configuration.sourceSets.map { sourceSet -> - sourceSet.copy( - sourceRoots = sourceSet.sourceRoots.map { file -> tempDir.resolve(file) }.toSet(), - suppressedFiles = sourceSet.suppressedFiles.map { file -> tempDir.resolve(file) }.toSet(), - sourceLinks = sourceSet.sourceLinks.map { - link -> link.copy(localDirectory = tempDir.resolve(link.localDirectory).absolutePath) - }.toSet(), - includes = sourceSet.includes.map { file -> tempDir.resolve(file) }.toSet() - ) - } - ) - runTests( - configuration = newConfiguration, - pluginOverrides = pluginOverrides, - testLogger = loggerForTest, - block = block - ) - } - } - - private fun withTempDirectory(cleanUpAfterUse: Boolean, block: (tempDirectory: File) -> Unit) { - val tempDir = this.createTempDir() - try { - block(tempDir) - } finally { - if (cleanUpAfterUse) { - tempDir.deleteRecursively() - } - } - } - - private fun runTests( - configuration: DokkaConfiguration, - pluginOverrides: List<DokkaPlugin>, - testLogger: DokkaLogger = logger, - block: T.() -> Unit - ) { - val testMethods = testBuilder().apply(block).build() - dokkaTestGenerator( - configuration, - testLogger, - testMethods, - pluginOverrides - ).generate() - } - - private fun String.toFileMap(): Map<String, String> { - return this.trimIndent().trimMargin() - .replace("\r\n", "\n") - .sliceAt(filePathRegex) - .filter { it.isNotEmpty() && it.isNotBlank() && "\n" in it } - .map { fileDeclaration -> fileDeclaration.trim() }.associate { fileDeclaration -> - val filePathAndContent = fileDeclaration.split("\n", limit = 2) - val filePath = filePathAndContent.first().removePrefix("/").trim() - val content = filePathAndContent.last().trim() - filePath to content - } - } - - private fun String.sliceAt(regex: Regex): List<String> { - val matchesStartIndices = regex.findAll(this).toList().map { match -> match.range.first } - return sequence { - yield(0) - yieldAll(matchesStartIndices) - yield(this@sliceAt.length) - } - .zipWithNext { startIndex: Int, endIndex: Int -> substring(startIndex, endIndex) } - .toList() - .also { slices -> - /* Post-condition verifying that no character is lost */ - check(slices.sumBy { it.length } == length) - } - } - - private fun Map<String, String>.materializeFiles( - root: Path = Paths.get("."), - charset: Charset = Charset.forName("utf-8"), - ) = this.map { (path, content) -> - val file = root.resolve(path) - Files.createDirectories(file.parent) - Files.write(file, content.toByteArray(charset)) - } - - @Suppress("DEPRECATION") // TODO migrate to kotlin.io.path.createTempDirectory with languageVersion >= 1.5 - private fun createTempDir(): File = kotlin.io.createTempDir() - - protected fun dokkaConfiguration(block: TestDokkaConfigurationBuilder.() -> Unit): DokkaConfigurationImpl = - testApi.testRunner.dokkaConfiguration(block) - - - protected val jvmStdlibPath: String? by lazy { - ClassLoader.getSystemResource("kotlin/jvm/Strictfp.class") - ?.file - ?.replace("file:", "") - ?.replaceAfter(".jar", "") - } - - protected val jsStdlibPath: String? by lazy { - ClassLoader.getSystemResource("kotlin/jquery") - ?.file - ?.replace("file:", "") - ?.replaceAfter(".jar", "") - } - - protected val commonStdlibPath: String? by lazy { - // `kotlin-stdlib-common` is legacy - // we can use any platform dependency - // since common code should be resolved with all platform - jvmStdlibPath - } - - protected val stdlibExternalDocumentationLink: ExternalDocumentationLinkImpl = ExternalDocumentationLinkImpl( - URL("https://kotlinlang.org/api/latest/jvm/stdlib/"), - URL("https://kotlinlang.org/api/latest/jvm/stdlib/package-list") - ) - - public companion object { - private val filePathRegex = Regex("""[\n^](\/[\w|\-]+)+(\.\w+)?\s*\n""") - } -} - -public interface TestMethods - -public open class CoreTestMethods( - public open val pluginsSetupStage: (DokkaContext) -> Unit, - public open val verificationStage: (() -> Unit) -> Unit, - public open val documentablesCreationStage: (List<DModule>) -> Unit, - public open val documentablesMergingStage: (DModule) -> Unit, - public open val documentablesTransformationStage: (DModule) -> Unit, - public open val pagesGenerationStage: (RootPageNode) -> Unit, - public open val pagesTransformationStage: (RootPageNode) -> Unit, - public open val renderingStage: (RootPageNode, DokkaContext) -> Unit, -) : TestMethods - -public abstract class TestBuilder<M : TestMethods> { - public abstract fun build(): M -} - -public abstract class DokkaTestGenerator<T : TestMethods>( - protected val configuration: DokkaConfiguration, - protected val logger: DokkaLogger, - protected val testMethods: T, - protected val additionalPlugins: List<DokkaPlugin> = emptyList(), -) { - public abstract fun generate() -} |