JS Union type members should have inherit corresponding marker interface

This commit is contained in:
Sergey Mashkov
2015-05-13 19:17:18 +03:00
committed by Sergey Mashkov
parent 002b26e4ed
commit 42f1f9df03
4 changed files with 13 additions and 8 deletions
+8 -5
View File
@@ -3022,7 +3022,7 @@ native public open class DragEventInit : MouseEventInit() {
var dataTransfer: DataTransfer?
}
native public trait Window : EventTarget {
native public trait Window : EventTarget, UnionMessagePortOrWindow {
var caches: CacheStorage
get() = noImpl
set(value) = noImpl
@@ -3638,20 +3638,20 @@ native public open class MessageEvent(type: String, eventInitDict: MessageEventI
var lastEventId: String
get() = noImpl
set(value) = noImpl
var source: dynamic
var source: UnionMessagePortOrWindow?
get() = noImpl
set(value) = noImpl
var ports: Array<dynamic>
get() = noImpl
set(value) = noImpl
fun initMessageEvent(typeArg: String, canBubbleArg: Boolean, cancelableArg: Boolean, dataArg: dynamic, originArg: String, lastEventIdArg: String, sourceArg: dynamic, portsArg: Array<dynamic>): Unit = noImpl
fun initMessageEvent(typeArg: String, canBubbleArg: Boolean, cancelableArg: Boolean, dataArg: dynamic, originArg: String, lastEventIdArg: String, sourceArg: UnionMessagePortOrWindow, portsArg: Array<dynamic>): Unit = noImpl
}
native public open class MessageEventInit : EventInit() {
var data: dynamic
var origin: String
var lastEventId: String
var source: dynamic
var source: UnionMessagePortOrWindow?
var ports: Array<MessagePort>
}
@@ -3759,7 +3759,7 @@ native public open class MessageChannel {
set(value) = noImpl
}
native public trait MessagePort : EventTarget, Transferable {
native public trait MessagePort : EventTarget, UnionMessagePortOrWindow, UnionMessagePortOrServiceWorker, UnionClientOrMessagePortOrServiceWorker, Transferable {
var onmessage: ((Event) -> dynamic)?
get() = noImpl
set(value) = noImpl
@@ -4836,6 +4836,9 @@ native public marker trait UnionAudioTrackOrTextTrackOrVideoTrack {
native public marker trait UnionElementOrMouseEvent {
}
native public marker trait UnionMessagePortOrWindow {
}
native public marker trait UnionElementOrProcessingInstruction {
}
+1 -1
View File
@@ -170,7 +170,7 @@ fun generateUnions(ifaces: List<GenerateTraitOrClass>, typedefs: Iterable<Typede
.filter { it.value.memberTypes.all { type -> type in declaredTypes } }
val typedefsMarkersMap = typedefsToBeGenerated.groupBy { it.name }.mapValues { mapUnionType(it.value.first().value).copy(name = it.key) }
val typeNamesToUnions = anonymousUnionTypes.flatMap { unionType -> unionType.memberTypes.map { unionMember -> unionMember to unionType.name } }.toMultiMap() +
val typeNamesToUnions = anonymousUnionTypes.flatMap { unionType -> unionType.memberTypes.map { unionMember -> unionMember to unionType.name } }.toMultiMap() merge
typedefsToBeGenerated.flatMap { typedef -> typedef.value.memberTypes.map { unionMember -> unionMember to typedef.name } }.toMultiMap()
return GenerateUnionTypes(
@@ -13,8 +13,6 @@ fun main(args: Array<String>) {
System.exit(1)
return
}
outDir.deleteRecursively()
outDir.mkdirs()
val repository = srcDir.walkTopDown().filter { it.isDirectory() || it.extension == "idl" }.asSequence().filter { it.isFile() }.fold(Repository(emptyMap(), emptyMap(), emptyMap(), emptyMap())) { acc, e ->
val fileRepository = parseIDL(ANTLRFileStream(e.getAbsolutePath(), "UTF-8"))
@@ -31,6 +29,9 @@ fun main(args: Array<String>) {
val unions = generateUnions(definitions, repository.typeDefs.values())
val allPackages = definitions.map { it.namespace }.distinct().sort()
outDir.deleteRecursively()
outDir.mkdirs()
allPackages.forEach { pkg ->
File(outDir, pkg + ".kt").bufferedWriter().use { w ->
w.appendln("/*")
@@ -102,6 +102,7 @@ private fun mapType(repository: Repository, type: String): String =
type.startsWith("unrestricted") -> mapType(repository, type.substring(12))
type.startsWith("sequence<") -> "Array<${mapType(repository, type.removePrefix("sequence<").removeSuffix(">").trim())}>"
type.startsWith("sequence") -> "Array<dynamic>"
type.startsWith("Union<") -> "Union<" + splitUnionType(type).map { mapType(repository, it) }.join(",") + ">"
type in repository.typeDefs -> mapTypedef(repository, type)
type in repository.enums -> "String"
type.contains("->") -> {