Introduce better typing for on[event-name] attributes from idl

see https://upsource.jetbrains.com/kotlin/review/KOTLIN-CR-2548
This commit is contained in:
Shagen Ogandzhanian
2018-12-14 13:13:27 +01:00
parent 8c0ad321e2
commit 714b4f25c0
8 changed files with 285 additions and 170 deletions
+90 -90
View File
@@ -75,62 +75,62 @@ public external open class Document : Node, GlobalEventHandlers, DocumentAndElem
open val documentElement: Element? open val documentElement: Element?
open val scrollingElement: Element? open val scrollingElement: Element?
open val styleSheets: StyleSheetList open val styleSheets: StyleSheetList
override var ongotpointercapture: ((Event) -> dynamic)? override var ongotpointercapture: ((PointerEvent) -> dynamic)?
override var onlostpointercapture: ((Event) -> dynamic)? override var onlostpointercapture: ((PointerEvent) -> dynamic)?
override var onpointerdown: ((Event) -> dynamic)? override var onpointerdown: ((PointerEvent) -> dynamic)?
override var onpointermove: ((Event) -> dynamic)? override var onpointermove: ((PointerEvent) -> dynamic)?
override var onpointerup: ((Event) -> dynamic)? override var onpointerup: ((PointerEvent) -> dynamic)?
override var onpointercancel: ((Event) -> dynamic)? override var onpointercancel: ((PointerEvent) -> dynamic)?
override var onpointerover: ((Event) -> dynamic)? override var onpointerover: ((PointerEvent) -> dynamic)?
override var onpointerout: ((Event) -> dynamic)? override var onpointerout: ((PointerEvent) -> dynamic)?
override var onpointerenter: ((Event) -> dynamic)? override var onpointerenter: ((PointerEvent) -> dynamic)?
override var onpointerleave: ((Event) -> dynamic)? override var onpointerleave: ((PointerEvent) -> dynamic)?
override var onabort: ((Event) -> dynamic)? override var onabort: ((Event) -> dynamic)?
override var onblur: ((Event) -> dynamic)? override var onblur: ((FocusEvent) -> dynamic)?
override var oncancel: ((Event) -> dynamic)? override var oncancel: ((Event) -> dynamic)?
override var oncanplay: ((Event) -> dynamic)? override var oncanplay: ((Event) -> dynamic)?
override var oncanplaythrough: ((Event) -> dynamic)? override var oncanplaythrough: ((Event) -> dynamic)?
override var onchange: ((Event) -> dynamic)? override var onchange: ((Event) -> dynamic)?
override var onclick: ((Event) -> dynamic)? override var onclick: ((MouseEvent) -> dynamic)?
override var onclose: ((Event) -> dynamic)? override var onclose: ((Event) -> dynamic)?
override var oncontextmenu: ((Event) -> dynamic)? override var oncontextmenu: ((MouseEvent) -> dynamic)?
override var oncuechange: ((Event) -> dynamic)? override var oncuechange: ((Event) -> dynamic)?
override var ondblclick: ((Event) -> dynamic)? override var ondblclick: ((MouseEvent) -> dynamic)?
override var ondrag: ((Event) -> dynamic)? override var ondrag: ((DragEvent) -> dynamic)?
override var ondragend: ((Event) -> dynamic)? override var ondragend: ((DragEvent) -> dynamic)?
override var ondragenter: ((Event) -> dynamic)? override var ondragenter: ((DragEvent) -> dynamic)?
override var ondragexit: ((Event) -> dynamic)? override var ondragexit: ((DragEvent) -> dynamic)?
override var ondragleave: ((Event) -> dynamic)? override var ondragleave: ((DragEvent) -> dynamic)?
override var ondragover: ((Event) -> dynamic)? override var ondragover: ((DragEvent) -> dynamic)?
override var ondragstart: ((Event) -> dynamic)? override var ondragstart: ((DragEvent) -> dynamic)?
override var ondrop: ((Event) -> dynamic)? override var ondrop: ((DragEvent) -> dynamic)?
override var ondurationchange: ((Event) -> dynamic)? override var ondurationchange: ((Event) -> dynamic)?
override var onemptied: ((Event) -> dynamic)? override var onemptied: ((Event) -> dynamic)?
override var onended: ((Event) -> dynamic)? override var onended: ((Event) -> dynamic)?
override var onerror: ((dynamic, String, Int, Int, Any?) -> dynamic)? override var onerror: ((dynamic, String, Int, Int, Any?) -> dynamic)?
override var onfocus: ((Event) -> dynamic)? override var onfocus: ((FocusEvent) -> dynamic)?
override var oninput: ((Event) -> dynamic)? override var oninput: ((InputEvent) -> dynamic)?
override var oninvalid: ((Event) -> dynamic)? override var oninvalid: ((Event) -> dynamic)?
override var onkeydown: ((Event) -> dynamic)? override var onkeydown: ((KeyboardEvent) -> dynamic)?
override var onkeypress: ((Event) -> dynamic)? override var onkeypress: ((KeyboardEvent) -> dynamic)?
override var onkeyup: ((Event) -> dynamic)? override var onkeyup: ((KeyboardEvent) -> dynamic)?
override var onload: ((Event) -> dynamic)? override var onload: ((Event) -> dynamic)?
override var onloadeddata: ((Event) -> dynamic)? override var onloadeddata: ((Event) -> dynamic)?
override var onloadedmetadata: ((Event) -> dynamic)? override var onloadedmetadata: ((Event) -> dynamic)?
override var onloadend: ((Event) -> dynamic)? override var onloadend: ((Event) -> dynamic)?
override var onloadstart: ((Event) -> dynamic)? override var onloadstart: ((ProgressEvent) -> dynamic)?
override var onmousedown: ((Event) -> dynamic)? override var onmousedown: ((MouseEvent) -> dynamic)?
override var onmouseenter: ((Event) -> dynamic)? override var onmouseenter: ((MouseEvent) -> dynamic)?
override var onmouseleave: ((Event) -> dynamic)? override var onmouseleave: ((MouseEvent) -> dynamic)?
override var onmousemove: ((Event) -> dynamic)? override var onmousemove: ((MouseEvent) -> dynamic)?
override var onmouseout: ((Event) -> dynamic)? override var onmouseout: ((MouseEvent) -> dynamic)?
override var onmouseover: ((Event) -> dynamic)? override var onmouseover: ((MouseEvent) -> dynamic)?
override var onmouseup: ((Event) -> dynamic)? override var onmouseup: ((MouseEvent) -> dynamic)?
override var onwheel: ((Event) -> dynamic)? override var onwheel: ((WheelEvent) -> dynamic)?
override var onpause: ((Event) -> dynamic)? override var onpause: ((Event) -> dynamic)?
override var onplay: ((Event) -> dynamic)? override var onplay: ((Event) -> dynamic)?
override var onplaying: ((Event) -> dynamic)? override var onplaying: ((Event) -> dynamic)?
override var onprogress: ((Event) -> dynamic)? override var onprogress: ((ProgressEvent) -> dynamic)?
override var onratechange: ((Event) -> dynamic)? override var onratechange: ((Event) -> dynamic)?
override var onreset: ((Event) -> dynamic)? override var onreset: ((Event) -> dynamic)?
override var onresize: ((Event) -> dynamic)? override var onresize: ((Event) -> dynamic)?
@@ -2032,7 +2032,7 @@ public external abstract class ApplicationCache : EventTarget {
open var onerror: ((Event) -> dynamic)? open var onerror: ((Event) -> dynamic)?
open var onnoupdate: ((Event) -> dynamic)? open var onnoupdate: ((Event) -> dynamic)?
open var ondownloading: ((Event) -> dynamic)? open var ondownloading: ((Event) -> dynamic)?
open var onprogress: ((Event) -> dynamic)? open var onprogress: ((ProgressEvent) -> dynamic)?
open var onupdateready: ((Event) -> dynamic)? open var onupdateready: ((Event) -> dynamic)?
open var oncached: ((Event) -> dynamic)? open var oncached: ((Event) -> dynamic)?
open var onobsolete: ((Event) -> dynamic)? open var onobsolete: ((Event) -> dynamic)?
@@ -2136,62 +2136,62 @@ public inline fun PromiseRejectionEventInit(promise: Promise<Any?>?, reason: Any
* Exposes the JavaScript [GlobalEventHandlers](https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers) to Kotlin * Exposes the JavaScript [GlobalEventHandlers](https://developer.mozilla.org/en/docs/Web/API/GlobalEventHandlers) to Kotlin
*/ */
public external interface GlobalEventHandlers { public external interface GlobalEventHandlers {
var ongotpointercapture: ((Event) -> dynamic)? var ongotpointercapture: ((PointerEvent) -> dynamic)?
var onlostpointercapture: ((Event) -> dynamic)? var onlostpointercapture: ((PointerEvent) -> dynamic)?
var onpointerdown: ((Event) -> dynamic)? var onpointerdown: ((PointerEvent) -> dynamic)?
var onpointermove: ((Event) -> dynamic)? var onpointermove: ((PointerEvent) -> dynamic)?
var onpointerup: ((Event) -> dynamic)? var onpointerup: ((PointerEvent) -> dynamic)?
var onpointercancel: ((Event) -> dynamic)? var onpointercancel: ((PointerEvent) -> dynamic)?
var onpointerover: ((Event) -> dynamic)? var onpointerover: ((PointerEvent) -> dynamic)?
var onpointerout: ((Event) -> dynamic)? var onpointerout: ((PointerEvent) -> dynamic)?
var onpointerenter: ((Event) -> dynamic)? var onpointerenter: ((PointerEvent) -> dynamic)?
var onpointerleave: ((Event) -> dynamic)? var onpointerleave: ((PointerEvent) -> dynamic)?
var onabort: ((Event) -> dynamic)? var onabort: ((Event) -> dynamic)?
var onblur: ((Event) -> dynamic)? var onblur: ((FocusEvent) -> dynamic)?
var oncancel: ((Event) -> dynamic)? var oncancel: ((Event) -> dynamic)?
var oncanplay: ((Event) -> dynamic)? var oncanplay: ((Event) -> dynamic)?
var oncanplaythrough: ((Event) -> dynamic)? var oncanplaythrough: ((Event) -> dynamic)?
var onchange: ((Event) -> dynamic)? var onchange: ((Event) -> dynamic)?
var onclick: ((Event) -> dynamic)? var onclick: ((MouseEvent) -> dynamic)?
var onclose: ((Event) -> dynamic)? var onclose: ((Event) -> dynamic)?
var oncontextmenu: ((Event) -> dynamic)? var oncontextmenu: ((MouseEvent) -> dynamic)?
var oncuechange: ((Event) -> dynamic)? var oncuechange: ((Event) -> dynamic)?
var ondblclick: ((Event) -> dynamic)? var ondblclick: ((MouseEvent) -> dynamic)?
var ondrag: ((Event) -> dynamic)? var ondrag: ((DragEvent) -> dynamic)?
var ondragend: ((Event) -> dynamic)? var ondragend: ((DragEvent) -> dynamic)?
var ondragenter: ((Event) -> dynamic)? var ondragenter: ((DragEvent) -> dynamic)?
var ondragexit: ((Event) -> dynamic)? var ondragexit: ((DragEvent) -> dynamic)?
var ondragleave: ((Event) -> dynamic)? var ondragleave: ((DragEvent) -> dynamic)?
var ondragover: ((Event) -> dynamic)? var ondragover: ((DragEvent) -> dynamic)?
var ondragstart: ((Event) -> dynamic)? var ondragstart: ((DragEvent) -> dynamic)?
var ondrop: ((Event) -> dynamic)? var ondrop: ((DragEvent) -> dynamic)?
var ondurationchange: ((Event) -> dynamic)? var ondurationchange: ((Event) -> dynamic)?
var onemptied: ((Event) -> dynamic)? var onemptied: ((Event) -> dynamic)?
var onended: ((Event) -> dynamic)? var onended: ((Event) -> dynamic)?
var onerror: ((dynamic, String, Int, Int, Any?) -> dynamic)? var onerror: ((dynamic, String, Int, Int, Any?) -> dynamic)?
var onfocus: ((Event) -> dynamic)? var onfocus: ((FocusEvent) -> dynamic)?
var oninput: ((Event) -> dynamic)? var oninput: ((InputEvent) -> dynamic)?
var oninvalid: ((Event) -> dynamic)? var oninvalid: ((Event) -> dynamic)?
var onkeydown: ((Event) -> dynamic)? var onkeydown: ((KeyboardEvent) -> dynamic)?
var onkeypress: ((Event) -> dynamic)? var onkeypress: ((KeyboardEvent) -> dynamic)?
var onkeyup: ((Event) -> dynamic)? var onkeyup: ((KeyboardEvent) -> dynamic)?
var onload: ((Event) -> dynamic)? var onload: ((Event) -> dynamic)?
var onloadeddata: ((Event) -> dynamic)? var onloadeddata: ((Event) -> dynamic)?
var onloadedmetadata: ((Event) -> dynamic)? var onloadedmetadata: ((Event) -> dynamic)?
var onloadend: ((Event) -> dynamic)? var onloadend: ((Event) -> dynamic)?
var onloadstart: ((Event) -> dynamic)? var onloadstart: ((ProgressEvent) -> dynamic)?
var onmousedown: ((Event) -> dynamic)? var onmousedown: ((MouseEvent) -> dynamic)?
var onmouseenter: ((Event) -> dynamic)? var onmouseenter: ((MouseEvent) -> dynamic)?
var onmouseleave: ((Event) -> dynamic)? var onmouseleave: ((MouseEvent) -> dynamic)?
var onmousemove: ((Event) -> dynamic)? var onmousemove: ((MouseEvent) -> dynamic)?
var onmouseout: ((Event) -> dynamic)? var onmouseout: ((MouseEvent) -> dynamic)?
var onmouseover: ((Event) -> dynamic)? var onmouseover: ((MouseEvent) -> dynamic)?
var onmouseup: ((Event) -> dynamic)? var onmouseup: ((MouseEvent) -> dynamic)?
var onwheel: ((Event) -> dynamic)? var onwheel: ((WheelEvent) -> dynamic)?
var onpause: ((Event) -> dynamic)? var onpause: ((Event) -> dynamic)?
var onplay: ((Event) -> dynamic)? var onplay: ((Event) -> dynamic)?
var onplaying: ((Event) -> dynamic)? var onplaying: ((Event) -> dynamic)?
var onprogress: ((Event) -> dynamic)? var onprogress: ((ProgressEvent) -> dynamic)?
var onratechange: ((Event) -> dynamic)? var onratechange: ((Event) -> dynamic)?
var onreset: ((Event) -> dynamic)? var onreset: ((Event) -> dynamic)?
var onresize: ((Event) -> dynamic)? var onresize: ((Event) -> dynamic)?
@@ -2215,18 +2215,18 @@ public external interface GlobalEventHandlers {
public external interface WindowEventHandlers { public external interface WindowEventHandlers {
var onafterprint: ((Event) -> dynamic)? var onafterprint: ((Event) -> dynamic)?
var onbeforeprint: ((Event) -> dynamic)? var onbeforeprint: ((Event) -> dynamic)?
var onbeforeunload: ((Event) -> String?)? var onbeforeunload: ((BeforeUnloadEvent) -> String?)?
var onhashchange: ((Event) -> dynamic)? var onhashchange: ((HashChangeEvent) -> dynamic)?
var onlanguagechange: ((Event) -> dynamic)? var onlanguagechange: ((Event) -> dynamic)?
var onmessage: ((Event) -> dynamic)? var onmessage: ((MessageEvent) -> dynamic)?
var onoffline: ((Event) -> dynamic)? var onoffline: ((Event) -> dynamic)?
var ononline: ((Event) -> dynamic)? var ononline: ((Event) -> dynamic)?
var onpagehide: ((Event) -> dynamic)? var onpagehide: ((PageTransitionEvent) -> dynamic)?
var onpageshow: ((Event) -> dynamic)? var onpageshow: ((PageTransitionEvent) -> dynamic)?
var onpopstate: ((Event) -> dynamic)? var onpopstate: ((PopStateEvent) -> dynamic)?
var onrejectionhandled: ((Event) -> dynamic)? var onrejectionhandled: ((Event) -> dynamic)?
var onstorage: ((Event) -> dynamic)? var onstorage: ((StorageEvent) -> dynamic)?
var onunhandledrejection: ((Event) -> dynamic)? var onunhandledrejection: ((PromiseRejectionEvent) -> dynamic)?
var onunload: ((Event) -> dynamic)? var onunload: ((Event) -> dynamic)?
} }
@@ -2454,7 +2454,7 @@ public external open class EventSource(url: String, eventSourceInitDict: EventSo
open val withCredentials: Boolean open val withCredentials: Boolean
open val readyState: Short open val readyState: Short
var onopen: ((Event) -> dynamic)? var onopen: ((Event) -> dynamic)?
var onmessage: ((Event) -> dynamic)? var onmessage: ((MessageEvent) -> dynamic)?
var onerror: ((Event) -> dynamic)? var onerror: ((Event) -> dynamic)?
fun close(): Unit fun close(): Unit
@@ -2492,7 +2492,7 @@ public external open class WebSocket(url: String, protocols: dynamic = definedEx
var onclose: ((Event) -> dynamic)? var onclose: ((Event) -> dynamic)?
open val extensions: String open val extensions: String
open val protocol: String open val protocol: String
var onmessage: ((Event) -> dynamic)? var onmessage: ((MessageEvent) -> dynamic)?
var binaryType: BinaryType var binaryType: BinaryType
fun close(code: Short = definedExternally, reason: String = definedExternally): Unit fun close(code: Short = definedExternally, reason: String = definedExternally): Unit
fun send(data: String): Unit fun send(data: String): Unit
@@ -2555,7 +2555,7 @@ public external open class MessageChannel {
* Exposes the JavaScript [MessagePort](https://developer.mozilla.org/en/docs/Web/API/MessagePort) to Kotlin * Exposes the JavaScript [MessagePort](https://developer.mozilla.org/en/docs/Web/API/MessagePort) to Kotlin
*/ */
public external abstract class MessagePort : EventTarget, UnionMessagePortOrWindow, UnionMessagePortOrServiceWorker, UnionClientOrMessagePortOrServiceWorker { public external abstract class MessagePort : EventTarget, UnionMessagePortOrWindow, UnionMessagePortOrServiceWorker, UnionClientOrMessagePortOrServiceWorker {
open var onmessage: ((Event) -> dynamic)? open var onmessage: ((MessageEvent) -> dynamic)?
fun postMessage(message: Any?, transfer: Array<dynamic> = definedExternally): Unit fun postMessage(message: Any?, transfer: Array<dynamic> = definedExternally): Unit
fun start(): Unit fun start(): Unit
fun close(): Unit fun close(): Unit
@@ -2566,7 +2566,7 @@ public external abstract class MessagePort : EventTarget, UnionMessagePortOrWind
*/ */
public external open class BroadcastChannel(name: String) : EventTarget { public external open class BroadcastChannel(name: String) : EventTarget {
open val name: String open val name: String
var onmessage: ((Event) -> dynamic)? var onmessage: ((MessageEvent) -> dynamic)?
fun postMessage(message: Any?): Unit fun postMessage(message: Any?): Unit
fun close(): Unit fun close(): Unit
} }
@@ -2583,7 +2583,7 @@ public external abstract class WorkerGlobalScope : EventTarget, WindowOrWorkerGl
open var onoffline: ((Event) -> dynamic)? open var onoffline: ((Event) -> dynamic)?
open var ononline: ((Event) -> dynamic)? open var ononline: ((Event) -> dynamic)?
open var onrejectionhandled: ((Event) -> dynamic)? open var onrejectionhandled: ((Event) -> dynamic)?
open var onunhandledrejection: ((Event) -> dynamic)? open var onunhandledrejection: ((PromiseRejectionEvent) -> dynamic)?
fun importScripts(vararg urls: String): Unit fun importScripts(vararg urls: String): Unit
} }
@@ -2591,7 +2591,7 @@ public external abstract class WorkerGlobalScope : EventTarget, WindowOrWorkerGl
* Exposes the JavaScript [DedicatedWorkerGlobalScope](https://developer.mozilla.org/en/docs/Web/API/DedicatedWorkerGlobalScope) to Kotlin * Exposes the JavaScript [DedicatedWorkerGlobalScope](https://developer.mozilla.org/en/docs/Web/API/DedicatedWorkerGlobalScope) to Kotlin
*/ */
public external abstract class DedicatedWorkerGlobalScope : WorkerGlobalScope { public external abstract class DedicatedWorkerGlobalScope : WorkerGlobalScope {
open var onmessage: ((Event) -> dynamic)? open var onmessage: ((MessageEvent) -> dynamic)?
fun postMessage(message: Any?, transfer: Array<dynamic> = definedExternally): Unit fun postMessage(message: Any?, transfer: Array<dynamic> = definedExternally): Unit
fun close(): Unit fun close(): Unit
} }
@@ -2617,7 +2617,7 @@ public external interface AbstractWorker {
* Exposes the JavaScript [Worker](https://developer.mozilla.org/en/docs/Web/API/Worker) to Kotlin * Exposes the JavaScript [Worker](https://developer.mozilla.org/en/docs/Web/API/Worker) to Kotlin
*/ */
public external open class Worker(scriptURL: String, options: WorkerOptions = definedExternally) : EventTarget, AbstractWorker { public external open class Worker(scriptURL: String, options: WorkerOptions = definedExternally) : EventTarget, AbstractWorker {
var onmessage: ((Event) -> dynamic)? var onmessage: ((MessageEvent) -> dynamic)?
override var onerror: ((Event) -> dynamic)? override var onerror: ((Event) -> dynamic)?
fun terminate(): Unit fun terminate(): Unit
fun postMessage(message: Any?, transfer: Array<dynamic> = definedExternally): Unit fun postMessage(message: Any?, transfer: Array<dynamic> = definedExternally): Unit
@@ -90,8 +90,8 @@ public external open class FileReader : EventTarget {
open val readyState: Short open val readyState: Short
open val result: dynamic open val result: dynamic
open val error: dynamic open val error: dynamic
var onloadstart: ((Event) -> dynamic)? var onloadstart: ((ProgressEvent) -> dynamic)?
var onprogress: ((Event) -> dynamic)? var onprogress: ((ProgressEvent) -> dynamic)?
var onload: ((Event) -> dynamic)? var onload: ((Event) -> dynamic)?
var onabort: ((Event) -> dynamic)? var onabort: ((Event) -> dynamic)?
var onerror: ((Event) -> dynamic)? var onerror: ((Event) -> dynamic)?
@@ -28,7 +28,7 @@ import org.w3c.xhr.*
* Exposes the JavaScript [Notification](https://developer.mozilla.org/en/docs/Web/API/Notification) to Kotlin * Exposes the JavaScript [Notification](https://developer.mozilla.org/en/docs/Web/API/Notification) to Kotlin
*/ */
public external open class Notification(title: String, options: NotificationOptions = definedExternally) : EventTarget { public external open class Notification(title: String, options: NotificationOptions = definedExternally) : EventTarget {
var onclick: ((Event) -> dynamic)? var onclick: ((MouseEvent) -> dynamic)?
var onerror: ((Event) -> dynamic)? var onerror: ((Event) -> dynamic)?
open val title: String open val title: String
open val dir: NotificationDirection open val dir: NotificationDirection
@@ -49,12 +49,12 @@ public external abstract class ServiceWorkerGlobalScope : WorkerGlobalScope {
open val registration: ServiceWorkerRegistration open val registration: ServiceWorkerRegistration
open var oninstall: ((Event) -> dynamic)? open var oninstall: ((Event) -> dynamic)?
open var onactivate: ((Event) -> dynamic)? open var onactivate: ((Event) -> dynamic)?
open var onfetch: ((Event) -> dynamic)? open var onfetch: ((FetchEvent) -> dynamic)?
open var onforeignfetch: ((Event) -> dynamic)? open var onforeignfetch: ((Event) -> dynamic)?
open var onmessage: ((Event) -> dynamic)? open var onmessage: ((MessageEvent) -> dynamic)?
open var onfunctionalevent: ((Event) -> dynamic)? open var onfunctionalevent: ((Event) -> dynamic)?
open var onnotificationclick: ((Event) -> dynamic)? open var onnotificationclick: ((NotificationEvent) -> dynamic)?
open var onnotificationclose: ((Event) -> dynamic)? open var onnotificationclose: ((NotificationEvent) -> dynamic)?
fun skipWaiting(): Promise<Unit> fun skipWaiting(): Promise<Unit>
} }
@@ -75,7 +75,7 @@ public external abstract class ServiceWorkerContainer : EventTarget {
open val controller: ServiceWorker? open val controller: ServiceWorker?
open val ready: Promise<ServiceWorkerRegistration> open val ready: Promise<ServiceWorkerRegistration>
open var oncontrollerchange: ((Event) -> dynamic)? open var oncontrollerchange: ((Event) -> dynamic)?
open var onmessage: ((Event) -> dynamic)? open var onmessage: ((MessageEvent) -> dynamic)?
fun register(scriptURL: String, options: RegistrationOptions = definedExternally): Promise<ServiceWorkerRegistration> fun register(scriptURL: String, options: RegistrationOptions = definedExternally): Promise<ServiceWorkerRegistration>
fun getRegistration(clientURL: String = definedExternally): Promise<Any?> fun getRegistration(clientURL: String = definedExternally): Promise<Any?>
fun getRegistrations(): Promise<dynamic> fun getRegistrations(): Promise<dynamic>
@@ -28,8 +28,8 @@ import org.w3c.workers.*
* Exposes the JavaScript [XMLHttpRequestEventTarget](https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequestEventTarget) to Kotlin * Exposes the JavaScript [XMLHttpRequestEventTarget](https://developer.mozilla.org/en/docs/Web/API/XMLHttpRequestEventTarget) to Kotlin
*/ */
public external abstract class XMLHttpRequestEventTarget : EventTarget { public external abstract class XMLHttpRequestEventTarget : EventTarget {
open var onloadstart: ((Event) -> dynamic)? open var onloadstart: ((ProgressEvent) -> dynamic)?
open var onprogress: ((Event) -> dynamic)? open var onprogress: ((ProgressEvent) -> dynamic)?
open var onabort: ((Event) -> dynamic)? open var onabort: ((Event) -> dynamic)?
open var onerror: ((Event) -> dynamic)? open var onerror: ((Event) -> dynamic)?
open var onload: ((Event) -> dynamic)? open var onload: ((Event) -> dynamic)?
@@ -92,3 +92,70 @@ val kotlinBuiltinInterfaces = mapOf(
secondaryConstructors = emptyList() secondaryConstructors = emptyList()
) )
) )
val specifyEventMapper = mapOf<String, String>(
"onbeforeunload" to "BeforeUnloadEvent",
"ondrag" to "DragEvent",
"ondragend" to "DragEvent",
"ondragenter" to "DragEvent",
"ondragexit" to "DragEvent",
"ondragleave" to "DragEvent",
"ondragover" to "DragEvent",
"ondragstart" to "DragEvent",
"ondrop" to "DragEvent",
"onfetch" to "FetchEvent",
"onblur" to "FocusEvent",
"onfocus" to "FocusEvent",
"onhashchange" to "HashChangeEvent",
"oninput" to "InputEvent",
"onkeydown" to "KeyboardEvent",
"onkeypress" to "KeyboardEvent",
"onkeyup" to "KeyboardEvent",
"onmessage" to "MessageEvent",
"onclick" to "MouseEvent",
"oncontextmenu" to "MouseEvent",
"ondblclick" to "MouseEvent",
"onmousedown" to "MouseEvent",
"onmouseenter" to "MouseEvent",
"onmouseleave" to "MouseEvent",
"onmousemove" to "MouseEvent",
"onmouseout" to "MouseEvent",
"onmouseover" to "MouseEvent",
"onmouseup" to "MouseEvent",
"onnotificationclick" to "NotificationEvent",
"onnotificationclose" to "NotificationEvent",
"onpagehide" to "PageTransitionEvent",
"onpageshow" to "PageTransitionEvent",
"ongotpointercapture" to "PointerEvent",
"onlostpointercapture" to "PointerEvent",
"onpointercancel" to "PointerEvent",
"onpointerdown" to "PointerEvent",
"onpointerenter" to "PointerEvent",
"onpointerleave" to "PointerEvent",
"onpointermove" to "PointerEvent",
"onpointerout" to "PointerEvent",
"onpointerover" to "PointerEvent",
"onpointerup" to "PointerEvent",
"onpopstate" to "PopStateEvent",
"onloadstart" to "ProgressEvent",
"onprogress" to "ProgressEvent",
"onunhandledrejection" to "PromiseRejectionEvent",
"onstorage" to "StorageEvent",
"onwheel" to "WheelEvent"
)
+27 -8
View File
@@ -86,17 +86,16 @@ fun generateFunctions(repository: Repository, function: Operation): List<Generat
return listOf(realFunction, getterOrSetterFunction, functionWithCallbackOrNull).filterNotNull() return listOf(realFunction, getterOrSetterFunction, functionWithCallbackOrNull).filterNotNull()
} }
fun generateAttribute(putNoImpl: Boolean, repository: Repository, attribute: Attribute, nullableAttributes: Boolean): GenerateAttribute = fun generateAttribute(putNoImpl: Boolean, repository: Repository, attribute: Attribute, nullableAttributes: Boolean): GenerateAttribute {
GenerateAttribute(attribute.name, val mappedType = mapType(repository, attribute.type).let { if (nullableAttributes) it.toNullable() else it }
type = mapType(repository, attribute.type).let { if (nullableAttributes) it.toNullable() else it }, return GenerateAttribute(attribute.name,
type = generalizeType(attribute.name, mappedType),
initializer = initializer =
if (putNoImpl && !attribute.static) { if (putNoImpl && !attribute.static) {
mapLiteral(attribute.defaultValue, mapType(repository, attribute.type), repository.enums) mapLiteral(attribute.defaultValue, mapType(repository, attribute.type), repository.enums)
} } else if (attribute.defaultValue != null) {
else if (attribute.defaultValue != null) {
"definedExternally" "definedExternally"
} } else {
else {
null null
}, },
getterSetterNoImpl = putNoImpl, getterSetterNoImpl = putNoImpl,
@@ -106,6 +105,7 @@ fun generateAttribute(putNoImpl: Boolean, repository: Repository, attribute: Att
static = attribute.static, static = attribute.static,
required = attribute.required required = attribute.required
) )
}
private fun InterfaceDefinition.superTypes(repository: Repository) = superTypes.map { repository.interfaces[it] }.filterNotNull() private fun InterfaceDefinition.superTypes(repository: Repository) = superTypes.map { repository.interfaces[it] }.filterNotNull()
private fun resolveDefinitionKind(repository: Repository, iface: InterfaceDefinition, constructors: List<ExtendedAttribute> = iface.findConstructors()): GenerateDefinitionKind = private fun resolveDefinitionKind(repository: Repository, iface: InterfaceDefinition, constructors: List<ExtendedAttribute> = iface.findConstructors()): GenerateDefinitionKind =
@@ -259,6 +259,25 @@ private fun mapLiteral(literal: String?, expectedType: Type = DynamicType, enums
} }
} }
private fun specifyType(name: String, type: Type): Type {
if ((type is SimpleType) && (type.type == "Event")) {
specifyEventMapper[name]?.let {
return type.copy(type = it)
}
}
return type
}
private fun generalizeType(name: String, type: Type): Type {
if ((type is FunctionType) && (type.parameterTypes.size == 1)) {
val paramAttribute = type.parameterTypes[0]
return type.copy(parameterTypes = listOf(paramAttribute.copy(type = specifyType(name, paramAttribute.type))))
}
return type
}
fun implementInterfaces(declarations: List<GenerateTraitOrClass>) { fun implementInterfaces(declarations: List<GenerateTraitOrClass>) {
val unimplementedMemberMap = getUnimplementedMembers(declarations) val unimplementedMemberMap = getUnimplementedMembers(declarations)
val nonAbstractDeclarations = declarations.filter { it.kind == GenerateDefinitionKind.CLASS } val nonAbstractDeclarations = declarations.filter { it.kind == GenerateDefinitionKind.CLASS }
@@ -266,7 +285,7 @@ fun implementInterfaces(declarations: List<GenerateTraitOrClass>) {
val unimplementedMembers = unimplementedMemberMap[declaration.name] ?: continue val unimplementedMembers = unimplementedMemberMap[declaration.name] ?: continue
for (attribute in unimplementedMembers.attributes) { for (attribute in unimplementedMembers.attributes) {
declaration.memberAttributes += attribute.copy(override = true) declaration.memberAttributes += attribute.copy(override = true, type = generalizeType(attribute.name, attribute.type))
} }
for (function in unimplementedMembers.functions) { for (function in unimplementedMembers.functions) {
declaration.memberFunctions += function.copy(override = true) declaration.memberFunctions += function.copy(override = true)
@@ -46,11 +46,18 @@ private val typeMapper = mapOf(
) )
fun GenerateTraitOrClass.allSuperTypes(all: Map<String, GenerateTraitOrClass>) = LinkedHashSet<GenerateTraitOrClass>().let { result -> allSuperTypesImpl(listOf(this), all, result); result.toList() } fun GenerateTraitOrClass.allSuperTypes(all: Map<String, GenerateTraitOrClass>) =
LinkedHashSet<GenerateTraitOrClass>().let { result -> allSuperTypesImpl(listOf(this), all, result); result.toList() }
tailrec fun allSuperTypesImpl(roots: List<GenerateTraitOrClass>, all: Map<String, GenerateTraitOrClass>, result: MutableSet<GenerateTraitOrClass>) { tailrec fun allSuperTypesImpl(
roots: List<GenerateTraitOrClass>,
all: Map<String, GenerateTraitOrClass>,
result: MutableSet<GenerateTraitOrClass>
) {
if (roots.isNotEmpty()) { if (roots.isNotEmpty()) {
allSuperTypesImpl(roots.flatMap { it.superTypes }.map { all[it] ?: all[it.substringBefore("<")] }.filterNotNull().filter { result.add(it) }, all, result) allSuperTypesImpl(roots.flatMap { it.superTypes }.map {
all[it] ?: all[it.substringBefore("<")]
}.filterNotNull().filter { result.add(it) }, all, result)
} }
} }
@@ -62,7 +69,16 @@ fun Type.dynamicIfUnknownType(allTypes: Set<String>, standardTypes: Set<Type> =
this.dropNullable() in standardTypes -> this this.dropNullable() in standardTypes -> this
this is ArrayType -> copy(memberType = this.memberType.dynamicIfUnknownType(allTypes, standardTypes)) this is ArrayType -> copy(memberType = this.memberType.dynamicIfUnknownType(allTypes, standardTypes))
this is UnionType -> if (this.name !in allTypes) DynamicType else this this is UnionType -> if (this.name !in allTypes) DynamicType else this
this is FunctionType -> copy(returnType = returnType.dynamicIfUnknownType(allTypes, standardTypes), parameterTypes = parameterTypes.map { it.copy(type = it.type.dynamicIfUnknownType(allTypes, standardTypes)) }) this is FunctionType -> copy(
returnType = returnType.dynamicIfUnknownType(allTypes, standardTypes),
parameterTypes = parameterTypes.map {
it.copy(
type = it.type.dynamicIfUnknownType(
allTypes,
standardTypes
)
)
})
this is PromiseType -> this is PromiseType ->
copy(valueType = valueType.dynamicIfUnknownType(allTypes, standardTypes)) copy(valueType = valueType.dynamicIfUnknownType(allTypes, standardTypes))
@@ -84,7 +100,11 @@ internal fun mapType(repository: Repository, type: Type): Type = when (type) {
} }
is PromiseType -> type.copy(valueType = mapType(repository, type.valueType)) is PromiseType -> type.copy(valueType = mapType(repository, type.valueType))
is ArrayType -> type.copy(memberType = mapType(repository, type.memberType)) is ArrayType -> type.copy(memberType = mapType(repository, type.memberType))
is UnionType -> UnionType(type.namespace, type.memberTypes.map { mt -> mapType(repository, mt) }, type.nullable).toSingleTypeIfPossible() is UnionType -> UnionType(
type.namespace,
type.memberTypes.map { mt -> mapType(repository, mt) },
type.nullable
).toSingleTypeIfPossible()
is FunctionType -> type.copy( is FunctionType -> type.copy(
// TODO: Remove takeWhile { !vararg } when we have varargs supported. See KT-3115 // TODO: Remove takeWhile { !vararg } when we have varargs supported. See KT-3115
returnType = mapType(repository, type.returnType).dynamicIfAnyType(), returnType = mapType(repository, type.returnType).dynamicIfAnyType(),
@@ -100,13 +120,17 @@ private fun mapTypedef(repository: Repository, type: SimpleType): Type {
val typedef = repository.typeDefs[type.type]!! val typedef = repository.typeDefs[type.type]!!
return when { return when {
typedef.types is UnionType && typedef.types.memberTypes.size == 1 -> mapType(repository, typedef.types.memberTypes.single().withNullability(type.nullable)) typedef.types is UnionType && typedef.types.memberTypes.size == 1 -> mapType(
repository,
typedef.types.memberTypes.single().withNullability(type.nullable)
)
typedef.types is UnionType -> SimpleType(typedef.name, type.nullable) typedef.types is UnionType -> SimpleType(typedef.name, type.nullable)
else -> mapType(repository, typedef.types.withNullability(type.nullable)) else -> mapType(repository, typedef.types.withNullability(type.nullable))
} }
} }
private fun GenerateFunction?.allTypes() = if (this != null) sequenceOf(returnType) + arguments.asSequence().map { it.type } else emptySequence() private fun GenerateFunction?.allTypes() =
if (this != null) sequenceOf(returnType) + arguments.asSequence().map { it.type } else emptySequence()
internal fun collectUnionTypes(allTypes: Map<String, GenerateTraitOrClass>) = internal fun collectUnionTypes(allTypes: Map<String, GenerateTraitOrClass>) =
allTypes.values.asSequence() allTypes.values.asSequence()
@@ -120,7 +144,12 @@ internal fun collectUnionTypes(allTypes: Map<String, GenerateTraitOrClass>) =
.map { it.dropNullable() } .map { it.dropNullable() }
.filter { it.memberTypes.all { unionMember -> unionMember is SimpleType && unionMember.type in allTypes } } .filter { it.memberTypes.all { unionMember -> unionMember is SimpleType && unionMember.type in allTypes } }
.distinct() .distinct()
.map { it.copy(namespace = guessPackage(it.memberTypes.filterIsInstance<SimpleType>().map { it.type }, allTypes), types = it.memberTypes) } .map {
it.copy(
namespace = guessPackage(it.memberTypes.filterIsInstance<SimpleType>().map { it.type }, allTypes),
types = it.memberTypes
)
}
private fun guessPackage(types: List<String>, allTypes: Map<String, GenerateTraitOrClass>) = private fun guessPackage(types: List<String>, allTypes: Map<String, GenerateTraitOrClass>) =
types.map { allTypes[it] } types.map { allTypes[it] }