summaryrefslogtreecommitdiff
path: root/platform/core-api/src/com/intellij/openapi/progress
diff options
context:
space:
mode:
Diffstat (limited to 'platform/core-api/src/com/intellij/openapi/progress')
-rw-r--r--platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java8
-rw-r--r--platform/core-api/src/com/intellij/openapi/progress/ProgressManager.java47
2 files changed, 13 insertions, 42 deletions
diff --git a/platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java b/platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java
index 0f50f8d05ecf..afe440b8588f 100644
--- a/platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java
+++ b/platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.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.
@@ -25,7 +25,6 @@ public abstract class ProgressIndicatorProvider {
@Nullable
public static ProgressIndicatorProvider ourInstance;
- @Nullable
public static ProgressIndicatorProvider getInstance() {
return ourInstance;
}
@@ -39,6 +38,7 @@ public abstract class ProgressIndicatorProvider {
return ourInstance != null ? ourInstance.getProgressIndicator() : null;
}
+ @NotNull
public abstract NonCancelableSection startNonCancelableSection();
@NotNull
@@ -46,12 +46,12 @@ public abstract class ProgressIndicatorProvider {
return ourInstance != null ? ourInstance.startNonCancelableSection() : NonCancelableSection.EMPTY;
}
- public static volatile boolean ourNeedToCheckCancel = false;
+ protected static volatile boolean ourNeedToCheckCancel = false;
public static void checkCanceled() throws ProcessCanceledException {
// smart optimization! There's a thread started in ProgressManagerImpl, that set's this flag up once in 10 milliseconds
if (ourNeedToCheckCancel && ourInstance != null) {
+ ourNeedToCheckCancel = false; // doCheckCanceled() may flip it back to true
ourInstance.doCheckCanceled();
- ourNeedToCheckCancel = false;
}
}
}
diff --git a/platform/core-api/src/com/intellij/openapi/progress/ProgressManager.java b/platform/core-api/src/com/intellij/openapi/progress/ProgressManager.java
index e99b8e6bebf0..4b4ace28cd37 100644
--- a/platform/core-api/src/com/intellij/openapi/progress/ProgressManager.java
+++ b/platform/core-api/src/com/intellij/openapi/progress/ProgressManager.java
@@ -25,38 +25,17 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-public abstract class ProgressManager {
- static {
- ProgressIndicatorProvider.ourInstance = new ProgressIndicatorProvider() {
- @Override
- public ProgressIndicator getProgressIndicator() {
- ProgressManager manager = ProgressManager.getInstance();
- return manager != null ? manager.getProgressIndicator() : null;
- }
-
- @Override
- protected void doCheckCanceled() throws ProcessCanceledException {
- ProgressManager manager = ProgressManager.getInstance();
- if (manager != null) {
- manager.doCheckCanceled();
- }
- }
-
- @Override
- public NonCancelableSection startNonCancelableSection() {
- ProgressManager manager = ProgressManager.getInstance();
- return manager != null ? manager.startNonCancelableSection() : NonCancelableSection.EMPTY;
- }
- };
+public abstract class ProgressManager extends ProgressIndicatorProvider {
+ public ProgressManager() {
+ ProgressIndicatorProvider.ourInstance = this;
}
- private static ProgressManager ourInstance;
+ private static class ProgressManagerHolder {
+ private static final ProgressManager ourInstance = ServiceManager.getService(ProgressManager.class);
+ }
public static ProgressManager getInstance() {
- if (ourInstance == null) {
- ourInstance = ServiceManager.getService(ProgressManager.class);
- }
- return ourInstance;
+ return ProgressManagerHolder.ourInstance;
}
public abstract boolean hasProgressIndicator();
@@ -66,17 +45,13 @@ public abstract class ProgressManager {
public abstract void runProcess(@NotNull Runnable process, ProgressIndicator progress) throws ProcessCanceledException;
public abstract <T> T runProcess(@NotNull Computable<T> process, ProgressIndicator progress) throws ProcessCanceledException;
+ @Override
public ProgressIndicator getProgressIndicator() {
return myThreadIndicator.get();
}
- protected static volatile boolean ourNeedToCheckCancel = false;
public static void checkCanceled() throws ProcessCanceledException {
- // smart optimization! There's a thread started in ProgressManagerImpl, that set's this flag up once in 10 milliseconds
- if (ourNeedToCheckCancel) {
- getInstance().doCheckCanceled();
- ourNeedToCheckCancel = false;
- }
+ ProgressIndicatorProvider.checkCanceled();
}
public static void progress(@NotNull String text) throws ProcessCanceledException {
@@ -100,11 +75,7 @@ public abstract class ProgressManager {
}
}
- protected abstract void doCheckCanceled() throws ProcessCanceledException;
-
public abstract void executeNonCancelableSection(@NotNull Runnable runnable);
- @NotNull
- public abstract NonCancelableSection startNonCancelableSection();
public abstract void setCancelButtonText(String cancelButtonText);