Program: 128171
Project: 128171
Buggy source:
private synchronized void getModuleUrlsFromWebService(final String jarNames,final List<ModuleToInstall> toInstall,final Map<String,List<ModuleNeeded>> contextMap,final IModulesListener listener,boolean isUser){
  Job job=new Job(Messages.getString("String_Node_Str")){
    @Override protected IStatus run(    IProgressMonitor monitor){
      int size=jarNames.split(SEPARATOR_SLIP).length;
      monitor.beginTask(Messages.getString("String_Node_Str"),size * 10);
      JSONObject message=new JSONObject();
      try {
        JSONObject child=new JSONObject();
        child.put("String_Node_Str","String_Node_Str");
        child.put("String_Node_Str",jarNames);
        message.put("String_Node_Str",child);
        String url=serviceUrl + "String_Node_Str" + message;
        monitor.worked(10);
        JSONObject resultStr=readJsonFromUrl(url);
        if (resultStr != null) {
          JSONArray jsonArray=resultStr.getJSONArray("String_Node_Str");
          if (jsonArray != null) {
            for (int i=0; i < jsonArray.length(); i++) {
              JSONObject obj=jsonArray.getJSONObject(i);
              if (obj != null) {
                String url_description=obj.getString("String_Node_Str");
                String url_download=obj.getString("String_Node_Str");
                String name=obj.getString("String_Node_Str");
                if ((url_description == null && url_download == null) || (("String_Node_Str".equals(url_description) || "String_Node_Str".equals(url_description)) && ("String_Node_Str".equals(url_download) || "String_Node_Str".equals(url_download)))) {
                  ExceptionHandler.log("String_Node_Str" + name + "String_Node_Str");
                  cache.put(name,null);
                  continue;
                }
                ModuleToInstall m=new ModuleToInstall();
                m.setName(name);
                if (contextMap != null) {
                  List<ModuleNeeded> nm=contextMap.get(m.getName());
                  m.setContext(getContext(nm));
                  m.setRequired(isRequired(nm));
                }
 else {
                  m.setContext("String_Node_Str");
                  m.setRequired(true);
                }
                String license=obj.getString("String_Node_Str");
                m.setLicenseType(license);
                if ("String_Node_Str".equals(license) || "String_Node_Str".equals(license)) {
                  m.setLicenseType(null);
                }
                String description=obj.getString("String_Node_Str");
                if (description == null || "String_Node_Str".equals(description) || "String_Node_Str".equals(description)) {
                  description=m.getName();
                }
                m.setDescription(description);
                m.setUrl_description(url_description);
                if (url_download == null || "String_Node_Str".equals(url_download) || "String_Node_Str".equals(url_download)) {
                  m.setUrl_download(null);
                }
 else {
                  m.setUrl_download(url_download);
                }
                toInstall.add(m);
                cache.put(m.getName(),m);
              }
              monitor.worked(10);
            }
          }
        }
      }
 catch (      JSONException e) {
        ExceptionHandler.process(e);
      }
catch (      IOException e) {
        ExceptionHandler.process(e);
      }
      monitor.done();
      return Status.OK_STATUS;
    }
  }
;
  job.addJobChangeListener(new JobChangeAdapter(){
    @Override public void done(    IJobChangeEvent event){
      listener.listModulesDone();
    }
  }
);
  job.setUser(isUser);
  job.setPriority(Job.INTERACTIVE);
  job.schedule();
}

Fixed version (ground truth):
private synchronized void getModuleUrlsFromWebService(final String jarNames,final List<ModuleToInstall> toInstall,final Map<String,List<ModuleNeeded>> contextMap,final IModulesListener listener,boolean isUser){
  Job job=new Job(Messages.getString("String_Node_Str")){
    @Override protected IStatus run(    IProgressMonitor monitor){
      int size=jarNames.split(SEPARATOR_SLIP).length;
      monitor.beginTask(Messages.getString("String_Node_Str"),size * 10);
      JSONObject message=new JSONObject();
      try {
        JSONObject child=new JSONObject();
        child.put("String_Node_Str","String_Node_Str");
        child.put("String_Node_Str",jarNames);
        message.put("String_Node_Str",child);
        String url=serviceUrl + "String_Node_Str" + message;
        monitor.worked(10);
        JSONObject resultStr=readJsonFromUrl(url);
        if (resultStr != null) {
          JSONArray jsonArray=resultStr.getJSONArray("String_Node_Str");
          if (jsonArray != null) {
            for (int i=0; i < jsonArray.length(); i++) {
              JSONObject obj=jsonArray.getJSONObject(i);
              if (obj != null) {
                String url_description=obj.getString("String_Node_Str");
                String url_download=obj.getString("String_Node_Str");
                String name=obj.getString("String_Node_Str");
                if ((url_description == null && url_download == null) || (("String_Node_Str".equals(url_description) || "String_Node_Str".equals(url_description)) && ("String_Node_Str".equals(url_download) || "String_Node_Str".equals(url_download)))) {
                  ExceptionHandler.log("String_Node_Str" + name + "String_Node_Str");
                  cache.put(name,null);
                  continue;
                }
                ModuleToInstall m=new ModuleToInstall();
                m.setName(name);
                if (contextMap != null) {
                  List<ModuleNeeded> nm=contextMap.get(m.getName());
                  m.setContext(getContext(nm));
                  m.setRequired(isRequired(nm));
                }
 else {
                  m.setContext("String_Node_Str");
                  m.setRequired(true);
                }
                String license=obj.getString("String_Node_Str");
                m.setLicenseType(license);
                if ("String_Node_Str".equals(license) || "String_Node_Str".equals(license)) {
                  m.setLicenseType(null);
                }
                String description=obj.getString("String_Node_Str");
                if (description == null || "String_Node_Str".equals(description) || "String_Node_Str".equals(description)) {
                  description=m.getName();
                }
                m.setDescription(description);
                m.setUrl_description(url_description);
                if (url_download == null || "String_Node_Str".equals(url_download) || "String_Node_Str".equals(url_download)) {
                  m.setUrl_download(null);
                }
 else {
                  m.setUrl_download(url_download);
                }
                toInstall.add(m);
                cache.put(m.getName(),m);
              }
              monitor.worked(10);
            }
          }
        }
      }
 catch (      JSONException e) {
        ExceptionHandler.process(e);
      }
catch (      IOException e) {
        ExceptionHandler.process(e);
      }
      monitor.done();
      return Status.OK_STATUS;
    }
  }
;
  job.addJobChangeListener(new JobChangeAdapter(){
    @Override public void done(    IJobChangeEvent event){
      listener.listModulesDone();
    }
  }
);
  job.setUser(isUser);
  job.setPriority(Job.INTERACTIVE);
  job.schedule();
  emptyLibs();
}