RecordField class

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

Файл: com/hypixel/hytale/codec/record/RecordField.java

Поля (18)

МодификаторыТипИмя
break
private String documentation
private List<Metadata> metadata
return
Object var4
Object var4
var4
var4
int var4
ValidationResults var4
NonNullValidator var5
var5
Object var5
Object var5
Validator var6
ValidationResults var7
Validator var7
ValidationResults var8

Методы (39)

МодификаторыВозвратСигнатура
abstract throw new CodecExceptionthrow new CodecException("Failed to decode", var1, var3, var9)
abstract throw new IOExceptionthrow new IOException("Unexpected EOF!")
public Optionspublic Options()
public RecordField.Options<FieldType> addValidatorpublic RecordField.Options<FieldType> addValidator(@Nonnull Validator<? super FieldType> var1)
public RecordField.Options<FieldType> addValidatorLatepublic RecordField.Options<FieldType> addValidatorLate(@Nonnull Supplier<LateValidator<? super FieldType>> var1)
public void decodevoid decode(@Nonnull BsonValue var1, @Nonnull Object[] var2, @Nonnull ExtraInfo var3)
public void decodeJsonvoid decodeJson(@Nonnull RawJsonReader var1, @Nonnull Object[] var2, @Nonnull ExtraInfo var3)
public RecordField.Options<FieldType> documentationpublic RecordField.Options<FieldType> documentation(@Nonnull String var1)
public void encodevoid encode(@Nonnull BsonDocument var1, Type var2, @Nonnull ExtraInfo var3)
for for(Validator var7 : this.validators)
abstract for for(int var5 = 0; var5 < this.validators.size()
abstract for for(int var6 = 0; var6 < this.validators.size()
abstract for for(int var3 = 0; var3 < this.validators.size()
abstract for for(int var4 = 0; var4 < this.metadata.size()
public boolean hasNonNullValidatorboolean hasNonNullValidator()
if if(this.validators != null)
if if(var7 instanceof NonNullValidator)
if if(var4 == -1)
if if(this.validators != null)
if if(var6 != this.nonNullValidator)
if if(this.isPrimitive && var2 == null)
if if(this.nonNullValidator != null)
if if(this.nonNullValidator != null)
if if(var1[this.index] == null)
if if(this.validators != null)
if if(this.validators != null)
if if(this.metadata != null)
if if(this.validators == null)
if if(this.validators == null)
if if(this.metadata == null)
public boolean isPrimitiveboolean isPrimitive()
public RecordField.Options<FieldType> metadatapublic RecordField.Options<FieldType> metadata(@Nonnull Metadata var1)
private void setValuevoid setValue(@Nonnull Object[] var1, @Nullable FieldType var2, @Nonnull ExtraInfo var3)
switch switch(var4)
public void updateSchemavoid updateSchema(@Nonnull SchemaContext var1, @Nonnull Schema var2)
public void validatevoid validate(Type var1, @Nonnull ExtraInfo var2)
void validateDefaultsvoid validateDefaults(@Nullable Type var1, @Nullable Object var2, @Nonnull ExtraInfo var3, @Nonnull Set<Codec<?>> var4)
void validateRequiredArgvoid validateRequiredArg(@Nonnull Object[] var1, @Nonnull ValidationResults var2)
private void validateValuevoid validateValue(@Nullable FieldType var1, @Nonnull ExtraInfo var2, @Nullable Predicate<Validator<? super FieldType>> var3)

Исходный код

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

class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.ExtraInfo;
class="kw">import com.hypixel.hytale.codec.KeyedCodec;
class="kw">import com.hypixel.hytale.codec.PrimitiveCodec;
class="kw">import com.hypixel.hytale.codec.exception.CodecException;
class="kw">import com.hypixel.hytale.codec.schema.SchemaContext;
class="kw">import com.hypixel.hytale.codec.schema.config.Schema;
class="kw">import com.hypixel.hytale.codec.schema.metadata.Metadata;
class="kw">import com.hypixel.hytale.codec.util.RawJsonReader;
class="kw">import com.hypixel.hytale.codec.validation.LateValidator;
class="kw">import com.hypixel.hytale.codec.validation.LazyLateValidator;
class="kw">import com.hypixel.hytale.codec.validation.ValidatableCodec;
class="kw">import com.hypixel.hytale.codec.validation.ValidationResults;
class="kw">import com.hypixel.hytale.codec.validation.Validator;
class="kw">import com.hypixel.hytale.codec.validation.Validators;
class="kw">import com.hypixel.hytale.codec.validation.validator.DeprecatedValidator;
class="kw">import com.hypixel.hytale.codec.validation.validator.NonNullValidator;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.io.IOException;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.function.Function;
class="kw">import java.util.function.Predicate;
class="kw">import java.util.function.Supplier;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.bson.BsonDocument;
class="kw">import org.bson.BsonValue;

class="kw">public class="kw">final class RecordField<Type, FieldType> {
   @Nonnull
   class="kw">private class="kw">final KeyedCodec<FieldType> codec;
   @Nonnull
   class="kw">private class="kw">final Function<Type, FieldType> accessor;
   class="kw">private class="kw">final int index;
   @Nullable
   class="kw">private class="kw">final List<Validator<? super FieldType>> validators;
   @Nullable
   class="kw">private class="kw">final List<Metadata> metadata;
   @Nullable
   class="kw">private class="kw">final String documentation;
   @Nullable
   class="kw">private class="kw">final NonNullValidator<? super FieldType> nonNullValidator;
   class="kw">private class="kw">final boolean isPrimitive;

   RecordField(@Nonnull KeyedCodec<FieldType> var1, @Nonnull Function<Type, FieldType> var2, int var3, @Nonnull RecordField.Options<FieldType> var4) {
      this.codec = Objects.requireNonNull(var1, "codec parameter can't be null");
      this.accessor = Objects.requireNonNull(var2, "accessor parameter can't be null");
      this.index = var3;
      this.validators = var4.validators;
      this.metadata = var4.metadata;
      this.documentation = var4.documentation;
      NonNullValidator var5 = null;
      if (this.validators != null) {
         for (Validator var7 : this.validators) {
            if (var7 class="kw">instanceof NonNullValidator) {
               var5 = (NonNullValidator<? super FieldType>)var7;
               break;
            }
         }
      }

      this.nonNullValidator = var5;
      this.isPrimitive = var1.getChildCodec() class="kw">instanceof PrimitiveCodec;
   }

   @Nonnull
   class="kw">public KeyedCodec<FieldType> getCodec() {
      class="kw">return this.codec;
   }

   @Nullable
   class="kw">public String getDocumentation() {
      class="kw">return this.documentation;
   }

   class="kw">public boolean hasNonNullValidator() {
      class="kw">return this.nonNullValidator != null;
   }

   class="kw">public boolean isPrimitive() {
      class="kw">return this.isPrimitive;
   }

   class="kw">public void encode(@Nonnull BsonDocument var1, Type var2, @Nonnull ExtraInfo var3) {
      Object var4 = this.accessor.apply(var2);
      this.codec.put(var1, var4, var3);
   }

   @Nullable
   FieldType getValue(@Nonnull Type var1) {
      class="kw">return this.accessor.apply(var1);
   }

   class="kw">public void decode(@Nonnull BsonValue var1, @Nonnull Object[] var2, @Nonnull ExtraInfo var3) {
      var3.pushKey(this.codec.getKey());

      try {
         Object var4;
         if (Codec.isNullBsonValue(var1)) {
            var4 = null;
         } else {
            try {
               var4 = this.codec.getChildCodec().decode(var1, var3);
            } catch (Exception var9) {
               throw new CodecException("Failed to decode", var1, var3, var9);
            }
         }

         this.setValue(var2, var4, var3);
      } class="kw">finally {
         var3.popKey();
      }
   }

   class="kw">public void decodeJson(@Nonnull RawJsonReader var1, @Nonnull Object[] var2, @Nonnull ExtraInfo var3) class="kw">throws IOException {
      int var4 = var1.peek();
      if (var4 == -1) {
         throw new IOException("Unexpected EOF!");
      }

      class="kw">switch (var4) {
         case 78:
         case 110:
            var1.readNullValue();
            this.setValue(var2, null, var3);
            class="kw">return;
         class="kw">default:
            Object var5 = this.codec.getChildCodec().decodeJson(var1, var3);
            this.setValue(var2, var5, var3);
      }
   }

   class="kw">private void setValue(@Nonnull Object[] var1, @Nullable FieldType var2, @Nonnull ExtraInfo var3) {
      if (this.validators != null) {
         ValidationResults var4 = var3.getValidationResults();

         for (int var5 = 0; var5 < this.validators.size(); var5++) {
            Validator var6 = this.validators.get(var5);
            if (var6 != this.nonNullValidator) {
               var6.accept(var2, var4);
            }
         }

         var4._processValidationResults();
      }

      if (this.isPrimitive && var2 == null) {
         ValidationResults var7 = var3.getValidationResults();
         if (this.nonNullValidator != null) {
            this.nonNullValidator.accept(null, var7);
         } else {
            Validators.nonNull().accept(null, var7);
         }

         var7._processValidationResults();
      } else {
         var1[this.index] = var2;
      }
   }

   void validateRequiredArg(@Nonnull Object[] var1, @Nonnull ValidationResults var2) {
      if (this.nonNullValidator != null) {
         if (var1[this.index] == null) {
            this.nonNullValidator.accept(null, var2);
            var2._processValidationResults();
         }
      }
   }

   class="kw">public void validate(Type var1, @Nonnull ExtraInfo var2) {
      this.validateValue(this.accessor.apply(var1), var2, null);
   }

   void validateDefaults(@Nullable Type var1, @Nullable Object var2, @Nonnull ExtraInfo var3, @Nonnull Set<Codec<?>> var4) {
      Object var5 = (FieldType)(var1 != null ? this.accessor.apply(var1) : var2);
      if (var5 != null && !this.codec.isRequired() && this.nonNullValidator == null) {
         this.validateValue(var5, var3, var0 -> var0 class="kw">instanceof DeprecatedValidator);
      }

      ValidatableCodec.validateDefaults(this.codec.getChildCodec(), var3, var4);
   }

   class="kw">private void validateValue(@Nullable FieldType var1, @Nonnull ExtraInfo var2, @Nullable Predicate<Validator<? super FieldType>> var3) {
      if (var1 != null && this.codec.getChildCodec() class="kw">instanceof ValidatableCodec var5) {
         ((ValidatableCodec<FieldType>)var5).validate(var1, var2);
      }

      if (this.validators != null) {
         ValidationResults var8 = var2.getValidationResults();

         for (int var6 = 0; var6 < this.validators.size(); var6++) {
            Validator var7 = this.validators.get(var6);
            if ((var3 == null || !var3.test(var7)) && !(var7 class="kw">instanceof LateValidator)) {
               var7.accept(var1, var8);
            }
         }

         var8._processValidationResults();
      }
   }

   class="kw">public void updateSchema(@Nonnull SchemaContext var1, @Nonnull Schema var2) {
      if (this.validators != null) {
         for (int var3 = 0; var3 < this.validators.size(); var3++) {
            this.validators.get(var3).updateSchema(var1, var2);
         }
      }

      if (this.metadata != null) {
         for (int var4 = 0; var4 < this.metadata.size(); var4++) {
            this.metadata.get(var4).modify(var2);
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "RecordField{codec=" + this.codec + ", index=" + this.index + "}";
   }

   class="kw">public class="kw">static class="kw">final class Options<FieldType> {
      @Nullable
      class="kw">private List<Validator<? super FieldType>> validators;
      @Nullable
      class="kw">private List<Metadata> metadata;
      @Nullable
      class="kw">private String documentation;

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

      @Nonnull
      class="kw">public RecordField.Options<FieldType> addValidator(@Nonnull Validator<? super FieldType> var1) {
         if (this.validators == null) {
            this.validators = new ObjectArrayList();
         }

         this.validators.add(var1);
         class="kw">return this;
      }

      @Nonnull
      class="kw">public RecordField.Options<FieldType> addValidatorLate(@Nonnull Supplier<LateValidator<? super FieldType>> var1) {
         if (this.validators == null) {
            this.validators = new ObjectArrayList();
         }

         this.validators.add(new LazyLateValidator<>(var1));
         class="kw">return this;
      }

      @Nonnull
      class="kw">public RecordField.Options<FieldType> documentation(@Nonnull String var1) {
         this.documentation = var1;
         class="kw">return this;
      }

      @Nonnull
      class="kw">public RecordField.Options<FieldType> metadata(@Nonnull Metadata var1) {
         if (this.metadata == null) {
            this.metadata = new ObjectArrayList();
         }

         this.metadata.add(var1);
         class="kw">return this;
      }
   }
}