SubTypeTypeAdapterFactory class

Пакет: com.hypixel.hytale.server.npc.asset.builder.validators

Файл: com/hypixel/hytale/server/npc/asset/builder/validators/SubTypeTypeAdapterFactory.java

implements: TypeAdapterFactory

Поля (4)

МодификаторыТипИмя
final Map var3
Entry var3x
JsonObject var4
JsonObject var5

Методы (6)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException()
abstract throw new RuntimeExceptionthrow new RuntimeException("Unsupported")
if if(var3x == null)
public T readpublic T read(JsonReader var1)
return return(new TypeAdapter<T>()
public void writepublic void write(JsonWriter var1, @Nonnull T var2x)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.asset.builder.validators;

class="kw">import com.google.gson.Gson;
class="kw">import com.google.gson.JsonElement;
class="kw">import com.google.gson.JsonObject;
class="kw">import com.google.gson.TypeAdapter;
class="kw">import com.google.gson.TypeAdapterFactory;
class="kw">import com.google.gson.internal.Streams;
class="kw">import com.google.gson.reflect.TypeToken;
class="kw">import com.google.gson.stream.JsonReader;
class="kw">import com.google.gson.stream.JsonWriter;
class="kw">import java.io.IOException;
class="kw">import java.util.HashMap;
class="kw">import java.util.Map;
class="kw">import java.util.Map.Entry;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class SubTypeTypeAdapterFactory class="kw">implements TypeAdapterFactory {
   class="kw">private class="kw">final Class<?> baseClassType;
   class="kw">private class="kw">final String typeFieldName;
   class="kw">private class="kw">final Map<Class<?>, String> classToName = new HashMap<>();

   class="kw">private SubTypeTypeAdapterFactory(Class<?> var1, String var2) {
      this.baseClassType = var1;
      this.typeFieldName = var2;
   }

   @Nonnull
   class="kw">public class="kw">static SubTypeTypeAdapterFactory of(Class<?> var0, String var1) {
      class="kw">return new SubTypeTypeAdapterFactory(var0, var1);
   }

   @Nonnull
   class="kw">public SubTypeTypeAdapterFactory registerSubType(Class<?> var1, String var2) {
      if (this.classToName.containsKey(var1)) {
         throw new IllegalArgumentException();
      }

      if (this.classToName.containsValue(var2)) {
         throw new IllegalArgumentException();
      }

      this.classToName.put(var1, var2);
      class="kw">return this;
   }

   @Nullable
   class="kw">public <T> TypeAdapter<T> create(@Nonnull Gson var1, @Nonnull TypeToken<T> var2) {
      if (var2.getRawType() != this.baseClassType) {
         class="kw">return null;
      }

      class="kw">final Map var3 = new HashMap<>();
      this.classToName.forEach((var3x, var4) -> var3.put((Class<?>)var3x, Map.entry(var4, var1.getDelegateAdapter(this, TypeToken.get(var3x)))));
      class="kw">return (new TypeAdapter<T>() {
         class="kw">public void write(JsonWriter var1, @Nonnull T var2x) class="kw">throws IOException {
            Entry var3x = var3.get(var2x.getClass());
            if (var3x == null) {
               throw new IllegalArgumentException();
            }

            JsonObject var4 = new JsonObject();
            JsonObject var5 = var3x.getValue().toJsonTree(var2x).getAsJsonObject();
            var4.addProperty(SubTypeTypeAdapterFactory.this.typeFieldName, var3x.getKey());
            var5.entrySet().forEach(var1x -> var4.add((String)var1x.getKey(), (JsonElement)var1x.getValue()));
            Streams.write(var4, var1);
         }

         class="kw">public T read(JsonReader var1) {
            throw new RuntimeException("Unsupported");
         }
      }).nullSafe();
   }
}