code: public static PropDefConceptId getInstance(String propId,
              String propertyName, Value value, Metadata metadata) {
          List<Object> key = new ArrayList<>(4);
          key.add(propId);
          key.add(propertyName);
          key.add(value);
          key.add(Boolean.TRUE); //distinguishes these from properties represented as a modifier.
          PropDefConceptId conceptId = (PropDefConceptId) metadata.getFromConceptIdCache(key);
          if (conceptId == null) {
              conceptId = new PropDefConceptId(propId, propertyName, value, metadata);
              metadata.putInConceptIdCache(key, conceptId);
          }
          return conceptId;
      }
docs: Returns a concept propId with the given proposition propId, property name and
  value.
  
  @param propId a proposition propId {@link String}. Cannot be
  <code>null</code>.
  @param propertyName a property name {@link String}.
  @param value a {@link Value}.
  @return a {@link PropDefConceptId}.