Skip to content

Commit

Permalink
[K2] Add external modifier for properties
Browse files Browse the repository at this point in the history
  • Loading branch information
vmishenev committed May 16, 2024
1 parent 2d45e27 commit 05ffd79
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -926,7 +926,8 @@ internal class DokkaSymbolVisitor(
ExtraModifiers.KotlinOnlyModifiers.Const.takeIf { (this as? KtKotlinPropertySymbol)?.isConst == true },
ExtraModifiers.KotlinOnlyModifiers.LateInit.takeIf { (this as? KtKotlinPropertySymbol)?.isLateInit == true },
//ExtraModifiers.JavaOnlyModifiers.Static.takeIf { isJvmStaticInObjectOrClassOrInterface() },
//ExtraModifiers.KotlinOnlyModifiers.External.takeIf { isExternal },
// TODO https://youtrack.jetbrains.com/issue/KT-68236/Analysis-API-add-isExternal-property-for-KtPropertySymbol
ExtraModifiers.KotlinOnlyModifiers.External.takeIf { (psi as? KtProperty)?.hasModifier(KtTokens.EXTERNAL_KEYWORD) == true },
//ExtraModifiers.KotlinOnlyModifiers.Static.takeIf { isStatic },
ExtraModifiers.KotlinOnlyModifiers.Override.takeIf { isOverride }
).toSet().takeUnless { it.isEmpty() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ package multiplatform
import org.jetbrains.dokka.base.signatures.KotlinSignatureUtils.driOrNull
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.model.DFunction
import org.jetbrains.dokka.model.dfs
import org.jetbrains.dokka.model.*
import utils.OnlySymbols
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue

class BasicMultiplatformTest : BaseAbstractTest() {

Expand Down Expand Up @@ -110,4 +110,47 @@ class BasicMultiplatformTest : BaseAbstractTest() {
}
}
}

@Test
fun `fun and should have external modifier`() {
val configuration = dokkaConfiguration {
sourceSets {
sourceSet {
name = "js"
displayName = "js"
analysisPlatform = "js"
sourceRoots = listOf("src/main/kotlin/js/Test.kt")
}
}
}

testInline(
"""
|/src/main/kotlin/js/Test.kt
|package multiplatform
|
|external fun fn(): Unit
|external val x: String
""".trimMargin(),
configuration
) {
documentablesMergingStage = {
fun DProperty.hasModifier(modifier: ExtraModifiers.KotlinOnlyModifiers): Boolean =
extra[AdditionalModifiers]
?.content
?.any { (_, modifiers) -> modifier in modifiers } == true

fun DFunction.hasModifier(modifier: ExtraModifiers.KotlinOnlyModifiers): Boolean =
extra[AdditionalModifiers]
?.content
?.any { (_, modifiers) -> modifier in modifiers } == true

val fn = it.dfs { it is DFunction && it.name == "fn" } as DFunction
assertTrue(fn.hasModifier(ExtraModifiers.KotlinOnlyModifiers.External))

val prop = it.dfs { it is DProperty && it.name == "x" } as DProperty
assertTrue(prop.hasModifier(ExtraModifiers.KotlinOnlyModifiers.External))
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.DokkaConfigurationImpl
import org.jetbrains.dokka.DokkaSourceSetID
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest
import org.jetbrains.dokka.model.DFunction
import org.jetbrains.dokka.model.DefinitelyNonNullable
import org.jetbrains.dokka.model.dfs
import org.jetbrains.dokka.model.*
import org.jsoup.nodes.Element
import utils.*
import kotlin.test.Test
Expand Down Expand Up @@ -1602,6 +1600,44 @@ class SignatureTest : BaseAbstractTest() {
)
}

@Test
fun `fun and should have external modifier`() {
val writerPlugin = TestOutputWriterPlugin()
val configuration = dokkaConfiguration {
sourceSets {
sourceSet {
name = "js"
displayName = "js"
analysisPlatform = "js"
classpath = listOf(commonStdlibPath ?: throw IllegalStateException("Common stdlib is not found"))
sourceRoots = listOf("src/main/kotlin/js/Test.kt")
externalDocumentationLinks = listOf(stdlibExternalDocumentationLink)
}
}
}

testInline(
"""
|/src/main/kotlin/js/Test.kt
|package multiplatform
|
|external fun fn(): Unit
|external val x: String
""".trimMargin(), configuration = configuration, pluginOverrides = listOf(writerPlugin)
) {
renderingStage = { _, _ ->
val signatures =
writerPlugin.writer.renderedContent("root/multiplatform/index.html").signature().toList()
signatures[0].match(
"external val ", A("x"), ": ", A("String"), ignoreSpanWithTokenStyle = true
)
signatures[1].match(
"external fun", A("fn"), "()", ignoreSpanWithTokenStyle = true
)
}
}
}

private fun testRender(
query: String,
configuration: DokkaConfigurationImpl = this.configuration,
Expand Down

0 comments on commit 05ffd79

Please sign in to comment.