dumb-aware EditorNotifications.Provider (EA-66174)

This commit is contained in:
peter
2015-06-29 19:38:49 +02:00
parent d3c4470889
commit e65dd1e08e
11 changed files with 30 additions and 11 deletions
@@ -22,6 +22,7 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.projectRoots.Sdk;
@@ -38,7 +39,7 @@ import org.jetbrains.annotations.NotNull;
/**
* @author Danila Ponomarenko
*/
public class SetupSDKNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
public class SetupSDKNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements DumbAware {
private static final Key<EditorNotificationPanel> KEY = Key.create("Setup SDK");
private final Project myProject;
@@ -16,6 +16,7 @@
package com.intellij.ide;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.EditorNotificationPanel;
@@ -26,7 +27,7 @@ import org.jetbrains.annotations.Nullable;
/**
* @author nik
*/
public class GeneratedFileEditingNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
public class GeneratedFileEditingNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements DumbAware {
private static final Key<EditorNotificationPanel> KEY = Key.create("generated.source.file.editing.notification.panel");
private final GeneratedSourceFileChangeTracker myChangeTracker;
@@ -21,6 +21,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
@@ -40,7 +41,7 @@ import static com.intellij.psi.codeStyle.EditorNotificationInfo.ActionLabelData;
/**
* @author Rustam Vishnyakov
*/
public class DetectedIndentOptionsNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
public class DetectedIndentOptionsNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements DumbAware {
private static final Key<EditorNotificationPanel> KEY = Key.create("indent.options.notification.provider");
private static final Key<Boolean> NOTIFIED_FLAG = Key.create("indent.options.notification.provider.status");
protected static final Key<Boolean> DETECT_INDENT_NOTIFICATION_SHOWN_KEY = Key.create("indent.options.notification.provider.status.test.notification.shown");
@@ -31,6 +31,12 @@ import javax.swing.*;
*/
public abstract class EditorNotifications extends AbstractProjectComponent {
/**
* An extension allowing to add custom notifications to the top of file editors.
*
* During indexing, only {@link com.intellij.openapi.project.DumbAware} instances are executed.
* @param <T> the type of the notification UI component
*/
public abstract static class Provider<T extends JComponent> {
@NotNull
public abstract Key<T> getKey();
@@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.LogUtil;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.io.FileAttributes;
@@ -39,7 +40,7 @@ import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.Set;
public class FileChangedNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
public class FileChangedNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements DumbAware {
private static final Logger LOG = Logger.getInstance(FileChangedNotificationProvider.class);
private static final Key<EditorNotificationPanel> KEY = Key.create("file.changed.notification.panel");
@@ -20,6 +20,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorBundle;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
@@ -28,7 +29,7 @@ import com.intellij.ui.EditorNotifications;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class ForcedSoftWrapsNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
public class ForcedSoftWrapsNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements DumbAware {
private static final Key<EditorNotificationPanel> KEY = Key.create("forced.soft.wraps.notification.panel");
private static final String DISABLED_NOTIFICATION_KEY = "disable.forced.soft.wraps.notification";
@@ -20,6 +20,7 @@ import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileTypes.FileTypeFactory;
import com.intellij.openapi.fileTypes.PlainTextFileType;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
@@ -36,7 +37,7 @@ import java.util.Set;
* User: anna
* Date: 10/11/13
*/
public class PluginAdvertiserEditorNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
public class PluginAdvertiserEditorNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements DumbAware {
private static final Key<EditorNotificationPanel> KEY = Key.create("file.type.associations.detected");
private final Project myProject;
private final EditorNotifications myNotifications;
@@ -17,7 +17,6 @@ package com.intellij.ui;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.FileEditorManagerAdapter;
@@ -132,9 +131,12 @@ public class EditorNotificationsImpl extends EditorNotifications {
public void computeInReadAction(@NotNull final ProgressIndicator indicator) {
if (isOutdated()) return;
final List<Provider> providers = DumbService.getInstance(myProject).
filterByDumbAwareness(EXTENSION_POINT_NAME.getExtensions(myProject));
final List<Runnable> updates = ContainerUtil.newArrayList();
for (final FileEditor editor : editors) {
for (final Provider<?> provider : Extensions.getExtensions(EXTENSION_POINT_NAME, myProject)) {
for (final Provider<?> provider : providers) {
final JComponent component = provider.createNotificationPanel(file, editor);
updates.add(new Runnable() {
@Override
@@ -16,6 +16,7 @@
package com.intellij.openapi.vcs.changes.conflicts;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vcs.changes.ChangeListManagerImpl;
import com.intellij.openapi.vfs.VirtualFile;
@@ -25,7 +26,8 @@ import org.jetbrains.annotations.NotNull;
/**
* @author Dmitry Avdeev
*/
public class ChangelistConflictNotificationProvider extends EditorNotifications.Provider<ChangelistConflictNotificationPanel> {
public class ChangelistConflictNotificationProvider extends EditorNotifications.Provider<ChangelistConflictNotificationPanel> implements
DumbAware {
private static final Key<ChangelistConflictNotificationPanel> KEY = Key.create("changelistConflicts");
@@ -3,6 +3,7 @@ package org.editorconfig.plugincomponents;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
@@ -23,7 +24,7 @@ import java.util.List;
/**
* @author Dennis.Ushakov
*/
public class EditorConfigNotifierProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
public class EditorConfigNotifierProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements DumbAware {
private static final Key<EditorNotificationPanel> KEY = Key.create("editor.config.notification.panel");
private static final String EDITOR_CONFIG_ACCEPTED = "editor.config.accepted";
@@ -24,6 +24,7 @@ import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootAdapter;
@@ -56,7 +57,8 @@ import java.util.regex.Pattern;
* @author Vladislav.Soroka
* @since 9/13/13
*/
public class UseDistributionWithSourcesNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
public class UseDistributionWithSourcesNotificationProvider extends EditorNotifications.Provider<EditorNotificationPanel> implements
DumbAware {
public static final Pattern GRADLE_SRC_DISTRIBUTION_PATTERN;
private static final Logger LOG = Logger.getInstance("#" + UseDistributionWithSourcesNotificationProvider.class.getName());
private static final Key<EditorNotificationPanel> KEY = Key.create("gradle.notifications.use.distribution.with.sources");