Program: 147139
Project: 147139
Buggy source:
@Override public void implementMeshFileGeometry(DecorativeMeshFile arg0){
  String meshFile=arg0.getMeshFile();
  String fullFileName=GeometryFileLocator.getInstance().getFullname("String_Node_Str",meshFile,false);
  System.out.print("String_Node_Str" + fullFileName);
  if (fullFileName == null)   return;
  System.out.println("String_Node_Str");
  String filenameLower=fullFileName.toLowerCase();
  if (filenameLower.endsWith("String_Node_Str") || filenameLower.endsWith("String_Node_Str") || filenameLower.endsWith("String_Node_Str")) {
    Map<String,Object> dg_json=new LinkedHashMap<String,Object>();
    dg_json.put("String_Node_Str",geomID.toString());
    dg_json.put("String_Node_Str","String_Node_Str");
    Map<String,Object> attributes_json=new LinkedHashMap<String,Object>();
    Map<String,Object> pos_json=new LinkedHashMap<String,Object>();
    pos_json.put("String_Node_Str",3);
    pos_json.put("String_Node_Str","String_Node_Str");
    Map<String,Object> normals_json=new LinkedHashMap<String,Object>();
    normals_json.put("String_Node_Str",3);
    normals_json.put("String_Node_Str","String_Node_Str");
    PolygonalMesh mesh=new PolygonalMesh();
    mesh.loadFile(fullFileName);
    int nv=mesh.getNumVertices();
    int nf=mesh.getNumFaces();
    Vec3[] normals=new Vec3[nv];
    for (int f=0; f < nf; f++) {
      Vec3[] verts=new Vec3[3];
      for (int i=0; i < 3; i++) {
        verts[i]=mesh.getVertexPosition(mesh.getFaceVertex(f,i));
      }
      Vec3 side1=new Vec3();
      Vec3 side2=new Vec3();
      for (int i=0; i < 3; i++) {
        side1.set(i,verts[1].get(i) - verts[0].get(i));
        side2.set(i,verts[2].get(i) - verts[0].get(i));
      }
      Vec3 cross=new Vec3(side1.get(1) * side2.get(2) - side1.get(2) * side2.get(1),side1.get(2) * side2.get(0) - side1.get(0) * side2.get(2),side1.get(0) * side2.get(1) - side1.get(1) * side2.get(0));
      double norm=Math.sqrt(cross.get(0) * cross.get(0) + cross.get(1) * cross.get(1) + cross.get(2) * cross.get(2));
      for (int i=0; i < 3; i++)       cross.set(i,cross.get(i) / norm);
      int nvf=mesh.getNumVerticesForFace(f);
      for (int i=0; i < nvf; i++) {
        int vindex=mesh.getFaceVertex(f,i);
        normals[vindex]=cross;
      }
    }
    JSONArray pos_array=new JSONArray();
    JSONArray normals_array=new JSONArray();
    Map<String,Object> data_json=new LinkedHashMap<String,Object>();
    for (int v=0; v < nv; v++) {
      Vec3 vec3=mesh.getVertexPosition(v);
      for (int coord=0; coord < 3; coord++) {
        pos_array.add(vec3.get(coord) * visualizerScaleFactor);
      }
      if (normals[v] != null) {
        normals_array.add(normals[v].get(0));
        normals_array.add(normals[v].get(1));
        normals_array.add(normals[v].get(2));
      }
 else {
        normals_array.add(0.0);
        normals_array.add(0.0);
        normals_array.add(0.0);
      }
    }
    pos_json.put("String_Node_Str",pos_array);
    normals_json.put("String_Node_Str",normals_array);
    attributes_json.put("String_Node_Str",pos_json);
    attributes_json.put("String_Node_Str",normals_json);
    Map<String,Object> index_json=new LinkedHashMap<String,Object>();
    JSONArray index_array=new JSONArray();
    for (int f=0; f < nf; f++) {
      int numVerts=mesh.getNumVerticesForFace(f);
      for (int vi=0; vi < numVerts - 2; vi++) {
        index_array.add(mesh.getFaceVertex(f,0));
        index_array.add(mesh.getFaceVertex(f,vi + 1));
        index_array.add(mesh.getFaceVertex(f,vi + 2));
      }
    }
    index_json.put("String_Node_Str",index_array);
    index_json.put("String_Node_Str",3);
    index_json.put("String_Node_Str","String_Node_Str");
    attributes_json.put("String_Node_Str",index_json);
    data_json.put("String_Node_Str",attributes_json);
    dg_json.put("String_Node_Str",data_json);
    jsonArr.add(dg_json);
    createMaterialJson(arg0,true);
  }
}

Fixed version (ground truth):
@Override public void implementMeshFileGeometry(DecorativeMeshFile arg0){
  String meshFile=arg0.getMeshFile();
  String fullFileName=GeometryFileLocator.getInstance().getFullname("String_Node_Str",meshFile,false);
  if (fullFileName == null)   return;
  String filenameLower=fullFileName.toLowerCase();
  if (filenameLower.endsWith("String_Node_Str") || filenameLower.endsWith("String_Node_Str") || filenameLower.endsWith("String_Node_Str")) {
    Map<String,Object> dg_json=new LinkedHashMap<String,Object>();
    dg_json.put("String_Node_Str",geomID.toString());
    dg_json.put("String_Node_Str","String_Node_Str");
    Map<String,Object> attributes_json=new LinkedHashMap<String,Object>();
    Map<String,Object> pos_json=new LinkedHashMap<String,Object>();
    pos_json.put("String_Node_Str",3);
    pos_json.put("String_Node_Str","String_Node_Str");
    Map<String,Object> normals_json=new LinkedHashMap<String,Object>();
    normals_json.put("String_Node_Str",3);
    normals_json.put("String_Node_Str","String_Node_Str");
    PolygonalMesh mesh=new PolygonalMesh();
    mesh.loadFile(fullFileName);
    int nv=mesh.getNumVertices();
    int nf=mesh.getNumFaces();
    Vec3[] normals=new Vec3[nv];
    for (int f=0; f < nf; f++) {
      Vec3[] verts=new Vec3[3];
      for (int i=0; i < 3; i++) {
        verts[i]=mesh.getVertexPosition(mesh.getFaceVertex(f,i));
      }
      Vec3 side1=new Vec3();
      Vec3 side2=new Vec3();
      for (int i=0; i < 3; i++) {
        side1.set(i,verts[1].get(i) - verts[0].get(i));
        side2.set(i,verts[2].get(i) - verts[0].get(i));
      }
      Vec3 cross=new Vec3(side1.get(1) * side2.get(2) - side1.get(2) * side2.get(1),side1.get(2) * side2.get(0) - side1.get(0) * side2.get(2),side1.get(0) * side2.get(1) - side1.get(1) * side2.get(0));
      double norm=Math.sqrt(cross.get(0) * cross.get(0) + cross.get(1) * cross.get(1) + cross.get(2) * cross.get(2));
      for (int i=0; i < 3; i++)       cross.set(i,cross.get(i) / norm);
      int nvf=mesh.getNumVerticesForFace(f);
      for (int i=0; i < nvf; i++) {
        int vindex=mesh.getFaceVertex(f,i);
        normals[vindex]=cross;
      }
    }
    JSONArray pos_array=new JSONArray();
    JSONArray normals_array=new JSONArray();
    Map<String,Object> data_json=new LinkedHashMap<String,Object>();
    for (int v=0; v < nv; v++) {
      Vec3 vec3=mesh.getVertexPosition(v);
      for (int coord=0; coord < 3; coord++) {
        pos_array.add(vec3.get(coord) * visualizerScaleFactor);
      }
      if (normals[v] != null) {
        normals_array.add(normals[v].get(0));
        normals_array.add(normals[v].get(1));
        normals_array.add(normals[v].get(2));
      }
 else {
        normals_array.add(0.0);
        normals_array.add(0.0);
        normals_array.add(0.0);
      }
    }
    pos_json.put("String_Node_Str",pos_array);
    normals_json.put("String_Node_Str",normals_array);
    attributes_json.put("String_Node_Str",pos_json);
    attributes_json.put("String_Node_Str",normals_json);
    Map<String,Object> index_json=new LinkedHashMap<String,Object>();
    JSONArray index_array=new JSONArray();
    for (int f=0; f < nf; f++) {
      int numVerts=mesh.getNumVerticesForFace(f);
      for (int vi=0; vi < numVerts - 2; vi++) {
        index_array.add(mesh.getFaceVertex(f,0));
        index_array.add(mesh.getFaceVertex(f,vi + 1));
        index_array.add(mesh.getFaceVertex(f,vi + 2));
      }
    }
    index_json.put("String_Node_Str",index_array);
    index_json.put("String_Node_Str",3);
    index_json.put("String_Node_Str","String_Node_Str");
    attributes_json.put("String_Node_Str",index_json);
    data_json.put("String_Node_Str",attributes_json);
    dg_json.put("String_Node_Str",data_json);
    jsonArr.add(dg_json);
    createMaterialJson(arg0,true);
  }
}