Skip to content

Commit

Permalink
Fix absent UnsupportedAbiVersionNotification
Browse files Browse the repository at this point in the history
  • Loading branch information
NataliaUkhorskaya committed Sep 20, 2013
1 parent 9874eb6 commit 9cbe0ef
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 1 deletion.
1 change: 1 addition & 0 deletions idea/src/META-INF/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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"/>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -117,6 +153,40 @@ public void run() {
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;

Expand Down Expand Up @@ -157,4 +227,21 @@ public ErrorNotificationPanel() {
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();
}
});
}

}

0 comments on commit 9cbe0ef

Please sign in to comment.