diff --git a/platform/core-api/src/com/intellij/openapi/project/DumbService.java b/platform/core-api/src/com/intellij/openapi/project/DumbService.java index 54829b01b61a..a82fe1289cb0 100644 --- a/platform/core-api/src/com/intellij/openapi/project/DumbService.java +++ b/platform/core-api/src/com/intellij/openapi/project/DumbService.java @@ -1,4 +1,4 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.project; import com.intellij.openapi.Disposable; @@ -24,8 +24,8 @@ import java.util.Collection; import java.util.List; /** - * A service managing IDEA's 'dumb' mode: when indices are updated in background and the functionality is very much limited. - * Only the explicitly allowed functionality is available. Usually it's allowed by implementing {@link DumbAware} interface. + * A service managing the IDE's 'dumb' mode: when indexes are updated in the background, and the functionality is very much limited. + * Only the explicitly allowed functionality is available. Usually, it's allowed by implementing {@link DumbAware} interface. * * @author peter */ @@ -43,8 +43,8 @@ public abstract class DumbService { public abstract ModificationTracker getModificationTracker(); /** - * @return whether IntelliJ IDEA is in dumb mode, which means that right now indices are updated in background. - * IDEA offers only limited functionality at such times, e.g. plain text file editing and version control operations. + * @return whether the IDE is in dumb mode, which means that right now indexes are updated in the background. + * The IDE offers only limited functionality at such times, e.g., plain text file editing and version control operations. */ public abstract boolean isDumb(); @@ -72,11 +72,12 @@ public abstract class DumbService { /** * Executes the runnable as soon as possible on AWT Event Dispatch when: *
* Tasks can specify custom "equality" policy via their constructor. Calling this method has no effect if an "equal" task is already enqueued (but not yet running). */ public abstract void queueTask(@NotNull DumbModeTask task); @@ -233,17 +236,30 @@ public abstract class DumbService { /** * Runs the "just submitted" tasks under a modal dialog. "Just submitted" means that tasks were queued for execution - * earlier within the same Swing event dispatch thread event processing, and there were no other tasks already running at that moment. Otherwise this method does nothing.
- * + * earlier within the same Swing event dispatch thread event processing, and there were no other tasks already running at that moment. Otherwise, this method does nothing. + ** This functionality can be useful in refactorings (invoked in "smart mode"), when after VFS or root changes * (which could start "dumb mode") some reference resolve is required (which again requires "smart mode").
- * + ** Should be invoked on dispatch thread. */ public abstract void completeJustSubmittedTasks(); + /** + * Replaces given component temporarily with "Not available until indices are built" label during dumb mode. + * + * @param dumbUnawareContent Component to wrap. + * @param parentDisposable Parent disposable. + * @return Wrapped component. + */ public abstract JComponent wrapGently(@NotNull JComponent dumbUnawareContent, @NotNull Disposable parentDisposable); + /** + * Disables given component temporarily during dumb mode. + * + * @param component Component to disable. + * @param disposable Parent disposable. + */ public void makeDumbAware(@NotNull final JComponent component, @NotNull Disposable disposable) { component.setEnabled(!isDumb()); getProject().getMessageBus().connect(disposable).subscribe(DUMB_MODE, new DumbModeListener() { @@ -259,6 +275,11 @@ public abstract class DumbService { }); } + /** + * Show a notification when given action is not available during dumb mode. + * + * @param message Notification message. + */ public abstract void showDumbModeNotification(@NotNull String message); public abstract Project getProject(); @@ -273,23 +294,24 @@ public abstract class DumbService { /** * Enables or disables alternative resolve strategies for the current thread.
- * - * Normally reference resolution uses index, and hence is not available in dumb mode. In some cases, alternative ways + *+ * Normally reference resolution uses indexes, and hence is not available in dumb mode. In some cases, alternative ways * of performing resolve are available, although much slower. It's impractical to always use these ways because it'll * lead to overloaded CPU (especially given there's also indexing in progress). But for some explicit user actions - * (e.g. explicit Goto Declaration) turning these slower methods is beneficial.
- * + * (e.g., explicit Goto Declaration) turning on these slower methods is beneficial. + ** NOTE: even with alternative resolution enabled, methods like resolve(), findClass() etc may still throw * {@link IndexNotReadyException}. So alternative resolve is not a panacea, it might help provide navigation in some cases * but not in all.
- * - * A typical usage would involve try-finally, where the alternative resolution is first enabled, then an action is performed, - * and then alternative resolution is turned off in the finally block. + *
+ * A typical usage would involve {@code try-finally}, where the alternative resolution is first enabled, then an action is performed,
+ * and then alternative resolution is turned off in the {@code finally} block.
*/
public abstract void setAlternativeResolveEnabled(boolean enabled);
/**
* Invokes the given runnable with alternative resolve set to true.
+ *
* @see #setAlternativeResolveEnabled(boolean)
*/
public void withAlternativeResolveEnabled(@NotNull Runnable runnable) {
@@ -304,6 +326,7 @@ public abstract class DumbService {
/**
* Invokes the given computable with alternative resolve set to true.
+ *
* @see #setAlternativeResolveEnabled(boolean)
*/
public