Program: 127298
Project: 127298
Buggy source:
/** 
 * look for all the required modules for a given bundle, and let the user decide to download it. this method is blocked until the dialog box is closed.
 * @param jarMissingEvent, must never be null
 */
protected void showMissingModuleDialog(final JarMissingEvent jarMissingEvent){
  if (allModulesNeededExtensionsForPlugin == null) {
    this.allModulesNeededExtensionsForPlugin=ModulesNeededProvider.getAllModulesNeededExtensionsForPlugin();
  }
  List<ModuleNeeded> requiredModulesForBundle=ModulesNeededProvider.filterRequiredModulesForBundle(jarMissingEvent.getBundleSymbolicName(),allModulesNeededExtensionsForPlugin);
  final List<String> requiredJars=new ArrayList<String>(requiredModulesForBundle.size());
  for (  ModuleNeeded module : requiredModulesForBundle) {
    String moduleName=module.getModuleName();
    if (!new File(jarMissingEvent.getExpectedLibFolder(),moduleName).exists()) {
      requiredJars.add(moduleName);
    }
  }
  if (!requiredJars.isEmpty()) {
    Display.getDefault().syncExec(new Runnable(){
      @Override public void run(){
        ExternalModulesInstallDialogWithProgress dialog=new ExternalModulesInstallDialogWithProgress(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),Messages.getString("String_Node_Str"),Messages.getString("String_Node_Str"),SWT.APPLICATION_MODAL);
        dialog.showDialog(true,requiredJars.toArray(new String[requiredJars.size()]));
      }
    }
);
  }
}

Fixed version (ground truth):
/** 
 * look for all the required modules for a given bundle, and let the user decide to download it. this method is blocked until the dialog box is closed.
 * @param jarMissingEvent, must never be null
 */
protected void showMissingModuleDialog(final JarMissingEvent jarMissingEvent){
  if (allModulesNeededExtensionsForPlugin == null) {
    this.allModulesNeededExtensionsForPlugin=ModulesNeededProvider.getAllModulesNeededExtensionsForPlugin();
  }
  List<ModuleNeeded> requiredModulesForBundle=ModulesNeededProvider.filterRequiredModulesForBundle(jarMissingEvent.getBundleSymbolicName(),allModulesNeededExtensionsForPlugin);
  final List<String> requiredJars=new ArrayList<String>(requiredModulesForBundle.size());
  for (  ModuleNeeded module : requiredModulesForBundle) {
    String moduleName=module.getModuleName();
    if (!new File(jarMissingEvent.getExpectedLibFolder(),moduleName).exists()) {
      try {
        if (librariesService != null && (librariesService.getLibraryStatus(moduleName) == ELibraryInstallStatus.INSTALLED)) {
          List<ModuleNeeded> allModuleNeeded=ModulesNeededProvider.getModulesNeededForName(moduleName);
          for (          ModuleNeeded sameModule : allModuleNeeded) {
            String moduleLocation=sameModule.getModuleLocaion();
            if (sameModule.getStatus() == ELibraryInstallStatus.INSTALLED && moduleLocation != null && !moduleLocation.isEmpty()) {
              URI uri=new URI(moduleLocation);
              URL url=FileLocator.toFileURL(uri.toURL());
              if ("String_Node_Str".equals(url.getProtocol())) {
                libraryManagerService.deploy(url.toURI(),null);
              }
              break;
            }
          }
        }
      }
 catch (      BusinessException e) {
        log.warn("String_Node_Str" + moduleName,e);
      }
catch (      URISyntaxException e) {
        log.warn("String_Node_Str" + moduleName,e);
      }
catch (      IOException e) {
        log.warn("String_Node_Str" + moduleName,e);
      }
    }
    if (!new File(jarMissingEvent.getExpectedLibFolder(),moduleName).exists()) {
      requiredJars.add(moduleName);
    }
  }
  if (!requiredJars.isEmpty()) {
    Display.getDefault().syncExec(new Runnable(){
      @Override public void run(){
        ExternalModulesInstallDialogWithProgress dialog=new ExternalModulesInstallDialogWithProgress(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),Messages.getString("String_Node_Str"),Messages.getString("String_Node_Str"),SWT.APPLICATION_MODAL);
        dialog.showDialog(true,requiredJars.toArray(new String[requiredJars.size()]));
      }
    }
);
  }
}