Skip to content

Commit

Permalink
Hide derived members that are not public
Browse files Browse the repository at this point in the history
  • Loading branch information
BarkingBad committed Sep 11, 2020
1 parent 1e6579c commit 3f89a46
Show file tree
Hide file tree
Showing 2 changed files with 183 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,15 @@ private class DokkaDescriptorVisitor(
)
}

override fun visitPropertyDescriptor(descriptor: PropertyDescriptor, parent: DRIWithPlatformInfo): DProperty {
val dri = parent.dri.copy(callable = Callable.from(descriptor))
override fun visitPropertyDescriptor(originalDescriptor: PropertyDescriptor, parent: DRIWithPlatformInfo): DProperty {
val dri = parent.dri.copy(callable = Callable.from(originalDescriptor))

fun PropertyDescriptor.getConcreteDescriptor(): PropertyDescriptor =
if (kind != CallableMemberDescriptor.Kind.FAKE_OVERRIDE) this
else overriddenDescriptors.first().getConcreteDescriptor()

val descriptor = originalDescriptor.getConcreteDescriptor()

val isExpect = descriptor.isExpect
val isActual = descriptor.isActual

Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
package translators

import org.jetbrains.dokka.model.*
import org.junit.jupiter.api.Assertions.*
import org.jetbrains.dokka.model.doc.CodeBlock
import org.jetbrains.dokka.model.doc.P
import org.jetbrains.dokka.model.doc.Text
import org.jetbrains.dokka.testApi.testRunner.AbstractCoreTest
import org.junit.Assert
import org.junit.jupiter.api.Test

class DefaultDescriptorToDocumentableTranslatorTest : AbstractCoreTest() {
val configuration = dokkaConfiguration {
sourceSets {
sourceSet {
sourceRoots = listOf("src/main/kotlin")
includeNonPublic = true
}
}
}
Expand Down Expand Up @@ -147,4 +150,174 @@ class DefaultDescriptorToDocumentableTranslatorTest : AbstractCoreTest() {
}
}
}
}

sealed class TestSuite {
abstract val propertyName: String

data class PropertyDoesntExist(
override val propertyName: String
) : TestSuite()


data class PropertyExists(
override val propertyName: String,
val modifier: KotlinModifier,
val visibility: KotlinVisibility,
val additionalModifiers: Set<ExtraModifiers.KotlinOnlyModifiers>
) : TestSuite()
}

fun runTestSuitesAgainstGivenClasses(classlikes: List<DClasslike>, testSuites: List<List<TestSuite>>) {
classlikes.zip(testSuites).forEach { (classlike, testSuites) ->
testSuites.forEach { testSuite ->
classlike.properties.firstOrNull { it.name == testSuite.propertyName }.run {
when (testSuite) {
is TestSuite.PropertyDoesntExist -> Assert.assertEquals("Test for class ${classlike.name} failed", null, this)
is TestSuite.PropertyExists -> {
this!!
Assert.assertEquals("Test for class ${classlike.name} with property $name failed", testSuite.modifier, modifier.values.single())
Assert.assertEquals("Test for class ${classlike.name} with property $name failed", testSuite.visibility, visibility.values.single())
Assert.assertEquals("Test for class ${classlike.name} with property $name failed", testSuite.additionalModifiers, extra[AdditionalModifiers]?.content?.values?.single())
}
}
}
}
}
}

@Test
fun `derived properties with includeNonPublic`() {

val configuration = dokkaConfiguration {
sourceSets {
sourceSet {
sourceRoots = listOf("src/main/kotlin")
includeNonPublic = true
}
}
}

testInline(
"""
|/src/main/kotlin/sample/XD.kt
|package sample
|
|open class A {
| private val privateProperty: Int = 1
| protected val protectedProperty: Int = 2
| internal val internalProperty: Int = 3
| val publicProperty: Int = 4
| open val propertyToOverride: Int = 5
|}
|
|open class B : A() {
| override val propertyToOverride: Int = 6
|}
|class C : B()
""".trimIndent(),
configuration
) {

documentablesMergingStage = { module ->
val classes = module.packages.single().classlikes.sortedBy { it.name }

val testSuites: List<List<TestSuite>> = listOf(
listOf(
TestSuite.PropertyExists("privateProperty", KotlinModifier.Final, KotlinVisibility.Private, emptySet()),
TestSuite.PropertyExists("protectedProperty", KotlinModifier.Final, KotlinVisibility.Protected, emptySet()),
TestSuite.PropertyExists("internalProperty", KotlinModifier.Final, KotlinVisibility.Internal, emptySet()),
TestSuite.PropertyExists("publicProperty", KotlinModifier.Final, KotlinVisibility.Public, emptySet()),
TestSuite.PropertyExists("propertyToOverride", KotlinModifier.Open, KotlinVisibility.Public, emptySet())
),
listOf(
TestSuite.PropertyExists("privateProperty", KotlinModifier.Final, KotlinVisibility.Private, emptySet()),
TestSuite.PropertyExists("protectedProperty", KotlinModifier.Final, KotlinVisibility.Protected, emptySet()),
TestSuite.PropertyExists("internalProperty", KotlinModifier.Final, KotlinVisibility.Internal, emptySet()),
TestSuite.PropertyExists("publicProperty", KotlinModifier.Final, KotlinVisibility.Public, emptySet()),
TestSuite.PropertyExists("propertyToOverride", KotlinModifier.Open, KotlinVisibility.Public, setOf(ExtraModifiers.KotlinOnlyModifiers.Override))
),
listOf(
TestSuite.PropertyExists("privateProperty", KotlinModifier.Final, KotlinVisibility.Private, emptySet()),
TestSuite.PropertyExists("protectedProperty", KotlinModifier.Final, KotlinVisibility.Protected, emptySet()),
TestSuite.PropertyExists("internalProperty", KotlinModifier.Final, KotlinVisibility.Internal, emptySet()),
TestSuite.PropertyExists("publicProperty", KotlinModifier.Final, KotlinVisibility.Public, emptySet()),
TestSuite.PropertyExists("propertyToOverride", KotlinModifier.Open, KotlinVisibility.Public, setOf(ExtraModifiers.KotlinOnlyModifiers.Override))
)
)

runTestSuitesAgainstGivenClasses(classes, testSuites)
}
}
}


@Test
fun `derived properties with no includeNonPublic`() {

val configuration = dokkaConfiguration {
sourceSets {
sourceSet {
sourceRoots = listOf("src/main/kotlin")
includeNonPublic = false
}
}
}

testInline(
"""
|/src/main/kotlin/sample/XD.kt
|package sample
|
|open class A {
| private val privateProperty: Int = 1
| protected val protectedProperty: Int = 2
| internal val internalProperty: Int = 3
| val publicProperty: Int = 4
| open val propertyToOverride: Int = 5
| open val propertyToOverrideButCloseMeanwhile: Int = 7
|}
|
|open class B : A() {
| override val propertyToOverride: Int = 6
| final override val propertyToOverrideButCloseMeanwhile: Int = 8
|}
|class C : B()
""".trimIndent(),
configuration
) {

documentablesMergingStage = { module ->
val classes = module.packages.single().classlikes.sortedBy { it.name }

val testSuites: List<List<TestSuite>> = listOf(
listOf(
TestSuite.PropertyDoesntExist("privateProperty"),
TestSuite.PropertyDoesntExist("protectedProperty"),
TestSuite.PropertyDoesntExist("internalProperty"),
TestSuite.PropertyExists("publicProperty", KotlinModifier.Final, KotlinVisibility.Public, emptySet()),
TestSuite.PropertyExists("propertyToOverride", KotlinModifier.Open, KotlinVisibility.Public, emptySet()),
TestSuite.PropertyExists("propertyToOverrideButCloseMeanwhile", KotlinModifier.Open, KotlinVisibility.Public, emptySet()),
),
listOf(
TestSuite.PropertyDoesntExist("privateProperty"),
TestSuite.PropertyDoesntExist("protectedProperty"),
TestSuite.PropertyDoesntExist("internalProperty"),
TestSuite.PropertyExists("publicProperty", KotlinModifier.Final, KotlinVisibility.Public, emptySet()),
TestSuite.PropertyExists("propertyToOverride", KotlinModifier.Open, KotlinVisibility.Public, setOf(ExtraModifiers.KotlinOnlyModifiers.Override)),
TestSuite.PropertyExists("propertyToOverrideButCloseMeanwhile", KotlinModifier.Final, KotlinVisibility.Public, setOf(ExtraModifiers.KotlinOnlyModifiers.Override))
),
listOf(
TestSuite.PropertyDoesntExist("privateProperty"),
TestSuite.PropertyDoesntExist("protectedProperty"),
TestSuite.PropertyDoesntExist("internalProperty"),
TestSuite.PropertyExists("publicProperty", KotlinModifier.Final, KotlinVisibility.Public, emptySet()),
TestSuite.PropertyExists("propertyToOverride", KotlinModifier.Open, KotlinVisibility.Public, setOf(ExtraModifiers.KotlinOnlyModifiers.Override)),
TestSuite.PropertyExists("propertyToOverrideButCloseMeanwhile", KotlinModifier.Final, KotlinVisibility.Public, setOf(ExtraModifiers.KotlinOnlyModifiers.Override))
)
)

runTestSuitesAgainstGivenClasses(classes, testSuites)
}
}
}
}

0 comments on commit 3f89a46

Please sign in to comment.