From a1322a1ab11b4395199eb3ca08bfb2349627dcfd Mon Sep 17 00:00:00 2001 From: Szymon Świstun Date: Mon, 16 Mar 2020 11:25:20 +0100 Subject: Signatures for functional types --- .../kotlin/signatures/KotlinSignatureProvider.kt | 24 ++ .../expect/signatureTest/out/-search.html | 23 ++ .../expect/signatureTest/out/images/arrow_down.svg | 3 + .../expect/signatureTest/out/images/logo-icon.svg | 3 + .../expect/signatureTest/out/images/logo-text.svg | 6 + .../expect/signatureTest/out/navigation.html | 13 + .../expect/signatureTest/out/root/index.html | 30 ++ .../out/root/signatureTest/index.html | 36 +++ .../signatureTest/out/root/signatureTest/test.html | 30 ++ .../out/root/signatureTest/test2.html | 30 ++ .../signatureTest/out/scripts/navigationLoader.js | 12 + .../expect/signatureTest/out/scripts/pages.js | 6 + .../expect/signatureTest/out/scripts/scripts.js | 11 + .../expect/signatureTest/out/scripts/search.js | 5 + .../expect/signatureTest/out/styles/style.css | 353 +++++++++++++++++++++ .../expect/signatureTest/src/signature.kt | 4 + 16 files changed, 589 insertions(+) create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/-search.html create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/images/arrow_down.svg create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/images/logo-icon.svg create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/images/logo-text.svg create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/navigation.html create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/root/index.html create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/index.html create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test.html create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test2.html create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/scripts/navigationLoader.js create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/scripts/pages.js create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/scripts/scripts.js create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/scripts/search.js create mode 100644 plugins/base/src/test/resources/expect/signatureTest/out/styles/style.css create mode 100644 plugins/base/src/test/resources/expect/signatureTest/src/signature.kt (limited to 'plugins') diff --git a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt index 8a080bb9..dd99d0cd 100644 --- a/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt +++ b/plugins/base/src/main/kotlin/signatures/KotlinSignatureProvider.kt @@ -71,7 +71,11 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog list(f.parameters) { text(it.name!!) text(": ") + signatureForProjection(it.type) +// val type = it.type +// if (type is KotlinTypeWrapper && type.isFunctionType) funType(type) +// else type(type) } text(")") val returnType = f.type @@ -112,6 +116,26 @@ class KotlinSignatureProvider(ctcc: CommentsToContentConverter, logger: DokkaLog is PrimitiveJavaType -> signatureForProjection(p.translateToKotlin()) } + + fun PageContentBuilder.DocumentableContentBuilder.funType(type: KotlinTypeWrapper) { + if (type.isExtension) { + type(type.arguments.first()) + text(".") + } + + val args = if (type.isExtension) { + type.arguments.drop(1) + } else + type.arguments + + text("(") + args.subList(0, args.size - 1).forEachIndexed { i, arg -> + type(arg) + if (i < args.size - 2) text(", ") + } + text(") -> ") + type(args.last()) + } } private fun PrimitiveJavaType.translateToKotlin() = TypeConstructor( diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/-search.html b/plugins/base/src/test/resources/expect/signatureTest/out/-search.html new file mode 100644 index 00000000..1ee812bb --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/-search.html @@ -0,0 +1,23 @@ + + + Search + + + + + + +
+

Search results for

+ + +
+
+ + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/images/arrow_down.svg b/plugins/base/src/test/resources/expect/signatureTest/out/images/arrow_down.svg new file mode 100644 index 00000000..89e7df47 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/images/arrow_down.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-icon.svg b/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-icon.svg new file mode 100644 index 00000000..1b3b3670 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-text.svg b/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-text.svg new file mode 100644 index 00000000..7bf3e6c5 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/images/logo-text.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/navigation.html b/plugins/base/src/test/resources/expect/signatureTest/out/navigation.html new file mode 100644 index 00000000..da6b4b0a --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/navigation.html @@ -0,0 +1,13 @@ + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/root/index.html b/plugins/base/src/test/resources/expect/signatureTest/out/root/index.html new file mode 100644 index 00000000..9b5327ec --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/root/index.html @@ -0,0 +1,30 @@ + + + root + + + + + + +
//root +

root

+

Packages

+ + + + + + + +
signatureTest
+Index +Link to allpage here
+ + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/index.html b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/index.html new file mode 100644 index 00000000..fbee923b --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/index.html @@ -0,0 +1,36 @@ + + + signatureTest + + + + + + +
//root/signatureTest +

Package signatureTest

+

Functions

+ + + + + + + + + + + + + + +
testfinal fun test(i: (Int) -> Int)
test2final fun test2(i: Int.(Int) -> Int)
+
+ + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test.html b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test.html new file mode 100644 index 00000000..fe15c2c5 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test.html @@ -0,0 +1,30 @@ + + + test + + + + + + +
//root/signatureTest/test +

test

+final fun test(i: (Int) -> Int) +

Parameters

+ + + + + + + +
i
+
+ + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test2.html b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test2.html new file mode 100644 index 00000000..58dbaf39 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/root/signatureTest/test2.html @@ -0,0 +1,30 @@ + + + test2 + + + + + + +
//root/signatureTest/test2 +

test2

+final fun test2(i: Int.(Int) -> Int) +

Parameters

+ + + + + + + +
i
+
+ + + diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/scripts/navigationLoader.js b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/navigationLoader.js new file mode 100644 index 00000000..99a885a9 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/navigationLoader.js @@ -0,0 +1,12 @@ +onload = () => { + fetch(pathToRoot + "navigation.html") + .then(response => response.text()) + .then(data => { + document.getElementById("sideMenu").innerHTML = data; + }).then(() => { + document.querySelectorAll(".overview > a").forEach(link => { + link.setAttribute("href", pathToRoot + link.getAttribute("href")) + console.log(link.attributes["href"]) + }) + }) +} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/scripts/pages.js b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/pages.js new file mode 100644 index 00000000..7c74ea83 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/pages.js @@ -0,0 +1,6 @@ +var pages = [ +{ "name": "root", "location": "root/index.html" }, +{ "name": "signatureTest", "location": "root/signatureTest/index.html" }, +{ "name": "test", "location": "root/signatureTest/test.html" }, +{ "name": "test2", "location": "root/signatureTest/test2.html" } +] diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/scripts/scripts.js b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/scripts.js new file mode 100644 index 00000000..c2e29b9f --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/scripts.js @@ -0,0 +1,11 @@ +document.getElementById("navigationFilter").oninput = function (e) { + var input = e.target.value; + var menuParts = document.getElementsByClassName("sideMenuPart") + for (let part of menuParts) { + if(part.querySelector("a").textContent.startsWith(input)) { + part.classList.remove("filtered"); + } else { + part.classList.add("filtered"); + } + } +} \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/scripts/search.js b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/search.js new file mode 100644 index 00000000..63112ac5 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/scripts/search.js @@ -0,0 +1,5 @@ +var query = new URLSearchParams(window.location.search).get("query"); + document.getElementById("searchTitle").innerHTML += '"' + query + '":'; + document.getElementById("searchTable").innerHTML = pages.filter(el => el.name.startsWith(query)).reduce((acc, element) => { return acc + + '' + element.name + '' + }, ""); \ No newline at end of file diff --git a/plugins/base/src/test/resources/expect/signatureTest/out/styles/style.css b/plugins/base/src/test/resources/expect/signatureTest/out/styles/style.css new file mode 100644 index 00000000..4a76dd96 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/out/styles/style.css @@ -0,0 +1,353 @@ +@import url(https://fonts.googleapis.com/css?family=Open+Sans:300i,400,700); + + +#content { + margin-top: 3em; + margin-left: 15em; +} + +#navigation { + position: relative +} + +#sideMenu, #searchBar { + position: absolute; +} + +#sideMenu { + width: 14em; + padding-left: 0.5em; +} + +#sideMenu .sideMenuPart { + margin-left: 1em; +} + +#sideMenu img { + margin: 1em 0.25em; +} + +#sideMenu hr { + background: #DADFE6; +} + +#searchBar { + width: 100%; + pointer-events: none; +} + +#searchForm { + float: right; + pointer-events: all; +} + +.sideMenuPart > .navButton { + margin-left:0.25em +} + +.sideMenuPart > .overview .navButtonContent::after { + float: right; + content: url("../images/arrow_down.svg"); +} + +.sideMenuPart.hidden > .navButton .navButtonContent::after { + content: '\02192'; +} + +.sideMenuPart.hidden > .sideMenuPart { + display: none; +} + +.filtered > a, .filtered > .navButton { + display: none; +} + +body, table{ + font:14px/1.5 'Open Sans', "Helvetica Neue", Helvetica, Arial, sans-serif; + background: #F4F4F4; + font-weight:300; + margin-left: auto; + margin-right: auto; + max-width: 1440px; +} + +table { + display: flex; + padding:5px; +} + +td:first-child { + width: 20vw; +} + +.keyword { + color:black; + font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + font-size:12px; +} + +.symbol { + font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + font-size:12px; +} + +.identifier { + color: darkblue; + font-size:12px; + font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; +} + +h1, h2, h3, h4, h5, h6 { + color:#222; + margin:0 0 20px; +} + +p, ul, ol, table, pre, dl { + margin:0 0 20px; +} + +h1, h2, h3 { + line-height:1.1; +} + +h1 { + font-size:28px; +} + +h2 { + color:#393939; +} + +h3, h4, h5, h6 { + color:#494949; +} + +a { + color:#258aaf; + font-weight:400; + text-decoration:none; +} + +a:hover { + color: inherit; + text-decoration:underline; +} + +a small { + font-size:11px; + color:#555; + margin-top:-0.6em; + display:block; +} + +.wrapper { + width:860px; + margin:0 auto; +} + +blockquote { + border-left:1px solid #e5e5e5; + margin:0; + padding:0 0 0 20px; + font-style:italic; +} + +code, pre { + font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal; + color:#333; + font-size:12px; +} + +pre { + display: block; +/* + padding:8px 8px; + background: #f8f8f8; + border-radius:5px; + border:1px solid #e5e5e5; +*/ + overflow-x: auto; +} + +table { + width:100%; + border-collapse:collapse; +} + +th, td { + text-align:left; + vertical-align: top; + padding:5px 10px; +} + +dt { + color:#444; + font-weight:700; +} + +th { + color:#444; +} + +img { + max-width:100%; +} + +header { + width:270px; + float:left; + position:fixed; +} + +header ul { + list-style:none; + height:40px; + + padding:0; + + background: #eee; + background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd)); + background: -webkit-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); + background: -o-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); + background: -ms-linear-gradient(top, #f8f8f8 0%,#dddddd 100%); + background: linear-gradient(top, #f8f8f8 0%,#dddddd 100%); + + border-radius:5px; + border:1px solid #d2d2d2; + box-shadow:inset #fff 0 1px 0, inset rgba(0,0,0,0.03) 0 -1px 0; + width:270px; +} + +header li { + width:89px; + float:left; + border-right:1px solid #d2d2d2; + height:40px; +} + +header ul a { + line-height:1; + font-size:11px; + color:#999; + display:block; + text-align:center; + padding-top:6px; + height:40px; +} + +strong { + color:#222; + font-weight:700; +} + +header ul li + li { + width:88px; + border-left:1px solid #fff; +} + +header ul li + li + li { + border-right:none; + width:89px; +} + +header ul a strong { + font-size:14px; + display:block; + color:#222; +} + +section { + width:500px; + float:right; + padding-bottom:50px; +} + +small { + font-size:11px; +} + +hr { + border:0; + background:#e5e5e5; + height:1px; + margin:0 0 20px; +} + +footer { + width:270px; + float:left; + position:fixed; + bottom:50px; +} + +@media print, screen and (max-width: 960px) { + + div.wrapper { + width:auto; + margin:0; + } + + header, section, footer { + float:none; + position:static; + width:auto; + } + + header { + padding-right:320px; + } + + section { + border:1px solid #e5e5e5; + border-width:1px 0; + padding:20px 0; + margin:0 0 20px; + } + + header a small { + display:inline; + } + + header ul { + position:absolute; + right:50px; + top:52px; + } +} + +@media print, screen and (max-width: 720px) { + body { + word-wrap:break-word; + } + + header { + padding:0; + } + + header ul, header p.view { + position:static; + } + + pre, code { + word-wrap:normal; + } +} + +@media print, screen and (max-width: 480px) { + body { + padding:15px; + } + + header ul { + display:none; + } +} + +@media print { + body { + padding:0.4in; + font-size:12pt; + color:#444; + } +} diff --git a/plugins/base/src/test/resources/expect/signatureTest/src/signature.kt b/plugins/base/src/test/resources/expect/signatureTest/src/signature.kt new file mode 100644 index 00000000..48e56c47 --- /dev/null +++ b/plugins/base/src/test/resources/expect/signatureTest/src/signature.kt @@ -0,0 +1,4 @@ +package signatureTest + +fun test(i: (Int) -> Int) {} +fun test2(i: Int.(Int) -> Int) {} \ No newline at end of file -- cgit