private @NotNull YamlMetaType getMainType() {
    if(myMainType != null)
      return myMainType;

    assert myMetaTypeSupplier != null;

    synchronized (myMetaTypeSupplier) {
      if(myMainType == null) {
        try {
          YamlMetaType mainType = myMetaTypeSupplier.getMainType();
          assert !(myMainType instanceof YamlArrayType) : "Type supplier must not provide array types";

          myMainType = mainType;
        }
        catch (Exception e) {
          throw new RuntimeException("Supplier failed to return a metatype for field: " + this, e);
        }
      }
      return myMainType;
    }
  }
private @NotNull YamlMetaType getMainType()