diff options
Diffstat (limited to 'platform/core-api/src/com/intellij/openapi/progress')
-rw-r--r-- | platform/core-api/src/com/intellij/openapi/progress/ProgressIndicatorProvider.java | 8 | ||||
-rw-r--r-- | platform/core-api/src/com/intellij/openapi/progress/ProgressManager.java | 47 |
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); |