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();
}
}