docs: protected List<CmsProperty> processDefaultProperties(List<CmsProperty> properties, CmsMacroResolver resolver) {
  
          if ((m_defaultProperties == null) || (m_defaultProperties.size() == 0)) {
              // no default properties are defined
              return properties;
          }
  
          // the properties must be copied since the macros could contain macros that are
          // resolved differently for every user / context
          ArrayList<CmsProperty> result = new ArrayList<CmsProperty>();
          Iterator<CmsProperty> i = m_defaultProperties.iterator();
  
          while (i.hasNext()) {
              // create a clone of the next property
              CmsProperty property = (i.next()).clone();
  
              // resolve possible macros in the property values
              if (property.getResourceValue() != null) {
                  property.setResourceValue(resolver.resolveMacros(property.getResourceValue()));
              }
              if (property.getStructureValue() != null) {
                  property.setStructureValue(resolver.resolveMacros(property.getStructureValue()));
              }
  
              // save the new property in the result list
              result.add(property);
          }
  
          // add the original properties
          if (properties != null) {
              result.addAll(properties);
          }
  
          // return the result
          return result;
      }