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
+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("->") -> {