override fun read()

in commons/src/main/kotlin/org/jetbrains/bazel/commons/gson/BazelGson.kt [85:128]


      override fun read(reader: JsonReader): T? {
        if (reader.peek() == JsonToken.NULL) {
          reader.nextNull()
          return null
        }

        // Only parse enough to get the type
        if (reader.peek() != JsonToken.BEGIN_OBJECT) {
          return delegateAdapter.read(reader)
        }

        reader.beginObject()
        var className: String? = null
        val jsonObject = com.google.gson.JsonObject()

        while (reader.hasNext()) {
          val name = reader.nextName()
          if (name == TYPE_FIELD) {
            className = reader.nextString()
          } else {
            // Read property value as JsonElement
            val value =
              com.google.gson.JsonParser
                .parseReader(reader)
            jsonObject.add(name, value)
          }
        }
        reader.endObject()

        if (className != null) {
          val adapter = subclassAdapters[className]
          if (adapter != null) {
            // Add type info back
            jsonObject.addProperty(TYPE_FIELD, className)
            // Use the specifically fetched adapter, not going through gson.fromJson
            @Suppress("UNCHECKED_CAST")
            return adapter.fromJsonTree(jsonObject) as T
          }
        }

        // Fallback: deserialize as the base type
        @Suppress("UNCHECKED_CAST")
        return delegateAdapter.fromJsonTree(jsonObject) as T
      }