WEB-23769 JS debugger: update wip protocol to chrome 54

This commit is contained in:
Konstantin Ulitin
2016-10-31 15:13:43 +03:00
parent 5bfddbb3f6
commit f9784a49cb
4 changed files with 111 additions and 104 deletions
@@ -15,18 +15,18 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -42,18 +42,18 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -69,28 +69,30 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -100,7 +102,7 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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 {
@@ -112,22 +114,22 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -151,26 +153,26 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -189,21 +191,21 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -224,23 +226,23 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -261,23 +263,23 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -298,25 +300,25 @@ internal class ProtocolSchemaReaderImpl : org.jetbrains.jsonProtocol.ProtocolSch
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()
@@ -1,6 +1,7 @@
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
@@ -15,17 +16,28 @@ import java.util.*
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 {
@@ -74,7 +86,7 @@ internal class Generator(outputDir: String, private val rootPackage: String, req
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
}
@@ -218,14 +230,9 @@ internal class Generator(outputDir: String, private val rootPackage: String, req
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") {
@@ -12,13 +12,17 @@ internal class TypeMap {
var domainGeneratorMap: Map<String, DomainGenerator>? = null
private val typesToGenerate = ArrayList<StandaloneTypeBinding>()
private val typesToGenerate = ArrayDeque<StandaloneTypeBinding>()
fun resolve(domainName: String, typeName: String, direction: TypeData.Direction): BoxableType? {
val domainGenerator = domainGeneratorMap!!.get(domainName)
if (domainGenerator == null) {
val qName = "$domainName.$typeName";
if (qName == "IO.StreamHandle" || qName == "Security.SecurityState" || qName == "Emulation.ScreenOrientation") {
if (qName == "IO.StreamHandle" ||
qName == "Security.SecurityState" ||
qName == "Security.CertificateId" ||
qName == "Emulation.ScreenOrientation"
) {
return BoxableType.ANY_STRING // ignore
}
throw RuntimeException("Failed to find domain generator: $domainName for type $typeName")
@@ -27,25 +31,17 @@ internal class TypeMap {
}
fun addTypeToGenerate(binding: StandaloneTypeBinding) {
typesToGenerate.add(binding)
typesToGenerate.offer(binding)
}
fun generateRequestedTypes() {
// size may grow during iteration
var list = typesToGenerate.toTypedArray()
typesToGenerate.clear()
while (true) {
for (binding in list) {
val createdTypes = HashSet<CharSequence>()
while (typesToGenerate.isNotEmpty()) {
val binding = typesToGenerate.poll()
if (createdTypes.add(binding.getJavaType().fullText)) {
binding.generate()
}
if (typesToGenerate.isEmpty()) {
break
}
else {
list = typesToGenerate.toTypedArray()
typesToGenerate.clear()
}
}
}
@@ -71,6 +71,8 @@ interface ProtocolMetaModel {
val description: String?
val hidden: Boolean
val experimental: Boolean
}
interface Command {