Program: 143472
Project: 143472
Buggy source:
/** 
 * -fe is only needed because of format . It accesses another property value based on the 'for' property (). TODO this FormElement parameter should be analyzed because format accepts a flat property value. -level is only needed because the current implementation 'flattens' the dataproviderid's and tagstrings for DAL  .(level should be removed after next changes) -component is the whole component for now ,but it should be the current component node in the runtime component tree (instead of flat properties map) -component and componentNode should have been just componentNode (but currently WebCoponent is not nested)
 */
public void fillProperties(Form formElNodeForm,FormElement fe,Object formElementProperty,PropertyDescription propertySpec,DataAdapterList dal,WebFormComponent component,Object componentNode,String level){
  IPropertyType<?> type=propertySpec.getType();
  if (propertySpec.isArray() && formElementProperty instanceof List && !(formElementProperty instanceof IComplexPropertyValue)) {
    List<Object> processedArray=new ArrayList<>();
    List<Object> fePropertyArray=(List<Object>)formElementProperty;
    for (    Object arrayValue : fePropertyArray) {
      Object propValue=initFormElementProperty(formElNodeForm,fe,arrayValue,propertySpec,dal,component,componentNode,level,true);
switch (type.getName()) {
case "String_Node_Str":
{
          Debug.error("String_Node_Str");
          Object dataproviderID=propValue;
          if (dataproviderID instanceof String) {
            dal.add(component,level + (String)dataproviderID,propertySpec.getName());
          }
          break;
        }
case "String_Node_Str":
{
        Debug.error("String_Node_Str");
        if (propValue != null && propValue instanceof String && (((String)propValue).contains("String_Node_Str")) || ((String)propValue).startsWith("String_Node_Str")) {
          dal.addTaggedProperty(component,level + propertySpec.getName(),(String)propValue);
        }
        break;
      }
default :
{
      processedArray.add(propValue);
    }
}
}
if (processedArray.size() > 0) {
putInComponentNode(componentNode,propertySpec.getName(),processedArray,propertySpec,component);
}
}
 else {
Object propValue=initFormElementProperty(formElNodeForm,fe,formElementProperty,propertySpec,dal,component,componentNode,level,false);
String propName=propertySpec.getName();
switch (type.getName()) {
case "String_Node_Str":
{
  Object dataproviderID=formElementProperty;
  if (dataproviderID instanceof String) {
    dal.add(component,(String)dataproviderID,level + propName);
    return;
  }
  break;
}
case "String_Node_Str":
{
if (propValue != null && propValue instanceof String && (((String)propValue).contains("String_Node_Str") || ((String)propValue).startsWith("String_Node_Str"))) {
  dal.addTaggedProperty(component,level + propName,(String)propValue);
  return;
}
break;
}
case "String_Node_Str":
return;
default :
break;
}
if (propValue != null) putInComponentNode(componentNode,propName,propValue,propertySpec,component);
}
}

Fixed version (ground truth):
/** 
 * -fe is only needed because of format . It accesses another property value based on the 'for' property (). TODO this FormElement parameter should be analyzed because format accepts a flat property value. -level is only needed because the current implementation 'flattens' the dataproviderid's and tagstrings for DAL  .(level should be removed after next changes) -component is the whole component for now ,but it should be the current component node in the runtime component tree (instead of flat properties map) -component and componentNode should have been just componentNode (but currently WebCoponent is not nested)
 */
public void fillProperties(Form formElNodeForm,FormElement fe,Object formElementProperty,PropertyDescription propertySpec,DataAdapterList dal,WebFormComponent component,Object componentNode,String level){
  IPropertyType<?> type=propertySpec.getType();
  if (propertySpec.isArray() && formElementProperty instanceof List && !(formElementProperty instanceof IComplexPropertyValue)) {
    List<Object> processedArray=new ArrayList<>();
    List<Object> fePropertyArray=(List<Object>)formElementProperty;
    for (    Object arrayValue : fePropertyArray) {
      Object propValue=initFormElementProperty(formElNodeForm,fe,arrayValue,propertySpec.asArrayElement(),dal,component,componentNode,level,true);
switch (type.getName()) {
case "String_Node_Str":
{
          Debug.error("String_Node_Str");
          Object dataproviderID=propValue;
          if (dataproviderID instanceof String) {
            dal.add(component,level + (String)dataproviderID,propertySpec.getName());
          }
          break;
        }
case "String_Node_Str":
{
        Debug.error("String_Node_Str");
        if (propValue != null && propValue instanceof String && (((String)propValue).contains("String_Node_Str")) || ((String)propValue).startsWith("String_Node_Str")) {
          dal.addTaggedProperty(component,level + propertySpec.getName(),(String)propValue);
        }
        break;
      }
default :
{
      processedArray.add(propValue);
    }
}
}
if (processedArray.size() > 0) {
putInComponentNode(componentNode,propertySpec.getName(),processedArray,propertySpec,component);
}
}
 else {
Object propValue=initFormElementProperty(formElNodeForm,fe,formElementProperty,propertySpec,dal,component,componentNode,level,false);
String propName=propertySpec.getName();
switch (type.getName()) {
case "String_Node_Str":
{
  Object dataproviderID=formElementProperty;
  if (dataproviderID instanceof String) {
    dal.add(component,(String)dataproviderID,level + propName);
    return;
  }
  break;
}
case "String_Node_Str":
{
if (propValue != null && propValue instanceof String && (((String)propValue).contains("String_Node_Str") || ((String)propValue).startsWith("String_Node_Str"))) {
  dal.addTaggedProperty(component,level + propName,(String)propValue);
  return;
}
break;
}
case "String_Node_Str":
return;
default :
break;
}
if (propValue != null) putInComponentNode(componentNode,propName,propValue,propertySpec,component);
}
}