f77bae0a5025170e62fe055134ecc9a7f52ea196
[idea/community.git] / platform / util / src / com / intellij / util / concurrency / EdtExecutorService.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.util.concurrency;
17
18 import com.intellij.util.ui.EdtInvocationManager;
19 import org.jetbrains.annotations.NotNull;
20
21 import java.util.List;
22 import java.util.concurrent.AbstractExecutorService;
23 import java.util.concurrent.ExecutorService;
24 import java.util.concurrent.ScheduledExecutorService;
25 import java.util.concurrent.TimeUnit;
26
27 /**
28  * {@link java.util.concurrent.ExecutorService} implementation which delegates tasks for execution to the {@link javax.swing.SwingUtilities#invokeLater(Runnable)}
29  */
30 public class EdtExecutorService extends AbstractExecutorService {
31   @NotNull
32   public static ExecutorService getInstance() {
33     return INSTANCE;
34   }
35
36   @NotNull
37   public static ScheduledExecutorService getScheduledExecutorInstance() {
38     return SCHEDULED_INSTANCE;
39   }
40
41   @Override
42   public void execute(@NotNull Runnable command) {
43     EdtInvocationManager.getInstance().invokeLater(command);
44   }
45
46   @Override
47   public void shutdown() {
48     AppScheduledExecutorService.error();
49   }
50
51   @NotNull
52   @Override
53   public List<Runnable> shutdownNow() {
54     return AppScheduledExecutorService.error();
55   }
56
57   @Override
58   public boolean isShutdown() {
59     return false;
60   }
61
62   @Override
63   public boolean isTerminated() {
64     return false;
65   }
66
67   @Override
68   public boolean awaitTermination(long timeout, @NotNull TimeUnit unit) throws InterruptedException {
69     AppScheduledExecutorService.error();
70     return false;
71   }
72
73   private static final ExecutorService INSTANCE = new EdtExecutorService();
74   private static final ScheduledExecutorService SCHEDULED_INSTANCE = new SchedulingWrapper(INSTANCE, ((AppScheduledExecutorService)AppExecutorUtil.getAppScheduledExecutorService()).delayQueue){
75     @NotNull
76     @Override
77     public List<Runnable> shutdownNow() {
78       return AppScheduledExecutorService.error();
79     }
80
81     @Override
82     public void shutdown() {
83       AppScheduledExecutorService.error();
84     }
85
86     @Override
87     public boolean awaitTermination(long timeout, @NotNull TimeUnit unit) {
88       AppScheduledExecutorService.error();
89       return false;
90     }
91   };
92 }