Merge 4626886ee4458fe8350658a9babcdb4f40bf730f on remote branch

Change-Id: I25b031073eb47bd3a32823c0e17ce47143f2c580
diff --git a/METADATA b/METADATA
index 8b9dd3b..dfb8652 100644
--- a/METADATA
+++ b/METADATA
@@ -7,6 +7,7 @@
     type: GIT
     value: "https://github.com/Kotlin/dokka.git"
   }
+  license_type: NOTICE
   last_upgrade_date {
     year: 2019
     month: 7
diff --git a/busytown.gradle b/busytown.gradle
index b6fb936..1b9a711 100644
--- a/busytown.gradle
+++ b/busytown.gradle
@@ -15,6 +15,7 @@
                 zipTask.from(report.destination)
             }
         }
+        task.ignoreFailures = true
     }
     if (project.rootProject == project) {
         def zipMaven = project.tasks.create("zipMaven", Zip) {
@@ -22,8 +23,16 @@
             destinationDir destDir
             archiveName = "maven.zip"
         }
-        zipMaven.dependsOn(":runners:android-gradle-plugin:publishToDistMaven")
-        zipMaven.dependsOn(":runners:gradle-plugin:publishToDistMaven")
-        zipMaven.dependsOn(":runners:fatjar:publishToDistMaven")
+
+        def copyRepository = project.tasks.create("copyRepository", Copy) {
+            from file("${project.buildDir}/dist-maven")
+            into "${destDir}/repository"
+        }
+
+        [copyRepository, zipMaven].forEach {
+            it.dependsOn(":runners:android-gradle-plugin:publishToDistMaven")
+            it.dependsOn(":runners:gradle-plugin:publishToDistMaven")
+            it.dependsOn(":runners:fatjar:publishToDistMaven")
+        }
     }
 }
diff --git a/busytown.sh b/busytown.sh
index d99bdfe..ca1ae61 100755
--- a/busytown.sh
+++ b/busytown.sh
@@ -3,4 +3,4 @@
 
 SCRIPT_DIR="$(cd $(dirname $0) && pwd)"
 
-"$SCRIPT_DIR"/gradlew -p "$SCRIPT_DIR" -I "$SCRIPT_DIR"/busytown.gradle --no-daemon :core:build :runners:android-gradle-plugin:build :runners:gradle-integration-tests:build zipMaven
\ No newline at end of file
+"$SCRIPT_DIR"/gradlew -p "$SCRIPT_DIR" -I "$SCRIPT_DIR"/busytown.gradle --no-daemon :core:build :runners:android-gradle-plugin:build :runners:gradle-integration-tests:build zipMaven copyRepository
\ No newline at end of file
diff --git a/core/src/main/kotlin/Formats/DacHtmlFormat.kt b/core/src/main/kotlin/Formats/DacHtmlFormat.kt
index 6b42dad..7038a7f 100644
--- a/core/src/main/kotlin/Formats/DacHtmlFormat.kt
+++ b/core/src/main/kotlin/Formats/DacHtmlFormat.kt
@@ -9,7 +9,6 @@
 import org.jetbrains.dokka.Utilities.firstSentence
 import java.lang.Math.max
 import java.net.URI
-import java.util.Collections.emptyMap
 import kotlin.reflect.KClass
 
 /**
@@ -176,11 +175,25 @@
                                 }
                             }
                             ul(classes = "nolist") {
-                                sections.forEach {
-                                    li {
-                                        code {
-                                            metaMarkup(it.children)
+                                sections.filter {it.tag == "See Also"}.forEach {
+                                    it.children.forEach { child ->
+                                        if (child is ContentNodeLazyLink || child is ContentExternalLink) {
+                                            li {
+                                                code {
+                                                    contentNodeToMarkup(child) // Wrap bare links in listItems.
+                                                } // bare links come from the java-to-kotlin parser.
+                                            }
                                         }
+                                        else if (child is ContentUnorderedList) {
+                                            metaMarkup(child.children) // Already wrapped in listItems.
+                                        } // this is how we want things to look. No parser currently does this (yet).
+                                        else if (child is ContentParagraph) {
+                                            li{
+                                                code {
+                                                    metaMarkup (child.children) // Replace paragraphs with listItems.
+                                                } // paragraph-wrapped links come from the kotlin parser
+                                            }
+                                        } // NOTE: currently the java-to-java parser does not add See Also links!
                                     }
                                 }
                             }
@@ -467,7 +480,7 @@
             id = summaryId
             tbody {
                 if (headerAsRow) {
-                    developerHeading(header, summaryId)
+                    developerHeading(header)
                 }
                 nodes.forEach { node ->
                     row(node)
@@ -905,25 +918,11 @@
     }
 }
 
-fun TBODY.developerHeading(
-    header: String,
-    summaryId: String? = null
-) {
+fun TBODY.developerHeading(header: String) {
     tr {
         th {
             attributes["colSpan"] = "2"
-            dheading {
-                attributes["ds-is"] = "heading"
-                attributes["text"] = header
-                attributes["id"] = summaryId ?: header.replace("\\s".toRegex(), "-").toLowerCase()
-                attributes["level"] = "h3"
-                attributes["toc"] = ""
-                attributes["class"] = ""
-                h3 {
-                    attributes["is-upgraded"] = ""
-                    +header
-                }
-            }
+            +header
         }
     }
 }
@@ -947,8 +946,3 @@
     override val packageListServiceClass: KClass<out PackageListService> = JavaLayoutHtmlPackageListService::class
     override val outputBuilderFactoryClass: KClass<out JavaLayoutHtmlFormatOutputBuilderFactory> = DevsiteLayoutHtmlFormatOutputBuilderFactoryImpl::class
 }
-
-fun FlowOrPhrasingContent.dheading(block : DHEADING.() -> Unit = {}) : Unit = DHEADING(consumer).visit(block)
-
-class DHEADING(consumer: TagConsumer<*>) :
-    HTMLTag("devsite-heading", consumer, emptyMap(), inlineTag = false, emptyTag = false), HtmlBlockTag
diff --git a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormatOutputBuilder.kt b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormatOutputBuilder.kt
index b62e51a..23cb81a 100644
--- a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormatOutputBuilder.kt
+++ b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlFormatOutputBuilder.kt
@@ -51,7 +51,7 @@
     protected fun FlowContent.contentNodesToMarkup(content: List<ContentNode>, contextUri: URI = uri): Unit =
         content.forEach { contentNodeToMarkup(it, contextUri) }
 
-    private fun FlowContent.contentNodeToMarkup(content: ContentNode, contextUri: URI) {
+    protected fun FlowContent.contentNodeToMarkup(content: ContentNode, contextUri: URI = uri) {
         when (content) {
             is ContentText -> +content.text
             is ContentSymbol -> span("symbol") { +content.text }
@@ -136,7 +136,7 @@
             }
             ContentHardLineBreak -> br
 
-            is ContentParagraph -> p { contentNodesToMarkup(content.children, contextUri) }
+            is ContentParagraph -> p(classes = content.label) { contentNodesToMarkup(content.children, contextUri) }
 
             is NodeRenderContent -> renderedSignature(content.node, mode = content.mode)
             is ContentNodeLink -> {
@@ -456,7 +456,7 @@
             return
         }
 
-        val targetLink = node.links.singleOrNull()
+        val targetLink = node.links.firstOrNull()
 
         if (targetLink?.kind == NodeKind.TypeParameter) {
             +node.name
@@ -884,7 +884,7 @@
         emphasis: Boolean = true): ContentNode? {
         val deprecated = node.deprecation
         deprecated?.let {
-            return ContentParagraph().apply {
+            return ContentParagraph("caution").apply {
                 if (prefix) {
                     append(ContentStrong().apply { text(
                         if (deprecated.content.children.size == 0) "Deprecated."
@@ -1106,8 +1106,8 @@
                 filter { it.getClassExtensionReceiver() != null }
                     .groupBy {
                         val receiverType = it.getClassExtensionReceiver()!!
-                        receiverType.links(NodeKind.ExternalLink).firstOrNull()
-                                ?: receiverType.links.first { it.kind in NodeKind.classLike}
+                        receiverType.links.filter { it.kind != NodeKind.ExternalLink}.firstOrNull() ?:
+                            receiverType.links(NodeKind.ExternalLink).first()
                     }
 
             private fun List<DocumentationNode>.externalExtensions(kind: NodeKind) =
diff --git a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlGenerator.kt b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlGenerator.kt
index 115e3f7..dc0df2a 100644
--- a/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlGenerator.kt
+++ b/core/src/main/kotlin/Formats/JavaLayoutHtml/JavaLayoutHtmlGenerator.kt
@@ -133,6 +133,7 @@
             val normalized = uri.normalize()
             uriToWriter[normalized]?.let { return it }
             val file = root.resolve(normalized.path.removePrefix("/"))
+            file.parentFile.mkdirsOrFail()
             val writer = file.bufferedWriter()
             uriToWriter[normalized] = writer
             return writer
diff --git a/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt b/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
index cc9c2c2..ed4d366 100644
--- a/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
+++ b/core/src/main/kotlin/Java/JavaPsiDocumentationBuilder.kt
@@ -206,13 +206,14 @@
             else -> NodeKind.Class
         }
         val node = nodeForElement(this, kind)
-        superTypes.filter { !ignoreSupertype(it) }.forEach {
-            node.appendType(it, NodeKind.Supertype)
-            val superClass = it.resolve()
+        superTypes.filter { !ignoreSupertype(it) }.forEach { superType ->
+            node.appendType(superType, NodeKind.Supertype)
+            val superClass = superType.resolve()
             if (superClass != null) {
                 link(superClass, node, RefKind.Inheritor)
             }
         }
+
         var methodsAndConstructors = methods
 
         if (constructors.isEmpty()) {
diff --git a/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt b/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt
index adb8fa4..0b5e743 100644
--- a/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt
+++ b/core/src/main/kotlin/Kotlin/DocumentationBuilder.kt
@@ -265,12 +265,11 @@
                     node.append(targetNode, RefKind.ExternalType)
                     node.append(DocumentationNode(externalLink, Content.Empty, NodeKind.ExternalLink), RefKind.Link)
                 }
-            } else {
-                link(
-                    node, classifierDescriptor,
-                    if (classifierDescriptor.isBoringBuiltinClass()) RefKind.HiddenLink else RefKind.Link
-                )
             }
+            link(
+                node, classifierDescriptor,
+                if (classifierDescriptor.isBoringBuiltinClass()) RefKind.HiddenLink else RefKind.Link
+            )
             if (classifierDescriptor !is TypeParameterDescriptor) {
                 node.append(
                     DocumentationNode(
diff --git a/core/src/main/kotlin/Model/Content.kt b/core/src/main/kotlin/Model/Content.kt
index f239da7..a4c78fa 100644
--- a/core/src/main/kotlin/Model/Content.kt
+++ b/core/src/main/kotlin/Model/Content.kt
@@ -106,7 +106,7 @@
 }
 class ScriptBlock(val type: String?, val src: String) : ContentBlock()
 
-class ContentParagraph() : ContentBlock()
+class ContentParagraph(val label: String? = null) : ContentBlock()
 class ContentEmphasis() : ContentBlock()
 class ContentStrong() : ContentBlock()
 class ContentStrikethrough() : ContentBlock()
diff --git a/core/src/test/kotlin/format/DacFormatTest.kt b/core/src/test/kotlin/format/DacFormatTest.kt
index ae17420..5d8babc 100644
--- a/core/src/test/kotlin/format/DacFormatTest.kt
+++ b/core/src/test/kotlin/format/DacFormatTest.kt
@@ -51,4 +51,8 @@
     @Test fun javaClassLinks() {
         verifyBothFormats("javaClassLinks")
     }
+
+    @Test fun deprecation() {
+        verifyBothFormats("deprecation")
+    }
 }
\ No newline at end of file
diff --git a/core/testdata/format/dac/deprecation/DeprecatedBar.kt b/core/testdata/format/dac/deprecation/DeprecatedBar.kt
new file mode 100644
index 0000000..8eb7292
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/DeprecatedBar.kt
@@ -0,0 +1,17 @@
+class Bar {
+    fun replacementBarMethod(): Bar { return Bar() }
+
+    fun badBarMethod(): DeprecatedBar { return DeprecatedBar() }
+
+    /**
+     * @deprecated Use {@link #replacementBarMethod()} instead.
+     */
+    @Deprecated
+    fun goodBarMethod(): DeprecatedBar { return DeprecatedBar() }
+}
+
+/**
+ * @deprecated Use {@link #Bar} instead.
+ */
+@Deprecated
+class DeprecatedBar
\ No newline at end of file
diff --git a/core/testdata/format/dac/deprecation/DeprecatedFoo.java b/core/testdata/format/dac/deprecation/DeprecatedFoo.java
new file mode 100644
index 0000000..3c9c360
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/DeprecatedFoo.java
@@ -0,0 +1,21 @@
+public class Foo {
+    public Foo() { }
+
+    public static Foo replacementFooMethod() { return Foo() }
+
+    public static DeprecatedFoo badFooMethod() { return new DeprecatedFoo() }
+
+    /**
+     * @deprecated Use {@link #replacementFooMethod()} instead.
+     */
+    @Deprecated
+    public static DeprecatedFoo goodFooMethod() { return new DeprecatedFoo() }
+}
+
+/**
+ * @deprecated Use {@link #Foo} instead.
+ */
+@Deprecated
+public class DeprecatedFoo {
+    public DeprecatedFoo() { }
+}
diff --git a/core/testdata/format/dac/deprecation/dac-as-java/Bar.html b/core/testdata/format/dac/deprecation/dac-as-java/Bar.html
new file mode 100644
index 0000000..d77fa9e
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/dac-as-java/Bar.html
@@ -0,0 +1,82 @@
+<html devsite="true">
+  <head>
+    <title>Bar</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "_shared/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="api-info-block"></div>
+    <h1>Bar</h1>
+    <pre><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> <span class="identifier">Bar</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre>
+    <table class="jd-inheritance-table">
+      <tr>
+        <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Bar</a></td>
+      </tr>
+    </table>
+    <h2>Summary</h2>
+    <table class="responsive" id="pubctors">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public constructors</th>
+        </tr>
+        <tr>
+          <td>
+            <div><code><a href="#Bar()">Bar</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <table class="responsive" id="pubmethods">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public methods</th>
+        </tr>
+        <tr>
+          <td><span class="keyword">final</span> <a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></td>
+          <td>
+            <div><code><a href="#badBarMethod()">badBarMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+        <tr>
+          <td><span class="keyword">final</span> <a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></td>
+          <td>
+            <div><code><a href="#goodBarMethod()">goodBarMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+        <tr>
+          <td><span class="keyword">final</span> <a href="#"><span class="identifier">Bar</span></a></td>
+          <td>
+            <div><code><a href="#replacementBarMethod()">replacementBarMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <h2>Public constructors</h2>
+<a name="Bar()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">Bar</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+    <h2>Public methods</h2>
+<a name="badBarMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">badBarMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">final</span> <a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a> <span class="identifier">badBarMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+<a name="goodBarMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">goodBarMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">final</span> <a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a> <span class="identifier">goodBarMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+      <p class="caution"><strong>Deprecated: </strong><em>Deprecated</em></p>
+    </div>
+<a name="replacementBarMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">replacementBarMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">final</span> <a href="#"><span class="identifier">Bar</span></a> <span class="identifier">replacementBarMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+  </body>
+</html>
diff --git a/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedBar.html b/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedBar.html
new file mode 100644
index 0000000..56283f6
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedBar.html
@@ -0,0 +1,37 @@
+<html devsite="true">
+  <head>
+    <title>DeprecatedBar</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "_shared/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="api-info-block"></div>
+    <h1>DeprecatedBar</h1>
+    <pre><span class="keyword">public</span> <span class="keyword">final</span> <span class="keyword">class</span> <span class="identifier">DeprecatedBar</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre>
+    <table class="jd-inheritance-table">
+      <tr>
+        <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">DeprecatedBar</a></td>
+      </tr>
+    </table>
+    <h2>Summary</h2>
+    <table class="responsive" id="pubctors">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public constructors</th>
+        </tr>
+        <tr>
+          <td>
+            <div><code><a href="#DeprecatedBar()">DeprecatedBar</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <h2>Public constructors</h2>
+<a name="DeprecatedBar()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">DeprecatedBar</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">DeprecatedBar</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+  </body>
+</html>
diff --git a/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedFoo.html b/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedFoo.html
new file mode 100644
index 0000000..e7e2fec
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/dac-as-java/DeprecatedFoo.html
@@ -0,0 +1,37 @@
+<html devsite="true">
+  <head>
+    <title>DeprecatedFoo</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "_shared/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="api-info-block"></div>
+    <h1>DeprecatedFoo</h1>
+    <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">DeprecatedFoo</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre>
+    <table class="jd-inheritance-table">
+      <tr>
+        <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">DeprecatedFoo</a></td>
+      </tr>
+    </table>
+    <h2>Summary</h2>
+    <table class="responsive" id="pubctors">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public constructors</th>
+        </tr>
+        <tr>
+          <td>
+            <div><code><a href="#DeprecatedFoo()">DeprecatedFoo</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <h2>Public constructors</h2>
+<a name="DeprecatedFoo()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">DeprecatedFoo</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">DeprecatedFoo</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+  </body>
+</html>
diff --git a/core/testdata/format/dac/deprecation/dac-as-java/Foo.html b/core/testdata/format/dac/deprecation/dac-as-java/Foo.html
new file mode 100644
index 0000000..c898800
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/dac-as-java/Foo.html
@@ -0,0 +1,82 @@
+<html devsite="true">
+  <head>
+    <title>Foo</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "_shared/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="api-info-block"></div>
+    <h1>Foo</h1>
+    <pre><span class="keyword">public</span> <span class="keyword">class</span> <span class="identifier">Foo</span> <span class="keyword">implements</span> <span class="identifier">java.lang.Object</span></pre>
+    <table class="jd-inheritance-table">
+      <tr>
+        <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td>
+      </tr>
+    </table>
+    <h2>Summary</h2>
+    <table class="responsive" id="pubctors">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public constructors</th>
+        </tr>
+        <tr>
+          <td>
+            <div><code><a href="#Foo()">Foo</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <table class="responsive" id="pubmethods">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public methods</th>
+        </tr>
+        <tr>
+          <td><span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a></td>
+          <td>
+            <div><code><a href="#badFooMethod()">badFooMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+        <tr>
+          <td><span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a></td>
+          <td>
+            <div><code><a href="#goodFooMethod()">goodFooMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+        <tr>
+          <td><span class="keyword">static</span> <a href="#"><span class="identifier">Foo</span></a></td>
+          <td>
+            <div><code><a href="#replacementFooMethod()">replacementFooMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <h2>Public constructors</h2>
+<a name="Foo()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">Foo</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="identifier">Foo</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+    <h2>Public methods</h2>
+<a name="badFooMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">badFooMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a> <span class="identifier">badFooMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+<a name="goodFooMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">goodFooMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a> <span class="identifier">goodFooMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+      <p class="caution"><strong>Deprecated.</strong><em></em></p>
+    </div>
+<a name="replacementFooMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">replacementFooMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">public</span> <span class="keyword">static</span> <a href="#"><span class="identifier">Foo</span></a> <span class="identifier">replacementFooMethod</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+  </body>
+</html>
diff --git a/core/testdata/format/dac/deprecation/dac/Bar.html b/core/testdata/format/dac/deprecation/dac/Bar.html
new file mode 100644
index 0000000..f20112e
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/dac/Bar.html
@@ -0,0 +1,82 @@
+<html devsite="true">
+  <head>
+    <title>Bar</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "_shared/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="api-info-block"></div>
+    <h1>Bar</h1>
+    <pre><span class="keyword">class </span><span class="identifier">Bar</span></pre>
+    <table class="jd-inheritance-table">
+      <tr>
+        <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Bar</a></td>
+      </tr>
+    </table>
+    <h2>Summary</h2>
+    <table class="responsive" id="pubctors">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public constructors</th>
+        </tr>
+        <tr>
+          <td>
+            <div><code><a href="#%3Cinit%3E()">&lt;init&gt;</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <table class="responsive" id="pubmethods">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public methods</th>
+        </tr>
+        <tr>
+          <td><a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></td>
+          <td>
+            <div><code><a href="#badBarMethod()">badBarMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+        <tr>
+          <td><a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></td>
+          <td>
+            <div><code><a href="#goodBarMethod()">goodBarMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+        <tr>
+          <td><a href="#"><span class="identifier">Bar</span></a></td>
+          <td>
+            <div><code><a href="#replacementBarMethod()">replacementBarMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <h2>Public constructors</h2>
+<a name="%3Cinit%3E()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">&lt;init&gt;</h3>
+      <pre class="api-signature no-pretty-print"><span class="identifier">Bar</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+    <h2>Public methods</h2>
+<a name="badBarMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">badBarMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">fun </span><span class="identifier">badBarMethod</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></pre>
+    </div>
+<a name="goodBarMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">goodBarMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">fun </span><del><span class="identifier">goodBarMethod</span></del><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="DeprecatedBar.html#"><span class="identifier">DeprecatedBar</span></a></pre>
+      <p class="caution"><strong>Deprecated.</strong><em></em></p>
+    </div>
+<a name="replacementBarMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">replacementBarMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">fun </span><span class="identifier">replacementBarMethod</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="#"><span class="identifier">Bar</span></a></pre>
+    </div>
+  </body>
+</html>
diff --git a/core/testdata/format/dac/deprecation/dac/DeprecatedBar.html b/core/testdata/format/dac/deprecation/dac/DeprecatedBar.html
new file mode 100644
index 0000000..15be9a0
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/dac/DeprecatedBar.html
@@ -0,0 +1,37 @@
+<html devsite="true">
+  <head>
+    <title>DeprecatedBar</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "_shared/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="api-info-block"></div>
+    <h1>DeprecatedBar</h1>
+    <pre><span class="keyword">class </span><del><span class="identifier">DeprecatedBar</span></del></pre>
+    <table class="jd-inheritance-table">
+      <tr>
+        <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">DeprecatedBar</a></td>
+      </tr>
+    </table>
+    <h2>Summary</h2>
+    <table class="responsive" id="pubctors">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public constructors</th>
+        </tr>
+        <tr>
+          <td>
+            <div><code><a href="#%3Cinit%3E()">&lt;init&gt;</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <h2>Public constructors</h2>
+<a name="%3Cinit%3E()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">&lt;init&gt;</h3>
+      <pre class="api-signature no-pretty-print"><span class="identifier">DeprecatedBar</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+  </body>
+</html>
diff --git a/core/testdata/format/dac/deprecation/dac/DeprecatedFoo.html b/core/testdata/format/dac/deprecation/dac/DeprecatedFoo.html
new file mode 100644
index 0000000..610c46b
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/dac/DeprecatedFoo.html
@@ -0,0 +1,37 @@
+<html devsite="true">
+  <head>
+    <title>DeprecatedFoo</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "_shared/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="api-info-block"></div>
+    <h1>DeprecatedFoo</h1>
+    <pre><span class="keyword">open</span> <span class="keyword">class </span><del><span class="identifier">DeprecatedFoo</span></del></pre>
+    <table class="jd-inheritance-table">
+      <tr>
+        <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">DeprecatedFoo</a></td>
+      </tr>
+    </table>
+    <h2>Summary</h2>
+    <table class="responsive" id="pubctors">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public constructors</th>
+        </tr>
+        <tr>
+          <td>
+            <div><code><a href="#%3Cinit%3E()">&lt;init&gt;</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <h2>Public constructors</h2>
+<a name="%3Cinit%3E()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">&lt;init&gt;</h3>
+      <pre class="api-signature no-pretty-print"><span class="identifier">DeprecatedFoo</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+  </body>
+</html>
diff --git a/core/testdata/format/dac/deprecation/dac/Foo.html b/core/testdata/format/dac/deprecation/dac/Foo.html
new file mode 100644
index 0000000..76c0760
--- /dev/null
+++ b/core/testdata/format/dac/deprecation/dac/Foo.html
@@ -0,0 +1,82 @@
+<html devsite="true">
+  <head>
+    <title>Foo</title>
+{% setvar book_path %}/_book.yaml{% endsetvar %}
+{% include "_shared/_reference-head-tags.html" %}
+  </head>
+  <body>
+    <div id="api-info-block"></div>
+    <h1>Foo</h1>
+    <pre><span class="keyword">open</span> <span class="keyword">class </span><span class="identifier">Foo</span></pre>
+    <table class="jd-inheritance-table">
+      <tr>
+        <td class="jd-inheritance-class-cell" colSpan="1"><a href="#">Foo</a></td>
+      </tr>
+    </table>
+    <h2>Summary</h2>
+    <table class="responsive" id="pubctors">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public constructors</th>
+        </tr>
+        <tr>
+          <td>
+            <div><code><a href="#%3Cinit%3E()">&lt;init&gt;</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <table class="responsive" id="pubmethods">
+      <tbody>
+        <tr>
+          <th colSpan="2">Public methods</th>
+        </tr>
+        <tr>
+          <td><span class="keyword">open</span> <span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a><span class="symbol">!</span></td>
+          <td>
+            <div><code><a href="#badFooMethod()">badFooMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+        <tr>
+          <td><span class="keyword">open</span> <span class="keyword">static</span> <a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a><span class="symbol">!</span></td>
+          <td>
+            <div><code><a href="#goodFooMethod()">goodFooMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+        <tr>
+          <td><span class="keyword">open</span> <span class="keyword">static</span> <a href="#"><span class="identifier">Foo</span></a><span class="symbol">!</span></td>
+          <td>
+            <div><code><a href="#replacementFooMethod()">replacementFooMethod</a>()</code></div>
+            <p></p>
+          </td>
+        </tr>
+      </tbody>
+    </table>
+    <h2>Public constructors</h2>
+<a name="%3Cinit%3E()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">&lt;init&gt;</h3>
+      <pre class="api-signature no-pretty-print"><span class="identifier">Foo</span><span class="symbol">(</span><span class="symbol">)</span></pre>
+    </div>
+    <h2>Public methods</h2>
+<a name="badFooMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">badFooMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">open</span> <span class="keyword">static</span> <span class="keyword">fun </span><span class="identifier">badFooMethod</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a><span class="symbol">!</span></pre>
+    </div>
+<a name="goodFooMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">goodFooMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">open</span> <span class="keyword">static</span> <span class="keyword">fun </span><del><span class="identifier">goodFooMethod</span></del><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="DeprecatedFoo.html#"><span class="identifier">DeprecatedFoo</span></a><span class="symbol">!</span></pre>
+      <p class="caution"><strong>Deprecated: </strong><em>Use <code><a href="#replacementFooMethod()">replacementFooMethod()</a></code> instead.</em></p>
+    </div>
+<a name="replacementFooMethod()"></a>
+    <div class="api apilevel-" data-version-added="">
+      <h3 class="api-name">replacementFooMethod</h3>
+      <pre class="api-signature no-pretty-print"><span class="keyword">open</span> <span class="keyword">static</span> <span class="keyword">fun </span><span class="identifier">replacementFooMethod</span><span class="symbol">(</span><span class="symbol">)</span><span class="symbol">: </span><a href="#"><span class="identifier">Foo</span></a><span class="symbol">!</span></pre>
+    </div>
+  </body>
+</html>
diff --git a/core/testdata/format/dac/inheritedMethods/dac-as-java/Child.html b/core/testdata/format/dac/inheritedMethods/dac-as-java/Child.html
index a66d0bf..67a5812 100644
--- a/core/testdata/format/dac/inheritedMethods/dac-as-java/Child.html
+++ b/core/testdata/format/dac/inheritedMethods/dac-as-java/Child.html
@@ -21,11 +21,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -38,11 +34,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="identifier">void</span></td>
diff --git a/core/testdata/format/dac/inheritedMethods/dac-as-java/Parent.html b/core/testdata/format/dac/inheritedMethods/dac-as-java/Parent.html
index 4efddeb..dd305f7 100644
--- a/core/testdata/format/dac/inheritedMethods/dac-as-java/Parent.html
+++ b/core/testdata/format/dac/inheritedMethods/dac-as-java/Parent.html
@@ -38,11 +38,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -55,11 +51,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="identifier">void</span></td>
diff --git a/core/testdata/format/dac/inheritedMethods/dac/Child.html b/core/testdata/format/dac/inheritedMethods/dac/Child.html
index 5da7f47..dff52af 100644
--- a/core/testdata/format/dac/inheritedMethods/dac/Child.html
+++ b/core/testdata/format/dac/inheritedMethods/dac/Child.html
@@ -21,11 +21,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -38,11 +34,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="keyword">open</span> <span class="identifier">Unit</span></td>
@@ -63,11 +55,7 @@
     <table class="responsive" id="inhmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Inherited functions" id="inherited-functions" level="h3" toc="" class="">
-              <h3 is-upgraded="">Inherited functions</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Inherited functions</th>
         </tr>
         <tr class="api apilevel-">
           <td colSpan="2">
diff --git a/core/testdata/format/dac/inheritedMethods/dac/Parent.html b/core/testdata/format/dac/inheritedMethods/dac/Parent.html
index 0023368..ff9048b 100644
--- a/core/testdata/format/dac/inheritedMethods/dac/Parent.html
+++ b/core/testdata/format/dac/inheritedMethods/dac/Parent.html
@@ -38,11 +38,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -55,11 +51,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="keyword">open</span> <span class="identifier">Unit</span></td>
diff --git a/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html b/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html
index 3d247ed..cbabc29 100644
--- a/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html
+++ b/core/testdata/format/dac/javaClassLinks/dac-as-java/Bar.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -34,11 +30,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><a href="Foo.html#"><span class="identifier">Foo</span></a></td>
diff --git a/core/testdata/format/dac/javaClassLinks/dac-as-java/Foo.html b/core/testdata/format/dac/javaClassLinks/dac-as-java/Foo.html
index 5717ecf..0ae4d25 100644
--- a/core/testdata/format/dac/javaClassLinks/dac-as-java/Foo.html
+++ b/core/testdata/format/dac/javaClassLinks/dac-as-java/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
diff --git a/core/testdata/format/dac/javaClassLinks/dac/Bar.html b/core/testdata/format/dac/javaClassLinks/dac/Bar.html
index 0c0c367..87f2c3a 100644
--- a/core/testdata/format/dac/javaClassLinks/dac/Bar.html
+++ b/core/testdata/format/dac/javaClassLinks/dac/Bar.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -34,11 +30,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="keyword">open</span> <a href="Foo.html#"><span class="identifier">Foo</span></a><span class="symbol">!</span></td>
diff --git a/core/testdata/format/dac/javaClassLinks/dac/Foo.html b/core/testdata/format/dac/javaClassLinks/dac/Foo.html
index dc7637b..51ba020 100644
--- a/core/testdata/format/dac/javaClassLinks/dac/Foo.html
+++ b/core/testdata/format/dac/javaClassLinks/dac/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
diff --git a/core/testdata/format/dac/javaConstructor/dac-as-java/Foo.html b/core/testdata/format/dac/javaConstructor/dac-as-java/Foo.html
index 5717ecf..0ae4d25 100644
--- a/core/testdata/format/dac/javaConstructor/dac-as-java/Foo.html
+++ b/core/testdata/format/dac/javaConstructor/dac-as-java/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
diff --git a/core/testdata/format/dac/javaConstructor/dac/Foo.html b/core/testdata/format/dac/javaConstructor/dac/Foo.html
index dc7637b..51ba020 100644
--- a/core/testdata/format/dac/javaConstructor/dac/Foo.html
+++ b/core/testdata/format/dac/javaConstructor/dac/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
diff --git a/core/testdata/format/dac/javaDefaultConstructor/dac-as-java/Foo.html b/core/testdata/format/dac/javaDefaultConstructor/dac-as-java/Foo.html
index 5717ecf..0ae4d25 100644
--- a/core/testdata/format/dac/javaDefaultConstructor/dac-as-java/Foo.html
+++ b/core/testdata/format/dac/javaDefaultConstructor/dac-as-java/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
diff --git a/core/testdata/format/dac/javaDefaultConstructor/dac/Foo.html b/core/testdata/format/dac/javaDefaultConstructor/dac/Foo.html
index dc7637b..51ba020 100644
--- a/core/testdata/format/dac/javaDefaultConstructor/dac/Foo.html
+++ b/core/testdata/format/dac/javaDefaultConstructor/dac/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
diff --git a/core/testdata/format/dac/javaMethodVisibilities/dac-as-java/Foo.html b/core/testdata/format/dac/javaMethodVisibilities/dac-as-java/Foo.html
index 7f494c4..1ed04c5 100644
--- a/core/testdata/format/dac/javaMethodVisibilities/dac-as-java/Foo.html
+++ b/core/testdata/format/dac/javaMethodVisibilities/dac-as-java/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -34,11 +30,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="identifier">void</span></td>
@@ -52,11 +44,7 @@
     <table class="responsive" id="promethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Protected methods" id="promethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Protected methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Protected methods</th>
         </tr>
         <tr>
           <td><span class="identifier">void</span></td>
@@ -70,11 +58,7 @@
     <table class="responsive" id="primethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Private methods" id="primethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Private methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Private methods</th>
         </tr>
         <tr>
           <td><span class="identifier">void</span></td>
diff --git a/core/testdata/format/dac/javaMethodVisibilities/dac/Foo.html b/core/testdata/format/dac/javaMethodVisibilities/dac/Foo.html
index 3f1e451..0bcdcae 100644
--- a/core/testdata/format/dac/javaMethodVisibilities/dac/Foo.html
+++ b/core/testdata/format/dac/javaMethodVisibilities/dac/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -34,11 +30,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="keyword">open</span> <span class="identifier">Unit</span></td>
@@ -52,11 +44,7 @@
     <table class="responsive" id="promethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Protected methods" id="promethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Protected methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Protected methods</th>
         </tr>
         <tr>
           <td><span class="keyword">open</span> <span class="identifier">Unit</span></td>
@@ -70,11 +58,7 @@
     <table class="responsive" id="primethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Private methods" id="primethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Private methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Private methods</th>
         </tr>
         <tr>
           <td><span class="keyword">open</span> <span class="identifier">Unit</span></td>
diff --git a/core/testdata/format/dac/javaSeeTag/Bar.kt b/core/testdata/format/dac/javaSeeTag/Bar.kt
index 9df6711..21170d3 100644
--- a/core/testdata/format/dac/javaSeeTag/Bar.kt
+++ b/core/testdata/format/dac/javaSeeTag/Bar.kt
@@ -1,4 +1,5 @@
 /**
  * @see Foo
+ * @see java.lang.String
  */
 class Bar
\ No newline at end of file
diff --git a/core/testdata/format/dac/javaSeeTag/Foo.java b/core/testdata/format/dac/javaSeeTag/Foo.java
index 94a2460..b784ae2 100644
--- a/core/testdata/format/dac/javaSeeTag/Foo.java
+++ b/core/testdata/format/dac/javaSeeTag/Foo.java
@@ -1,5 +1,6 @@
 /**
  * @see #bar
+ * @see java.lang.String
  */
 public class Foo {
   public void bar() {}
diff --git a/core/testdata/format/dac/javaSeeTag/dac-as-java/Bar.html b/core/testdata/format/dac/javaSeeTag/dac-as-java/Bar.html
index 3dbc813..6b4d75f 100644
--- a/core/testdata/format/dac/javaSeeTag/dac-as-java/Bar.html
+++ b/core/testdata/format/dac/javaSeeTag/dac-as-java/Bar.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -39,9 +35,8 @@
       <div>
         <p><b>See Also</b></p>
         <ul class="nolist">
-          <li><code>
-              <p><a href="Foo.html#">Foo</a></p>
-            </code></li>
+          <li><code><a href="Foo.html#">Foo</a></code></li>
+          <li><code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/String.html">java.lang.String</a></code></li>
         </ul>
       </div>
     </div>
diff --git a/core/testdata/format/dac/javaSeeTag/dac-as-java/Foo.html b/core/testdata/format/dac/javaSeeTag/dac-as-java/Foo.html
index 6a6b504..b9f23dc 100644
--- a/core/testdata/format/dac/javaSeeTag/dac-as-java/Foo.html
+++ b/core/testdata/format/dac/javaSeeTag/dac-as-java/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -34,11 +30,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="identifier">void</span></td>
diff --git a/core/testdata/format/dac/javaSeeTag/dac/Bar.html b/core/testdata/format/dac/javaSeeTag/dac/Bar.html
index b7d8304..10a5f59 100644
--- a/core/testdata/format/dac/javaSeeTag/dac/Bar.html
+++ b/core/testdata/format/dac/javaSeeTag/dac/Bar.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -39,9 +35,8 @@
       <div>
         <p><b>See Also</b></p>
         <ul class="nolist">
-          <li><code>
-              <p><a href="Foo.html#">Foo</a></p>
-            </code></li>
+          <li><code><a href="Foo.html#">Foo</a></code></li>
+          <li><code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/String.html">java.lang.String</a></code></li>
         </ul>
       </div>
     </div>
diff --git a/core/testdata/format/dac/javaSeeTag/dac/Foo.html b/core/testdata/format/dac/javaSeeTag/dac/Foo.html
index 473fd2c..7ca410c 100644
--- a/core/testdata/format/dac/javaSeeTag/dac/Foo.html
+++ b/core/testdata/format/dac/javaSeeTag/dac/Foo.html
@@ -17,11 +17,7 @@
     <table class="responsive" id="pubctors">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public constructors" id="pubctors" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public constructors</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public constructors</th>
         </tr>
         <tr>
           <td>
@@ -34,11 +30,7 @@
     <table class="responsive" id="pubmethods">
       <tbody>
         <tr>
-          <th colSpan="2">
-            <devsite-heading ds-is="heading" text="Public methods" id="pubmethods" level="h3" toc="" class="">
-              <h3 is-upgraded="">Public methods</h3>
-            </devsite-heading>
-          </th>
+          <th colSpan="2">Public methods</th>
         </tr>
         <tr>
           <td><span class="keyword">open</span> <span class="identifier">Unit</span></td>
@@ -58,6 +50,7 @@
         <p><b>See Also</b></p>
         <ul class="nolist">
           <li><code><a href="#bar()">#bar</a></code></li>
+          <li><code><a href="http://docs.oracle.com/javase/6/docs/api/java/lang/String.html">java.lang.String</a></code></li>
         </ul>
       </div>
     </div>
diff --git a/gradle.properties b/gradle.properties
index 1152e80..a9e47b0 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,4 +1,4 @@
-dokka_version=0.9.17-g007
+dokka_version=0.9.17-g011
 dokka_publication_channel=dokka
 
 #Kotlin compiler and plugin
diff --git a/runners/cli/src/main/kotlin/cli/main.kt b/runners/cli/src/main/kotlin/cli/main.kt
index e7fb76f..37be6e2 100644
--- a/runners/cli/src/main/kotlin/cli/main.kt
+++ b/runners/cli/src/main/kotlin/cli/main.kt
@@ -72,12 +72,22 @@
     @set:Argument(value = "collectInheritedExtensionsFromLibraries", description = "Search for applicable extensions in libraries")
     var collectInheritedExtensionsFromLibraries: Boolean = false
 
-    @set:Argument(value = "generateClassIndexPage", description = "Generate classes.html index page.")
+    @set:Argument(value = "generateClassIndexPage", description = "Generate classes.html index page. [Deprecated]: use noGenerateClassIndexPage instead.")
+    @Deprecated("There is no way to set this to false.", replaceWith = ReplaceWith(
+        expression ="noGenerateClassIndexPage"))
     var generateClassIndexPage: Boolean = true
 
-    @set:Argument(value = "generatePackageIndexPage", description = "Generate packages.html index page.")
+    @set:Argument(value = "generatePackageIndexPage", description = "Generate packages.html index page. [Deprecated]: use noGeneratePackageIndexPage instead.")
+    @Deprecated("There is no way to set this to false.", replaceWith = ReplaceWith(
+        expression ="noGeneratePackageIndexPage"))
     var generatePackageIndexPage: Boolean = true
 
+    @set:Argument(value = "noGenerateClassIndexPage", description = "Disable classes.html index page.")
+    var noGenerateClassIndexPage: Boolean = false
+
+    @set:Argument(value = "noGeneratePackageIndexPage", description = "Disable packages.html index page.")
+    var noGeneratePackageIndexPage: Boolean = false
+
     @set:Argument(value = "outlineRoot", description = "Relative root directory the outline files. I.e. androidx/core/")
     var outlineRoot: String = ""
 
@@ -142,8 +152,8 @@
             languageVersion = arguments.languageVersion,
             apiVersion = arguments.apiVersion,
             collectInheritedExtensionsFromLibraries = arguments.collectInheritedExtensionsFromLibraries,
-            generateClassIndexPage = arguments.generateClassIndexPage,
-            generatePackageIndexPage = arguments.generatePackageIndexPage,
+            generateClassIndexPage = !arguments.noGenerateClassIndexPage,
+            generatePackageIndexPage = !arguments.noGeneratePackageIndexPage,
             outlineRoot = arguments.outlineRoot,
             dacRoot = arguments.dacRoot,
             noJdkLink = arguments.noJdkLink
diff --git a/runners/gradle-plugin/build.gradle b/runners/gradle-plugin/build.gradle
index a067080..4742dda 100644
--- a/runners/gradle-plugin/build.gradle
+++ b/runners/gradle-plugin/build.gradle
@@ -63,6 +63,27 @@
             }
 
             project.shadow.component(publication)
+            publication.pom { pom ->
+                // Add dokka-fatjar as a runtime dependency.
+                // This is a workaround until the Shadow jar can put project dependencies into the .pom: https://github.com/johnrengelman/shadow/commit/da82b37522b349aff414f571d2037682acd84f27
+                pom.withXml { xml ->
+                    def node = xml.asNode()
+                    def deps = null
+                    node.children().each { child ->
+                        if (child.name().toString() == "dependencies") {
+                            deps = child
+                        }
+                    }
+                    if (deps == null) {
+                        deps = node.appendNode("dependencies")
+                    }
+                    def dep = deps.appendNode("dependency")
+                    dep.appendNode("groupId", "org.jetbrains.dokka")
+                    dep.appendNode("artifactId", "dokka-fatjar")
+                    dep.appendNode("version", dokka_version)
+                    dep.appendNode("scope", "runtime")
+                }
+            }
         }
     }
 }