@Override public void run(@NotNull final ProgressIndicator indicator) { myIndicator = indicator; final ProjectManager projectManager = ProjectManager.getInstance(); projectManager.addProjectManagerListener(myProject, myCloseListener = new CloseListener()); final Semaphore semaphore = ((CompilerManagerImpl) CompilerManager.getInstance(myProject)).getCompilationSemaphore(); boolean acquired = false; try { try { while (!acquired) { acquired = semaphore.tryAcquire(300, TimeUnit.MILLISECONDS); if (!acquired && !myWaitForPreviousSession) { return; } if (indicator.isCanceled()) { // give up obtaining the semaphore, // let compile work begin in order to stop gracefuly on cancel event break; } } } catch (InterruptedException ignored) { } if (!isHeadless()) { addIndicatorDelegate(); } myCompileWork.run(); } finally { try { indicator.stop(); projectManager.removeProjectManagerListener(myProject, myCloseListener); } finally { if (acquired) { semaphore.release(); } } } }
public FileDocumentManagerImpl( @NotNull VirtualFileManager virtualFileManager, @NotNull ProjectManager projectManager) { virtualFileManager.addVirtualFileListener(this); projectManager.addProjectManagerListener(this); myBus = ApplicationManager.getApplication().getMessageBus(); InvocationHandler handler = new InvocationHandler() { @Nullable @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { multiCast(method, args); return null; } }; final ClassLoader loader = FileDocumentManagerListener.class.getClassLoader(); myMultiCaster = (FileDocumentManagerListener) Proxy.newProxyInstance( loader, new Class[] {FileDocumentManagerListener.class}, handler); }
private PeriodicalTasksCloser(final Project project, final ProjectManager projectManager) { myInterrupters = new ArrayList<Pair<String, Runnable>>(); projectManager.addProjectManagerListener(project, this); }
public RecentProjectsManagerBase(ProjectManager projectManager, MessageBus messageBus) { projectManager.addProjectManagerListener(new MyProjectManagerListener()); messageBus.connect().subscribe(AppLifecycleListener.TOPIC, new MyAppLifecycleListener()); }
public void disposeComponent() { myProjectManager.addProjectManagerListener(myProject, myProjectListener); ClassLoaderManager.getInstance().removeReloadHandler(myReloadHandler); }
public void initComponent() { ClassLoaderManager.getInstance().addReloadHandler(myReloadHandler); myProjectManager.addProjectManagerListener(myProject, myProjectListener); }
public BuildManager(final ProjectManager projectManager) { myProjectManager = projectManager; final String systemPath = PathManager.getSystemPath(); File system = new File(systemPath); try { system = system.getCanonicalFile(); } catch (IOException e) { LOG.info(e); } mySystemDirectory = system; projectManager.addProjectManagerListener(new ProjectWatcher()); final MessageBusConnection conn = ApplicationManager.getApplication().getMessageBus().connect(); conn.subscribe( VirtualFileManager.VFS_CHANGES, new BulkFileListener() { private final Alarm myAlarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD); private final AtomicBoolean myAutoMakeInProgress = new AtomicBoolean(false); @Override public void before(@NotNull List<? extends VFileEvent> events) {} @Override public void after(@NotNull List<? extends VFileEvent> events) { if (shouldTriggerMake(events)) { scheduleMake( new Runnable() { @Override public void run() { if (!myAutoMakeInProgress.getAndSet(true)) { try { ApplicationManager.getApplication() .executeOnPooledThread( new Runnable() { @Override public void run() { try { runAutoMake(); } finally { myAutoMakeInProgress.set(false); } } }); } catch (RejectedExecutionException ignored) { // we were shut down } } else { scheduleMake(this); } } }); } } private void scheduleMake(Runnable runnable) { myAlarm.cancelAllRequests(); myAlarm.addRequest(runnable, MAKE_TRIGGER_DELAY); } private boolean shouldTriggerMake(List<? extends VFileEvent> events) { if (!CompilerWorkspaceConfiguration.useServerlessOutOfProcessBuild()) { return false; } for (VFileEvent event : events) { if (event.isFromRefresh() || event.getRequestor() instanceof SavingRequestor) { return true; } } return false; } }); ShutDownTracker.getInstance() .registerShutdownTask( new Runnable() { @Override public void run() { stopListening(); } }); }