Fix absent UnsupportedAbiVersionNotification
This commit is contained in:
@@ -289,6 +289,7 @@
|
|||||||
|
|
||||||
<editorNotificationProvider implementation="org.jetbrains.jet.plugin.quickfix.AbsentJdkAnnotationsNotifications"/>
|
<editorNotificationProvider implementation="org.jetbrains.jet.plugin.quickfix.AbsentJdkAnnotationsNotifications"/>
|
||||||
<editorNotificationProvider implementation="org.jetbrains.jet.plugin.quickfix.IncorrectSourceRootNameNotification"/>
|
<editorNotificationProvider implementation="org.jetbrains.jet.plugin.quickfix.IncorrectSourceRootNameNotification"/>
|
||||||
|
<editorNotificationProvider implementation="org.jetbrains.jet.plugin.versions.UnsupportedAbiVersionNotificationPanelProvider"/>
|
||||||
|
|
||||||
<psi.treeChangePreprocessor implementation="org.jetbrains.jet.asJava.JetCodeBlockModificationListener"/>
|
<psi.treeChangePreprocessor implementation="org.jetbrains.jet.asJava.JetCodeBlockModificationListener"/>
|
||||||
|
|
||||||
|
|||||||
+88
-1
@@ -16,30 +16,66 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin.versions;
|
package org.jetbrains.jet.plugin.versions;
|
||||||
|
|
||||||
|
import com.intellij.ProjectTopics;
|
||||||
import com.intellij.icons.AllIcons;
|
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.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.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.JBPopupFactory;
|
||||||
import com.intellij.openapi.ui.popup.ListPopup;
|
import com.intellij.openapi.ui.popup.ListPopup;
|
||||||
import com.intellij.openapi.ui.popup.PopupStep;
|
import com.intellij.openapi.ui.popup.PopupStep;
|
||||||
import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
|
import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
|
||||||
|
import com.intellij.openapi.util.Key;
|
||||||
import com.intellij.openapi.util.Ref;
|
import com.intellij.openapi.util.Ref;
|
||||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.ui.EditorNotificationPanel;
|
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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
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 javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.util.Collection;
|
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;
|
private final Project project;
|
||||||
|
|
||||||
public UnsupportedAbiVersionNotificationPanelProvider(@NotNull Project project) {
|
public UnsupportedAbiVersionNotificationPanelProvider(@NotNull Project project) {
|
||||||
this.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
|
@Nullable
|
||||||
@@ -117,6 +153,40 @@ public class UnsupportedAbiVersionNotificationPanelProvider {
|
|||||||
label.set(answer.createActionLabel(labelText, action));
|
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 static class LibraryRootsPopupModel extends BaseListPopupStep<VirtualFile> {
|
||||||
private final Project project;
|
private final Project project;
|
||||||
|
|
||||||
@@ -157,4 +227,21 @@ public class UnsupportedAbiVersionNotificationPanelProvider {
|
|||||||
myLabel.setIcon(AllIcons.General.Error);
|
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();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user