diff --git a/js/js.libraries/src/generated/org.khronos.webgl.kt b/js/js.libraries/src/generated/org.khronos.webgl.kt index e1cfc030044..c2a9129e851 100644 --- a/js/js.libraries/src/generated/org.khronos.webgl.kt +++ b/js/js.libraries/src/generated/org.khronos.webgl.kt @@ -15,7 +15,7 @@ import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* diff --git a/js/js.libraries/src/generated/org.w3c.dom.css.kt b/js/js.libraries/src/generated/org.w3c.dom.css.kt index 23c0f7a3a0f..8e68a14993e 100644 --- a/js/js.libraries/src/generated/org.w3c.dom.css.kt +++ b/js/js.libraries/src/generated/org.w3c.dom.css.kt @@ -15,7 +15,7 @@ import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* diff --git a/js/js.libraries/src/generated/org.w3c.dom.events.kt b/js/js.libraries/src/generated/org.w3c.dom.events.kt index 46613fe72c6..c52dfffaf5f 100644 --- a/js/js.libraries/src/generated/org.w3c.dom.events.kt +++ b/js/js.libraries/src/generated/org.w3c.dom.events.kt @@ -15,7 +15,7 @@ import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* diff --git a/js/js.libraries/src/generated/org.w3c.dom.kt b/js/js.libraries/src/generated/org.w3c.dom.kt index 1cc9167a675..7c7100fce61 100644 --- a/js/js.libraries/src/generated/org.w3c.dom.kt +++ b/js/js.libraries/src/generated/org.w3c.dom.kt @@ -15,7 +15,7 @@ import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* @@ -3026,6 +3026,9 @@ native public trait Window : EventTarget { var caches: CacheStorage get() = noImpl set(value) = noImpl + var performance: Performance + get() = noImpl + set(value) = noImpl var window: Window get() = noImpl set(value) = noImpl diff --git a/js/js.libraries/src/generated/org.w3c.dom.parsing.kt b/js/js.libraries/src/generated/org.w3c.dom.parsing.kt index b5a98d497a1..bfe6f1175e0 100644 --- a/js/js.libraries/src/generated/org.w3c.dom.parsing.kt +++ b/js/js.libraries/src/generated/org.w3c.dom.parsing.kt @@ -15,7 +15,7 @@ import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* diff --git a/js/js.libraries/src/generated/org.w3c.dom.svg.kt b/js/js.libraries/src/generated/org.w3c.dom.svg.kt index 815ebfe6ce6..5376d557cc6 100644 --- a/js/js.libraries/src/generated/org.w3c.dom.svg.kt +++ b/js/js.libraries/src/generated/org.w3c.dom.svg.kt @@ -15,7 +15,7 @@ import org.w3c.dom.parsing.* import org.w3c.fetch.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* diff --git a/js/js.libraries/src/generated/org.w3c.fetch.kt b/js/js.libraries/src/generated/org.w3c.fetch.kt index 37ffd4d2b5d..6dce9924cda 100644 --- a/js/js.libraries/src/generated/org.w3c.fetch.kt +++ b/js/js.libraries/src/generated/org.w3c.fetch.kt @@ -15,7 +15,7 @@ import org.w3c.dom.parsing.* import org.w3c.dom.svg.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* diff --git a/js/js.libraries/src/generated/org.w3c.files.kt b/js/js.libraries/src/generated/org.w3c.files.kt index c2cd922f7af..e187a5aff83 100644 --- a/js/js.libraries/src/generated/org.w3c.files.kt +++ b/js/js.libraries/src/generated/org.w3c.files.kt @@ -15,7 +15,7 @@ import org.w3c.dom.parsing.* import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* diff --git a/js/js.libraries/src/generated/org.w3c.notifications.kt b/js/js.libraries/src/generated/org.w3c.notifications.kt index d4596a883ed..16567f337b3 100644 --- a/js/js.libraries/src/generated/org.w3c.notifications.kt +++ b/js/js.libraries/src/generated/org.w3c.notifications.kt @@ -15,7 +15,7 @@ import org.w3c.dom.parsing.* import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* import org.w3c.xhr.* diff --git a/js/js.libraries/src/generated/org.w3c.performance.kt b/js/js.libraries/src/generated/org.w3c.performance.kt new file mode 100644 index 00000000000..c66a6e36697 --- /dev/null +++ b/js/js.libraries/src/generated/org.w3c.performance.kt @@ -0,0 +1,113 @@ +/* + * Generated file + * DO NOT EDIT + * + * See libraries/tools/idl2k for details + */ + +package org.w3c.performance + +import org.khronos.webgl.* +import org.w3c.dom.* +import org.w3c.dom.css.* +import org.w3c.dom.events.* +import org.w3c.dom.parsing.* +import org.w3c.dom.svg.* +import org.w3c.fetch.* +import org.w3c.files.* +import org.w3c.notifications.* +import org.w3c.workers.* +import org.w3c.xhr.* + +native public trait Performance { + var timing: PerformanceTiming + get() = noImpl + set(value) = noImpl + var navigation: PerformanceNavigation + get() = noImpl + set(value) = noImpl + fun now(): Double = noImpl +} + +native public trait PerformanceTiming { + var navigationStart: Long + get() = noImpl + set(value) = noImpl + var unloadEventStart: Long + get() = noImpl + set(value) = noImpl + var unloadEventEnd: Long + get() = noImpl + set(value) = noImpl + var redirectStart: Long + get() = noImpl + set(value) = noImpl + var redirectEnd: Long + get() = noImpl + set(value) = noImpl + var fetchStart: Long + get() = noImpl + set(value) = noImpl + var domainLookupStart: Long + get() = noImpl + set(value) = noImpl + var domainLookupEnd: Long + get() = noImpl + set(value) = noImpl + var connectStart: Long + get() = noImpl + set(value) = noImpl + var connectEnd: Long + get() = noImpl + set(value) = noImpl + var secureConnectionStart: Long + get() = noImpl + set(value) = noImpl + var requestStart: Long + get() = noImpl + set(value) = noImpl + var responseStart: Long + get() = noImpl + set(value) = noImpl + var responseEnd: Long + get() = noImpl + set(value) = noImpl + var domLoading: Long + get() = noImpl + set(value) = noImpl + var domInteractive: Long + get() = noImpl + set(value) = noImpl + var domContentLoadedEventStart: Long + get() = noImpl + set(value) = noImpl + var domContentLoadedEventEnd: Long + get() = noImpl + set(value) = noImpl + var domComplete: Long + get() = noImpl + set(value) = noImpl + var loadEventStart: Long + get() = noImpl + set(value) = noImpl + var loadEventEnd: Long + get() = noImpl + set(value) = noImpl +} + +native public trait PerformanceNavigation { + var type: Short + get() = noImpl + set(value) = noImpl + var redirectCount: Short + get() = noImpl + set(value) = noImpl + + companion object { + val TYPE_NAVIGATE: Short = 0 + val TYPE_RELOAD: Short = 1 + val TYPE_BACK_FORWARD: Short = 2 + val TYPE_RESERVED: Short = 255 + } +} + diff --git a/js/js.libraries/src/generated/org.w3c.time.kt b/js/js.libraries/src/generated/org.w3c.time.kt deleted file mode 100644 index 33a7217239b..00000000000 --- a/js/js.libraries/src/generated/org.w3c.time.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Generated file - * DO NOT EDIT - * - * See libraries/tools/idl2k for details - */ - -package org.w3c.time - -import org.khronos.webgl.* -import org.w3c.dom.* -import org.w3c.dom.css.* -import org.w3c.dom.events.* -import org.w3c.dom.parsing.* -import org.w3c.dom.svg.* -import org.w3c.fetch.* -import org.w3c.files.* -import org.w3c.notifications.* -import org.w3c.workers.* -import org.w3c.xhr.* - -native public trait Performance { - fun now(): Double = noImpl -} - diff --git a/js/js.libraries/src/generated/org.w3c.workers.kt b/js/js.libraries/src/generated/org.w3c.workers.kt index e853b74eebf..2b66b906257 100644 --- a/js/js.libraries/src/generated/org.w3c.workers.kt +++ b/js/js.libraries/src/generated/org.w3c.workers.kt @@ -16,7 +16,7 @@ import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.xhr.* native public trait ServiceWorkerRegistration : EventTarget { diff --git a/js/js.libraries/src/generated/org.w3c.xhr.kt b/js/js.libraries/src/generated/org.w3c.xhr.kt index 3166aaea5d4..8d704008935 100644 --- a/js/js.libraries/src/generated/org.w3c.xhr.kt +++ b/js/js.libraries/src/generated/org.w3c.xhr.kt @@ -16,7 +16,7 @@ import org.w3c.dom.svg.* import org.w3c.fetch.* import org.w3c.files.* import org.w3c.notifications.* -import org.w3c.time.* +import org.w3c.performance.* import org.w3c.workers.* native public trait XMLHttpRequestEventTarget : EventTarget { diff --git a/libraries/idl/org.w3c.performance.idl b/libraries/idl/org.w3c.performance.idl new file mode 100644 index 00000000000..7d59736168e --- /dev/null +++ b/libraries/idl/org.w3c.performance.idl @@ -0,0 +1,47 @@ +namespace org.w3c.performance; + + +typedef double DOMHighResTimeStamp; +partial interface Performance { + DOMHighResTimeStamp now(); +}; +interface PerformanceTiming { + readonly attribute unsigned long long navigationStart; + readonly attribute unsigned long long unloadEventStart; + readonly attribute unsigned long long unloadEventEnd; + readonly attribute unsigned long long redirectStart; + readonly attribute unsigned long long redirectEnd; + readonly attribute unsigned long long fetchStart; + readonly attribute unsigned long long domainLookupStart; + readonly attribute unsigned long long domainLookupEnd; + readonly attribute unsigned long long connectStart; + readonly attribute unsigned long long connectEnd; + readonly attribute unsigned long long secureConnectionStart; + readonly attribute unsigned long long requestStart; + readonly attribute unsigned long long responseStart; + readonly attribute unsigned long long responseEnd; + readonly attribute unsigned long long domLoading; + readonly attribute unsigned long long domInteractive; + readonly attribute unsigned long long domContentLoadedEventStart; + readonly attribute unsigned long long domContentLoadedEventEnd; + readonly attribute unsigned long long domComplete; + readonly attribute unsigned long long loadEventStart; + readonly attribute unsigned long long loadEventEnd; +}; +interface PerformanceNavigation { + const unsigned short TYPE_NAVIGATE = 0; + const unsigned short TYPE_RELOAD = 1; + const unsigned short TYPE_BACK_FORWARD = 2; + const unsigned short TYPE_RESERVED = 255; + readonly attribute unsigned short type; + readonly attribute unsigned short redirectCount; +}; +interface Performance { + readonly attribute PerformanceTiming timing; + readonly attribute PerformanceNavigation navigation; +}; + +partial interface Window { + [Replaceable] readonly attribute Performance performance; +}; + diff --git a/libraries/idl/org.w3c.time.idl b/libraries/idl/org.w3c.time.idl deleted file mode 100644 index b510b849ce3..00000000000 --- a/libraries/idl/org.w3c.time.idl +++ /dev/null @@ -1,8 +0,0 @@ -namespace org.w3c.time; - - -typedef double DOMHighResTimeStamp; -partial interface Performance { - DOMHighResTimeStamp now(); -}; - diff --git a/libraries/tools/idl2k/src/main/kotlin/download.kt b/libraries/tools/idl2k/src/main/kotlin/download.kt index 459724f8fb3..e402b01bd2d 100644 --- a/libraries/tools/idl2k/src/main/kotlin/download.kt +++ b/libraries/tools/idl2k/src/main/kotlin/download.kt @@ -23,26 +23,31 @@ import java.io.File import java.net.URL val urls = listOf( -// "http://heycam.github.io/webidl/" to "org.w3c.webidl" "https://raw.githubusercontent.com/whatwg/html-mirror/master/source" to "org.w3c.dom", "https://html.spec.whatwg.org/" to "org.w3c.dom", "https://raw.githubusercontent.com/whatwg/dom/master/dom.html" to "org.w3c.dom", - "http://www.w3.org/TR/uievents/" to "org.w3c.dom.events", "https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html" to "org.w3c.dom", "http://www.w3.org/TR/animation-timing/" to "org.w3c.dom", - "http://www.w3.org/TR/hr-time/" to "org.w3c.time", - "https://raw.githubusercontent.com/whatwg/xhr/master/Overview.src.html" to "org.w3c.xhr", - "https://raw.githubusercontent.com/w3c/FileAPI/gh-pages/index.html" to "org.w3c.files", - "https://raw.githubusercontent.com/whatwg/notifications/master/notifications.html" to "org.w3c.notifications", - "https://raw.githubusercontent.com/whatwg/fullscreen/master/Overview.src.html" to "org.w3c.fullscreen", - "http://www.w3.org/TR/DOM-Parsing/" to "org.w3c.dom.parsing", - "http://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html" to "org.w3c.workers", - "https://raw.githubusercontent.com/whatwg/fetch/master/Overview.src.html" to "org.w3c.fetch", - "http://www.w3.org/TR/vibration/" to "org.w3c.vibration", + "http://www.w3.org/TR/uievents/" to "org.w3c.dom.events", "http://dev.w3.org/csswg/cssom/" to "org.w3c.dom.css", + "http://www.w3.org/TR/DOM-Parsing/" to "org.w3c.dom.parsing", + "http://web.archive.org/web/20150317051602/http://www.w3.org/TR/SVG11/single-page.html" to "org.w3c.dom.svg", "https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl" to "org.khronos.webgl", - "https://www.khronos.org/registry/typedarray/specs/latest/typedarray.idl" to "org.khronos.webgl" + "https://www.khronos.org/registry/typedarray/specs/latest/typedarray.idl" to "org.khronos.webgl", + + "https://raw.githubusercontent.com/whatwg/xhr/master/Overview.src.html" to "org.w3c.xhr", + "https://raw.githubusercontent.com/whatwg/fetch/master/Overview.src.html" to "org.w3c.fetch", + "https://raw.githubusercontent.com/w3c/FileAPI/gh-pages/index.html" to "org.w3c.files", + + "https://raw.githubusercontent.com/whatwg/notifications/master/notifications.html" to "org.w3c.notifications", + "https://raw.githubusercontent.com/whatwg/fullscreen/master/Overview.src.html" to "org.w3c.fullscreen", + "http://www.w3.org/TR/vibration/" to "org.w3c.vibration", + + "http://www.w3.org/TR/hr-time/" to "org.w3c.performance", + "http://www.w3.org/TR/2012/REC-navigation-timing-20121217/" to "org.w3c.performance", + + "http://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html" to "org.w3c.workers" ) fun main(args: Array) { @@ -61,7 +66,7 @@ fun main(args: Array) { w.appendln() e.value.forEach { pair -> - val (url, _) = pair + val (url) = pair println("Loading ${url}...") if (url.endsWith(".idl")) { diff --git a/libraries/tools/idl2k/src/main/kotlin/gen.kt b/libraries/tools/idl2k/src/main/kotlin/gen.kt index ef278d300e1..1e63a20f1b7 100644 --- a/libraries/tools/idl2k/src/main/kotlin/gen.kt +++ b/libraries/tools/idl2k/src/main/kotlin/gen.kt @@ -174,7 +174,7 @@ fun generateUnions(ifaces: List, typedefs: Iterable typedef.value.memberTypes.map { unionMember -> unionMember to typedef.name } }.toMultiMap() return GenerateUnionTypes( - typeNamesToUnions = typeNamesToUnions, + typeNamesToUnionsMap = typeNamesToUnions, anonymousUnionsMap = anonymousUnionsMap, typedefsMarkersMap = typedefsMarkersMap ) diff --git a/libraries/tools/idl2k/src/main/kotlin/idl.kt b/libraries/tools/idl2k/src/main/kotlin/idl.kt index 787ed73ccdf..789fecc37cb 100644 --- a/libraries/tools/idl2k/src/main/kotlin/idl.kt +++ b/libraries/tools/idl2k/src/main/kotlin/idl.kt @@ -259,7 +259,7 @@ class ConstantVisitor : WebIDLBaseVisitor() { } class DefinitionVisitor(val extendedAttributes: List, val namespace: String, val declarations: MutableList) : WebIDLBaseVisitor() { - private var kind: DefinitionKind = DefinitionKind.INTERFACE + private var kind = DefinitionKind.INTERFACE private var name = "" private val memberAttributes = ArrayList() private val operations = ArrayList() diff --git a/libraries/tools/idl2k/src/main/kotlin/model.kt b/libraries/tools/idl2k/src/main/kotlin/model.kt index 3ee788bb0da..0fc70484a28 100644 --- a/libraries/tools/idl2k/src/main/kotlin/model.kt +++ b/libraries/tools/idl2k/src/main/kotlin/model.kt @@ -101,7 +101,7 @@ fun InterfaceDefinition?.hasExtendedAttribute(name: String) = this?.findExtended fun InterfaceDefinition.findConstructor() = findExtendedAttribute("Constructor") data class GenerateUnionTypes( - val typeNamesToUnions : Map>, - val anonymousUnionsMap : Map, - val typedefsMarkersMap : Map + val typeNamesToUnionsMap: Map>, + val anonymousUnionsMap: Map, + val typedefsMarkersMap: Map ) diff --git a/libraries/tools/idl2k/src/main/kotlin/render.kt b/libraries/tools/idl2k/src/main/kotlin/render.kt index 47cf4a18297..a5794e8c719 100644 --- a/libraries/tools/idl2k/src/main/kotlin/render.kt +++ b/libraries/tools/idl2k/src/main/kotlin/render.kt @@ -42,7 +42,7 @@ private fun String.parse() = if (this.startsWith("0x")) BigInteger(this.substrin private fun String.replaceWrongConstants(type: String) = if (this == "noImpl" || type == "Int" && parse() > BigInteger.valueOf(Int.MAX_VALUE.toLong())) "noImpl" else this private fun String.replaceKeywords() = if (this in keywords) this + "_" else this -private fun Appendable.renderArgumentsDeclaration(allTypes: Set, args: List, omitDefaults: Boolean) = +private fun Appendable.renderArgumentsDeclaration(args: List, omitDefaults: Boolean) = args.map { StringBuilder { if (it.vararg) { @@ -60,7 +60,7 @@ private fun Appendable.renderArgumentsDeclaration(allTypes: Set, args: L private fun renderCall(call: GenerateFunctionCall) = "${call.name.replaceKeywords()}(${call.arguments.map { it.replaceKeywords() }.join(", ")})" -private fun Appendable.renderFunctionDeclaration(allTypes: Set, f: GenerateFunction, override: Boolean) { +private fun Appendable.renderFunctionDeclaration(f: GenerateFunction, override: Boolean) { indent(1) when (f.nativeGetterOrSetter) { @@ -76,7 +76,7 @@ private fun Appendable.renderFunctionDeclaration(allTypes: Set, f: Gener append("native(\"${f.name}\") ") } append("fun ${f.name.replaceKeywords()}(") - renderArgumentsDeclaration(allTypes, f.arguments, override) + renderArgumentsDeclaration(f.arguments, override) appendln("): ${f.returnType} = noImpl") } @@ -93,7 +93,7 @@ fun Appendable.render(allTypes: Map, typeNamesToUn append(iface.name) if (iface.constructor != null && iface.constructor.arguments.isNotEmpty()) { append("(") - renderArgumentsDeclaration(allTypes.keySet(), iface.constructor.arguments.map { it.dynamicIfUnknownType(allTypes.keySet()) }, false) + renderArgumentsDeclaration(iface.constructor.arguments.map { it.dynamicIfUnknownType(allTypes.keySet()) }, false) append(")") } @@ -120,7 +120,7 @@ fun Appendable.render(allTypes: Map, typeNamesToUn renderAttributeDeclaration(arg, arg.signature in superSignatures) } iface.memberFunctions.filter { it !in superFunctions }.map { it.dynamicIfUnknownType(allTypes.keySet()) }.groupBy { it.signature }.reduceValues(::betterFunction).values().forEach { - renderFunctionDeclaration(allTypes.keySet(), it, it.signature in superSignatures) + renderFunctionDeclaration(it, it.signature in superSignatures) } if (iface.constants.isNotEmpty()) { appendln() @@ -155,7 +155,7 @@ fun Appendable.render(namespace: String, ifaces: List, uni val allTypes = declaredTypes + unions.anonymousUnionsMap + unions.typedefsMarkersMap declaredTypes.values().filter { it.namespace == namespace }.forEach { - render(allTypes, unions.typeNamesToUnions, it) + render(allTypes, unions.typeNamesToUnionsMap, it) } unions.anonymousUnionsMap.values().filter { it.namespace == "" || it.namespace == namespace }.forEach { diff --git a/libraries/tools/idl2k/src/main/kotlin/typeMappings.kt b/libraries/tools/idl2k/src/main/kotlin/typeMappings.kt index ffdf48596a0..f39fe5e9ac8 100644 --- a/libraries/tools/idl2k/src/main/kotlin/typeMappings.kt +++ b/libraries/tools/idl2k/src/main/kotlin/typeMappings.kt @@ -56,13 +56,14 @@ fun allSuperTypesImpl(roots: List, all: Map, val returnType : String) + val FunctionType.arity : Int get() = parameterTypes.size() val FunctionType.text : String get() = "(${parameterTypes.map { it.formatFunctionTypePart() }.join(",")}) -> ${returnType}" fun FunctionType(text : String) : FunctionType { - val (parameters, returnType) = text.split("->".toRegex()).map {it.trim()}.filter { it != "" } + val (parameters, returnType) = text.split("->".toRegex()).map { it.trim() }.filter { it != "" } return FunctionType( parameterTypes = parameters.removeSurrounding("(", ")").split(',') @@ -80,14 +81,14 @@ fun String.dynamicIfUnknownType(allTypes: Set, standardTypes: Set this startsWith("Array<") -> "Array<" + removePrefix("Array<").removeSuffix(">").dynamicIfUnknownType(allTypes, standardTypes) + ">" startsWith("Union<") -> UnionType("", splitUnionType(this)).name.dynamicIfUnknownType(allTypes, standardTypes).copyNullabilityFrom(this) - this != dropNullable() -> dropNullable().dynamicIfUnknownType(allTypes, standardTypes).ensureNullable() + isNullable() -> dropNullable().dynamicIfUnknownType(allTypes, standardTypes).ensureNullable() contains("->") -> { - FunctionType(this).let { function -> - function.copy( - returnType = function.returnType.dynamicIfUnknownType(allTypes, standardTypes), - parameterTypes = function.parameterTypes.map { it.copy(type = it.type.dynamicIfUnknownType(allTypes, standardTypes)) } - ).text - } + val function = FunctionType(this) + + function.copy( + returnType = function.returnType.dynamicIfUnknownType(allTypes, standardTypes), + parameterTypes = function.parameterTypes.map { it.copy(type = it.type.dynamicIfUnknownType(allTypes, standardTypes)) } + ).text } else -> "dynamic" } @@ -103,7 +104,10 @@ private fun mapType(repository: Repository, type: String): String = type.startsWith("sequence") -> "Array" type in repository.typeDefs -> mapTypedef(repository, type) type in repository.enums -> "String" - type.contains("->") -> FunctionType(type).let { function -> + type.contains("->") -> { + val function = FunctionType(type) + + // TODO: Remove takeWhile { !vararg } when we have varargs supported. See KT-3115 function.copy( returnType = mapType(repository, function.returnType), parameterTypes = function.parameterTypes.takeWhile { !it.vararg }.map { it.copy(type = mapType(repository, it.type)) }