private var _domains: List<org.jetbrains.jsonProtocol.ProtocolMetaModel.Domain>? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
+ loop@ while (_n != null) {
+ when (_n) {
"version" -> version = M1(reader, null)
"domains" -> _domains = readObjectArray(reader, FM2())
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
private var _minor: String? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
+ loop@ while (_n != null) {
+ when (_n) {
"major" -> _major = reader.nextString()
"minor" -> _minor = reader.nextString()
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
private class M2(reader: JsonReaderEx, preReadName: String?) : org.jetbrains.jsonProtocol.ProtocolMetaModel.Domain {
override var description: String? = null
override var events: List<org.jetbrains.jsonProtocol.ProtocolMetaModel.Event>? = null
+ override var experimental = false
override var hidden = false
override var types: List<org.jetbrains.jsonProtocol.ProtocolMetaModel.StandaloneType>? = null
private var _commands: List<org.jetbrains.jsonProtocol.ProtocolMetaModel.Command>? = null
private var _domain: String? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
- "description" -> description = reader.nextString()
+ loop@ while (_n != null) {
+ when (_n) {
+ "description" -> description = reader.nextNullableString()
"events" -> events = readObjectArray(reader, FM5())
+ "experimental" -> experimental = reader.nextBoolean()
"hidden" -> hidden = reader.nextBoolean()
"types" -> types = readObjectArray(reader, FM6())
"commands" -> _commands = readObjectArray(reader, FM3())
"domain" -> _domain = reader.nextString()
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
override fun domain() = _domain!!
- override fun equals(other: Any?): Boolean = other is M2 && hidden == other.hidden && description == other.description && _domain == other._domain && events == other.events && types == other.types && _commands == other._commands
+ override fun equals(other: Any?): Boolean = other is M2 && experimental == other.experimental && hidden == other.hidden && description == other.description && _domain == other._domain && events == other.events && types == other.types && _commands == other._commands
}
private class M3(reader: JsonReaderEx, preReadName: String?) : org.jetbrains.jsonProtocol.ProtocolMetaModel.Command {
private var _name: String? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
+ loop@ while (_n != null) {
+ when (_n) {
"async" -> async = reader.nextBoolean()
- "description" -> description = reader.nextString()
+ "description" -> description = reader.nextNullableString()
"hidden" -> hidden = reader.nextBoolean()
"parameters" -> parameters = readObjectArray(reader, FM4())
"returns" -> returns = readObjectArray(reader, FM4())
"name" -> _name = reader.nextString()
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
override var type: String? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
- "default" -> default = reader.nextString()
+ loop@ while (_n != null) {
+ when (_n) {
+ "default" -> default = readRawString(reader)
"hidden" -> hidden = reader.nextBoolean()
"optional" -> optional = reader.nextBoolean()
- "shortName" -> shortName = reader.nextString()
+ "shortName" -> shortName = reader.nextNullableString()
"name" -> _name = reader.nextString()
- "\$ref" -> ref = reader.nextString()
- "description" -> description = reader.nextString()
+ "\$ref" -> ref = reader.nextNullableString()
+ "description" -> description = reader.nextNullableString()
"enum" -> enum = nextList(reader)
"items" -> items = M7(reader, null)
- "type" -> type = reader.nextString()
+ "type" -> type = reader.nextNullableString()
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
private var _name: String? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
- "description" -> description = reader.nextString()
+ loop@ while (_n != null) {
+ when (_n) {
+ "description" -> description = reader.nextNullableString()
"hidden" -> hidden = reader.nextBoolean()
"optionalData" -> optionalData = reader.nextBoolean()
"parameters" -> parameters = readObjectArray(reader, FM4())
"name" -> _name = reader.nextString()
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
override var type: String? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
+ loop@ while (_n != null) {
+ when (_n) {
"hidden" -> hidden = reader.nextBoolean()
"id" -> _id = reader.nextString()
"properties" -> properties = readObjectArray(reader, FM8())
- "description" -> description = reader.nextString()
+ "description" -> description = reader.nextNullableString()
"enum" -> enum = nextList(reader)
"items" -> items = M7(reader, null)
- "type" -> type = reader.nextString()
+ "type" -> type = reader.nextNullableString()
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
override var ref: String? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
+ loop@ while (_n != null) {
+ when (_n) {
"optional" -> optional = reader.nextBoolean()
"properties" -> properties = readObjectArray(reader, FM8())
- "description" -> description = reader.nextString()
+ "description" -> description = reader.nextNullableString()
"enum" -> enum = nextList(reader)
"items" -> items = M7(reader, null)
- "type" -> type = reader.nextString()
- "\$ref" -> ref = reader.nextString()
+ "type" -> type = reader.nextNullableString()
+ "\$ref" -> ref = reader.nextNullableString()
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
override var type: String? = null
init {
- var name = preReadName
- if (name == null && reader.hasNext() && reader.beginObject().hasNext()) {
- name = reader.nextName()
+ var _n = preReadName
+ if (_n == null && reader.hasNext() && reader.beginObject().hasNext()) {
+ _n = reader.nextName()
}
- loop@ while (name != null) {
- when (name) {
+ loop@ while (_n != null) {
+ when (_n) {
"hidden" -> hidden = reader.nextBoolean()
"name" -> _name = reader.nextString()
"optional" -> optional = reader.nextBoolean()
- "shortName" -> shortName = reader.nextString()
- "\$ref" -> ref = reader.nextString()
- "description" -> description = reader.nextString()
+ "shortName" -> shortName = reader.nextNullableString()
+ "\$ref" -> ref = reader.nextNullableString()
+ "description" -> description = reader.nextNullableString()
"enum" -> enum = nextList(reader)
"items" -> items = M7(reader, null)
- "type" -> type = reader.nextString()
+ "type" -> type = reader.nextNullableString()
else -> reader.skipValue()
}
- name = reader.nextNameOrNull()
+ _n = reader.nextNameOrNull()
}
reader.endObject()
package org.jetbrains.protocolModelGenerator
import com.intellij.openapi.util.text.StringUtil
+import com.intellij.util.containers.ContainerUtil
import com.intellij.util.containers.isNullOrEmpty
import gnu.trove.THashMap
import org.jetbrains.io.JsonReaderEx
fun main(args: Array<String>) {
val outputDir = args[0]
- val schemaUrl = args[1]
- val bytes: ByteArray
- if (schemaUrl.startsWith("http")) {
- bytes = loadBytes(URL(schemaUrl).openStream())
+ val roots = IntRange(3, args.size - 1).map {
+ val schemaUrl = args[it]
+ val bytes: ByteArray
+ if (schemaUrl.startsWith("http")) {
+ bytes = loadBytes(URL(schemaUrl).openStream())
+ }
+ else {
+ bytes = Files.readAllBytes(FileSystems.getDefault().getPath(schemaUrl))
+ }
+ val reader = JsonReaderEx(bytes.toString(Charsets.UTF_8))
+ reader.isLenient = true
+ ProtocolSchemaReaderImpl().parseRoot(reader)
}
- else {
- bytes = Files.readAllBytes(FileSystems.getDefault().getPath(schemaUrl))
+ val mergedRoot = if (roots.size == 1) roots[0] else object : ProtocolMetaModel.Root {
+ override val version: ProtocolMetaModel.Version?
+ get() = roots[0].version
+
+ override fun domains(): List<ProtocolMetaModel.Domain> {
+ return ContainerUtil.concat(roots.map { it.domains() })
+ }
}
- val reader = JsonReaderEx(bytes.toString(Charsets.UTF_8))
- reader.isLenient = true
- Generator(outputDir, args[2], args[3], ProtocolSchemaReaderImpl().parseRoot(reader))
+ Generator(outputDir, args[1], args[2], mergedRoot)
}
private fun loadBytes(stream: InputStream): ByteArray {
val domainGeneratorMap = THashMap<String, DomainGenerator>()
for (domain in domainList) {
- if (isDomainSkipped(domain)) {
+ if (!INCLUDED_DOMAINS.contains(domain.domain())) {
System.out.println("Domain skipped: ${domain.domain()}")
continue
}
val READER_INTERFACE_NAME = "ProtocolResponseReader"
-private fun isDomainSkipped(domain: ProtocolMetaModel.Domain): Boolean {
- if (domain.domain() == "CSS" || domain.domain() == "Inspector" || domain.domain() == "Worker" || domain.domain() == "ServiceWorker") {
- return false
- }
-
// todo DOMDebugger
- return domain.hidden || domain.domain() == "DOMDebugger" || domain.domain() == "Timeline" || domain.domain() == "Input"
-}
+private val INCLUDED_DOMAINS = arrayOf("CSS", "Debugger", "DOM", "Inspector", "Log", "Network", "Page", "Runtime", "ServiceWorker",
+ "Tracing", "Worker")
fun generateMethodNameSubstitute(originalName: String, out: TextOutput): String {
if (originalName != "this") {