WEB-23769 JS debugger: update wip protocol to chrome 54
authorKonstantin Ulitin <konstantin.ulitin@jetbrains.com>
Mon, 31 Oct 2016 12:11:15 +0000 (15:11 +0300)
committerKonstantin Ulitin <konstantin.ulitin@jetbrains.com>
Mon, 31 Oct 2016 12:13:43 +0000 (15:13 +0300)
platform/script-debugger/protocol/protocol-model-generator/generated/ProtocolSchemaReaderImpl.kt
platform/script-debugger/protocol/protocol-model-generator/src/Generator.kt
platform/script-debugger/protocol/protocol-model-generator/src/TypeMap.kt
platform/script-debugger/protocol/schema-reader-generator/src/ProtocolMetaModel.kt

index a590896ba23f56ca9ef026fcec8ea317754ef83c..352738cfed9a0e0ab29d4d7b8555e3de4427dc5f 100644 (file)
@@ -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()
index fb1164c3bdd3aa1654ebdf945ecfbb11fa19a676..f96f35051b36c5e65d96b90f43ba39489cd82353 100644 (file)
@@ -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") {
index 48834773f0027923698e3f007070fe7a00bb5c24..097a51b9a3dc5c468c87f90c664787f2d6762667 100644 (file)
@@ -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()
-      }
     }
   }
 
index 4f4b9fb2d6a05d39272ad6bcbc172a8e00c955cf..39cd44dba6b81d4ebb446460df529cc2b00e6802 100644 (file)
@@ -71,6 +71,8 @@ interface ProtocolMetaModel {
     val description: String?
 
     val hidden: Boolean
+    
+    val experimental: Boolean
   }
 
   interface Command {