1 package com
.intellij
.lifecycle
;
3 import com
.intellij
.openapi
.application
.Application
;
4 import com
.intellij
.openapi
.application
.ApplicationManager
;
5 import com
.intellij
.openapi
.diagnostic
.Logger
;
6 import com
.intellij
.openapi
.project
.Project
;
7 import org
.jetbrains
.annotations
.NotNull
;
9 import java
.util
.concurrent
.ExecutorService
;
10 import java
.util
.concurrent
.Future
;
11 import java
.util
.concurrent
.ScheduledExecutorService
;
12 import java
.util
.concurrent
.TimeUnit
;
14 public class ControlledAlarmFactory
{
15 private static final Logger LOG
= Logger
.getInstance("#com.intellij.lifecycle.ControlledAlarmFactory");
16 private ControlledAlarmFactory() {
19 public static SlowlyClosingAlarm
createOnOwnThread(@NotNull final Project project
, @NotNull final String name
) {
20 return new SlowlyClosingAlarm(project
, name
);
23 public static SlowlyClosingAlarm
createOnSharedThread(@NotNull final Project project
, @NotNull final String name
,
24 final @NotNull ExecutorService executor
) {
25 return new SlowlyClosingAlarm(project
, name
, createExecutorWrapper(executor
), true);
28 public static ScheduledSlowlyClosingAlarm
createScheduledOnSharedThread(@NotNull final Project project
, @NotNull final String name
,
29 final @NotNull ScheduledExecutorService executor
) {
30 return new ScheduledSlowlyClosingAlarm(project
, name
, new MyScheduledExecutorServiceWrapper(executor
), true);
33 public static SlowlyClosingAlarm
createOnApplicationPooledThread(@NotNull final Project project
) {
34 return new SlowlyClosingAlarm(project
, "Application pooled thread controlled alarm", new MyApplicationPooledThreadExecutorWrapper(), true);
37 static MyExecutorWrapper
createExecutorWrapper(final ExecutorService executorService
) {
38 return new MyExecutorServiceWrapper(executorService
);
41 interface MyExecutorWrapper
{
42 Future
<?
> submit(final Runnable runnable
);
44 Future
<?
> schedule(final Runnable runnable
, final long delay
, final TimeUnit timeUnit
);
45 boolean supportsScheduling();
48 private static class MyExecutorServiceWrapper
implements MyExecutorWrapper
{
49 private final ExecutorService myExecutorService
;
51 public MyExecutorServiceWrapper(final ExecutorService executorService
) {
52 myExecutorService
= executorService
;
55 public Future
<?
> submit(Runnable runnable
) {
56 return myExecutorService
.submit(runnable
);
59 public void shutdown() {
60 myExecutorService
.shutdown();
63 public Future
<?
> schedule(Runnable runnable
, long delay
, TimeUnit timeUnit
) {
64 throw new UnsupportedOperationException();
67 public boolean supportsScheduling() {
72 private static class MyScheduledExecutorServiceWrapper
implements MyExecutorWrapper
{
73 private final ScheduledExecutorService myScheduledExecutorService
;
75 public MyScheduledExecutorServiceWrapper(final ScheduledExecutorService scheduledExecutorService
) {
76 myScheduledExecutorService
= scheduledExecutorService
;
79 public Future
<?
> submit(Runnable runnable
) {
80 return myScheduledExecutorService
.submit(runnable
);
83 public void shutdown() {
84 myScheduledExecutorService
.shutdown();
87 public Future
<?
> schedule(Runnable runnable
, long delay
, TimeUnit timeUnit
) {
88 return myScheduledExecutorService
.schedule(runnable
, delay
, timeUnit
);
91 public boolean supportsScheduling() {
96 private static class MyApplicationPooledThreadExecutorWrapper
implements MyExecutorWrapper
{
97 private Application myApplication
;
99 private MyApplicationPooledThreadExecutorWrapper() {
100 myApplication
= ApplicationManager
.getApplication();
103 public Future
<?
> submit(Runnable runnable
) {
104 return myApplication
.executeOnPooledThread(runnable
);
107 public void shutdown() {
111 public Future
<?
> schedule(final Runnable runnable
, long delay
, TimeUnit timeUnit
) {
112 throw new UnsupportedOperationException();
115 public boolean supportsScheduling() {