code: private Attribute<D> putInstance(Schema.BaseType instanceBaseType, Supplier<Attribute<D>> finder, BiFunction<VertexElement, AttributeType<D>, Attribute<D>> producer, boolean isInferred) {
          Attribute<D> instance = finder.get();
          if (instance == null) {
              instance = addInstance(instanceBaseType, producer, isInferred);
          } else {
              if (isInferred && !instance.isInferred()) {
                  throw TransactionException.nonInferredThingExists(instance);
              }
          }
          return instance;
      }
docs: Utility method used to create or find an instance of this type
  
  @param instanceBaseType The base type of the instances of this type
  @param finder           The method to find the instrance if it already exists
  @param producer         The factory method to produce the instance if it doesn't exist
  @return A new or already existing instance