class AbortableScriptRunnerWrapper {
  private Object runnerLock = new Object();
  private IRunner runner;

  public IRunner getRunner() {
    synchronized(runnerLock) {
      return runner;
    }
  }

  public void setRunner(IRunner runner) {
    synchronized(runnerLock) {
      this.runner = runner;
    }
  }

  public void clearRunner() {
    synchronized(runnerLock) {
      this.runner = null;
    }
  }

  public boolean isAbortSupported() {<FILL_FUNCTION_BODY>}

  public void doAbort() {
    synchronized(runnerLock) {
      if (isAbortSupported()) {
        runner.abort();
      }
    }
  }
}

    synchronized(runnerLock) {
      return null != runner && runner.isAbortSupported();
    }
  
<no_super_class>