Program: 11399
Project: 11399
Buggy source:
private void createTargetProduct(){
  targetProduct=new Product(sourceProduct.getName() + PRODUCT_SUFFIX,sourceProduct.getProductType(),sourceProduct.getSceneRasterWidth(),sourceProduct.getSceneRasterHeight());
  ProductUtils.copyProductNodes(sourceProduct,targetProduct);
  for (  String key : targetMap.keySet()) {
    final List<String> targetBandNames=new ArrayList<>();
    final ProductContainer container=targetMap.get(key);
    final CplxContainer master=container.sourceMaster;
    final CplxContainer slave=container.sourceSlave;
    final String pol=master.polarisation.isEmpty() ? "String_Node_Str" : '_' + master.polarisation.toUpperCase();
    final String tag=pol + '_' + master.date+ '_'+ slave.date;
    String targetBandName_I="String_Node_Str" + tag;
    Band iBand=targetProduct.addBand(targetBandName_I,ProductData.TYPE_FLOAT32);
    container.addBand(Unit.REAL,iBand.getName());
    iBand.setUnit(Unit.REAL);
    targetBandNames.add(iBand.getName());
    String targetBandName_Q="String_Node_Str" + tag;
    Band qBand=targetProduct.addBand(targetBandName_Q,ProductData.TYPE_FLOAT32);
    container.addBand(Unit.IMAGINARY,qBand.getName());
    qBand.setUnit(Unit.IMAGINARY);
    targetBandNames.add(qBand.getName());
    if (CREATE_VIRTUAL_BAND) {
      String countStr=productTag + tag;
      Band intensityBand=ReaderUtils.createVirtualIntensityBand(targetProduct,targetProduct.getBand(targetBandName_I),targetProduct.getBand(targetBandName_Q),countStr);
      targetBandNames.add(intensityBand.getName());
      Band phaseBand=ReaderUtils.createVirtualPhaseBand(targetProduct,targetProduct.getBand(targetBandName_I),targetProduct.getBand(targetBandName_Q),countStr);
      targetBandNames.add(phaseBand.getName());
      targetProduct.setQuicklookBandName(phaseBand.getName());
    }
    if (container.subProductsFlag) {
      if (outputTopoPhaseBand) {
        String topoBandName="String_Node_Str" + tag;
        Band topoBand=targetProduct.addBand(topoBandName,ProductData.TYPE_FLOAT32);
        container.addBand(Unit.PHASE,topoBand.getName());
        topoBand.setNoDataValueUsed(true);
        topoBand.setNoDataValue(0);
        topoBand.setUnit(Unit.PHASE);
        topoBand.setDescription("String_Node_Str");
        targetBandNames.add(topoBand.getName());
      }
    }
    for (    Band srcBand : sourceProduct.getBands()) {
      if (srcBand instanceof VirtualBand) {
        continue;
      }
      String srcBandName=srcBand.getName();
      if (srcBandName.endsWith(tag)) {
        if (srcBandName.startsWith("String_Node_Str") || srcBandName.startsWith("String_Node_Str")) {
          Band band=ProductUtils.copyBand(srcBand.getName(),sourceProduct,targetProduct,true);
          targetBandNames.add(band.getName());
        }
      }
    }
    String slvProductName=StackUtils.findOriginalSlaveProductName(sourceProduct,container.sourceSlave.realBand);
    StackUtils.saveSlaveProductBandNames(targetProduct,slvProductName,targetBandNames.toArray(new String[targetBandNames.size()]));
  }
  if (outputElevationBand) {
    Band elevBand=targetProduct.addBand("String_Node_Str",ProductData.TYPE_FLOAT32);
    elevBand.setNoDataValue(demNoDataValue);
    elevBand.setNoDataValueUsed(true);
    elevBand.setUnit(Unit.METERS);
    elevBand.setDescription("String_Node_Str");
  }
}

Fixed version (ground truth):
private void createTargetProduct(){
  targetProduct=new Product(sourceProduct.getName() + PRODUCT_SUFFIX,sourceProduct.getProductType(),sourceProduct.getSceneRasterWidth(),sourceProduct.getSceneRasterHeight());
  ProductUtils.copyProductNodes(sourceProduct,targetProduct);
  for (  String key : targetMap.keySet()) {
    final List<String> targetBandNames=new ArrayList<>();
    final ProductContainer container=targetMap.get(key);
    final CplxContainer master=container.sourceMaster;
    final CplxContainer slave=container.sourceSlave;
    final String pol=(master.polarisation == null || master.polarisation.isEmpty()) ? "String_Node_Str" : '_' + master.polarisation.toUpperCase();
    final String tag=pol + '_' + master.date+ '_'+ slave.date;
    String targetBandName_I="String_Node_Str" + tag;
    Band iBand=targetProduct.addBand(targetBandName_I,ProductData.TYPE_FLOAT32);
    container.addBand(Unit.REAL,iBand.getName());
    iBand.setUnit(Unit.REAL);
    targetBandNames.add(iBand.getName());
    String targetBandName_Q="String_Node_Str" + tag;
    Band qBand=targetProduct.addBand(targetBandName_Q,ProductData.TYPE_FLOAT32);
    container.addBand(Unit.IMAGINARY,qBand.getName());
    qBand.setUnit(Unit.IMAGINARY);
    targetBandNames.add(qBand.getName());
    if (CREATE_VIRTUAL_BAND) {
      String countStr=productTag + tag;
      Band intensityBand=ReaderUtils.createVirtualIntensityBand(targetProduct,targetProduct.getBand(targetBandName_I),targetProduct.getBand(targetBandName_Q),countStr);
      targetBandNames.add(intensityBand.getName());
      Band phaseBand=ReaderUtils.createVirtualPhaseBand(targetProduct,targetProduct.getBand(targetBandName_I),targetProduct.getBand(targetBandName_Q),countStr);
      targetBandNames.add(phaseBand.getName());
      targetProduct.setQuicklookBandName(phaseBand.getName());
    }
    if (container.subProductsFlag) {
      if (outputTopoPhaseBand) {
        String topoBandName="String_Node_Str" + tag;
        Band topoBand=targetProduct.addBand(topoBandName,ProductData.TYPE_FLOAT32);
        container.addBand(Unit.PHASE,topoBand.getName());
        topoBand.setNoDataValueUsed(true);
        topoBand.setNoDataValue(0);
        topoBand.setUnit(Unit.PHASE);
        topoBand.setDescription("String_Node_Str");
        targetBandNames.add(topoBand.getName());
      }
    }
    for (    Band srcBand : sourceProduct.getBands()) {
      if (srcBand instanceof VirtualBand) {
        continue;
      }
      String srcBandName=srcBand.getName();
      if (srcBandName.endsWith(tag)) {
        if (srcBandName.startsWith("String_Node_Str") || srcBandName.startsWith("String_Node_Str")) {
          Band band=ProductUtils.copyBand(srcBand.getName(),sourceProduct,targetProduct,true);
          targetBandNames.add(band.getName());
        }
      }
    }
    String slvProductName=StackUtils.findOriginalSlaveProductName(sourceProduct,container.sourceSlave.realBand);
    StackUtils.saveSlaveProductBandNames(targetProduct,slvProductName,targetBandNames.toArray(new String[targetBandNames.size()]));
  }
  if (outputElevationBand) {
    Band elevBand=targetProduct.addBand("String_Node_Str",ProductData.TYPE_FLOAT32);
    elevBand.setNoDataValue(demNoDataValue);
    elevBand.setNoDataValueUsed(true);
    elevBand.setUnit(Unit.METERS);
    elevBand.setDescription("String_Node_Str");
  }
}