SchemaContext class

Пакет: com.hypixel.hytale.codec.schema

Файл: com/hypixel/hytale/codec/schema/SchemaContext.java

Поля (13)

МодификаторыТипИмя
String var10
Schema var11
String var2
String var2
String var2
String var2
String var2
Schema var3
int var3
int var3
String var5
Schema var6
String var9

Методы (6)

МодификаторыВозвратСигнатура
public void addFileReferencevoid addFileReference(@Nonnull String var1, @Nonnull SchemaConvertable<?> var2)
if if(var3 != null)
if if(var1 instanceof BuilderCodec var8)
if if(var2 != null)
if if(var2 != null)
private String resolveNameString resolveName(@Nonnull NamedSchema var1)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.codec.schema;

class="kw">import com.hypixel.hytale.codec.EmptyExtraInfo;
class="kw">import com.hypixel.hytale.codec.builder.BuilderCodec;
class="kw">import com.hypixel.hytale.codec.record.RecordCodec;
class="kw">import com.hypixel.hytale.codec.schema.config.NullSchema;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;

class="kw">public class SchemaContext {
   @Nonnull
   class="kw">private class="kw">final Map<String, Schema> definitions = new Object2ObjectLinkedOpenHashMap();
   @Nonnull
   class="kw">private class="kw">final Map<String, Schema> otherDefinitions = new Object2ObjectLinkedOpenHashMap();
   @Nonnull
   class="kw">private class="kw">final Map<Object, String> nameMap = new Object2ObjectOpenHashMap();
   @Nonnull
   class="kw">private class="kw">final Object2IntMap<String> nameCollisionCount = new Object2IntOpenHashMap();
   @Nonnull
   class="kw">private class="kw">final Map<SchemaConvertable<?>, String> fileReferences = new Object2ObjectOpenHashMap();

   class="kw">public SchemaContext() {
   }

   class="kw">public void addFileReference(@Nonnull String var1, @Nonnull SchemaConvertable<?> var2) {
      this.fileReferences.put(var2, var1 + "#");
   }

   @Nullable
   class="kw">public Schema getFileReference(@Nonnull SchemaConvertable<?> var1) {
      String var2 = this.fileReferences.get(var1);
      class="kw">return var2 != null ? Schema.ref(var2) : null;
   }

   @Nonnull
   class="kw">public Schema refDefinition(@Nonnull SchemaConvertable<?> var1) {
      class="kw">return this.refDefinition(var1, null);
   }

   @Nonnull
   class="kw">public <T> Schema refDefinition(@Nonnull SchemaConvertable<T> var1, @Nullable T var2) {
      Schema var3 = this.getFileReference(var1);
      if (var3 != null) {
         class="kw">return var3;
      }

      if (var1 class="kw">instanceof BuilderCodec var8) {
         String var10 = this.resolveName(var8);
         if (!this.definitions.containsKey(var10)) {
            this.definitions.put(var10, NullSchema.INSTANCE);
            this.definitions.put(var10, var1.toSchema(this));
         }

         Schema var11 = Schema.ref("common.json#/definitions/" + var10);
         if (var2 != null) {
            var11.setDefaultRaw(var8.encode(var2, EmptyExtraInfo.EMPTY));
         }

         class="kw">return var11;
      } else if (var1 class="kw">instanceof RecordCodec var7) {
         String var9 = this.resolveName(var7.getType());
         if (!this.definitions.containsKey(var9)) {
            this.definitions.put(var9, NullSchema.INSTANCE);
            this.definitions.put(var9, var1.toSchema(this));
         }

         Schema var6 = Schema.ref("common.json#/definitions/" + var9);
         if (var2 != null) {
            var6.setDefaultRaw(var7.encode(var2, EmptyExtraInfo.EMPTY));
         }

         class="kw">return var6;
      } else if (var1 class="kw">instanceof NamedSchema var4) {
         String var5 = this.resolveName(var4);
         if (!this.otherDefinitions.containsKey(var5)) {
            this.otherDefinitions.put(var5, NullSchema.INSTANCE);
            this.otherDefinitions.put(var5, var1.toSchema(this));
         }

         class="kw">return Schema.ref("other.json#/definitions/" + var5);
      } else {
         class="kw">return var1.toSchema(this, var2);
      }
   }

   @Nullable
   class="kw">public Schema getRawDefinition(@Nonnull BuilderCodec<?> var1) {
      String var2 = this.resolveName(var1);
      class="kw">return this.definitions.get(var2);
   }

   @Nullable
   class="kw">public Schema getRawDefinition(@Nonnull RecordCodec<?> var1) {
      String var2 = this.resolveName(var1.getType());
      class="kw">return this.definitions.get(var2);
   }

   @Nullable
   class="kw">public Schema getRawDefinition(@Nonnull NamedSchema var1) {
      class="kw">return this.otherDefinitions.get(this.resolveName(var1));
   }

   @Nonnull
   class="kw">public Map<String, Schema> getDefinitions() {
      class="kw">return this.definitions;
   }

   @Nonnull
   class="kw">public Map<String, Schema> getOtherDefinitions() {
      class="kw">return this.otherDefinitions;
   }

   class="kw">private String resolveName(@Nonnull NamedSchema var1) {
      class="kw">return this.nameMap.computeIfAbsent(var1, var1x -> {
         String var2 = ((NamedSchema)var1x).getSchemaName();
         int var3 = this.nameCollisionCount.getInt(var2);
         this.nameCollisionCount.put(var2, var3 + 1);
         class="kw">return var3 > 0 ? var2 + "@" + var3 : var2;
      });
   }

   @Nonnull
   class="kw">private String resolveName(@Nonnull BuilderCodec<?> var1) {
      class="kw">return this.resolveName(var1.getInnerClass());
   }

   @Nonnull
   class="kw">private String resolveName(@Nonnull Class<?> var1) {
      class="kw">return this.nameMap.computeIfAbsent(var1, var1x -> {
         String var2 = ((Class)var1x).getSimpleName();
         int var3 = this.nameCollisionCount.getInt(var2);
         this.nameCollisionCount.put(var2, var3 + 1);
         class="kw">return var3 > 0 ? var2 + "@" + var3 : var2;
      });
   }

   class="kw">static {
      Schema.init();
   }
}