Implement enum values
Test: new test in ClasslikeDocumentableConverterTest; old test in simple
Fixes: 170299346
Change-Id: I5a82263f0f26f38b69a15bb88c19926bfe486709
diff --git a/src/main/java/com/google/devsite/renderer/converters/ClasslikeDocumentableConverter.kt b/src/main/java/com/google/devsite/renderer/converters/ClasslikeDocumentableConverter.kt
index 945bf35..3cf5791 100644
--- a/src/main/java/com/google/devsite/renderer/converters/ClasslikeDocumentableConverter.kt
+++ b/src/main/java/com/google/devsite/renderer/converters/ClasslikeDocumentableConverter.kt
@@ -44,6 +44,8 @@
import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.links.parent
import org.jetbrains.dokka.model.DClasslike
+import org.jetbrains.dokka.model.DEnum
+import org.jetbrains.dokka.model.DEnumEntry
import org.jetbrains.dokka.model.DFunction
import org.jetbrains.dokka.model.DInterface
import org.jetbrains.dokka.model.DProperty
@@ -65,6 +67,8 @@
FunctionDocumentableConverter(displayLanguage, pathProvider, javadocConverter)
private val propertyConverter =
PropertyDocumentableConverter(displayLanguage, pathProvider, javadocConverter)
+ private val enumConverter =
+ EnumValueDocumentableConverter(displayLanguage, pathProvider, javadocConverter)
/** @return the classlike component */
suspend fun classlike(): DevsitePage = coroutineScope {
@@ -83,10 +87,15 @@
declaredProperties = declaredProperties.sortedBy { it.name }
inheritedFunctions = inheritedFunctions.sortedBy { it.name }
+ val enumValues = (classlike as? DEnum)?.entries.orEmpty().sortedBy { it.name }
+
val declaredConstructors = (classlike as? WithConstructors)?.constructors.orEmpty()
.sortedBy { it.parameters.size }
val annotations = (classlike as? WithExtraProperties<*>)?.annotations().orEmpty()
+ val enumValuesSummary = async {
+ enumValuesToSummary(enumValuesTitle(), enumValues)
+ }
val nestedTypesSummary = async {
typesToSummary(docsHolder.classlikesFor(classlike))
}
@@ -121,6 +130,8 @@
functionsToSummary(protectedMethodsTitle(), declaredFunctions.filter(::isProtected))
}
+ val enumDetails =
+ async { enumValuesToDetail(enumValues) }
val constants =
async { propertiesToDetail(declaredProperties.constants()) }
val publicProperties =
@@ -143,6 +154,10 @@
val allSymbols = listOf(
nestedTypesSummary.await() to Classlike.SymbolType(nestedTypesTitle(), emptyList()),
+ enumValuesSummary.await() to Classlike.SymbolType(
+ enumValuesTitle(),
+ enumDetails.await()
+ ),
constantsSummary.await() to Classlike.SymbolType(
constantsTitle(),
constants.await()
@@ -268,6 +283,22 @@
}
}
+ private fun enumValuesToSummary(title: String, enumVals: List<DEnumEntry>): SummaryList {
+ val modifierHints = ModifierHints(displayLanguage, isSummary = true, false)
+ val components = enumVals.map { enumConverter.summary(it, modifierHints) }
+ return DefaultSummaryList(
+ SummaryList.Params(
+ header = DefaultTableTitle(
+ TableTitle.Params(
+ title = title,
+ big = true
+ )
+ ),
+ items = components
+ )
+ )
+ }
+
private fun propertiesToSummary(name: String, properties: List<DProperty>): SummaryList {
val modifierHints = ModifierHints(displayLanguage, isSummary = true, isInterface())
val components = properties.map {
@@ -294,6 +325,13 @@
}
}
+ private fun enumValuesToDetail(enumValues: List<DEnumEntry>): List<SymbolDetail> {
+ val modifierHints = ModifierHints(displayLanguage, isSummary = false, isInterface())
+ return enumValues.map {
+ enumConverter.detail(it, modifierHints)
+ }
+ }
+
private suspend fun computeSignature(): ClassSignature {
val modifiers = if (classlike is WithAbstraction && classlike is WithExtraProperties<*>) {
classlike.modifiers().modifiersFor(ModifierHints(displayLanguage = displayLanguage))
@@ -488,4 +526,5 @@
}
private fun constantsTitle() = "Constants"
+ private fun enumValuesTitle() = "Enum Values"
}
diff --git a/src/main/java/com/google/devsite/renderer/converters/EnumValueDocumentableConverter.kt b/src/main/java/com/google/devsite/renderer/converters/EnumValueDocumentableConverter.kt
new file mode 100644
index 0000000..16e7d87
--- /dev/null
+++ b/src/main/java/com/google/devsite/renderer/converters/EnumValueDocumentableConverter.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.devsite.renderer.converters
+
+import com.google.devsite.components.Raw
+import com.google.devsite.components.impl.DefaultPropertySignature
+import com.google.devsite.components.impl.DefaultRaw
+import com.google.devsite.components.impl.DefaultSymbolDetail
+import com.google.devsite.components.impl.DefaultTwoPaneSummaryItem
+import com.google.devsite.components.symbols.PropertySignature
+import com.google.devsite.components.symbols.SymbolDetail
+import com.google.devsite.components.table.TwoPaneSummaryItem
+import com.google.devsite.renderer.Language
+import com.google.devsite.renderer.impl.paths.FilePathProvider
+import org.jetbrains.dokka.model.DEnumEntry
+
+/** Converts documentable DEnumEntrys into EnumValue components. */
+internal class EnumValueDocumentableConverter(
+ private val displayLanguage: Language,
+ private val pathProvider: FilePathProvider,
+ private val javadocConverter: DocTagConverter
+) {
+ private val paramConverter = ParameterDocumentableConverter(displayLanguage, pathProvider)
+
+ /** @return the enum value summary component */
+ fun summary(enumValue: DEnumEntry, modifierHints: ModifierHints): TwoPaneSummaryItem {
+ val annotations = enumValue.annotations()
+ return DefaultTwoPaneSummaryItem(
+ TwoPaneSummaryItem.Params(
+ title = DefaultRaw(Raw.Params(enumValue.name)),
+ description = javadocConverter.summaryDescription(enumValue, annotations)
+ )
+ )
+ }
+
+ /** @return the enum detail component */
+ fun detail(enumValue: DEnumEntry, hints: ModifierHints): SymbolDetail {
+ val annotations = enumValue.annotations()
+ val projection = paramConverter.componentForProjection(
+ // We need to get a projection representation of the class of the DEnumEmtry
+ // Unfortunately, this is not stored straightforwardly in Jetbrains' architecture
+ // So we know that compareTo is T.compareTo(T other), so we can get the classlike of the
+ // DEnumEntry by looking at the parameter type of its compareTo method
+ enumValue.functions.first { it.name == "compareTo" }.parameters.single().type
+ )
+ return DefaultSymbolDetail(
+ SymbolDetail.Params(
+ displayLanguage = displayLanguage,
+ name = enumValue.name,
+ anchors = enumValue.generateAnchors(),
+ annotations = annotations.annotationComponents(
+ pathProvider,
+ displayLanguage,
+ false
+ ),
+ modifiers = enumValue.getExtraModifiers().modifiersFor(hints),
+ returnType = projection,
+ symbolType = SymbolDetail.SymbolType.PROPERTY,
+ signature = enumValue.signature(false),
+ metadata = javadocConverter.metadata(
+ doc = enumValue,
+ returnType = projection,
+ paramNames = listOf(),
+ annotations = annotations
+ )
+ )
+ )
+ }
+
+ internal fun DEnumEntry.signature(isSummary: Boolean): PropertySignature {
+ return DefaultPropertySignature(
+ PropertySignature.Params(
+ // TODO(b/168136770): figure out path for default anchors
+ name = pathProvider.linkForReference(dri),
+ receiver = null
+ )
+ )
+ }
+
+ /** Returns anchors for this enum value. */
+ private fun DEnumEntry.generateAnchors(): LinkedHashSet<String> {
+ return linkedSetOf(
+ name
+ )
+ }
+}
diff --git a/src/test/java/com/google/devsite/renderer/converters/ClasslikeDocumentableConverterTest.kt b/src/test/java/com/google/devsite/renderer/converters/ClasslikeDocumentableConverterTest.kt
index 80021f6..9c65ae0 100644
--- a/src/test/java/com/google/devsite/renderer/converters/ClasslikeDocumentableConverterTest.kt
+++ b/src/test/java/com/google/devsite/renderer/converters/ClasslikeDocumentableConverterTest.kt
@@ -17,6 +17,8 @@
package com.google.devsite.renderer.converters
import com.google.common.truth.Truth.assertThat
+import com.google.devsite.components.Description
+import com.google.devsite.components.Raw
import com.google.devsite.components.pages.Classlike
import com.google.devsite.components.pages.DevsitePage
import com.google.devsite.components.symbols.SymbolSummary
@@ -34,6 +36,7 @@
import com.google.devsite.testing.ConverterTestBase
import kotlinx.coroutines.runBlocking
import org.jetbrains.dokka.model.DModule
+import org.jetbrains.dokka.model.doc.Text
import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
@@ -323,8 +326,58 @@
assertThat(classlike.data.signature.data.implements.single().data.name).isEqualTo("A")
}
- private fun DModule.page(): DevsitePage {
- val classlike = packages.single().classlikes.single { it.name() == "Foo" }
+ @Test
+ fun `Enum class is rendered and has enum values`() {
+ val page = """
+ |/**
+ | * class level docs
+ | */
+ |enum class AnEnumType {
+ | /**
+ | * content being refreshed, which can be a result of
+ | * invalidation, refresh that may contain content updates, or the initial load.
+ | */
+ | REFRESH,
+ | /**
+ | * Load at the start
+ | */
+ | PREPEND,
+ | /**
+ | * Load at the end.
+ | */
+ | APPEND
+ |
+ | fun foo()
+ |}
+ """.render().page(name = "AnEnumType")
+
+ val classlike = page.content<Classlike>()
+ val signature = classlike.data.signature.data
+ val description = (classlike.data.description.first() as Description)
+ val descriptionText = description.data.root.children.first().children.first() as Text
+
+ val enumTable = classlike.data.symbolTypes.first {
+ (it.first as? SummaryList)?.title() == "Enum Values" }.first.items(3) as List
+ val enumOne = enumTable[0].data
+ val enumTwo = enumTable[1].data
+ val enumThree = enumTable[2].data
+
+ assertThat(signature.type).isEqualTo("enum")
+ assertThat(descriptionText.body).isEqualTo("class level docs")
+
+ assertThat((enumOne.title as Raw).data.text).contains("APPEND")
+ assertThat((enumOne.description as Description).data.root.toString())
+ .contains("Load at the end.")
+ assertThat((enumTwo.title as Raw).data.text).contains("PREPEND")
+ assertThat((enumTwo.description as Description).data.root.toString())
+ .contains("Load at the start")
+ assertThat((enumThree.title as Raw).data.text).contains("REFRESH")
+ assertThat((enumThree.description as Description).data.root.toString())
+ .contains("result of invalidation")
+ }
+
+ private fun DModule.page(name: String = "Foo"): DevsitePage {
+ val classlike = packages.single().classlikes.single { it.name() == name }
val holder = runBlocking { DocumentablesHolder(this@page, this) }
val converter = ClasslikeDocumentableConverter(language, classlike, pathProvider(), holder)
return runBlocking { converter.classlike() }
diff --git a/testData/innerClasses/docs/reference/dokkatest/inner/OuterClass.InnerEnum.html b/testData/innerClasses/docs/reference/dokkatest/inner/OuterClass.InnerEnum.html
index 236ea06..2372db4 100644
--- a/testData/innerClasses/docs/reference/dokkatest/inner/OuterClass.InnerEnum.html
+++ b/testData/innerClasses/docs/reference/dokkatest/inner/OuterClass.InnerEnum.html
@@ -19,6 +19,35 @@
<table class="responsive">
<thead>
<tr>
+ <th colspan="2"><h3>Enum Values</h3></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>A</code></td>
+ <td width="100%">
+ <p>I'm first.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>B</code></td>
+ <td width="100%">
+ <p>Second!</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>C</code></td>
+ <td width="100%">
+ <p>Third</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <thead>
+ <tr>
<th colspan="2"><h3>Public fields</h3></th>
</tr>
</thead>
@@ -38,6 +67,22 @@
</tbody>
</table>
</div>
+ <h2>Enum Values</h2>
+ <div>
+ <h3 class="api-name" id="A">A</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/dokkatest/inner/OuterClass.InnerEnum.html">OuterClass.InnerEnum</a> <a href="/reference/dokkatest/inner/OuterClass.InnerEnum.A.html">OuterClass.InnerEnum.A</a></pre>
+ <p>I'm first.</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="B">B</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/dokkatest/inner/OuterClass.InnerEnum.html">OuterClass.InnerEnum</a> <a href="/reference/dokkatest/inner/OuterClass.InnerEnum.B.html">OuterClass.InnerEnum.B</a></pre>
+ <p>Second!</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="C">C</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/dokkatest/inner/OuterClass.InnerEnum.html">OuterClass.InnerEnum</a> <a href="/reference/dokkatest/inner/OuterClass.InnerEnum.C.html">OuterClass.InnerEnum.C</a></pre>
+ <p>Third</p>
+ </div>
<h2>Public fields</h2>
<div><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
<h3 class="api-name" id="name()">name</h3>
diff --git a/testData/innerClasses/docs/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.html b/testData/innerClasses/docs/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.html
index 2ba0047..9e06f24 100644
--- a/testData/innerClasses/docs/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.html
+++ b/testData/innerClasses/docs/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.html
@@ -19,6 +19,35 @@
<table class="responsive">
<thead>
<tr>
+ <th colspan="2"><h3>Enum Values</h3></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>A</code></td>
+ <td width="100%">
+ <p>I'm first.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>B</code></td>
+ <td width="100%">
+ <p>Second!</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>C</code></td>
+ <td width="100%">
+ <p>Third</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <thead>
+ <tr>
<th colspan="2"><h3>Public properties</h3></th>
</tr>
</thead>
@@ -38,6 +67,22 @@
</tbody>
</table>
</div>
+ <h2>Enum Values</h2>
+ <div>
+ <h3 class="api-name" id="A">A</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.A.html">OuterClass.InnerEnum.A</a>: <a href="/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.html">OuterClass.InnerEnum</a></pre>
+ <p>I'm first.</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="B">B</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.B.html">OuterClass.InnerEnum.B</a>: <a href="/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.html">OuterClass.InnerEnum</a></pre>
+ <p>Second!</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="C">C</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.C.html">OuterClass.InnerEnum.C</a>: <a href="/reference/kotlin/dokkatest/inner/OuterClass.InnerEnum.html">OuterClass.InnerEnum</a></pre>
+ <p>Third</p>
+ </div>
<h2>Public properties</h2>
<div><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
<h3 class="api-name" id="name()">name</h3>
diff --git a/testData/paging/docs/reference/androidx/paging/LoadType.html b/testData/paging/docs/reference/androidx/paging/LoadType.html
index c83abaf..55ab278 100644
--- a/testData/paging/docs/reference/androidx/paging/LoadType.html
+++ b/testData/paging/docs/reference/androidx/paging/LoadType.html
@@ -35,6 +35,35 @@
<table class="responsive">
<thead>
<tr>
+ <th colspan="2"><h3>Enum Values</h3></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>APPEND</code></td>
+ <td width="100%">
+ <p>Load at the end of a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>PREPEND</code></td>
+ <td width="100%">
+ <p>Load at the start of a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>REFRESH</code></td>
+ <td width="100%">
+ <p><code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code> content being refreshed, which can be a result of <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> invalidation, refresh that may contain content updates, or the initial load.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <thead>
+ <tr>
<th colspan="2"><h3>Public fields</h3></th>
</tr>
</thead>
@@ -54,6 +83,22 @@
</tbody>
</table>
</div>
+ <h2>Enum Values</h2>
+ <div>
+ <h3 class="api-name" id="APPEND">APPEND</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/androidx/paging/LoadType.html">LoadType</a> <a href="/reference/androidx/paging/LoadType.APPEND.html">LoadType.APPEND</a></pre>
+ <p>Load at the end of a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code>.</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="PREPEND">PREPEND</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/androidx/paging/LoadType.html">LoadType</a> <a href="/reference/androidx/paging/LoadType.PREPEND.html">LoadType.PREPEND</a></pre>
+ <p>Load at the start of a <code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code>.</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="REFRESH">REFRESH</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/androidx/paging/LoadType.html">LoadType</a> <a href="/reference/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></pre>
+ <p><code><a href="/reference/androidx/paging/PagingData.html">PagingData</a></code> content being refreshed, which can be a result of <code><a href="/reference/androidx/paging/PagingSource.html">PagingSource</a></code> invalidation, refresh that may contain content updates, or the initial load.</p>
+ </div>
<h2>Public fields</h2>
<div><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
<h3 class="api-name" id="name()">name</h3>
diff --git a/testData/paging/docs/reference/androidx/paging/RemoteMediator.InitializeAction.html b/testData/paging/docs/reference/androidx/paging/RemoteMediator.InitializeAction.html
index e24f51e..cf0b9e1 100644
--- a/testData/paging/docs/reference/androidx/paging/RemoteMediator.InitializeAction.html
+++ b/testData/paging/docs/reference/androidx/paging/RemoteMediator.InitializeAction.html
@@ -19,6 +19,29 @@
<table class="responsive">
<thead>
<tr>
+ <th colspan="2"><h3>Enum Values</h3></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>LAUNCH_INITIAL_REFRESH</code></td>
+ <td width="100%">
+ <p>Immediately dispatch a <code><a href="/reference/androidx/paging/RemoteMediator.html#load(androidx.paging.LoadType,androidx.paging.PagingState)">load</a></code> asynchronously with load type <code><a href="/reference/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></code>, to update paginated content when the stream is initialized.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>SKIP_INITIAL_REFRESH</code></td>
+ <td width="100%">
+ <p>Wait for a refresh request from the UI before dispatching <code><a href="/reference/androidx/paging/RemoteMediator.html#load(androidx.paging.LoadType,androidx.paging.PagingState)">load</a></code> with load type <code><a href="/reference/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></code>.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <thead>
+ <tr>
<th colspan="2"><h3>Public fields</h3></th>
</tr>
</thead>
@@ -38,6 +61,17 @@
</tbody>
</table>
</div>
+ <h2>Enum Values</h2>
+ <div>
+ <h3 class="api-name" id="LAUNCH_INITIAL_REFRESH">LAUNCH_INITIAL_REFRESH</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/androidx/paging/RemoteMediator.InitializeAction.html">RemoteMediator.InitializeAction</a> <a href="/reference/androidx/paging/RemoteMediator.InitializeAction.LAUNCH_INITIAL_REFRESH.html">RemoteMediator.InitializeAction.LAUNCH_INITIAL_REFRESH</a></pre>
+ <p>Immediately dispatch a <code><a href="/reference/androidx/paging/RemoteMediator.html#load(androidx.paging.LoadType,androidx.paging.PagingState)">load</a></code> asynchronously with load type <code><a href="/reference/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></code>, to update paginated content when the stream is initialized.</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="SKIP_INITIAL_REFRESH">SKIP_INITIAL_REFRESH</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/androidx/paging/RemoteMediator.InitializeAction.html">RemoteMediator.InitializeAction</a> <a href="/reference/androidx/paging/RemoteMediator.InitializeAction.SKIP_INITIAL_REFRESH.html">RemoteMediator.InitializeAction.SKIP_INITIAL_REFRESH</a></pre>
+ <p>Wait for a refresh request from the UI before dispatching <code><a href="/reference/androidx/paging/RemoteMediator.html#load(androidx.paging.LoadType,androidx.paging.PagingState)">load</a></code> with load type <code><a href="/reference/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></code>.</p>
+ </div>
<h2>Public fields</h2>
<div><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
<h3 class="api-name" id="name()">name</h3>
diff --git a/testData/paging/docs/reference/kotlin/androidx/paging/LoadType.html b/testData/paging/docs/reference/kotlin/androidx/paging/LoadType.html
index 1cedafe..1942b43 100644
--- a/testData/paging/docs/reference/kotlin/androidx/paging/LoadType.html
+++ b/testData/paging/docs/reference/kotlin/androidx/paging/LoadType.html
@@ -35,6 +35,35 @@
<table class="responsive">
<thead>
<tr>
+ <th colspan="2"><h3>Enum Values</h3></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>APPEND</code></td>
+ <td width="100%">
+ <p>Load at the end of a <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>PREPEND</code></td>
+ <td width="100%">
+ <p>Load at the start of a <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code>.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>REFRESH</code></td>
+ <td width="100%">
+ <p><code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> content being refreshed, which can be a result of <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> invalidation, refresh that may contain content updates, or the initial load.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <thead>
+ <tr>
<th colspan="2"><h3>Public properties</h3></th>
</tr>
</thead>
@@ -54,6 +83,22 @@
</tbody>
</table>
</div>
+ <h2>Enum Values</h2>
+ <div>
+ <h3 class="api-name" id="APPEND">APPEND</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/androidx/paging/LoadType.APPEND.html">LoadType.APPEND</a>: <a href="/reference/kotlin/androidx/paging/LoadType.html">LoadType</a></pre>
+ <p>Load at the end of a <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code>.</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="PREPEND">PREPEND</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/androidx/paging/LoadType.PREPEND.html">LoadType.PREPEND</a>: <a href="/reference/kotlin/androidx/paging/LoadType.html">LoadType</a></pre>
+ <p>Load at the start of a <code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code>.</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="REFRESH">REFRESH</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a>: <a href="/reference/kotlin/androidx/paging/LoadType.html">LoadType</a></pre>
+ <p><code><a href="/reference/kotlin/androidx/paging/PagingData.html">PagingData</a></code> content being refreshed, which can be a result of <code><a href="/reference/kotlin/androidx/paging/PagingSource.html">PagingSource</a></code> invalidation, refresh that may contain content updates, or the initial load.</p>
+ </div>
<h2>Public properties</h2>
<div><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
<h3 class="api-name" id="name()">name</h3>
diff --git a/testData/paging/docs/reference/kotlin/androidx/paging/RemoteMediator.InitializeAction.html b/testData/paging/docs/reference/kotlin/androidx/paging/RemoteMediator.InitializeAction.html
index d51cffe..b4c6b0e 100644
--- a/testData/paging/docs/reference/kotlin/androidx/paging/RemoteMediator.InitializeAction.html
+++ b/testData/paging/docs/reference/kotlin/androidx/paging/RemoteMediator.InitializeAction.html
@@ -19,6 +19,29 @@
<table class="responsive">
<thead>
<tr>
+ <th colspan="2"><h3>Enum Values</h3></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>LAUNCH_INITIAL_REFRESH</code></td>
+ <td width="100%">
+ <p>Immediately dispatch a <code><a href="/reference/kotlin/androidx/paging/RemoteMediator.html#load(androidx.paging.LoadType,androidx.paging.PagingState)">load</a></code> asynchronously with load type <code><a href="/reference/kotlin/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></code>, to update paginated content when the stream is initialized.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><code>SKIP_INITIAL_REFRESH</code></td>
+ <td width="100%">
+ <p>Wait for a refresh request from the UI before dispatching <code><a href="/reference/kotlin/androidx/paging/RemoteMediator.html#load(androidx.paging.LoadType,androidx.paging.PagingState)">load</a></code> with load type <code><a href="/reference/kotlin/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></code>.</p>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <thead>
+ <tr>
<th colspan="2"><h3>Public properties</h3></th>
</tr>
</thead>
@@ -38,6 +61,17 @@
</tbody>
</table>
</div>
+ <h2>Enum Values</h2>
+ <div>
+ <h3 class="api-name" id="LAUNCH_INITIAL_REFRESH">LAUNCH_INITIAL_REFRESH</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/androidx/paging/RemoteMediator.InitializeAction.LAUNCH_INITIAL_REFRESH.html">RemoteMediator.InitializeAction.LAUNCH_INITIAL_REFRESH</a>: <a href="/reference/kotlin/androidx/paging/RemoteMediator.InitializeAction.html">RemoteMediator.InitializeAction</a></pre>
+ <p>Immediately dispatch a <code><a href="/reference/kotlin/androidx/paging/RemoteMediator.html#load(androidx.paging.LoadType,androidx.paging.PagingState)">load</a></code> asynchronously with load type <code><a href="/reference/kotlin/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></code>, to update paginated content when the stream is initialized.</p>
+ </div>
+ <div>
+ <h3 class="api-name" id="SKIP_INITIAL_REFRESH">SKIP_INITIAL_REFRESH</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/androidx/paging/RemoteMediator.InitializeAction.SKIP_INITIAL_REFRESH.html">RemoteMediator.InitializeAction.SKIP_INITIAL_REFRESH</a>: <a href="/reference/kotlin/androidx/paging/RemoteMediator.InitializeAction.html">RemoteMediator.InitializeAction</a></pre>
+ <p>Wait for a refresh request from the UI before dispatching <code><a href="/reference/kotlin/androidx/paging/RemoteMediator.html#load(androidx.paging.LoadType,androidx.paging.PagingState)">load</a></code> with load type <code><a href="/reference/kotlin/androidx/paging/LoadType.REFRESH.html">LoadType.REFRESH</a></code>.</p>
+ </div>
<h2>Public properties</h2>
<div><a name="getName()"></a><a name="setName()"></a><a name="getName--"></a><a name="setName--"></a>
<h3 class="api-name" id="name()">name</h3>
diff --git a/testData/simple/docs/reference/dokkatest/simple/Three.html b/testData/simple/docs/reference/dokkatest/simple/Three.html
index 604a182..f80b5bf 100644
--- a/testData/simple/docs/reference/dokkatest/simple/Three.html
+++ b/testData/simple/docs/reference/dokkatest/simple/Three.html
@@ -18,6 +18,29 @@
<table class="responsive">
<thead>
<tr>
+ <th colspan="2"><h3>Enum Values</h3></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>A</code></td>
+ <td width="100%"></td>
+ </tr>
+ <tr>
+ <td><code>B</code></td>
+ <td width="100%"></td>
+ </tr>
+ <tr>
+ <td><code>C</code></td>
+ <td width="100%"></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <thead>
+ <tr>
<th colspan="2"><h3>Public fields</h3></th>
</tr>
</thead>
@@ -43,6 +66,19 @@
</tbody>
</table>
</div>
+ <h2>Enum Values</h2>
+ <div>
+ <h3 class="api-name" id="A">A</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/dokkatest/simple/Three.html">Three</a> <a href="/reference/dokkatest/simple/Three.A.html">Three.A</a></pre>
+ </div>
+ <div>
+ <h3 class="api-name" id="B">B</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/dokkatest/simple/Three.html">Three</a> <a href="/reference/dokkatest/simple/Three.B.html">Three.B</a></pre>
+ </div>
+ <div>
+ <h3 class="api-name" id="C">C</h3>
+ <pre class="api-signature no-pretty-print"><a href="/reference/dokkatest/simple/Three.html">Three</a> <a href="/reference/dokkatest/simple/Three.C.html">Three.C</a></pre>
+ </div>
<h2>Public fields</h2>
<div><a name="getLetter()"></a><a name="setLetter()"></a><a name="getLetter--"></a><a name="setLetter--"></a>
<h3 class="api-name" id="letter()">letter</h3>
diff --git a/testData/simple/docs/reference/kotlin/dokkatest/simple/Three.html b/testData/simple/docs/reference/kotlin/dokkatest/simple/Three.html
index d28bce9..3ac50a3 100644
--- a/testData/simple/docs/reference/kotlin/dokkatest/simple/Three.html
+++ b/testData/simple/docs/reference/kotlin/dokkatest/simple/Three.html
@@ -18,6 +18,29 @@
<table class="responsive">
<thead>
<tr>
+ <th colspan="2"><h3>Enum Values</h3></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>A</code></td>
+ <td width="100%"></td>
+ </tr>
+ <tr>
+ <td><code>B</code></td>
+ <td width="100%"></td>
+ </tr>
+ <tr>
+ <td><code>C</code></td>
+ <td width="100%"></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div class="devsite-table-wrapper">
+ <table class="responsive">
+ <thead>
+ <tr>
<th colspan="2"><h3>Public properties</h3></th>
</tr>
</thead>
@@ -43,6 +66,19 @@
</tbody>
</table>
</div>
+ <h2>Enum Values</h2>
+ <div>
+ <h3 class="api-name" id="A">A</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/dokkatest/simple/Three.A.html">Three.A</a>: <a href="/reference/kotlin/dokkatest/simple/Three.html">Three</a></pre>
+ </div>
+ <div>
+ <h3 class="api-name" id="B">B</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/dokkatest/simple/Three.B.html">Three.B</a>: <a href="/reference/kotlin/dokkatest/simple/Three.html">Three</a></pre>
+ </div>
+ <div>
+ <h3 class="api-name" id="C">C</h3>
+ <pre class="api-signature no-pretty-print">val <a href="/reference/kotlin/dokkatest/simple/Three.C.html">Three.C</a>: <a href="/reference/kotlin/dokkatest/simple/Three.html">Three</a></pre>
+ </div>
<h2>Public properties</h2>
<div><a name="getLetter()"></a><a name="setLetter()"></a><a name="getLetter--"></a><a name="setLetter--"></a>
<h3 class="api-name" id="letter()">letter</h3>