ValueUsage class
Пакет: com.hypixel.hytale.server.npc.valuestore
Файл: com/hypixel/hytale/server/npc/valuestore/ValueStoreValidator.java
Поля (4)
| Модификаторы | Тип | Имя |
|---|---|---|
|
protected final BuilderContext |
context |
|
protected final String |
name |
|
protected final ValueStoreValidator.UseType |
useType |
|
protected final ValueStore.Type |
valueType |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.server.npc.valuestore;
class="kw">import com.hypixel.hytale.server.npc.asset.builder.BuilderContext;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectListIterator;
class="kw">import java.util.EnumMap;
class="kw">import java.util.HashMap;
class="kw">import java.util.List;
class="kw">import java.util.Map.Entry;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">public class ValueStoreValidator {
class="kw">private class="kw">final EnumMap<ValueStore.Type, HashMap<String, List<ValueStoreValidator.ValueUsage>>> usages = new EnumMap<>(ValueStore.Type.class);
class="kw">public ValueStoreValidator() {
}
class="kw">public void registerValueUsage(@Nonnull ValueStoreValidator.ValueUsage var1) {
if (var1.useType != ValueStoreValidator.UseType.READ) {
HashMap var2 = this.usages.computeIfAbsent(var1.valueType, var0 -> new HashMap<>());
List var3 = var2.computeIfAbsent(var1.name, var0 -> new ObjectArrayList());
var3.add(var1);
}
}
class="kw">public boolean validate(@Nonnull List<String> var1) {
boolean var2 = true;
for (ValueStore.Type var6 : ValueStore.Type.VALUES) {
var2 &= this.validateType(var6, var1);
}
class="kw">return var2;
}
class="kw">private boolean validateType(@Nonnull ValueStore.Type var1, @Nonnull List<String> var2) {
HashMap var3 = this.usages.get(var1);
if (var3 == null) {
class="kw">return true;
}
boolean var4 = true;
ObjectArrayList var5 = new ObjectArrayList();
ObjectArrayList var6 = new ObjectArrayList();
for (Entry var8 : var3.entrySet()) {
for (ValueStoreValidator.ValueUsage var10 : var8.getValue()) {
var5.add(var10);
if (var10.useType == ValueStoreValidator.UseType.EXCLUSIVE_WRITE) {
var6.add(var10);
}
}
if (var5.size() > 1 && !var6.isEmpty()) {
StringBuilder var12 = new StringBuilder();
var12.append("The core components [ ");
ObjectListIterator var13 = var6.iterator();
while (var13.hasNext()) {
ValueStoreValidator.ValueUsage var11 = (ValueStoreValidator.ValueUsage)var13.next();
var12.append(var11.context.getLabel()).append(" ");
}
var12.append("] require an exclusive write of the ")
.append(var1.get())
.append(" parameter '")
.append(var8.getKey())
.append("' but it is written to by [ ");
var13 = var5.iterator();
while (var13.hasNext()) {
ValueStoreValidator.ValueUsage var15 = (ValueStoreValidator.ValueUsage)var13.next();
var12.append(var15.context.getLabel()).append(" ");
}
var12.append("]");
var2.add(var12.toString());
var4 = false;
}
var5.clear();
var6.clear();
}
class="kw">return var4;
}
class="kw">public enum UseType class="kw">implements Supplier<String> {
READ("Reads the value"),
WRITE("Writes the value"),
EXCLUSIVE_WRITE("Has exclusive write ownership of the value");
class="kw">private class="kw">final String description;
UseType(String nullxx) {
this.description = nullxx;
}
class="kw">public String get() {
class="kw">return this.description;
}
}
class="kw">public class="kw">static class ValueUsage {
class="kw">protected class="kw">final String name;
class="kw">protected class="kw">final ValueStore.Type valueType;
class="kw">protected class="kw">final ValueStoreValidator.UseType useType;
class="kw">protected class="kw">final BuilderContext context;
class="kw">public ValueUsage(String var1, ValueStore.Type var2, ValueStoreValidator.UseType var3, BuilderContext var4) {
this.name = var1;
this.valueType = var2;
this.useType = var3;
this.context = var4;
}
}
}