Program: 58420
Project: 58420
Buggy source:
protected WorldGenerator getGenerator(JsonObject genObject,Logger log,List<WeightedRandomBlock> resList,int clusterSize,List<WeightedRandomBlock> matList){
  String template=getDefaultTemplate();
  JsonObject entry=genObject;
  JsonElement genElement=genObject.get("String_Node_Str");
  if (genElement.isJsonObject()) {
    genObject=genElement.getAsJsonObject();
    if (genObject.has("String_Node_Str")) {
      template=genObject.get("String_Node_Str").getAsString();
    }
  }
  if ("String_Node_Str".equals(template)) {
    return new WorldGenSparseMinableCluster(resList,clusterSize,matList);
  }
 else   if ("String_Node_Str".equals(template)) {
    boolean sparse=true;
{
      sparse=genObject.has("String_Node_Str") ? genObject.get("String_Node_Str").getAsBoolean() : sparse;
    }
    return new WorldGenMinableLargeVein(resList,clusterSize,matList,sparse);
  }
 else   if ("String_Node_Str".equals(template)) {
    boolean useMaterial=false;
{
      useMaterial=genObject.has("String_Node_Str") ? genObject.get("String_Node_Str").getAsBoolean() : useMaterial;
    }
    WorldGenAdvLakes r=new WorldGenAdvLakes(resList,useMaterial ? matList : null);
{
      if (genObject.has("String_Node_Str"))       r.outlineBlock=genObject.get("String_Node_Str").getAsBoolean() ? new WeightedRandomBlock(Blocks.stone,0) : null;
      if (genObject.has("String_Node_Str"))       r.outlineBlock=FeatureParser.parseBlockEntry(genObject.get("String_Node_Str"));
      if (genObject.has("String_Node_Str"))       r.gapBlock=FeatureParser.parseBlockEntry(genObject.get("String_Node_Str"));
      if (genObject.has("String_Node_Str"))       r.lineWithFiller=genObject.get("String_Node_Str").getAsBoolean();
    }
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    ArrayList<WeightedRandomBlock> list=new ArrayList<WeightedRandomBlock>();
    if (!entry.has("String_Node_Str")) {
      log.info("String_Node_Str");
      list.add(new WeightedRandomBlock(Blocks.stone));
    }
 else {
      if (!FeatureParser.parseResList(entry.get("String_Node_Str"),list)) {
        log.warn("String_Node_Str");
        list.clear();
        list.add(new WeightedRandomBlock(Blocks.obsidian));
      }
    }
    WorldGenGeode r=new WorldGenGeode(resList,matList,list);
{
      if (genObject.has("String_Node_Str")) {
        r.hollow=genObject.get("String_Node_Str").getAsBoolean();
      }
      if (genObject.has("String_Node_Str")) {
        list=new ArrayList<WeightedRandomBlock>();
        if (!FeatureParser.parseResList(entry.get("String_Node_Str"),list)) {
          log.warn("String_Node_Str");
        }
 else {
          r.fillBlock=list;
        }
      }
    }
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    ArrayList<WeightedRandomBlock> list=new ArrayList<WeightedRandomBlock>();
    if (!entry.has("String_Node_Str")) {
      log.info("String_Node_Str");
      list.add(new WeightedRandomBlock(Blocks.grass));
    }
 else {
      if (!FeatureParser.parseResList(entry.get("String_Node_Str"),list)) {
        log.warn("String_Node_Str");
        list.clear();
        list.add(new WeightedRandomBlock(Blocks.grass));
      }
    }
    WorldGenDecoration r=new WorldGenDecoration(resList,clusterSize,matList,list);
    if (genObject.has("String_Node_Str"))     r.seeSky=genObject.get("String_Node_Str").getAsBoolean();
    if (genObject.has("String_Node_Str"))     r.checkStay=genObject.get("String_Node_Str").getAsBoolean();
    if (genObject.has("String_Node_Str"))     r.stackHeight=genObject.get("String_Node_Str").getAsInt();
    if (genObject.has("String_Node_Str"))     r.stackHeight=genObject.get("String_Node_Str").getAsInt();
    if (genObject.has("String_Node_Str"))     r.stackHeight=genObject.get("String_Node_Str").getAsInt();
    if (genObject.has("String_Node_Str"))     r.stackHeight=genObject.get("String_Node_Str").getAsInt();
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    WorldGenBoulder r=new WorldGenBoulder(resList,clusterSize,matList);
{
      if (genObject.has("String_Node_Str"))       r.sizeVariance=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.clusters=genObject.get("String_Node_Str").getAsInt();
    }
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    WorldGenSpike r=new WorldGenSpike(resList,matList);
{
      if (genObject.has("String_Node_Str"))       r.largeSpikes=genObject.get("String_Node_Str").getAsBoolean();
    }
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    ArrayList<WeightedRandomNBTTag> mobList=new ArrayList<WeightedRandomNBTTag>();
    if (entry.has("String_Node_Str")) {
      if (!FeatureParser.parseEntityList(entry.get("String_Node_Str"),mobList)) {
        log.warn("String_Node_Str");
        mobList.clear();
        NBTTagCompound tag=new NBTTagCompound();
        tag.setString("String_Node_Str","String_Node_Str");
        mobList.add(new WeightedRandomNBTTag(100,tag));
      }
    }
 else {
      log.warn("String_Node_Str");
      NBTTagCompound tag=new NBTTagCompound();
      tag.setString("String_Node_Str","String_Node_Str");
      mobList.add(new WeightedRandomNBTTag(100,tag));
    }
    WorldGenDungeon r=new WorldGenDungeon(resList,matList,mobList);
    if (entry.has("String_Node_Str")) {
      resList=new ArrayList<WeightedRandomBlock>();
      if (FeatureParser.parseResList(entry.get("String_Node_Str"),resList)) {
        r.floor=resList;
      }
 else {
        log.warn("String_Node_Str");
      }
    }
{
      if (genObject.has("String_Node_Str")) {
        ArrayList<DungeonMob> lootList=new ArrayList<DungeonMob>();
        if (FeatureParser.parseWeightedStringList(genObject.get("String_Node_Str"),lootList)) {
          r.lootTables=lootList;
        }
 else {
          log.warn("String_Node_Str");
        }
      }
      if (genObject.has("String_Node_Str"))       r.maxChests=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.minHoles=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.maxHoles=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.minHeight=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.maxHeight=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.minWidthX=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.maxWidthX=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.minWidthZ=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.maxWidthZ=genObject.get("String_Node_Str").getAsInt();
    }
    return r;
  }
  if (!"String_Node_Str".equals(template)) {
    log.warn("String_Node_Str" + template + "String_Node_Str");
  }
  return new WorldGenMinableCluster(resList,clusterSize,matList);
}

Fixed version (ground truth):
protected WorldGenerator getGenerator(JsonObject genObject,Logger log,List<WeightedRandomBlock> resList,int clusterSize,List<WeightedRandomBlock> matList){
  String template=getDefaultTemplate();
  JsonObject entry=genObject;
  JsonElement genElement=genObject.get("String_Node_Str");
  if (genElement.isJsonObject()) {
    genObject=genElement.getAsJsonObject();
    if (genObject.has("String_Node_Str")) {
      template=genObject.get("String_Node_Str").getAsString();
    }
  }
  if ("String_Node_Str".equals(template)) {
    return new WorldGenSparseMinableCluster(resList,clusterSize,matList);
  }
 else   if ("String_Node_Str".equals(template)) {
    boolean sparse=true;
{
      sparse=genObject.has("String_Node_Str") ? genObject.get("String_Node_Str").getAsBoolean() : sparse;
    }
    return new WorldGenMinableLargeVein(resList,clusterSize,matList,sparse);
  }
 else   if ("String_Node_Str".equals(template)) {
    boolean useMaterial=false;
{
      useMaterial=genObject.has("String_Node_Str") ? genObject.get("String_Node_Str").getAsBoolean() : useMaterial;
    }
    WorldGenAdvLakes r=new WorldGenAdvLakes(resList,useMaterial ? matList : null);
{
      if (genObject.has("String_Node_Str"))       r.outlineBlock=genObject.get("String_Node_Str").getAsBoolean() ? new WeightedRandomBlock(Blocks.stone,0) : null;
      if (genObject.has("String_Node_Str"))       r.outlineBlock=FeatureParser.parseBlockEntry(genObject.get("String_Node_Str"));
      if (genObject.has("String_Node_Str"))       r.gapBlock=FeatureParser.parseBlockEntry(genObject.get("String_Node_Str"));
      if (genObject.has("String_Node_Str"))       r.lineWithFiller=genObject.get("String_Node_Str").getAsBoolean();
    }
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    ArrayList<WeightedRandomBlock> list=new ArrayList<WeightedRandomBlock>();
    if (!entry.has("String_Node_Str")) {
      log.info("String_Node_Str");
      list.add(new WeightedRandomBlock(Blocks.stone));
    }
 else {
      if (!FeatureParser.parseResList(entry.get("String_Node_Str"),list)) {
        log.warn("String_Node_Str");
        list.clear();
        list.add(new WeightedRandomBlock(Blocks.obsidian));
      }
    }
    WorldGenGeode r=new WorldGenGeode(resList,matList,list);
{
      if (genObject.has("String_Node_Str")) {
        r.hollow=genObject.get("String_Node_Str").getAsBoolean();
      }
      if (genObject.has("String_Node_Str")) {
        list=new ArrayList<WeightedRandomBlock>();
        if (!FeatureParser.parseResList(genObject.get("String_Node_Str"),list)) {
          log.warn("String_Node_Str");
        }
 else {
          r.fillBlock=list;
        }
      }
    }
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    ArrayList<WeightedRandomBlock> list=new ArrayList<WeightedRandomBlock>();
    if (!entry.has("String_Node_Str")) {
      log.info("String_Node_Str");
      list.add(new WeightedRandomBlock(Blocks.grass));
    }
 else {
      if (!FeatureParser.parseResList(entry.get("String_Node_Str"),list)) {
        log.warn("String_Node_Str");
        list.clear();
        list.add(new WeightedRandomBlock(Blocks.grass));
      }
    }
    WorldGenDecoration r=new WorldGenDecoration(resList,clusterSize,matList,list);
    if (genObject.has("String_Node_Str"))     r.seeSky=genObject.get("String_Node_Str").getAsBoolean();
    if (genObject.has("String_Node_Str"))     r.checkStay=genObject.get("String_Node_Str").getAsBoolean();
    if (genObject.has("String_Node_Str"))     r.stackHeight=genObject.get("String_Node_Str").getAsInt();
    if (genObject.has("String_Node_Str"))     r.stackHeight=genObject.get("String_Node_Str").getAsInt();
    if (genObject.has("String_Node_Str"))     r.stackHeight=genObject.get("String_Node_Str").getAsInt();
    if (genObject.has("String_Node_Str"))     r.stackHeight=genObject.get("String_Node_Str").getAsInt();
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    WorldGenBoulder r=new WorldGenBoulder(resList,clusterSize,matList);
{
      if (genObject.has("String_Node_Str"))       r.sizeVariance=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.clusters=genObject.get("String_Node_Str").getAsInt();
    }
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    WorldGenSpike r=new WorldGenSpike(resList,matList);
{
      if (genObject.has("String_Node_Str"))       r.largeSpikes=genObject.get("String_Node_Str").getAsBoolean();
    }
    return r;
  }
 else   if ("String_Node_Str".equals(template)) {
    ArrayList<WeightedRandomNBTTag> mobList=new ArrayList<WeightedRandomNBTTag>();
    if (entry.has("String_Node_Str")) {
      if (!FeatureParser.parseEntityList(entry.get("String_Node_Str"),mobList)) {
        log.warn("String_Node_Str");
        mobList.clear();
        NBTTagCompound tag=new NBTTagCompound();
        tag.setString("String_Node_Str","String_Node_Str");
        mobList.add(new WeightedRandomNBTTag(100,tag));
      }
    }
 else {
      log.warn("String_Node_Str");
      NBTTagCompound tag=new NBTTagCompound();
      tag.setString("String_Node_Str","String_Node_Str");
      mobList.add(new WeightedRandomNBTTag(100,tag));
    }
    WorldGenDungeon r=new WorldGenDungeon(resList,matList,mobList);
    if (entry.has("String_Node_Str")) {
      resList=new ArrayList<WeightedRandomBlock>();
      if (FeatureParser.parseResList(entry.get("String_Node_Str"),resList)) {
        r.floor=resList;
      }
 else {
        log.warn("String_Node_Str");
      }
    }
{
      if (genObject.has("String_Node_Str")) {
        ArrayList<DungeonMob> lootList=new ArrayList<DungeonMob>();
        if (FeatureParser.parseWeightedStringList(genObject.get("String_Node_Str"),lootList)) {
          r.lootTables=lootList;
        }
 else {
          log.warn("String_Node_Str");
        }
      }
      if (genObject.has("String_Node_Str"))       r.maxChests=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.minHoles=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.maxHoles=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.minHeight=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.maxHeight=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.minWidthX=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.maxWidthX=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.minWidthZ=genObject.get("String_Node_Str").getAsInt();
      if (genObject.has("String_Node_Str"))       r.maxWidthZ=genObject.get("String_Node_Str").getAsInt();
    }
    return r;
  }
  if (!"String_Node_Str".equals(template)) {
    log.warn("String_Node_Str" + template + "String_Node_Str");
  }
  return new WorldGenMinableCluster(resList,clusterSize,matList);
}