diff options
| author | Marcin Aman <marcin.aman@gmail.com> | 2020-07-07 15:45:32 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-07 15:45:32 +0200 |
| commit | 63823e14794136c23359aab9f40b8d8dcfe504dd (patch) | |
| tree | f65f3aee6e6d4086bd217387116261a14de5a6cb /plugins | |
| parent | 6c1403cd8ffab5e13f12a2744846a70b31710b09 (diff) | |
| download | dokka-63823e14794136c23359aab9f40b8d8dcfe504dd.tar.gz dokka-63823e14794136c23359aab9f40b8d8dcfe504dd.tar.bz2 dokka-63823e14794136c23359aab9f40b8d8dcfe504dd.zip | |
Javadoc signature provider (#1041)
Javadoc signature provider #1025
Diffstat (limited to 'plugins')
15 files changed, 669 insertions, 532 deletions
diff --git a/plugins/base/src/main/kotlin/signatures/JvmSignatureUtils.kt b/plugins/base/src/main/kotlin/signatures/JvmSignatureUtils.kt index 2a242948..689f6db5 100644 --- a/plugins/base/src/main/kotlin/signatures/JvmSignatureUtils.kt +++ b/plugins/base/src/main/kotlin/signatures/JvmSignatureUtils.kt @@ -21,9 +21,6 @@ interface JvmSignatureUtils { fun <T : Documentable> WithExtraProperties<T>.annotations(): SourceSetDependent<List<Annotations.Annotation>> = extra[Annotations]?.content ?: emptyMap() - private fun Annotations.Annotation.toSignatureString(): String = - "@" + this.dri.classNames + "(" + this.params.entries.joinToString { it.key + "=" + it.value } + ")" - private fun PageContentBuilder.DocumentableContentBuilder.annotations( d: Documentable, ignored: Set<Annotations.Annotation>, diff --git a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt index 5a55e3ec..5e03be6e 100644 --- a/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt +++ b/plugins/base/src/main/kotlin/translators/psi/DefaultPsiToDocumentableTranslator.kt @@ -317,10 +317,15 @@ class DefaultPsiToDocumentableTranslator( is PsiClassReferenceType -> { val resolved: PsiClass = type.resolve() ?: return UnresolvedBound(type.presentableText) - if (resolved.qualifiedName == "java.lang.Object") { - JavaObject - } else { - TypeConstructor(DRI.from(resolved), type.parameters.map { getProjection(it) }) + when { + resolved.qualifiedName == "java.lang.Object" -> JavaObject + resolved is PsiTypeParameter && resolved.owner != null -> + OtherParameter( + declarationDRI = DRI.from(resolved.owner!!), + name = resolved.name.orEmpty() + ) + else -> + TypeConstructor(DRI.from(resolved), type.parameters.map { getProjection(it) }) } } is PsiArrayType -> TypeConstructor( @@ -443,7 +448,7 @@ class DefaultPsiToDocumentableTranslator( attributes.filter { it !is KtLightAbstractAnnotation }.mapNotNull { it.attributeName to it.toValue() } .toMap(), (psiElement as PsiClass).annotations.any { - hasQualifiedName("java.lang.annotation.Documented") + it.hasQualifiedName("java.lang.annotation.Documented") } ) } diff --git a/plugins/javadoc/src/main/kotlin/javadoc/JavadocPageCreator.kt b/plugins/javadoc/src/main/kotlin/javadoc/JavadocPageCreator.kt index ebe223e5..1bafa111 100644 --- a/plugins/javadoc/src/main/kotlin/javadoc/JavadocPageCreator.kt +++ b/plugins/javadoc/src/main/kotlin/javadoc/JavadocPageCreator.kt @@ -9,13 +9,12 @@ import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentCon import org.jetbrains.dokka.base.transformers.pages.comments.DocTagToContentConverter import org.jetbrains.dokka.model.* import org.jetbrains.dokka.model.doc.Description +import org.jetbrains.dokka.model.doc.NamedTagWrapper +import org.jetbrains.dokka.model.doc.Param import org.jetbrains.dokka.model.doc.TagWrapper import org.jetbrains.dokka.model.properties.PropertyContainer import org.jetbrains.dokka.model.properties.WithExtraProperties -import org.jetbrains.dokka.pages.ContentKind -import org.jetbrains.dokka.pages.ContentNode -import org.jetbrains.dokka.pages.ContentText -import org.jetbrains.dokka.pages.DCI +import org.jetbrains.dokka.pages.* import org.jetbrains.dokka.utilities.DokkaLogger open class JavadocPageCreator( @@ -43,20 +42,20 @@ open class JavadocPageCreator( name = c.name.orEmpty(), content = contentForClasslike(c), dri = setOf(c.dri), - modifiers = listOfNotNull(c.visibility[jvm]?.name), - signature = signatureProvider.signature(c).nodeForJvm(jvm), + signature = signatureForNode(c, jvm), description = c.descriptionToContentNodes(), constructors = (c as? WithConstructors)?.constructors?.mapNotNull { it.toJavadocFunction() }.orEmpty(), methods = c.functions.mapNotNull { it.toJavadocFunction() }, entries = (c as? DEnum)?.entries?.map { JavadocEntryNode( - signatureProvider.signature(it).nodeForJvm(jvm), it.descriptionToContentNodes(jvm) + signatureForNode(it, jvm), + it.descriptionToContentNodes(jvm) ) }.orEmpty(), classlikes = c.classlikes.mapNotNull { pageForClasslike(it) }, properties = c.properties.map { JavadocPropertyNode( - signatureProvider.signature(it).nodeForJvm(jvm), + signatureForNode(it, jvm), it.descriptionToContentNodes(jvm) ) }, @@ -71,7 +70,7 @@ open class JavadocPageCreator( JavadocContentKind.OverviewSummary, m.jvmSourceSets.toSet() ) { - title(m.name, m.brief(),"0.0.1", dri = setOf(m.dri), kind = ContentKind.Main) + title(m.name, m.brief(), "0.0.1", dri = setOf(m.dri), kind = ContentKind.Main) list("Packages", "Package", setOf(m.dri), ContentKind.Packages, m.packages.sortedBy { it.name }.map { p -> RowJavadocListEntry( LinkJavadocListEntry(p.name, setOf(p.dri), JavadocContentKind.PackageSummary, sourceSets), @@ -111,42 +110,21 @@ open class JavadocPageCreator( ) } - private fun signatureForProjection(p: Projection): String = - when (p) { - is OtherParameter -> p.name - is TypeConstructor -> if (p.function) - "TODO" - else { - val other = if (p.projections.isNotEmpty()) { - p.projections.joinToString(prefix = "<", postfix = ">") { signatureForProjection(it) } - } else { - "" - } - "${p.dri.classNames.orEmpty()} $other" - } - - is Variance -> "${p.kind} ${signatureForProjection(p.inner)}" - is Star -> "*" - is Nullable -> "${signatureForProjection(p.inner)}?" - is JavaObject -> "Object" - is Void -> "Void" - is PrimitiveJavaType -> p.name - is Dynamic -> "dynamic" - is UnresolvedBound -> p.name - } - private fun DFunction.toJavadocFunction() = highestJvmSourceSet?.let { jvm -> JavadocFunctionNode( name = name, dri = dri, - signature = signatureProvider.signature(this).nodeForJvm(jvm), + signature = signatureForNode(this, jvm), brief = brief(jvm), - parameters = parameters.map { - JavadocParameterNode( - name = it.name.orEmpty(), - type = signatureForProjection(it.type), - description = it.brief() - ) + parameters = parameters.mapNotNull { + val signature = signatureForNode(it, jvm) + signature.modifiers?.let { type -> + JavadocParameterNode( + name = it.name.orEmpty(), + type = type, + description = it.brief() + ) + } }, extras = extra ) @@ -165,19 +143,28 @@ open class JavadocPageCreator( private inline fun <reified T : TagWrapper> Documentable.findNodeInDocumentation(sourceSetData: DokkaSourceSet?): T? = documentation[sourceSetData]?.firstChildOfTypeOrNull<T>() - private fun Documentable.descriptionToContentNodes(sourceSet: DokkaSourceSet? = highestJvmSourceSet) = findNodeInDocumentation<Description>(sourceSet)?.let { - DocTagToContentConverter.buildContent( - it.root, - DCI(setOf(dri), JavadocContentKind.OverviewSummary), - sourceSets.toSet() - ) - }.orEmpty() + private fun Documentable.descriptionToContentNodes(sourceSet: DokkaSourceSet? = highestJvmSourceSet) = + contentNodesFromType<Description>(sourceSet) + + private fun DParameter.paramsToContentNodes(sourceSet: DokkaSourceSet? = highestJvmSourceSet) = + contentNodesFromType<Param>(sourceSet) + + private inline fun <reified T : TagWrapper> Documentable.contentNodesFromType(sourceSet: DokkaSourceSet?) = + findNodeInDocumentation<T>(sourceSet)?.let { + DocTagToContentConverter.buildContent( + it.root, + DCI(setOf(dri), JavadocContentKind.OverviewSummary), + sourceSets.toSet() + ) + }.orEmpty() fun List<ContentNode>.nodeForJvm(jvm: DokkaSourceSet): ContentNode = first { it.sourceSets.contains(jvm) } - private fun Documentable.brief(sourceSet: DokkaSourceSet? = highestJvmSourceSet): List<ContentNode> { - val description = descriptionToContentNodes(sourceSet) + private fun Documentable.brief(sourceSet: DokkaSourceSet? = highestJvmSourceSet): List<ContentNode> = + briefFromContentNodes(descriptionToContentNodes(sourceSet)) + + private fun briefFromContentNodes(description: List<ContentNode>): List<ContentNode> { val contents = mutableListOf<ContentNode>() for (node in description) { if (node is ContentText && firstSentenceRegex.containsMatchIn(node.text)) { @@ -189,5 +176,14 @@ open class JavadocPageCreator( } return contents } + + private fun DParameter.brief(sourceSet: DokkaSourceSet? = highestJvmSourceSet): List<ContentNode> = + briefFromContentNodes(paramsToContentNodes(sourceSet).dropWhile { it is ContentDRILink }) + + private fun ContentNode.asJavadocNode(): JavadocSignatureContentNode = + (this as ContentGroup).firstChildOfTypeOrNull<JavadocSignatureContentNode>() ?: throw IllegalStateException("No content for javadoc signature found") + + private fun signatureForNode(documentable: Documentable, sourceSet: DokkaSourceSet): JavadocSignatureContentNode = + signatureProvider.signature(documentable).nodeForJvm(sourceSet).asJavadocNode() } diff --git a/plugins/javadoc/src/main/kotlin/javadoc/JavadocPlugin.kt b/plugins/javadoc/src/main/kotlin/javadoc/JavadocPlugin.kt index 7b4aa64d..1a14e97e 100644 --- a/plugins/javadoc/src/main/kotlin/javadoc/JavadocPlugin.kt +++ b/plugins/javadoc/src/main/kotlin/javadoc/JavadocPlugin.kt @@ -3,21 +3,24 @@ package org.jetbrains.dokka.javadoc import javadoc.JavadocDocumentableToPageTranslator import javadoc.location.JavadocLocationProviderFactory import javadoc.renderer.KorteJavadocRenderer +import javadoc.signatures.JavadocSignatureProvider import org.jetbrains.dokka.CoreExtensions import org.jetbrains.dokka.base.DokkaBase +import org.jetbrains.dokka.kotlinAsJava.KotlinAsJavaPlugin import org.jetbrains.dokka.plugability.DokkaPlugin import org.jetbrains.dokka.plugability.querySingle class JavadocPlugin : DokkaPlugin() { val dokkaBasePlugin by lazy { plugin<DokkaBase>() } + val kotinAsJavaPlugin by lazy { plugin<KotlinAsJavaPlugin>() } val locationProviderFactory by extensionPoint<JavadocLocationProviderFactory>() val dokkaJavadocPlugin by extending { (CoreExtensions.renderer providing { ctx -> KorteJavadocRenderer(dokkaBasePlugin.querySingle { outputWriter }, ctx, "views") } - applyIf { format == "javadoc" } + applyIf { format == javadocFormat } override dokkaBasePlugin.htmlRenderer) } @@ -28,13 +31,28 @@ class JavadocPlugin : DokkaPlugin() { dokkaBasePlugin.querySingle { signatureProvider }, context.logger ) - } override dokkaBasePlugin.documentableToPageTranslator + } override dokkaBasePlugin.documentableToPageTranslator applyIf { format == javadocFormat } } val javadocLocationProviderFactory by extending { locationProviderFactory providing { context -> JavadocLocationProviderFactory(context) - } + } applyIf { format == javadocFormat } + } + + val javadocSignatureProvider by extending { + val dokkaBasePlugin = plugin<DokkaBase>() + dokkaBasePlugin.signatureProvider providing { ctx -> + JavadocSignatureProvider( + ctx.single( + dokkaBasePlugin.commentsToContentConverter + ), ctx.logger + ) + } override kotinAsJavaPlugin.javaSignatureProvider applyIf { format == javadocFormat } + } + + companion object { + private val javadocFormat = "javadoc" } } diff --git a/plugins/javadoc/src/main/kotlin/javadoc/pages/JavadocContentNodes.kt b/plugins/javadoc/src/main/kotlin/javadoc/pages/JavadocContentNodes.kt index c8593498..5e24ce9e 100644 --- a/plugins/javadoc/src/main/kotlin/javadoc/pages/JavadocContentNodes.kt +++ b/plugins/javadoc/src/main/kotlin/javadoc/pages/JavadocContentNodes.kt @@ -86,13 +86,6 @@ fun JavaContentGroupBuilder.title( list.add(TitleNode(title, subtitle, version, parent, dri, kind, sourceSets)) } -data class TextNode( - val text: String, - override val sourceSets: Set<DokkaSourceSet> -) : JavadocContentNode(emptySet(), ContentKind.Main, sourceSets) { - override fun hasAnyContent(): Boolean = !text.isBlank() -} - class ListNode( val tabTitle: String, val colTitle: String, @@ -137,3 +130,14 @@ class LinkJavadocListEntry( data class RowJavadocListEntry(val link: LinkJavadocListEntry, val doc: List<ContentNode>) : JavadocListEntry { override val stringTag: String = "" } + +data class JavadocSignatureContentNode( + val dri: DRI, + val kind: Kind = ContentKind.Symbol, + val annotations: ContentNode?, + val modifiers: ContentNode?, + val signatureWithoutModifiers: ContentNode, + val supertypes: ContentNode? +): JavadocContentNode(setOf(dri), kind, signatureWithoutModifiers.sourceSets) { + override fun hasAnyContent(): Boolean = true +} diff --git a/plugins/javadoc/src/main/kotlin/javadoc/pages/JavadocPageNodes.kt b/plugins/javadoc/src/main/kotlin/javadoc/pages/JavadocPageNodes.kt index 24e481e8..02e4b2d6 100644 --- a/plugins/javadoc/src/main/kotlin/javadoc/pages/JavadocPageNodes.kt +++ b/plugins/javadoc/src/main/kotlin/javadoc/pages/JavadocPageNodes.kt @@ -26,8 +26,6 @@ class JavadocModulePageNode( RootPageNode(), JavadocPageNode { - val version: String = "0.0.1" - override val documentable: Documentable? = null override val embeddedResources: List<String> = emptyList() override fun modified(name: String, children: List<PageNode>): RootPageNode = @@ -82,44 +80,35 @@ class JavadocPackagePageNode( } data class JavadocEntryNode( - val signature: ContentNode, + val signature: JavadocSignatureContentNode, val brief: List<ContentNode> ) data class JavadocParameterNode( val name: String, - val type: String, + val type: ContentNode, val description: List<ContentNode> ) data class JavadocPropertyNode( - val signature: ContentNode, + val signature: JavadocSignatureContentNode, val brief: List<ContentNode> -) { - val modifiersAndSignature: Pair<ContentNode, ContentNode> - get() = (signature as ContentGroup).splitSignatureIntoModifiersAndName() -} +) data class JavadocFunctionNode( - val signature: ContentNode, + val signature: JavadocSignatureContentNode, val brief: List<ContentNode>, val parameters: List<JavadocParameterNode>, val name: String, val dri: DRI, val extras: PropertyContainer<DFunction> = PropertyContainer.empty() -) { - - val modifiersAndSignature: Pair<ContentNode, ContentNode> - get() = (signature as ContentGroup).splitSignatureIntoModifiersAndName() - -} +) class JavadocClasslikePageNode( override val name: String, override val content: JavadocContentNode, override val dri: Set<DRI>, - val modifiers: List<String>, - val signature: ContentNode, + val signature: JavadocSignatureContentNode, val description: List<ContentNode>, val constructors: List<JavadocFunctionNode>, val methods: List<JavadocFunctionNode>, @@ -142,7 +131,6 @@ class JavadocClasslikePageNode( name, content, dri, - modifiers, signature, description, constructors, @@ -167,7 +155,6 @@ class JavadocClasslikePageNode( name, content as JavadocContentNode, dri, - modifiers, signature, description, constructors, @@ -413,15 +400,6 @@ class TreeViewPage( } } -private fun ContentGroup.splitSignatureIntoModifiersAndName(): Pair<ContentNode, ContentNode> { - val signature = children.firstIsInstance<ContentGroup>() - val modifiers = signature.children.takeWhile { it !is ContentLink } - return Pair( - signature.copy(children = modifiers), - signature.copy(children = signature.children.drop(modifiers.size)) - ) -} - private fun Documentable.kind(): String? = when (this) { is DClass -> "class" diff --git a/plugins/javadoc/src/main/kotlin/javadoc/pages/htmlGeneration.kt b/plugins/javadoc/src/main/kotlin/javadoc/pages/htmlGeneration.kt deleted file mode 100644 index 98aa2344..00000000 --- a/plugins/javadoc/src/main/kotlin/javadoc/pages/htmlGeneration.kt +++ /dev/null @@ -1,391 +0,0 @@ -package javadoc.pages - -import kotlinx.html.html -import kotlinx.html.stream.createHTML -import org.jetbrains.dokka.pages.ClasslikePageNode -import org.jetbrains.dokka.pages.ModulePageNode -import org.jetbrains.dokka.pages.PackagePageNode -import org.jetbrains.dokka.pages.PageNode -import java.time.LocalDate - -class NavbarGenerator(val page: PageNode) { - val activeClass = "navBarCell1Rev" - fun pathToRoot() = "???" // TODO - val navItems = listOf("Overview", "Package", "Class", "Tree", "Deprecated", "Index", "Help") - - // private fun items = navItems.map {itemLink} -// fun navItemLink() - val x = createHTML().html {} - - private fun navList(content: String) = """<ul class="navList" title="Navigation"> - $content - </ul> - """.trimIndent() - -// private fun navList(): String { -// when (page) { -// is PackagePageNode -> -// } -// """ -//<li><a href="../index.html">Overview</a></li> -//<li><a href="package-summary.html">Package</a></li> -//<li class="navBarCell1Rev">Class</li> -//""" -// val classItem = if (page is ClasslikePageNode) { -// "Class".wrapInTag("li", mapOf("class" to activeClass)) -// } -// val treeItem = if (page is ModulePageNode) { -// "<li><a href=\"overview-tree.html\">Tree</a></li>\n" -// } else { -// "<li><a href=\"package-tree.html\">Tree</a></li>\n" -// } -// -// val navListEnd = """ -//<li><a href="${pathToRoot()}deprecated-list.html">Deprecated</a></li> -//<li><a href="${pathToRoot()}index-all.html">Index</a></li> -//<li><a href="${pathToRoot()}help-doc.html">Help</a></li> -//""".trimIndent() -// } - - private fun bottomNavbar(page: PageNode): String = - """ - |<nav role="navigation"> - |<!-- ======= START OF BOTTOM NAVBAR ====== --> - |<div class="bottomNav"><a id="navbar.bottom"> - |<!-- --> - |</a> - |<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div> - |<a id="navbar.bottom.firstrow"> - |<!-- --> - |</a> - ${navList("????")} - |</div> - |<div class="subNav"> - |<div> - |<ul class="subNavList"> - |<li>Summary: </li> - |<li>Nested | </li> - |<li>Field | </li> - |<li><a href="#constructor.summary">Constr</a> | </li> - |<li><a href="#method.summary">Method</a></li> - |</ul> - |<ul class="subNavList"> - |<li>Detail: </li> - |<li>Field | </li> - |<li><a href="#constructor.detail">Constr</a> | </li> - |<li><a href="#method.detail">Method</a></li> - |</ul> - |</div> - |</div> - |<a id="skip.navbar.bottom"> - |<!-- --> - |</a> - |<!-- ======== END OF BOTTOM NAVBAR ======= --> - |</nav>""" -} - -internal fun pageStart(title: String, version: String, documentTitle: String, pathToRoot: String) = """ - |<!DOCTYPE HTML> - |<!-- NewPage --> - |<html lang="en"> - |<head> - |<title>$documentTitle ($title $version API)</title> - |<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - |<meta name="dc.created" content="${LocalDate.now()}"> - |<link rel="stylesheet" type="text/css" href="${pathToRoot}stylesheet.css" title="Style"> - |<link rel="stylesheet" type="text/css" href="${pathToRoot}jquery/jquery-ui.css" title="Style"> - |<script type="text/javascript" src="${pathToRoot}script.js"></script> - |<script type="text/javascript" src="${pathToRoot}jquery/jszip/dist/jszip.min.js"></script> - |<script type="text/javascript" src="${pathToRoot}jquery/jszip-utils/dist/jszip-utils.min.js"></script> - |<!--[if IE]> - |<script type="text/javascript" src="${pathToRoot}jquery/jszip-utils/dist/jszip-utils-ie.min.js"></script> - |<![endif]--> - |<script type="text/javascript" src="${pathToRoot}jquery/jquery-$jQueryVersion.js"></script> - |<script type="text/javascript" src="${pathToRoot}jquery/jquery-migrate-$jQueryMigrateVersion.js"></script> - |<script type="text/javascript" src="${pathToRoot}jquery/jquery-ui.js"></script> - |</head> - |<body> - |<script type="text/javascript"><!-- - | try { - | if (location.href.indexOf('is-external=true') == -1) { - | parent.document.title="$documentTitle ($title $version API)"; - | } - | } - | catch(err) { - | } - |//--> - |var pathtoroot = "$pathToRoot"; - |var useModuleDirectories = true; - |loadScripts(document, 'script');</script> - |<noscript> - |<div>JavaScript is disabled on your browser.</div> - |</noscript> - |<header role="banner"> - |<nav role="navigation"> - |<div class="fixedNav">""".trimMargin("|") - -internal fun topNavbar(page: PageNode, pathToRoot: String): String = """ - |<!-- ========= START OF TOP NAVBAR ======= --> - |<div class="topNav"><a id="navbar.top"> - |<!-- --> - |</a> - |<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div> - |<a id="navbar.top.firstrow"> - |<!-- --> - |</a> - |<ul class="navList" title="Navigation"> - ${/*if ((page is JavadocPageNode) && page.pageType == PageType.Class) - "<li><a href=\"${pathToRoot}index.html\">Overview</a></li>" - else if (page is RootIndexPage) - "<li class=\"navBarCell1Rev\">Overview</li>" - else - "<li><a href=\"package-summary.html\">Package</a></li>\n"} - ${if ((page is JavadocPageNode) && page.pageType == PageType.Package) - "<li class=\"navBarCell1Rev\">Package</li>" - else - "<li>Package</li>"*/ ""} - |<li navBarCell1Rev>Class</li> - |<li><a href="overview-tree.html">Tree</a></li> - |<li><a href="${pathToRoot}deprecated-list.html">Deprecated</a></li> - |<li><a href="${pathToRoot}index-all.html">Index</a></li> - |<li><a href="${pathToRoot}help-doc.html">Help</a></li> - |</ul> - |</div> - |<div class="subNav"> - |<ul class="navListSearch"> - |<li><label for="search">SEARCH:</label> - |<input type="text" id="search" value="search" disabled="disabled"> - |<input type="reset" id="reset" value="reset" disabled="disabled"> - |</li> - |</ul> - |</div> - |<a id="skip.navbar.top"> - |<!-- --> - |</a> - |<!-- ========= END OF TOP NAVBAR ========= -->""".trimMargin("|") - -internal fun indexPage(title: String, version: String, tabTitle: String, colTitle: String, packages: List<PageNode>) = """ - |</div> - |<div class="navPadding"> </div> - |<script type="text/javascript"><!-- - |${'$'}('.navPadding').css('padding-top', ${'$'}('.fixedNav').css("height")); - |//--> - |</script> - |</nav> - |</header> - |<main role="main"> - |<div class="header"> - |<h1 class="title">$title $version API</h1> - |</div> - |<div class="contentContainer"> - |<div class="overviewSummary"> - |<table> - |<caption><span>$tabTitle</span><span class="tabEnd"> </span></caption> - |<tr> - |<th class="colFirst" scope="col">$colTitle</th> - |<th class="colLast" scope="col">Description</th> - |</tr> - |<tbody> - ${packages.mapIndexed { i, e -> e.generateLink(i) }.joinToString("\n")} - |</tbody> - |</table> - |</div> - |</div> - |</main> - |<footer role="contentinfo"> - |<nav role="navigation"> - |<!-- ======= START OF BOTTOM NAVBAR ====== --> - |<div class="bottomNav"><a id="navbar.bottom"> - |<!-- --> - |</a> - |<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div> - |<a id="navbar.bottom.firstrow"> - |<!-- --> - |</a> - |<ul class="navList" title="Navigation"> - |<li class="navBarCell1Rev">Overview</li> - |<li>Package</li> - |<li>Class</li> - |<li><a href="overview-tree.html">Tree</a></li> - |<li><a href="deprecated-list.html">Deprecated</a></li> - |<li><a href="index-all.html">Index</a></li> - |<li><a href="help-doc.html">Help</a></li> - |</ul> - |</div> - |<a id="skip.navbar.bottom"> - |<!-- --> - |</a> - |<!-- ======== END OF BOTTOM NAVBAR ======= --> - |</nav> - |</footer> - |</body> - |</html> - |""".trimMargin("|") - -fun classData(name: String, extends: String) = """ - |<!-- ======== START OF CLASS DATA ======== --> - |<div class="header"> - |<div class="subTitle">adaptation</div> - |<h2 title="Class $name" class="title">Class $name</h2> - |</div> - |<div class="contentContainer"> - ${classInheritance()} - |<div class="description"> - |<ul class="blockList"> - |<li class="blockList"> - |<hr> - |<br> - |<pre>public class <span class="typeNameLabel">$name</span> - |extends $name</pre> - |</li> - |</ul> - |</div> - |<div class="summary"> - |<ul class="blockList"> - |<li class="blockList"> - |<!-- ======== NESTED CLASS SUMMARY ======== --> - |<ul class="blockList"> - |<li class="blockList"><a name="nested.class.summary"> - |<!-- --> - |</a> - |<h3>Nested Class Summary</h3> - |<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation"> - |<caption><span>Nested Classes</span><span class="tabEnd"> </span></caption> - |<tr> - |<th class="colFirst" scope="col">Modifier and Type</th> - |<th class="colLast" scope="col">Class and Description</th> - |</tr> - |<tr class="altColor"> - |<td class="colFirst"><code>class </code></td> - |<td class="colLast"><code><span class="memberNameLink"><a href="../adaptation/Adaptation.AdaptationInternalClass.html" title="class in adaptation">Adaptation.AdaptationInternalClass</a></span></code> </td> - |</tr> - |<tr class="rowColor"> - |<td class="colFirst"><code>static class </code></td> - |<td class="colLast"><code><span class="memberNameLink"><a href="../adaptation/Adaptation.AdaptationInternalStaticClass.html" title="class in adaptation">Adaptation.AdaptationInternalStaticClass</a></span></code> </td> - |</tr> - |</table> - |</li> - |</ul> - |<!-- ======== CONSTRUCTOR SUMMARY ======== --> - |<ul class="blockList"> - |<li class="blockList"><a name="constructor.summary"> - |<!-- --> - |</a> - |<h3>Constructor Summary</h3> - |<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation"> - |<caption><span>Constructors</span><span class="tabEnd"> </span></caption> - |<tr> - |<th class="colOne" scope="col">Constructor and Description</th> - |</tr> - |<tr class="altColor"> - |<td class="colOne"><code><span class="memberNameLink"><a href="../adaptation/Adaptation.html#Adaptation--">Adaptation</a></span>()</code> </td> - |</tr> - |</table> - |</li> - |</ul> - |<!-- ========== METHOD SUMMARY =========== --> - |<ul class="blockList"> - |<li class="blockList"><a name="method.summary"> - |<!-- --> - |</a> - |<h3>Method Summary</h3> - |<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation"> - |<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd"> </span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd"> </span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd"> </span></span></caption> - |<tr> - |<th class="colFirst" scope="col">Modifier and Type</th> - |<th class="colLast" scope="col">Method and Description</th> - |</tr> - |<tr id="i0" class="altColor"> - |<td class="colFirst"><code>static org.javatuples.Pair<<a href="../model/ModelGraph.html" title="class in model">ModelGraph</a>,java.lang.Boolean></code></td> - |<td class="colLast"><code><span class="memberNameLink"><a href="../adaptation/Adaptation.html#transform-model.ModelGraph-transformation.Transformation-">transform</a></span>(<a href="../model/ModelGraph.html" title="class in model">ModelGraph</a> graph, - | <a href="../transformation/Transformation.html" title="interface in transformation">Transformation</a> transformation)</code> </td> |
