Program: 165134
Project: 165134
Buggy source:
@SuppressWarnings("String_Node_Str") public final FieldMapper<S,T>[] fields(){
  final List<FieldMapper<S,T>> fields=new ArrayList<FieldMapper<S,T>>();
  final Map<PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>>,AbstractFieldMapperMapperBuilder<S,?,K>> buildersByOwner=new HashMap<PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>>,AbstractFieldMapperMapperBuilder<S,?,K>>();
  propertyMappingsBuilder.forEachProperties(new ForEachCallBack<PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>>>(){
    final Map<String,AbstractFieldMapperMapperBuilder<S,?,K>> builders=new HashMap<String,AbstractFieldMapperMapperBuilder<S,?,K>>();
    @Override public void handle(    PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>> t){
      if (t == null)       return;
      PropertyMeta<T,?> meta=t.getPropertyMeta();
      if (meta == null || (meta instanceof DirectClassMeta.DirectPropertyMeta))       return;
      if (meta.isSubProperty()) {
        addSubProperty(t,(SubPropertyMeta<T,?>)meta,t.getColumnKey());
      }
 else       if (!meta.isConstructorProperty()) {
        fields.add(newFieldMapper(t));
      }
    }
    private <P>void addSubProperty(    PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>> pm,    SubPropertyMeta<T,?> subPropertyMeta,    K key){
      PropertyMeta<T,?> propertyOwner=subPropertyMeta.getOwnerProperty();
      if (!propertyOwner.isConstructorProperty()) {
        AbstractFieldMapperMapperBuilder<S,P,K> builder=(AbstractFieldMapperMapperBuilder<S,P,K>)builders.get(propertyOwner.getName());
        if (builder == null) {
          builder=(AbstractFieldMapperMapperBuilder<S,P,K>)newSubBuilder(propertyOwner.getType(),propertyOwner.getClassMeta());
          builders.put(propertyOwner.getName(),builder);
          buildersByOwner.put(pm,builder);
        }
        builder.addMapping(key,((SubPropertyMeta<T,P>)subPropertyMeta).getSubProperty());
      }
    }
  }
);
  for (  Entry<PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>>,AbstractFieldMapperMapperBuilder<S,?,K>> e : buildersByOwner.entrySet()) {
    SubPropertyMeta<T,?> prop=(SubPropertyMeta<T,?>)e.getKey().getPropertyMeta();
    fields.add(newSubFieldMapper(prop.getOwnerProperty(),e.getValue(),e.getKey().getColumnKey()));
  }
  for (  FieldMapper<S,T> mapper : additionalMappers) {
    fields.add(mapper);
  }
  return fields.toArray(new FieldMapper[fields.size()]);
}

Fixed version (ground truth):
@SuppressWarnings("String_Node_Str") public final FieldMapper<S,T>[] fields(){
  final List<FieldMapper<S,T>> fields=new ArrayList<FieldMapper<S,T>>();
  final Map<PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>>,AbstractFieldMapperMapperBuilder<S,?,K>> buildersByOwner=new HashMap<PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>>,AbstractFieldMapperMapperBuilder<S,?,K>>();
  propertyMappingsBuilder.forEachProperties(new ForEachCallBack<PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>>>(){
    final Map<String,AbstractFieldMapperMapperBuilder<S,?,K>> builders=new HashMap<String,AbstractFieldMapperMapperBuilder<S,?,K>>();
    @Override public void handle(    PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>> t){
      if (t == null)       return;
      PropertyMeta<T,?> meta=t.getPropertyMeta();
      if (meta == null || (meta instanceof DirectClassMeta.DirectPropertyMeta))       return;
      if (meta.isSubProperty()) {
        addSubProperty(t,(SubPropertyMeta<T,?>)meta,t.getColumnKey());
      }
 else       if (!meta.isConstructorProperty()) {
        fields.add(newFieldMapper(t));
      }
    }
    private <P>void addSubProperty(    PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>> pm,    SubPropertyMeta<T,?> subPropertyMeta,    K key){
      PropertyMeta<T,?> propertyOwner=subPropertyMeta.getOwnerProperty();
      if (!propertyOwner.isConstructorProperty()) {
        AbstractFieldMapperMapperBuilder<S,P,K> builder=(AbstractFieldMapperMapperBuilder<S,P,K>)builders.get(propertyOwner.getName());
        if (builder == null) {
          builder=(AbstractFieldMapperMapperBuilder<S,P,K>)newSubBuilder(propertyOwner.getType(),propertyOwner.getClassMeta());
          builders.put(propertyOwner.getName(),builder);
          buildersByOwner.put(pm,builder);
        }
        builder.addMapping(key,pm.getColumnDefinition(),((SubPropertyMeta<T,P>)subPropertyMeta).getSubProperty());
      }
    }
  }
);
  for (  Entry<PropertyMapping<T,?,K,FieldMapperColumnDefinition<K,S>>,AbstractFieldMapperMapperBuilder<S,?,K>> e : buildersByOwner.entrySet()) {
    SubPropertyMeta<T,?> prop=(SubPropertyMeta<T,?>)e.getKey().getPropertyMeta();
    fields.add(newSubFieldMapper(prop.getOwnerProperty(),e.getValue(),e.getKey().getColumnKey()));
  }
  for (  FieldMapper<S,T> mapper : additionalMappers) {
    fields.add(mapper);
  }
  return fields.toArray(new FieldMapper[fields.size()]);
}