private void addFromProperties( Iterable<XProperty> properties, String accessType, Set<String> persistentProperties, Audited allClassAudited) { for (XProperty property : properties) { // If this is not a persistent property, with the same access type as currently checked, // it's not audited as well. // If the property was already defined by the subclass, is ignored by superclasses if (persistentProperties.contains(property.getName()) && !auditedPropertiesHolder.contains(property.getName())) { final Value propertyValue = persistentPropertiesSource.getProperty(property.getName()).getValue(); if (propertyValue instanceof Component) { this.addFromComponentProperty( property, accessType, (Component) propertyValue, allClassAudited); } else { this.addFromNotComponentProperty(property, accessType, allClassAudited); } } else if (propertiesGroupMapping.containsKey(property.getName())) { // Retrieve embedded component name based on class field. final String embeddedName = propertiesGroupMapping.get(property.getName()); if (!auditedPropertiesHolder.contains(embeddedName)) { // Manage properties mapped within <properties> tag. final Value propertyValue = persistentPropertiesSource.getProperty(embeddedName).getValue(); this.addFromPropertiesGroup( embeddedName, property, accessType, (Component) propertyValue, allClassAudited); } } } }