-
Notifications
You must be signed in to change notification settings - Fork 405
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Suppress tag support * Support Hide tag in javadoc * Extract hide tag to be in separate plugin
- Loading branch information
1 parent
201a978
commit c01e49e
Showing
19 changed files
with
459 additions
and
12 deletions.
There are no files selected for viewing
8 changes: 8 additions & 0 deletions
8
docs/src/doc/docs/user_guide/android-plugin/android-plugin.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
# Android documentationn plugin | ||
|
||
Android documentation plugin aims to improve the documentation on android platform. | ||
|
||
### Features: | ||
|
||
* `@hide` support - `@hide` javadoc tag is an equivalent of `@suppress` tag in kdoc. It hides certain entry from being | ||
displayed in the documentation. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
import org.jetbrains.registerDokkaArtifactPublication | ||
|
||
dependencies { | ||
implementation(project(":plugins:base")) | ||
testImplementation(project(":plugins:base")) | ||
testImplementation(project(":plugins:base:base-test-utils")) | ||
} | ||
|
||
registerDokkaArtifactPublication("androidDocumentationPlugin") { | ||
artifactId = "android-documentation-plugin" | ||
} |
13 changes: 13 additions & 0 deletions
13
plugins/android-documentation/src/main/kotlin/AndroidDocumentationPlugin.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package org.jetbrains.dokka.android | ||
|
||
import org.jetbrains.dokka.android.transformers.HideTagDocumentableFilter | ||
import org.jetbrains.dokka.base.DokkaBase | ||
import org.jetbrains.dokka.plugability.DokkaPlugin | ||
|
||
class AndroidDocumentationPlugin : DokkaPlugin() { | ||
private val dokkaBase by lazy { plugin<DokkaBase>() } | ||
|
||
val suppressedByHideTagDocumentableFilter by extending { | ||
dokkaBase.preMergeDocumentableTransformer providing ::HideTagDocumentableFilter order { before(dokkaBase.emptyPackagesFilter) } | ||
} | ||
} |
13 changes: 13 additions & 0 deletions
13
plugins/android-documentation/src/main/kotlin/transformers/HideTagDocumentableFilter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package org.jetbrains.dokka.android.transformers | ||
|
||
import org.jetbrains.dokka.base.transformers.documentables.SuppressedByTagDocumentableFilterTransformer | ||
import org.jetbrains.dokka.model.Documentable | ||
import org.jetbrains.dokka.model.dfs | ||
import org.jetbrains.dokka.model.doc.CustomTagWrapper | ||
import org.jetbrains.dokka.plugability.DokkaContext | ||
|
||
class HideTagDocumentableFilter(val dokkaContext: DokkaContext) : | ||
SuppressedByTagDocumentableFilterTransformer(dokkaContext) { | ||
override fun shouldBeSuppressed(d: Documentable): Boolean = | ||
d.documentation.any { (_, docs) -> docs.dfs { it is CustomTagWrapper && it.name.trim() == "hide" } != null } | ||
} |
1 change: 1 addition & 0 deletions
1
...entation/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
org.jetbrains.dokka.android.AndroidDocumentationPlugin |
71 changes: 71 additions & 0 deletions
71
plugins/android-documentation/src/test/kotlin/transformers/HideTagDocumentableFilterTest.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package transformers | ||
|
||
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest | ||
import org.jetbrains.dokka.model.DClass | ||
import kotlin.test.assertEquals | ||
import org.junit.jupiter.api.Test | ||
|
||
class HideTagDocumentableFilterTest : BaseAbstractTest() { | ||
private val configuration = dokkaConfiguration { | ||
sourceSets { | ||
sourceSet { | ||
sourceRoots = listOf("src") | ||
} | ||
} | ||
} | ||
|
||
|
||
@Test | ||
fun `should work as hide in java with functions`() { | ||
testInline( | ||
""" | ||
|/src/suppressed/Testing.java | ||
|package testing; | ||
| | ||
|public class Testing { | ||
| /** | ||
| * @hide | ||
| */ | ||
| public void shouldNotBeVisible() { } | ||
|} | ||
""".trimIndent(), configuration | ||
) { | ||
documentablesFirstTransformationStep = { modules -> | ||
val testingClass = modules.flatMap { it.packages }.flatMap { it.classlikes }.single() as DClass | ||
assertEquals(0, testingClass.functions.size) | ||
} | ||
} | ||
} | ||
|
||
@Test | ||
fun `should work as hide in java with classes`() { | ||
testInline( | ||
""" | ||
|/src/suppressed/Suppressed.java | ||
|package testing; | ||
| | ||
|/** | ||
| * @hide | ||
| */ | ||
|public class Suppressed { | ||
|} | ||
|/src/suppressed/Visible.java | ||
|package testing; | ||
| | ||
|/** | ||
| * Another docs | ||
| * @undeprecate | ||
| */ | ||
|public class Visible { | ||
|} | ||
""".trimIndent(), configuration | ||
) { | ||
documentablesFirstTransformationStep = { modules -> | ||
val classes = modules.flatMap { it.packages }.flatMap { it.classlikes }.map { it.name } | ||
assertEquals(listOf("Visible"), classes) | ||
} | ||
} | ||
} | ||
|
||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
plugins/base/src/main/kotlin/transformers/documentables/SuppressTagDocumentableFilter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package org.jetbrains.dokka.base.transformers.documentables | ||
|
||
import org.jetbrains.dokka.model.Documentable | ||
import org.jetbrains.dokka.model.dfs | ||
import org.jetbrains.dokka.plugability.DokkaContext | ||
import org.jetbrains.dokka.model.doc.Suppress | ||
|
||
class SuppressTagDocumentableFilter(val dokkaContext: DokkaContext) : | ||
SuppressedByTagDocumentableFilterTransformer(dokkaContext) { | ||
override fun shouldBeSuppressed(d: Documentable): Boolean = | ||
d.documentation.any { (_, docs) -> docs.dfs { it is Suppress } != null } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
110 changes: 110 additions & 0 deletions
110
...rc/main/kotlin/transformers/documentables/SuppressedByTagDocumentableFilterTransformer.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
package org.jetbrains.dokka.base.transformers.documentables | ||
|
||
import org.jetbrains.dokka.model.* | ||
import org.jetbrains.dokka.plugability.DokkaContext | ||
import org.jetbrains.dokka.transformers.documentation.PreMergeDocumentableTransformer | ||
|
||
abstract class SuppressedByTagDocumentableFilterTransformer(val context: DokkaContext) : PreMergeDocumentableTransformer { | ||
override fun invoke(modules: List<DModule>): List<DModule> = | ||
modules.map { module -> | ||
val (documentable, wasChanged) = processModule(module) | ||
documentable.takeIf { wasChanged } ?: module | ||
} | ||
|
||
abstract fun shouldBeSuppressed(d: Documentable): Boolean | ||
|
||
private fun processModule(module: DModule): DocumentableWithChanges<DModule> { | ||
val afterProcessing = module.packages.map { processPackage(it) } | ||
val processedModule = module.takeIf { afterProcessing.none { it.changed } } | ||
?: module.copy(packages = afterProcessing.mapNotNull { it.documentable }) | ||
return DocumentableWithChanges(processedModule, afterProcessing.any { it.changed }) | ||
} | ||
|
||
private fun processPackage(dPackage: DPackage): DocumentableWithChanges<DPackage> { | ||
val classlikes = dPackage.classlikes.map { processClassLike(it) } | ||
val typeAliases = dPackage.typealiases.map { processMember(it) } | ||
val functions = dPackage.functions.map { processMember(it) } | ||
val properies = dPackage.properties.map { processMember(it) } | ||
|
||
val wasChanged = (classlikes + typeAliases + functions + properies).any { it.changed } | ||
return (dPackage.takeIf { !wasChanged } ?: dPackage.copy( | ||
classlikes = classlikes.mapNotNull { it.documentable }, | ||
typealiases = typeAliases.mapNotNull { it.documentable }, | ||
functions = functions.mapNotNull { it.documentable }, | ||
properties = properies.mapNotNull { it.documentable } | ||
)).let { processedPackage -> DocumentableWithChanges(processedPackage, wasChanged) } | ||
} | ||
|
||
private fun processClassLike(classlike: DClasslike): DocumentableWithChanges<DClasslike> { | ||
if (shouldBeSuppressed(classlike)) return DocumentableWithChanges.filteredDocumentable() | ||
|
||
val functions = classlike.functions.map { processMember(it) } | ||
val classlikes = classlike.classlikes.map { processClassLike(it) } | ||
val properties = classlike.properties.map { processMember(it) } | ||
val companion = (classlike as? WithCompanion)?.companion?.let { processClassLike(it) } | ||
|
||
val wasClasslikeChanged = (functions + classlikes + properties).any { it.changed } || companion?.changed == true | ||
return when (classlike) { | ||
is DClass -> { | ||
val constructors = classlike.constructors.map { processMember(it) } | ||
val wasClassChange = | ||
wasClasslikeChanged || constructors.any { it.changed } | ||
(classlike.takeIf { !wasClassChange } ?: classlike.copy( | ||
functions = functions.mapNotNull { it.documentable }, | ||
classlikes = classlikes.mapNotNull { it.documentable }, | ||
properties = properties.mapNotNull { it.documentable }, | ||
constructors = constructors.mapNotNull { it.documentable }, | ||
companion = companion?.documentable as? DObject | ||
)).let { DocumentableWithChanges(it, wasClassChange) } | ||
} | ||
is DInterface -> (classlike.takeIf { !wasClasslikeChanged } ?: classlike.copy( | ||
functions = functions.mapNotNull { it.documentable }, | ||
classlikes = classlikes.mapNotNull { it.documentable }, | ||
properties = properties.mapNotNull { it.documentable }, | ||
companion = companion?.documentable as? DObject | ||
)).let { DocumentableWithChanges(it, wasClasslikeChanged) } | ||
is DObject -> (classlike.takeIf { !wasClasslikeChanged } ?: classlike.copy( | ||
functions = functions.mapNotNull { it.documentable }, | ||
classlikes = classlikes.mapNotNull { it.documentable }, | ||
properties = properties.mapNotNull { it.documentable }, | ||
)).let { DocumentableWithChanges(it, wasClasslikeChanged) } | ||
is DAnnotation -> { | ||
val constructors = classlike.constructors.map { processMember(it) } | ||
val wasClassChange = | ||
wasClasslikeChanged || constructors.any { it.changed } | ||
(classlike.takeIf { !wasClassChange } ?: classlike.copy( | ||
functions = functions.mapNotNull { it.documentable }, | ||
classlikes = classlikes.mapNotNull { it.documentable }, | ||
properties = properties.mapNotNull { it.documentable }, | ||
constructors = constructors.mapNotNull { it.documentable }, | ||
companion = companion?.documentable as? DObject | ||
)).let { DocumentableWithChanges(it, wasClassChange) } | ||
} | ||
is DEnum -> { | ||
val constructors = classlike.constructors.map { processMember(it) } | ||
val entries = classlike.entries.map { processMember(it) } | ||
val wasClassChange = | ||
wasClasslikeChanged || (constructors + entries).any { it.changed } | ||
(classlike.takeIf { !wasClassChange } ?: classlike.copy( | ||
functions = functions.mapNotNull { it.documentable }, | ||
classlikes = classlikes.mapNotNull { it.documentable }, | ||
properties = properties.mapNotNull { it.documentable }, | ||
constructors = constructors.mapNotNull { it.documentable }, | ||
companion = companion?.documentable as? DObject, | ||
entries = entries.mapNotNull { it.documentable } | ||
)).let { DocumentableWithChanges(it, wasClassChange) } | ||
} | ||
} | ||
} | ||
|
||
private fun <T : Documentable> processMember(member: T): DocumentableWithChanges<T> = | ||
if (shouldBeSuppressed(member)) DocumentableWithChanges.filteredDocumentable() | ||
else DocumentableWithChanges(member, false) | ||
|
||
private data class DocumentableWithChanges<T : Documentable>(val documentable: T?, val changed: Boolean = false) { | ||
companion object { | ||
fun <T : Documentable> filteredDocumentable(): DocumentableWithChanges<T> = | ||
DocumentableWithChanges(null, true) | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
plugins/base/src/main/kotlin/translators/psi/parsers/JavadocTag.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.