summaryrefslogtreecommitdiff
path: root/platform/platform-impl/src/com/intellij/ide/UiActivityMonitorImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-impl/src/com/intellij/ide/UiActivityMonitorImpl.java')
-rw-r--r--platform/platform-impl/src/com/intellij/ide/UiActivityMonitorImpl.java170
1 files changed, 58 insertions, 112 deletions
diff --git a/platform/platform-impl/src/com/intellij/ide/UiActivityMonitorImpl.java b/platform/platform-impl/src/com/intellij/ide/UiActivityMonitorImpl.java
index c25c68b4bb2b..e9de64905415 100644
--- a/platform/platform-impl/src/com/intellij/ide/UiActivityMonitorImpl.java
+++ b/platform/platform-impl/src/com/intellij/ide/UiActivityMonitorImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2011 JetBrains s.r.o.
+ * Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@
package com.intellij.ide;
import com.intellij.openapi.Disposable;
-import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ModalityStateListener;
@@ -24,7 +23,6 @@ import com.intellij.openapi.application.impl.LaterInvocator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.BusyObject;
import com.intellij.openapi.util.Disposer;
-import com.intellij.openapi.util.registry.Registry;
import com.intellij.util.containers.FactoryMap;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
@@ -34,16 +32,16 @@ import javax.swing.*;
import java.util.*;
public class UiActivityMonitorImpl extends UiActivityMonitor implements ModalityStateListener, Disposable {
-
private final FactoryMap<Project, BusyContainer> myObjects = new FactoryMap<Project, BusyContainer>() {
@Override
protected BusyContainer create(Project key) {
if (isEmpty()) {
installListener();
}
- return key == null ? new BusyContainer(key) : new BusyContainer(null) {
+ return key == null ? new BusyContainer(null) : new BusyContainer(null) {
+ @NotNull
@Override
- protected BusyImpl createBusyImpl(HashSet<UiActivity> key) {
+ protected BusyImpl createBusyImpl(@NotNull Set<UiActivity> key) {
return new BusyImpl(key, this) {
@Override
public boolean isReady() {
@@ -63,7 +61,8 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
private boolean myActive;
- private BusyObject myEmptyBusy = new BusyObject.Impl() {
+ @NotNull
+ private final BusyObject myEmptyBusy = new BusyObject.Impl() {
@Override
public boolean isReady() {
return true;
@@ -84,17 +83,12 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
@Override
public void beforeModalityStateChanged(boolean entering) {
- if (isUnitTestMode()) {
- maybeReady();
- }
- else {
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- maybeReady();
- }
- });
- }
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ maybeReady();
+ }
+ });
}
public void maybeReady() {
@@ -103,15 +97,17 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
}
}
+ @NotNull
@Override
- public BusyObject getBusy(@NotNull Project project, UiActivity... toWatch) {
+ public BusyObject getBusy(@NotNull Project project, @NotNull UiActivity... toWatch) {
if (!isActive()) return myEmptyBusy;
return _getBusy(project, toWatch);
}
+ @NotNull
@Override
- public BusyObject getBusy(UiActivity... toWatch) {
+ public BusyObject getBusy(@NotNull UiActivity... toWatch) {
if (!isActive()) return myEmptyBusy;
return _getBusy(null, toWatch);
@@ -129,10 +125,10 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
if (!isActive()) return;
- invokeLaterIfNeeded(new MyRunnable() {
+ UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
- public void run(Throwable allocation) {
- getBusyContainer(project).addActivity(activity, allocation, effectiveModalityState);
+ public void run() {
+ getBusyContainer(project).addActivity(activity, effectiveModalityState);
}
});
}
@@ -141,9 +137,9 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
public void removeActivity(@NotNull final Project project, @NotNull final UiActivity activity) {
if (!isActive()) return;
- invokeLaterIfNeeded(new MyRunnable() {
+ UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
- public void run(Throwable allocation) {
+ public void run() {
_getBusy(project).removeActivity(activity);
}
});
@@ -162,10 +158,10 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
public void addActivity(@NotNull final UiActivity activity, @NotNull final ModalityState effectiveModalityState) {
if (!isActive()) return;
- invokeLaterIfNeeded(new MyRunnable() {
+ UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
- public void run(Throwable allocation) {
- getBusyContainer(null).addActivity(activity, allocation, effectiveModalityState);
+ public void run() {
+ getBusyContainer(null).addActivity(activity, effectiveModalityState);
}
});
}
@@ -174,15 +170,16 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
public void removeActivity(@NotNull final UiActivity activity) {
if (!isActive()) return;
- invokeLaterIfNeeded(new MyRunnable() {
+ UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
- public void run(Throwable allocation) {
+ public void run() {
_getBusy(null).removeActivity(activity);
}
});
}
- private BusyImpl _getBusy(@Nullable Project key, UiActivity... toWatch) {
+ @NotNull
+ private BusyImpl _getBusy(@Nullable Project key, @NotNull UiActivity... toWatch) {
return getBusyContainer(key).getOrCreateBusy(toWatch);
}
@@ -204,6 +201,7 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
return myObjects.get(null);
}
+ @Override
public void clear() {
final Set<Project> keys = myObjects.keySet();
for (Project each : keys) {
@@ -215,7 +213,7 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
public void setActive(boolean active) {
if (myActive == active) return;
- if (myActive && !active) {
+ if (myActive) {
clear();
}
@@ -227,25 +225,19 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
}
private static class ActivityInfo {
- private final Throwable myAllocation;
private final ModalityState myEffectiveState;
- private ActivityInfo(@Nullable Throwable allocation, @NotNull ModalityState effectiveState) {
- myAllocation = allocation;
+ private ActivityInfo(@NotNull ModalityState effectiveState) {
myEffectiveState = effectiveState;
}
- @Nullable
- public Throwable getAllocation() {
- return myAllocation;
- }
-
@NotNull
public ModalityState getEffectiveState() {
return myEffectiveState;
}
}
+ @NotNull
protected ModalityState getCurrentState() {
return ModalityState.current();
}
@@ -258,9 +250,9 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
protected final Set<UiActivity> myToWatch;
protected final UiActivity[] myToWatchArray;
- private UiActivityMonitorImpl.BusyContainer myContainer;
+ private final UiActivityMonitorImpl.BusyContainer myContainer;
- private BusyImpl(Set<UiActivity> toWatch, BusyContainer container) {
+ private BusyImpl(@NotNull Set<UiActivity> toWatch, @NotNull BusyContainer container) {
myToWatch = toWatch;
myToWatchArray = toWatch.toArray(new UiActivity[toWatch.size()]);
myContainer = container;
@@ -274,9 +266,7 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
boolean isOwnReady() {
Map<UiActivity, ActivityInfo> infoToCheck = new HashMap<UiActivity, ActivityInfo>();
- final Iterator<Set<UiActivity>> activitySets = myContainer.myActivities2Object.keySet().iterator();
- while (activitySets.hasNext()) {
- Set<UiActivity> eachActivitySet = activitySets.next();
+ for (Set<UiActivity> eachActivitySet : myContainer.myActivities2Object.keySet()) {
final BusyImpl eachBusyObject = myContainer.myActivities2Object.get(eachActivitySet);
if (eachBusyObject == this) continue;
@@ -304,19 +294,16 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
return true;
}
+ public void addActivity(@NotNull UiActivity activity, @NotNull ModalityState effectiveModalityState) {
+ if (!myToWatch.isEmpty() && !myToWatch.contains(activity)) return;
- public void addActivity(UiActivity activity, Throwable allocation, ModalityState effectiveModalityState) {
- if (!myToWatch.isEmpty()) {
- if (!myToWatch.contains(activity)) return;
- }
-
- myActivities.put(activity, new ActivityInfo(allocation, effectiveModalityState));
+ myActivities.put(activity, new ActivityInfo(effectiveModalityState));
myQueuedToRemove.remove(activity);
- myContainer.onActivityAdded(this, activity);
+ myContainer.onActivityAdded(activity);
}
- public void removeActivity(final UiActivity activity) {
+ public void removeActivity(@NotNull final UiActivity activity) {
if (!myActivities.containsKey(activity)) return;
myQueuedToRemove.add(activity);
@@ -333,87 +320,48 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
onReady();
}
};
- if (isUnitTestMode()) {
- runnable.run();
- }
- else {
- SwingUtilities.invokeLater(runnable);
- }
+ SwingUtilities.invokeLater(runnable);
}
-
- public void clear() {
- UiActivity[] activities = myActivities.keySet().toArray(new UiActivity[myActivities.size()]);
- for (UiActivity each : activities) {
- removeActivity(each);
- }
- }
- }
-
- private static void invokeLaterIfNeeded(final MyRunnable runnable) {
- final Throwable allocation = Registry.is("ide.debugMode") ? new Exception() : null;
-
- if (isUnitTestMode()) {
- runnable.run(allocation);
- }
- else {
- UIUtil.invokeLaterIfNeeded(new Runnable() {
- @Override
- public void run() {
- runnable.run(allocation);
- }
- });
- }
- }
-
- private interface MyRunnable {
- void run(Throwable allocation);
- }
-
- private static boolean isUnitTestMode() {
- Application app = ApplicationManager.getApplication();
- return app == null || app.isUnitTestMode();
}
public class BusyContainer implements Disposable {
+ private final Map<Set<UiActivity>, BusyImpl> myActivities2Object = new HashMap<Set<UiActivity>, BusyImpl>();
+ private final Map<BusyImpl, Set<UiActivity>> myObject2Activities = new HashMap<BusyImpl, Set<UiActivity>>();
- private Map<Set<UiActivity>, BusyImpl> myActivities2Object = new HashMap<Set<UiActivity>, BusyImpl>();
- private Map<BusyImpl, Set<UiActivity>> myObject2Activities = new HashMap<BusyImpl, Set<UiActivity>>();
-
- private Set<UiActivity> myActivities = new HashSet<UiActivity>();
-
- private BusyImpl myDefault;
+ private final Set<UiActivity> myActivities = new HashSet<UiActivity>();
private boolean myRemovingActivityNow;
@Nullable private final Project myProject;
public BusyContainer(@Nullable Project project) {
myProject = project;
- myDefault = registerBusyObject(new HashSet<UiActivity>());
+ registerBusyObject(new HashSet<UiActivity>());
if (project != null) {
Disposer.register(project, this);
}
}
- public BusyImpl getOrCreateBusy(UiActivity... activities) {
- final HashSet<UiActivity> key = new HashSet<UiActivity>();
+ @NotNull
+ public BusyImpl getOrCreateBusy(@NotNull UiActivity... activities) {
+ Set<UiActivity> key = new HashSet<UiActivity>();
key.addAll(Arrays.asList(activities));
if (myActivities2Object.containsKey(key)) {
return myActivities2Object.get(key);
}
- else {
- return registerBusyObject(key);
- }
+ return registerBusyObject(key);
}
- private BusyImpl registerBusyObject(HashSet<UiActivity> key) {
+ @NotNull
+ private BusyImpl registerBusyObject(@NotNull Set<UiActivity> key) {
final BusyImpl busy = createBusyImpl(key);
myActivities2Object.put(key, busy);
myObject2Activities.put(busy, key);
return busy;
}
- protected BusyImpl createBusyImpl(HashSet<UiActivity> key) {
+ @NotNull
+ protected BusyImpl createBusyImpl(@NotNull Set<UiActivity> key) {
return new BusyImpl(key, this);
}
@@ -437,11 +385,11 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
}
}
- public void onActivityAdded(BusyImpl busy, UiActivity activity) {
+ public void onActivityAdded(@NotNull UiActivity activity) {
myActivities.add(activity);
}
- public void onActivityRemoved(BusyImpl busy, UiActivity activity) {
+ public void onActivityRemoved(@NotNull BusyImpl busy, @NotNull UiActivity activity) {
if (myRemovingActivityNow) return;
final Map<BusyImpl, Set<UiActivity>> toRemove = new HashMap<BusyImpl, Set<UiActivity>>();
@@ -450,9 +398,7 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
myRemovingActivityNow = true;
myActivities.remove(activity);
- final Iterator<BusyImpl> objects = myObject2Activities.keySet().iterator();
- while (objects.hasNext()) {
- BusyImpl each = objects.next();
+ for (BusyImpl each : myObject2Activities.keySet()) {
if (each != busy) {
each.removeActivity(activity);
}
@@ -472,11 +418,11 @@ public class UiActivityMonitorImpl extends UiActivityMonitor implements Modality
}
}
- public void addActivity(UiActivity activity, Throwable allocation, ModalityState state) {
+ public void addActivity(@NotNull UiActivity activity, @NotNull ModalityState state) {
getOrCreateBusy(activity);
final Set<BusyImpl> busies = myObject2Activities.keySet();
for (BusyImpl each : busies) {
- each.addActivity(activity, allocation, state);
+ each.addActivity(activity, state);
}
}