Fix absent UnsupportedAbiVersionNotification

This commit is contained in:
Natalia.Ukhorskaya
2013-09-20 12:05:03 +04:00
parent 9874eb67ba
commit 9cbe0ef8c5
2 changed files with 89 additions and 1 deletions
+1
View File
@@ -289,6 +289,7 @@
<editorNotificationProvider implementation="org.jetbrains.jet.plugin.quickfix.AbsentJdkAnnotationsNotifications"/>
<editorNotificationProvider implementation="org.jetbrains.jet.plugin.quickfix.IncorrectSourceRootNameNotification"/>
<editorNotificationProvider implementation="org.jetbrains.jet.plugin.versions.UnsupportedAbiVersionNotificationPanelProvider"/>
<psi.treeChangePreprocessor implementation="org.jetbrains.jet.asJava.JetCodeBlockModificationListener"/>
@@ -16,30 +16,66 @@
package org.jetbrains.jet.plugin.versions;
import com.intellij.ProjectTopics;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.compiler.CompilerManager;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleUtilCore;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootAdapter;
import com.intellij.openapi.roots.ModuleRootEvent;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.ListPopup;
import com.intellij.openapi.ui.popup.PopupStep;
import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.EditorNotificationPanel;
import com.intellij.ui.EditorNotifications;
import com.intellij.util.messages.MessageBusConnection;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.configuration.ConfigureKotlinInProjectUtils;
import org.jetbrains.jet.plugin.configuration.KotlinJavaModuleConfigurator;
import org.jetbrains.jet.plugin.configuration.KotlinProjectConfigurator;
import javax.swing.*;
import java.awt.*;
import java.text.MessageFormat;
import java.util.Collection;
public class UnsupportedAbiVersionNotificationPanelProvider {
public class UnsupportedAbiVersionNotificationPanelProvider extends EditorNotifications.Provider<EditorNotificationPanel> {
private static final Key<EditorNotificationPanel> KEY = Key.create("unsupported.abi.version");
private final Project project;
public UnsupportedAbiVersionNotificationPanelProvider(@NotNull Project project) {
this.project = project;
MessageBusConnection connection = project.getMessageBus().connect();
connection.subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootAdapter() {
@Override
public void rootsChanged(ModuleRootEvent event) {
updateNotifications();
}
});
connection.subscribe(DumbService.DUMB_MODE, new DumbService.DumbModeListener() {
@Override
public void enteredDumbMode() {}
@Override
public void exitDumbMode() {
updateNotifications();
}
});
}
@Nullable
@@ -117,6 +153,40 @@ public class UnsupportedAbiVersionNotificationPanelProvider {
label.set(answer.createActionLabel(labelText, action));
}
@Override
public Key<EditorNotificationPanel> getKey() {
return KEY;
}
@Nullable
@Override
public EditorNotificationPanel createNotificationPanel(VirtualFile file, FileEditor fileEditor) {
try {
if (file.getFileType() != JetFileType.INSTANCE) return null;
if (CompilerManager.getInstance(project).isExcludedFromCompilation(file)) return null;
Module module = ModuleUtilCore.findModuleForFile(file, project);
if (module == null) return null;
KotlinProjectConfigurator configurator = ConfigureKotlinInProjectUtils.getConfiguratorByName(KotlinJavaModuleConfigurator.NAME);
assert configurator != null : "Configurator should exists " + KotlinJavaModuleConfigurator.NAME;
if (!configurator.isConfigured(module)) {
return null;
}
return checkAndCreate(project);
}
catch (ProcessCanceledException e) {
// Ignore
}
catch (IndexNotReadyException e) {
DumbService.getInstance(project).runWhenSmart(updateNotifications);
}
return null;
}
private static class LibraryRootsPopupModel extends BaseListPopupStep<VirtualFile> {
private final Project project;
@@ -157,4 +227,21 @@ public class UnsupportedAbiVersionNotificationPanelProvider {
myLabel.setIcon(AllIcons.General.Error);
}
}
private final Runnable updateNotifications = new Runnable() {
@Override
public void run() {
updateNotifications();
}
};
private void updateNotifications() {
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
EditorNotifications.getInstance(project).updateAllNotifications();
}
});
}
}