public void validate(IRegion dirtyRegion, IValidationContext helper, IReporter reporter) {

    // install editors
    if (fEditor == null) {
      install(helper);
      if (fEditor == null) {
        return;
      }
    }

    if (!(fEditor instanceof PHPStructuredEditor)) {
      return;
    }

    final IModelElement modelElement = ((PHPStructuredEditor) fEditor).getModelElement();
    if (modelElement instanceof ISourceModule) {

      final Program ast[] = new Program[1];
      try {
        SafeRunner.run(
            new ISafeRunnable() {
              public void run() throws ModelException {
                ast[0] = reconcile((ISourceModule) modelElement, true);
              }

              public void handleException(Throwable ex) {
                IStatus status =
                    new Status(
                        IStatus.ERROR,
                        PHPUiPlugin.ID,
                        IStatus.OK,
                        "Error in php Core during reconcile",
                        ex); //$NON-NLS-1$
                PHPCorePlugin.getDefault().getLog().log(status);
              }
            });
      } finally {
        // Always notify listeners, see
        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=55969 for the
        // final solution
        try {
          if (fIsScriptReconcilingListener) {
            IProgressMonitor pm = fProgressMonitor;
            if (pm == null) pm = new NullProgressMonitor();
            fJavaReconcilingListener.reconciled(ast[0], !fNotify, pm);
          }
        } finally {
          fNotify = true;
        }
      }
    }
  }
 public void run(IRefreshSubscriberListener listener) {
   this.listener = listener;
   SafeRunner.run(this);
 }
 /* (non-Javadoc)
  * @see org.eclipse.debug.core.sourcelookup.AbstractSourceLookupDirector#getSourceElement(java.lang.Object)
  */
 public Object getSourceElement(Object element) {
   PDESourceLookupQuery query = new PDESourceLookupQuery(this, element);
   SafeRunner.run(query);
   Object result = query.getResult();
   return result != null ? result : super.getSourceElement(element);
 }