mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cleanup
This commit is contained in:
@@ -33,6 +33,7 @@ import com.intellij.usages.impl.UsageViewImpl;
|
||||
import com.intellij.usages.rules.UsageInFile;
|
||||
import com.intellij.util.ui.EmptyIcon;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
@@ -44,7 +45,7 @@ import java.awt.*;
|
||||
class ShowUsagesTableCellRenderer implements TableCellRenderer {
|
||||
private final UsageViewImpl myUsageView;
|
||||
|
||||
ShowUsagesTableCellRenderer(UsageViewImpl usageView) {
|
||||
ShowUsagesTableCellRenderer(@NotNull UsageViewImpl usageView) {
|
||||
myUsageView = usageView;
|
||||
}
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ public class Alarm implements Disposable {
|
||||
|
||||
private JComponent myActivationComponent;
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
myDisposed = true;
|
||||
cancelAllRequests();
|
||||
@@ -85,6 +86,7 @@ public class Alarm implements Disposable {
|
||||
this(threadToUse, null);
|
||||
LOG.assertTrue(threadToUse != ThreadToUse.OWN_THREAD, "You must provide parent Disposable for ThreadToUse.OWN_THREAD Alarm");
|
||||
}
|
||||
|
||||
public Alarm(@NotNull ThreadToUse threadToUse, Disposable parentDisposable) {
|
||||
myThreadToUse = threadToUse;
|
||||
myExecutorService = threadToUse == ThreadToUse.OWN_THREAD ? new MyExecutor() : ourSharedExecutorService;
|
||||
@@ -94,7 +96,7 @@ public class Alarm implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
public void addRequest(final Runnable request, final int delay, boolean runWithActiveFrameOnly) {
|
||||
public void addRequest(@NotNull final Runnable request, final int delay, boolean runWithActiveFrameOnly) {
|
||||
if (runWithActiveFrameOnly && !ApplicationManager.getApplication().isActive()) {
|
||||
final MessageBus bus = ApplicationManager.getApplication().getMessageBus();
|
||||
final MessageBusConnection connection = bus.connect(this);
|
||||
@@ -114,35 +116,35 @@ public class Alarm implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
public void addRequest(final Runnable request, long delayMillis) {
|
||||
public void addRequest(@NotNull Runnable request, long delayMillis) {
|
||||
_addRequest(request, delayMillis, myThreadToUse == ThreadToUse.SWING_THREAD ? ModalityState.current() : null);
|
||||
}
|
||||
|
||||
public void addRequest(final Runnable request, int delayMillis) {
|
||||
public void addRequest(@NotNull Runnable request, int delayMillis) {
|
||||
_addRequest(request, delayMillis, myThreadToUse == ThreadToUse.SWING_THREAD ? ModalityState.current() : null);
|
||||
}
|
||||
|
||||
public void addComponentRequest(Runnable request, int delay) {
|
||||
public void addComponentRequest(@NotNull Runnable request, int delay) {
|
||||
assert myActivationComponent != null;
|
||||
_addRequest(request, delay, ModalityState.stateForComponent(myActivationComponent));
|
||||
}
|
||||
|
||||
public void addComponentRequest(Runnable request, long delayMillis) {
|
||||
public void addComponentRequest(@NotNull Runnable request, long delayMillis) {
|
||||
assert myActivationComponent != null;
|
||||
_addRequest(request, delayMillis, ModalityState.stateForComponent(myActivationComponent));
|
||||
}
|
||||
|
||||
public void addRequest(final Runnable request, int delayMillis, @Nullable final ModalityState modalityState) {
|
||||
public void addRequest(@NotNull Runnable request, int delayMillis, @Nullable final ModalityState modalityState) {
|
||||
LOG.assertTrue(myThreadToUse == ThreadToUse.SWING_THREAD);
|
||||
_addRequest(request, delayMillis, modalityState);
|
||||
}
|
||||
|
||||
public void addRequest(final Runnable request, long delayMillis, @Nullable final ModalityState modalityState) {
|
||||
public void addRequest(@NotNull Runnable request, long delayMillis, @Nullable final ModalityState modalityState) {
|
||||
LOG.assertTrue(myThreadToUse == ThreadToUse.SWING_THREAD);
|
||||
_addRequest(request, delayMillis, modalityState);
|
||||
}
|
||||
|
||||
private void _addRequest(final Runnable request, long delayMillis, ModalityState modalityState) {
|
||||
private void _addRequest(@NotNull Runnable request, long delayMillis, ModalityState modalityState) {
|
||||
synchronized (LOCK) {
|
||||
LOG.assertTrue(!myDisposed, "Already disposed");
|
||||
final Request requestToSchedule = new Request(request, modalityState, delayMillis);
|
||||
@@ -158,7 +160,7 @@ public class Alarm implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
private void _add(final Request requestToSchedule) {
|
||||
private void _add(@NotNull Request requestToSchedule) {
|
||||
final ScheduledFuture<?> future = JobScheduler.getScheduler().schedule(requestToSchedule, requestToSchedule.myDelay, TimeUnit.MILLISECONDS);
|
||||
requestToSchedule.setFuture(future);
|
||||
myRequests.add(requestToSchedule);
|
||||
@@ -172,7 +174,7 @@ public class Alarm implements Disposable {
|
||||
myPendingRequests.clear();
|
||||
}
|
||||
|
||||
public boolean cancelRequest(Runnable request) {
|
||||
public boolean cancelRequest(@NotNull Runnable request) {
|
||||
synchronized (LOCK) {
|
||||
cancelRequest(request, myRequests);
|
||||
cancelRequest(request, myPendingRequests);
|
||||
@@ -180,7 +182,7 @@ public class Alarm implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
private void cancelRequest(final Runnable request, final List<Request> list) {
|
||||
private void cancelRequest(@NotNull Runnable request, @NotNull List<Request> list) {
|
||||
for (int i = list.size()-1; i>=0; i--) {
|
||||
Request r = list.get(i);
|
||||
if (r.getTask() == request) {
|
||||
@@ -198,7 +200,7 @@ public class Alarm implements Disposable {
|
||||
}
|
||||
}
|
||||
|
||||
private int cancelAllRequests(final List<Request> list) {
|
||||
private int cancelAllRequests(@NotNull List<Request> list) {
|
||||
int count = 0;
|
||||
for (Request request : list) {
|
||||
count++;
|
||||
@@ -229,60 +231,63 @@ public class Alarm implements Disposable {
|
||||
private Future<?> myFuture;
|
||||
private final long myDelay;
|
||||
|
||||
private Request(final Runnable task, final ModalityState modalityState, long delayMillis) {
|
||||
private Request(@NotNull Runnable task, @Nullable ModalityState modalityState, long delayMillis) {
|
||||
myTask = task;
|
||||
myModalityState = modalityState;
|
||||
myDelay = delayMillis;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
if (!myDisposed) {
|
||||
synchronized (LOCK) {
|
||||
if (myTask == null) return;
|
||||
}
|
||||
if (myDisposed) {
|
||||
return;
|
||||
}
|
||||
synchronized (LOCK) {
|
||||
if (myTask == null) return;
|
||||
}
|
||||
|
||||
final Runnable scheduledTask = new Runnable() {
|
||||
public void run() {
|
||||
final Runnable task;
|
||||
synchronized (LOCK) {
|
||||
task = myTask;
|
||||
if (task == null) return;
|
||||
myTask = null;
|
||||
final Runnable scheduledTask = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final Runnable task;
|
||||
synchronized (LOCK) {
|
||||
task = myTask;
|
||||
if (task == null) return;
|
||||
myTask = null;
|
||||
|
||||
myRequests.remove(Request.this);
|
||||
}
|
||||
|
||||
if (myThreadToUse == ThreadToUse.SWING_THREAD && !isEdt()) {
|
||||
try {
|
||||
SwingUtilities.invokeAndWait(task);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
else {
|
||||
try {
|
||||
task.run();
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
myRequests.remove(Request.this);
|
||||
}
|
||||
};
|
||||
|
||||
if (myModalityState != null) {
|
||||
final Application app = ApplicationManager.getApplication();
|
||||
if (app != null) {
|
||||
app.invokeLater(scheduledTask, myModalityState);
|
||||
if (myThreadToUse == ThreadToUse.SWING_THREAD && !isEdt()) {
|
||||
try {
|
||||
SwingUtilities.invokeAndWait(task);
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
else {
|
||||
SwingUtilities.invokeLater(scheduledTask);
|
||||
try {
|
||||
task.run();
|
||||
}
|
||||
catch (Exception e) {
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (myModalityState == null) {
|
||||
myFuture = myExecutorService.submit(scheduledTask);
|
||||
}
|
||||
else {
|
||||
final Application app = ApplicationManager.getApplication();
|
||||
if (app != null) {
|
||||
app.invokeLater(scheduledTask, myModalityState);
|
||||
}
|
||||
else {
|
||||
myFuture = myExecutorService.submit(scheduledTask);
|
||||
SwingUtilities.invokeLater(scheduledTask);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -295,7 +300,7 @@ public class Alarm implements Disposable {
|
||||
return myTask;
|
||||
}
|
||||
|
||||
public void setFuture(final ScheduledFuture<?> future) {
|
||||
public void setFuture(@NotNull ScheduledFuture<?> future) {
|
||||
myFuture = future;
|
||||
}
|
||||
|
||||
@@ -316,10 +321,12 @@ public class Alarm implements Disposable {
|
||||
public Alarm setActivationComponent(@NotNull final JComponent component) {
|
||||
myActivationComponent = component;
|
||||
new UiNotifyConnector(component, new Activatable() {
|
||||
@Override
|
||||
public void showNotify() {
|
||||
flushPending();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hideNotify() {
|
||||
}
|
||||
});
|
||||
@@ -334,12 +341,7 @@ public class Alarm implements Disposable {
|
||||
|
||||
private class MyExecutor extends AbstractExecutorService {
|
||||
private final AtomicBoolean isShuttingDown = new AtomicBoolean();
|
||||
private final QueueProcessor<Runnable> myProcessor = new QueueProcessor<Runnable>(new Consumer<Runnable>() {
|
||||
@Override
|
||||
public void consume(Runnable runnable) {
|
||||
runnable.run();
|
||||
}
|
||||
});
|
||||
private final QueueProcessor<Runnable> myProcessor = QueueProcessor.createRunnableQueueProcessor();
|
||||
|
||||
@Override
|
||||
public void shutdown() {
|
||||
@@ -363,12 +365,12 @@ public class Alarm implements Disposable {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
|
||||
public boolean awaitTermination(long timeout, @NotNull TimeUnit unit) throws InterruptedException {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(Runnable command) {
|
||||
public void execute(@NotNull Runnable command) {
|
||||
myProcessor.add(command);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,13 +38,12 @@ import java.util.Map;
|
||||
* @param <T> type of queue elements.
|
||||
*/
|
||||
public class QueueProcessor<T> {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.util.concurrency.QueueProcessor");
|
||||
public static enum ThreadToUse {
|
||||
AWT,
|
||||
POOLED
|
||||
}
|
||||
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.util.concurrency.QueueProcessor");
|
||||
|
||||
private final PairConsumer<T, Runnable> myProcessor;
|
||||
private final LinkedList<T> myQueue = new LinkedList<T>();
|
||||
private final Runnable myContinuationContext = new Runnable() {
|
||||
@@ -87,6 +86,16 @@ public class QueueProcessor<T> {
|
||||
this(wrappingProcessor(processor), autostart, ThreadToUse.POOLED, deathCondition);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static QueueProcessor<Runnable> createRunnableQueueProcessor() {
|
||||
return new QueueProcessor<Runnable>(new Consumer<Runnable>() {
|
||||
@Override
|
||||
public void consume(Runnable runnable) {
|
||||
runnable.run();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static <T> PairConsumer<T, Runnable> wrappingProcessor(@NotNull final Consumer<T> processor) {
|
||||
return new PairConsumer<T, Runnable>() {
|
||||
@@ -146,15 +155,15 @@ public class QueueProcessor<T> {
|
||||
doAdd(t, false);
|
||||
}
|
||||
|
||||
public void add(T element) {
|
||||
public void add(@NotNull T element) {
|
||||
doAdd(element, false);
|
||||
}
|
||||
|
||||
public void addFirst(T element) {
|
||||
public void addFirst(@NotNull T element) {
|
||||
doAdd(element, true);
|
||||
}
|
||||
|
||||
private void doAdd(T element, boolean atHead) {
|
||||
private void doAdd(@NotNull T element, boolean atHead) {
|
||||
synchronized (myQueue) {
|
||||
if (atHead) {
|
||||
myQueue.addFirst(element);
|
||||
|
||||
@@ -93,7 +93,7 @@ public class ConcurrencyUtil {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static ThreadPoolExecutor newSingleThreadExecutor(@NotNull final String threadFactoryName, final int threadPriority) {
|
||||
public static ThreadPoolExecutor newSingleThreadExecutor(@NonNls @NotNull final String threadFactoryName, final int threadPriority) {
|
||||
return new ThreadPoolExecutor(1, 1,
|
||||
0L, TimeUnit.MILLISECONDS,
|
||||
new LinkedBlockingQueue<Runnable>(), new ThreadFactory() {
|
||||
|
||||
Reference in New Issue
Block a user