From dfd903b25c55d69ab737afb062df096e6020ccf5 Mon Sep 17 00:00:00 2001 From: IgnatBeresnev Date: Tue, 31 Oct 2023 23:58:47 +0100 Subject: [PATCH] Stabilize `ExternalDocumentableProvider` --- .../translators/ExternalDocumentablesTest.kt | 15 +- .../analysis/kotlin/KotlinAnalysisPlugin.kt | 6 + .../ExternalDocumentableProvider.kt | 20 ++ .../internal/ExternalDocumentablesProvider.kt | 28 -- .../internal/InternalKotlinAnalysisPlugin.kt | 2 - .../test/ExternalDocumentableProviderTest.kt | 293 ++++++++++++++++++ .../src/test/resources/jars/README.md | 1 + .../resources/jars/kotlinx-cli-jvm-0.3.6.jar | Bin 0 -> 84592 bytes .../test/api/analysis/TestAnalysisServices.kt | 2 + .../test/api/analysis/TestProjectAnalyzer.kt | 1 + .../TestDokkaConfigurationBuilder.kt | 3 + .../dokka/analysis/test/api/util/FileUtils.kt | 21 ++ .../CompilerDescriptorAnalysisPlugin.kt | 6 +- ...escriptorExternalDocumentablesProvider.kt} | 4 +- .../symbols/plugin/SymbolsAnalysisPlugin.kt | 4 +- .../SymbolExternalDocumentablesProvider.kt | 4 +- 16 files changed, 364 insertions(+), 46 deletions(-) create mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/documentable/ExternalDocumentableProvider.kt delete mode 100644 subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/internal/ExternalDocumentablesProvider.kt create mode 100644 subprojects/analysis-kotlin-api/src/test/kotlin/org/jetbrains/dokka/analysis/test/ExternalDocumentableProviderTest.kt create mode 100644 subprojects/analysis-kotlin-api/src/test/resources/jars/README.md create mode 100644 subprojects/analysis-kotlin-api/src/test/resources/jars/kotlinx-cli-jvm-0.3.6.jar rename subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/{DefaultExternalDocumentablesProvider.kt => DescriptorExternalDocumentablesProvider.kt} (91%) diff --git a/plugins/base/src/test/kotlin/translators/ExternalDocumentablesTest.kt b/plugins/base/src/test/kotlin/translators/ExternalDocumentablesTest.kt index 1879c5380e..b3a5a9552a 100644 --- a/plugins/base/src/test/kotlin/translators/ExternalDocumentablesTest.kt +++ b/plugins/base/src/test/kotlin/translators/ExternalDocumentablesTest.kt @@ -4,7 +4,8 @@ package translators -import org.jetbrains.dokka.analysis.kotlin.internal.ExternalDocumentablesProvider +import org.jetbrains.dokka.analysis.kotlin.KotlinAnalysisPlugin +import org.jetbrains.dokka.analysis.kotlin.documentable.ExternalDocumentableProvider import org.jetbrains.dokka.analysis.kotlin.internal.InternalKotlinAnalysisPlugin import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest import org.jetbrains.dokka.model.DClass @@ -36,9 +37,9 @@ class ExternalDocumentablesTest : BaseAbstractTest() { """.trimIndent(), configuration ) { - lateinit var provider: ExternalDocumentablesProvider + lateinit var provider: ExternalDocumentableProvider pluginsSetupStage = { - provider = it.plugin().querySingle { externalDocumentablesProvider } + provider = it.plugin().querySingle { externalDocumentableProvider } } documentablesTransformationStage = { mod -> val entry = mod.packages.single().classlikes.single().cast().supertypes.entries.single() @@ -85,9 +86,9 @@ class ExternalDocumentablesTest : BaseAbstractTest() { """.trimIndent(), configuration ) { - lateinit var provider: ExternalDocumentablesProvider + lateinit var provider: ExternalDocumentableProvider pluginsSetupStage = { - provider = it.plugin().querySingle { externalDocumentablesProvider } + provider = it.plugin().querySingle { externalDocumentableProvider } } documentablesTransformationStage = { mod -> val entry = mod.packages.single().classlikes.single().cast().supertypes.entries.single() @@ -127,9 +128,9 @@ class ExternalDocumentablesTest : BaseAbstractTest() { """.trimIndent(), configuration ) { - lateinit var provider: ExternalDocumentablesProvider + lateinit var provider: ExternalDocumentableProvider pluginsSetupStage = { - provider = it.plugin().querySingle { externalDocumentablesProvider } + provider = it.plugin().querySingle { externalDocumentableProvider } } documentablesTransformationStage = { mod -> val entry = mod.packages.single().classlikes.single().cast().supertypes.entries.single() diff --git a/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/KotlinAnalysisPlugin.kt b/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/KotlinAnalysisPlugin.kt index 1df1dfe6d3..421242b7d8 100644 --- a/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/KotlinAnalysisPlugin.kt +++ b/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/KotlinAnalysisPlugin.kt @@ -4,6 +4,7 @@ package org.jetbrains.dokka.analysis.kotlin +import org.jetbrains.dokka.analysis.kotlin.documentable.ExternalDocumentableProvider import org.jetbrains.dokka.analysis.kotlin.sample.SampleAnalysisEnvironmentCreator import org.jetbrains.dokka.analysis.kotlin.sample.SampleAnalysisEnvironment import org.jetbrains.dokka.plugability.DokkaPlugin @@ -20,6 +21,11 @@ public class KotlinAnalysisPlugin : DokkaPlugin() { */ public val sampleAnalysisEnvironmentCreator: ExtensionPoint by extensionPoint() + /** + * TODO [external-documentable-provider] add documentation + */ + public val externalDocumentableProvider: ExtensionPoint by extensionPoint() + @OptIn(DokkaPluginApiPreview::class) override fun pluginApiPreviewAcknowledgement(): PluginApiPreviewAcknowledgement = PluginApiPreviewAcknowledgement } diff --git a/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/documentable/ExternalDocumentableProvider.kt b/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/documentable/ExternalDocumentableProvider.kt new file mode 100644 index 0000000000..49d17fd256 --- /dev/null +++ b/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/documentable/ExternalDocumentableProvider.kt @@ -0,0 +1,20 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +package org.jetbrains.dokka.analysis.kotlin.documentable + +import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.model.DClasslike + +/** + * TODO [external-documentable-provider] add documentation + */ +public interface ExternalDocumentableProvider { + + /** + * TODO [external-documentable-provider] add documentation + */ + public fun findClasslike(dri: DRI, sourceSet: DokkaSourceSet): DClasslike? +} diff --git a/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/internal/ExternalDocumentablesProvider.kt b/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/internal/ExternalDocumentablesProvider.kt deleted file mode 100644 index 7c564880e8..0000000000 --- a/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/internal/ExternalDocumentablesProvider.kt +++ /dev/null @@ -1,28 +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.analysis.kotlin.internal - -import org.jetbrains.dokka.DokkaConfiguration -import org.jetbrains.dokka.InternalDokkaApi -import org.jetbrains.dokka.links.DRI -import org.jetbrains.dokka.model.DClasslike - -/** - * Service that can be queried with [DRI] and source set to obtain a documentable for classlike. - * - * There are some cases when there is a need to process documentables of classlikes that were not defined - * in the project itself but are somehow related to the symbols defined in the documented project (e.g. are supertypes - * of classes defined in project). - */ -@InternalDokkaApi -public fun interface ExternalDocumentablesProvider { - - /** - * Returns [DClasslike] matching provided [DRI] in specified source set. - * - * Result is null if compiler haven't generated matching class descriptor. - */ - public fun findClasslike(dri: DRI, sourceSet: DokkaConfiguration.DokkaSourceSet): DClasslike? -} diff --git a/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/internal/InternalKotlinAnalysisPlugin.kt b/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/internal/InternalKotlinAnalysisPlugin.kt index d032d49050..dbf33c8e88 100644 --- a/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/internal/InternalKotlinAnalysisPlugin.kt +++ b/subprojects/analysis-kotlin-api/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/internal/InternalKotlinAnalysisPlugin.kt @@ -27,8 +27,6 @@ public class InternalKotlinAnalysisPlugin : DokkaPlugin() { public val inheritanceBuilder: ExtensionPoint by extensionPoint() - public val externalDocumentablesProvider: ExtensionPoint by extensionPoint() - public val documentableSourceLanguageParser: ExtensionPoint by extensionPoint() @OptIn(DokkaPluginApiPreview::class) diff --git a/subprojects/analysis-kotlin-api/src/test/kotlin/org/jetbrains/dokka/analysis/test/ExternalDocumentableProviderTest.kt b/subprojects/analysis-kotlin-api/src/test/kotlin/org/jetbrains/dokka/analysis/test/ExternalDocumentableProviderTest.kt new file mode 100644 index 0000000000..eed797f821 --- /dev/null +++ b/subprojects/analysis-kotlin-api/src/test/kotlin/org/jetbrains/dokka/analysis/test/ExternalDocumentableProviderTest.kt @@ -0,0 +1,293 @@ +/* + * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +package org.jetbrains.dokka.analysis.test + +import org.jetbrains.dokka.analysis.test.api.javaTestProject +import org.jetbrains.dokka.analysis.test.api.kotlinJvmTestProject +import org.jetbrains.dokka.analysis.test.api.useServices +import org.jetbrains.dokka.analysis.test.api.util.getResourceAbsolutePath +import org.jetbrains.dokka.links.DRI +import org.jetbrains.dokka.model.* +import kotlin.test.* + +class ExternalDocumentableProviderTest { + + @Test + fun `should find a valid external class from java stdlib`() { + val project = javaTestProject { + javaFile("org/jetbrains/dokka/test/MyProjectJavaClass.java") { + +"public class MyProjectJavaClass {}" + } + } + + project.useServices { context -> + // first check that Dokka only returns documentables declared in the project by default + // to make sure later that the external documentable is indeed external and not local + val projectPackages = context.module.packages + assertEquals(1, projectPackages.size, "Expected only a single package to be returned") + + val projectPackageChildren = projectPackages.single().children + assertEquals(1, projectPackageChildren.size, "Expected the project to contain only 1 child") + assertEquals("MyProjectJavaClass", projectPackageChildren.single().name) + + + // query for an external documentable that is not part of the project itself + val sourceSet = context.configuration.sourceSets.single() + val arrayListDRI = DRI("java.util", "ArrayList") + + val arrayListClasslike = externalDocumentableProvider.findClasslike(arrayListDRI, sourceSet) + assertNotNull(arrayListClasslike) + + assertEquals("ArrayList", arrayListClasslike.name) + assertEquals(arrayListDRI, arrayListClasslike.dri) + assertTrue(arrayListClasslike is DClass) + assertTrue(arrayListClasslike.functions.size > 10, "java.util.ArrayList is expected to have >10 functions") + + val superTypes = arrayListClasslike.supertypes.entries.single().value + val abstractListSuperType = superTypes.firstOrNull { + val dri = it.typeConstructor.dri + dri.packageName == "java.util" && dri.classNames == "AbstractList" + } + assertNotNull(abstractListSuperType, "java.util.ArrayList is expected to extend java.util.AbstractList") + + } + } + + @Test + fun `should find a valid external annotation from kotlin jvm stdlib`() { + val project = kotlinJvmTestProject { + ktFile("org/jetbrains/test/dokka/MyKotlinFile.kt") { + +"class MyKotlinClass {}" + } + } + + project.useServices { context -> + // first check that Dokka only returns documentables declared in the project by default + // to make sure later that the external documentable is indeed external and not local + val projectPackages = context.module.packages + assertEquals(1, projectPackages.size, "Expected only a single package to be returned") + + val projectPackageChildren = projectPackages.single().children + assertEquals(1, projectPackageChildren.size, "Expected the project to contain only 1 child") + assertEquals("MyKotlinClass", projectPackageChildren.single().name) + + + // query for an external documentable that is not part of the project itself + val sourceSet = context.configuration.sourceSets.single() + val jvmFieldDRI = DRI("kotlin.jvm", "JvmField") + + val jvmFieldAnnotation = externalDocumentableProvider.findClasslike(jvmFieldDRI, sourceSet) + assertNotNull(jvmFieldAnnotation) + + assertEquals("JvmField", jvmFieldAnnotation.name) + assertEquals(jvmFieldDRI, jvmFieldAnnotation.dri) + assertTrue(jvmFieldAnnotation is DAnnotation) + } + } + + @Test + fun `should find a valid external enum from kotlin stdlib`() { + val project = kotlinJvmTestProject { + ktFile("org/jetbrains/test/dokka/MyKotlinFile.kt") { + +"class MyKotlinClass {}" + } + } + + project.useServices { context -> + // first check that Dokka only returns documentables declared in the project by default + // to make sure later that the external documentable is indeed external and not local + val projectPackages = context.module.packages + assertEquals(1, projectPackages.size, "Expected only a single package to be returned") + + val projectPackageChildren = projectPackages.single().children + assertEquals(1, projectPackageChildren.size, "Expected the project to contain only 1 child") + assertEquals("MyKotlinClass", projectPackageChildren.single().name) + + + // query for an external documentable that is not part of the project itself + val sourceSet = context.configuration.sourceSets.single() + val deprecationLevelDRI = DRI("kotlin", "DeprecationLevel") + + val deprecationLevelEnum = externalDocumentableProvider.findClasslike(deprecationLevelDRI, sourceSet) + assertNotNull(deprecationLevelEnum) + + assertEquals("DeprecationLevel", deprecationLevelEnum.name) + assertEquals(deprecationLevelDRI, deprecationLevelEnum.dri) + assertTrue(deprecationLevelEnum is DEnum) + assertEquals(3, deprecationLevelEnum.entries.size) + + val warningLevel = deprecationLevelEnum.entries[0] + assertEquals("WARNING", warningLevel.name) + } + } + + @Test + fun `should find a valid external interface from kotlin stdlib`() { + val project = kotlinJvmTestProject { + ktFile("org/jetbrains/test/dokka/MyKotlinFile.kt") { + +"class MyKotlinClass {}" + } + } + + project.useServices { context -> + // first check that Dokka only returns documentables declared in the project by default + // to make sure later that the external documentable is indeed external and not local + val projectPackages = context.module.packages + assertEquals(1, projectPackages.size, "Expected only a single package to be returned") + + val projectPackageChildren = projectPackages.single().children + assertEquals(1, projectPackageChildren.size, "Expected the project to contain only 1 child") + assertEquals("MyKotlinClass", projectPackageChildren.single().name) + + + // query for an external documentable that is not part of the project itself + val sourceSet = context.configuration.sourceSets.single() + val sequenceDRI = DRI("kotlin.sequences", "Sequence") + + val sequenceInterface = externalDocumentableProvider.findClasslike(sequenceDRI, sourceSet) + assertNotNull(sequenceInterface) + + assertEquals("Sequence", sequenceInterface.name) + assertEquals(sequenceDRI, sequenceInterface.dri) + assertTrue(sequenceInterface is DInterface) + + val iteratorFunction = sequenceInterface.functions.firstOrNull { it.name == "iterator" } + assertNotNull(iteratorFunction) + } + } + + @Test + fun `should find a valid external object from kotlin stdlib`() { + val project = kotlinJvmTestProject { + ktFile("org/jetbrains/test/dokka/MyKotlinFile.kt") { + +"class MyKotlinClass {}" + } + } + + project.useServices { context -> + // first check that Dokka only returns documentables declared in the project by default + // to make sure later that the external documentable is indeed external and not local + val projectPackages = context.module.packages + assertEquals(1, projectPackages.size, "Expected only a single package to be returned") + + val projectPackageChildren = projectPackages.single().children + assertEquals(1, projectPackageChildren.size, "Expected the project to contain only 1 child") + assertEquals("MyKotlinClass", projectPackageChildren.single().name) + + + // query for an external documentable that is not part of the project itself + val sourceSet = context.configuration.sourceSets.single() + val emptyCoroutineContextDRI = DRI("kotlin.coroutines", "EmptyCoroutineContext") + + val emptyCoroutineContext = externalDocumentableProvider.findClasslike(emptyCoroutineContextDRI, sourceSet) + assertNotNull(emptyCoroutineContext) + + assertEquals("EmptyCoroutineContext", emptyCoroutineContext.name) + assertEquals(emptyCoroutineContextDRI, emptyCoroutineContext.dri) + assertTrue(emptyCoroutineContext is DObject) + } + } + + @Test + fun `should find a valid external class from a third party library`() { + val project = kotlinJvmTestProject { + dokkaConfiguration { + kotlinSourceSet { + additionalClasspath = setOf( + getResourceAbsolutePath("jars/kotlinx-cli-jvm-0.3.6.jar") + ) + } + } + + ktFile("org/jetbrains/test/dokka/MyKotlinFile.kt") { + +"class MyKotlinClass {}" + } + } + + project.useServices { context -> + // first check that Dokka only returns documentables declared in the project by default + // to make sure later that the external documentable is indeed external and not local + val projectPackages = context.module.packages + assertEquals(1, projectPackages.size, "Expected only a single package to be returned") + + val projectPackageChildren = projectPackages.single().children + assertEquals(1, projectPackageChildren.size, "Expected the project to contain only 1 child") + assertEquals("MyKotlinClass", projectPackageChildren.single().name) + + + // query for an external documentable that is not part of the project itself + val sourceSet = context.configuration.sourceSets.single() + val argTypeDRI = DRI("kotlinx.cli", "ArgType") + + val argTypeClass = externalDocumentableProvider.findClasslike(argTypeDRI, sourceSet) + assertNotNull(argTypeClass) + + assertEquals("ArgType", argTypeClass.name) + assertEquals(argTypeDRI, argTypeClass.dri) + assertTrue(argTypeClass is DClass) + assertEquals(KotlinModifier.Abstract, argTypeClass.modifier.values.single()) + } + } + + @Test + fun `should find a nested interface from java stdlib`() { + val project = kotlinJvmTestProject { + ktFile("org/jetbrains/test/dokka/MyKotlinFile.kt") { + +"class MyKotlinClass {}" + } + } + + project.useServices { context -> + // first check that Dokka only returns documentables declared in the project by default + // to make sure later that the external documentable is indeed external and not local + val projectPackages = context.module.packages + assertEquals(1, projectPackages.size, "Expected only a single package to be returned") + + val projectPackageChildren = projectPackages.single().children + assertEquals(1, projectPackageChildren.size, "Expected the project to contain only 1 child") + assertEquals("MyKotlinClass", projectPackageChildren.single().name) + + + // query for an external documentable that is not part of the project itself + val sourceSet = context.configuration.sourceSets.single() + val mapEntryDRI = DRI("java.util", "Map.Entry") + + val mapEntryInterface = externalDocumentableProvider.findClasslike(mapEntryDRI, sourceSet) + assertNotNull(mapEntryInterface) + + assertEquals("Entry", mapEntryInterface.name) + assertEquals(mapEntryDRI, mapEntryInterface.dri) + assertTrue(mapEntryInterface is DInterface) + } + } + + @Test + fun `should return null for querying non existing dri`() { + val project = kotlinJvmTestProject { + ktFile("org/jetbrains/test/dokka/MyKotlinFile.kt") { + +"class MyKotlinClass {}" + } + } + + project.useServices { context -> + // first check that Dokka only returns documentables declared in the project by default + // to make sure later that the external documentable is indeed external and not local + val projectPackages = context.module.packages + assertEquals(1, projectPackages.size, "Expected only a single package to be returned") + + val projectPackageChildren = projectPackages.single().children + assertEquals(1, projectPackageChildren.size, "Expected the project to contain only 1 child") + assertEquals("MyKotlinClass", projectPackageChildren.single().name) + + + // query for an external documentable that is not part of the project itself + val sourceSet = context.configuration.sourceSets.single() + + val nonExistingDRI = DRI("com.example.pckg", "NonExistingClassname") + val nonExistingClasslike = externalDocumentableProvider.findClasslike(nonExistingDRI, sourceSet) + assertNull(nonExistingClasslike) + } + } +} diff --git a/subprojects/analysis-kotlin-api/src/test/resources/jars/README.md b/subprojects/analysis-kotlin-api/src/test/resources/jars/README.md new file mode 100644 index 0000000000..21f27d406d --- /dev/null +++ b/subprojects/analysis-kotlin-api/src/test/resources/jars/README.md @@ -0,0 +1 @@ +The JARs in this directory can be used as external dependencies for testing purposes. diff --git a/subprojects/analysis-kotlin-api/src/test/resources/jars/kotlinx-cli-jvm-0.3.6.jar b/subprojects/analysis-kotlin-api/src/test/resources/jars/kotlinx-cli-jvm-0.3.6.jar new file mode 100644 index 0000000000000000000000000000000000000000..b4f1e5a45cda23c4d6d8ffb28432e46414e1920a GIT binary patch literal 84592 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 yezAfX9() return TestAnalysisServices( sampleAnalysisEnvironmentCreator = publicAnalysisPlugin.querySingle { sampleAnalysisEnvironmentCreator }, + externalDocumentableProvider = publicAnalysisPlugin.querySingle { externalDocumentableProvider }, moduleAndPackageDocumentationReader = internalAnalysisPlugin.querySingle { moduleAndPackageDocumentationReader } diff --git a/subprojects/analysis-kotlin-api/src/testFixtures/kotlin/org/jetbrains/dokka/analysis/test/api/configuration/TestDokkaConfigurationBuilder.kt b/subprojects/analysis-kotlin-api/src/testFixtures/kotlin/org/jetbrains/dokka/analysis/test/api/configuration/TestDokkaConfigurationBuilder.kt index b6563fb7d0..fc3499eaf8 100644 --- a/subprojects/analysis-kotlin-api/src/testFixtures/kotlin/org/jetbrains/dokka/analysis/test/api/configuration/TestDokkaConfigurationBuilder.kt +++ b/subprojects/analysis-kotlin-api/src/testFixtures/kotlin/org/jetbrains/dokka/analysis/test/api/configuration/TestDokkaConfigurationBuilder.kt @@ -5,6 +5,7 @@ package org.jetbrains.dokka.analysis.test.api.configuration import org.jetbrains.dokka.analysis.test.api.TestProject +import org.jetbrains.dokka.analysis.test.api.util.getResourceAbsolutePath import org.jetbrains.dokka.analysis.test.api.util.AnalysisTestDslMarker /** @@ -66,6 +67,8 @@ abstract class BaseTestDokkaSourceSetBuilder { /** * JARs **additional** to the default classpath. * + * You can put test JARs inside `src/resources`, and then get it via [getResourceAbsolutePath]. + * * @see TestDokkaSourceSet.classpath */ open var additionalClasspath: Set = emptySet() diff --git a/subprojects/analysis-kotlin-api/src/testFixtures/kotlin/org/jetbrains/dokka/analysis/test/api/util/FileUtils.kt b/subprojects/analysis-kotlin-api/src/testFixtures/kotlin/org/jetbrains/dokka/analysis/test/api/util/FileUtils.kt index 779add8d31..924a65462a 100644 --- a/subprojects/analysis-kotlin-api/src/testFixtures/kotlin/org/jetbrains/dokka/analysis/test/api/util/FileUtils.kt +++ b/subprojects/analysis-kotlin-api/src/testFixtures/kotlin/org/jetbrains/dokka/analysis/test/api/util/FileUtils.kt @@ -39,3 +39,24 @@ internal fun withTempDirectory(logger: DokkaLogger? = null, block: (tempDire logger?.debug("Deleted temporary directory $tempDir") } } + +/** + * TODO [external-documentable-provider] add documentation + */ +fun getResourceAbsolutePath(resourcePath: String): String { + val resourceFile = getResourceFile(resourcePath) + require(resourceFile.exists()) { + "Resource file does not exist: $resourcePath" + } + return resourceFile.absolutePath +} + +/** + * TODO [external-documentable-provider] add documentation + */ +fun getResourceFile(resourcePath: String): File { + val resource = object {}.javaClass.classLoader.getResource(resourcePath)?.file + ?: throw IllegalArgumentException("Resource not found: $resourcePath") + + return File(resource) +} diff --git a/subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/CompilerDescriptorAnalysisPlugin.kt b/subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/CompilerDescriptorAnalysisPlugin.kt index e8ebceb02b..5bffaa48f4 100644 --- a/subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/CompilerDescriptorAnalysisPlugin.kt +++ b/subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/CompilerDescriptorAnalysisPlugin.kt @@ -18,7 +18,7 @@ import org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.impl.* import org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.impl.moduledocs.ModuleAndPackageDocumentationReader import org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.java.* import org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.translator.DefaultDescriptorToDocumentableTranslator -import org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.translator.DefaultExternalDocumentablesProvider +import org.jetbrains.dokka.analysis.kotlin.descriptors.compiler.translator.DescriptorExternalDocumentablesProvider import org.jetbrains.dokka.renderers.PostAction import org.jetbrains.dokka.analysis.kotlin.internal.InternalKotlinAnalysisPlugin import org.jetbrains.dokka.plugability.* @@ -95,8 +95,8 @@ public class CompilerDescriptorAnalysisPlugin : DokkaPlugin() { plugin().inheritanceBuilder providing { DescriptorInheritanceBuilder() } } - internal val defaultExternalDocumentablesProvider by extending { - plugin().externalDocumentablesProvider providing ::DefaultExternalDocumentablesProvider + internal val descriptorExternalDocumentableProvider by extending { + plugin().externalDocumentableProvider providing ::DescriptorExternalDocumentablesProvider } private val javaAnalysisPlugin by lazy { plugin() } diff --git a/subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DefaultExternalDocumentablesProvider.kt b/subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DescriptorExternalDocumentablesProvider.kt similarity index 91% rename from subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DefaultExternalDocumentablesProvider.kt rename to subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DescriptorExternalDocumentablesProvider.kt index 006a990ba6..946b2272c2 100644 --- a/subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DefaultExternalDocumentablesProvider.kt +++ b/subprojects/analysis-kotlin-descriptors/compiler/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/descriptors/compiler/translator/DescriptorExternalDocumentablesProvider.kt @@ -11,7 +11,7 @@ import org.jetbrains.dokka.model.DClasslike import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.plugin import org.jetbrains.dokka.plugability.querySingle -import org.jetbrains.dokka.analysis.kotlin.internal.ExternalDocumentablesProvider +import org.jetbrains.dokka.analysis.kotlin.documentable.ExternalDocumentableProvider import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.PackageViewDescriptor @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.resolve.scopes.getDescriptorsFiltered -internal class DefaultExternalDocumentablesProvider(context: DokkaContext) : ExternalDocumentablesProvider { +internal class DescriptorExternalDocumentablesProvider(context: DokkaContext) : ExternalDocumentableProvider { private val analysis = context.plugin().querySingle { kotlinAnalysis } private val translator: ExternalClasslikesTranslator = DefaultDescriptorToDocumentableTranslator(context) diff --git a/subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/plugin/SymbolsAnalysisPlugin.kt b/subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/plugin/SymbolsAnalysisPlugin.kt index 23bb0dc554..d8b171b90f 100644 --- a/subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/plugin/SymbolsAnalysisPlugin.kt +++ b/subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/plugin/SymbolsAnalysisPlugin.kt @@ -114,8 +114,8 @@ public class SymbolsAnalysisPlugin : DokkaPlugin() { plugin().inheritanceBuilder providing ::SymbolInheritanceBuilder } - internal val symbolExternalDocumentablesProvider by extending { - plugin().externalDocumentablesProvider providing ::SymbolExternalDocumentablesProvider + internal val symbolExternalDocumentableProvider by extending { + plugin().externalDocumentableProvider providing ::SymbolExternalDocumentablesProvider } internal val symbolSampleAnalysisEnvironmentCreator by extending { diff --git a/subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/services/SymbolExternalDocumentablesProvider.kt b/subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/services/SymbolExternalDocumentablesProvider.kt index 1473a7da15..97b12ae25e 100644 --- a/subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/services/SymbolExternalDocumentablesProvider.kt +++ b/subprojects/analysis-kotlin-symbols/src/main/kotlin/org/jetbrains/dokka/analysis/kotlin/symbols/services/SymbolExternalDocumentablesProvider.kt @@ -16,9 +16,9 @@ import org.jetbrains.dokka.plugability.plugin import org.jetbrains.dokka.plugability.querySingle import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol -import org.jetbrains.dokka.analysis.kotlin.internal.ExternalDocumentablesProvider +import org.jetbrains.dokka.analysis.kotlin.documentable.ExternalDocumentableProvider -internal class SymbolExternalDocumentablesProvider(val context: DokkaContext) : ExternalDocumentablesProvider { +internal class SymbolExternalDocumentablesProvider(val context: DokkaContext) : ExternalDocumentableProvider { private val kotlinAnalysis = context.plugin().querySingle { kotlinAnalysis } override fun findClasslike(dri: DRI, sourceSet: DokkaSourceSet): DClasslike? {