Program: 117917
Project: 117917
Buggy source:
/** 
 * The <code>MultiPageEditorPart</code> implementation of this <code>IWorkbenchPart</code> method disposes all nested editors. Subclasses may extend.
 */
@Override public void dispose(){
  getSite().setSelectionProvider(null);
  getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(this);
  ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
  getSite().getWorkbenchWindow().getPartService().removePartListener(partListener);
  if (this.lockService != null) {
    this.lockService.unregister();
  }
  super.dispose();
  if (getProcess() != null && !getProcess().isReadOnly()) {
    if (isKeepPropertyLocked()) {
      return;
    }
    IRepositoryService service=CorePlugin.getDefault().getRepositoryService();
    IProxyRepositoryFactory repFactory=service.getProxyRepositoryFactory();
    try {
      getProcess().getProperty().eAdapters().remove(dirtyListener);
      Property property=getProcess().getProperty();
      if (property.eResource() == null || property.getItem().eResource() == null) {
        property=repFactory.getUptodateProperty(property);
      }
      JobletUtil jUtil=new JobletUtil();
      jUtil.makeSureUnlockJoblet(getProcess());
      Item item=getProcess().getProperty().getItem();
      boolean keep=jUtil.keepLockJoblet(item);
      if (keep) {
        repFactory.unlock(property.getItem());
      }
    }
 catch (    PersistenceException e) {
      ExceptionHandler.process(e);
    }
catch (    LoginException e) {
      ExceptionHandler.process(e);
    }
  }
  if (processEditorInput != null) {
    processEditorInput.dispose();
    processEditorInput=null;
  }
  designerEditor=null;
  codeEditor=null;
  if (processor instanceof IJavaBreakpointListener) {
    JDIDebugModel.removeJavaBreakpointListener((IJavaBreakpointListener)processor);
  }
  processor=null;
  dirtyListener=null;
  NodeTransferDragSourceListener.getInstance().setEditPart(null);
}

Fixed version (ground truth):
/** 
 * The <code>MultiPageEditorPart</code> implementation of this <code>IWorkbenchPart</code> method disposes all nested editors. Subclasses may extend.
 */
@Override public void dispose(){
  boolean isDirty=isDirty();
  getSite().setSelectionProvider(null);
  getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(this);
  ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
  getSite().getWorkbenchWindow().getPartService().removePartListener(partListener);
  if (this.lockService != null) {
    this.lockService.unregister();
  }
  super.dispose();
  if (getProcess() != null && !getProcess().isReadOnly()) {
    if (isKeepPropertyLocked()) {
      return;
    }
    IRepositoryService service=CorePlugin.getDefault().getRepositoryService();
    IProxyRepositoryFactory repFactory=service.getProxyRepositoryFactory();
    try {
      getProcess().getProperty().eAdapters().remove(dirtyListener);
      Property property=getProcess().getProperty();
      if (property.eResource() == null || property.getItem().eResource() == null) {
        property=repFactory.getUptodateProperty(property);
      }
      JobletUtil jUtil=new JobletUtil();
      jUtil.makeSureUnlockJoblet(getProcess());
      if (isDirty) {
        jUtil.reloadJobletInCurrentProcess(getProcess());
      }
      Item item=getProcess().getProperty().getItem();
      boolean keep=jUtil.keepLockJoblet(item);
      if (keep) {
        repFactory.unlock(property.getItem());
      }
    }
 catch (    PersistenceException e) {
      ExceptionHandler.process(e);
    }
catch (    LoginException e) {
      ExceptionHandler.process(e);
    }
  }
  if (processEditorInput != null) {
    processEditorInput.dispose();
    processEditorInput=null;
  }
  designerEditor=null;
  codeEditor=null;
  if (processor instanceof IJavaBreakpointListener) {
    JDIDebugModel.removeJavaBreakpointListener((IJavaBreakpointListener)processor);
  }
  processor=null;
  dirtyListener=null;
  NodeTransferDragSourceListener.getInstance().setEditPart(null);
}