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