@Override
  public GroovycContinuation runGroovyc(Collection<String> compilationClassPath,
                                        boolean forStubs,
                                        CompileContext context,
                                        File tempFile,
                                        GroovycOutputParser parser, String byteCodeTargetLevel) throws Exception {
    boolean jointPossible = forStubs && !myHasStubExcludes;
    LinkedBlockingQueue<Object> mailbox = jointPossible && SystemProperties.getBooleanProperty("groovyc.joint.compilation", true)
                                          ? new LinkedBlockingQueue<>() : null;

    final JointCompilationClassLoader loader = createCompilationClassLoader(compilationClassPath);
    if (loader == null) {
      parser.addCompilerMessage(parser.reportNoGroovy(null));
      return null;
    }

    final ExecutorService executorService = mySharedPool ? SharedThreadPool.getInstance() : ourExecutor;
    final Future<Void> future = executorService.submit(() -> {
      try {
        runGroovycInThisProcess(loader, forStubs, context, tempFile, parser, byteCodeTargetLevel, mailbox, mySharedPool);
      }
      finally {
        if (mailbox != null) {
          mailbox.offer(GROOVYC_FINISHED);
        }
      }
      return null;
    });
    if (mailbox == null) {
      future.get();
      return null;
    }

    return waitForStubGeneration(future, mailbox, parser, loader);
  }
@Override
  public GroovycContinuation runGroovyc(Collection<String> compilationClassPath,
                                        boolean forStubs,
                                        CompileContext context,
                                        File tempFile,
                                        GroovycOutputParser parser, String byteCodeTargetLevel)