docs: protected Object getValue(String propertyName, Type propertyType, boolean optional, String defaultString) {
          Object value = null;
          assertNotClosed();
  
          SourcedValue sourced = getSourcedValue(propertyName, propertyType);
          if (sourced != null) {
              value = sourced.getValue();
          } else {
              if (optional) {
                  value = convertValue(defaultString, propertyType);
              } else {
                  throw new NoSuchElementException(Tr.formatMessage(tc, "no.such.element.CWMCG0015E", propertyName));
              }
          }
          return value;
      }