private void showEditorWarningMessage(final String message) {
    ApplicationManager.getApplication()
        .invokeLater(
            () -> {
              if (myEditor == null) return;
              final FileEditorManager fileEditorManager = FileEditorManager.getInstance(myProject);
              final VirtualFile vFile = myFile.getVirtualFile();
              assert vFile != null;
              Map<FileEditor, EditorNotificationPanel> map =
                  myFile.getCopyableUserData(NOTIFICATION_PANELS);
              if (map == null) {
                map = new HashMap<FileEditor, EditorNotificationPanel>();
                myFile.putCopyableUserData(NOTIFICATION_PANELS, map);
              }

              final FileEditor[] editors = fileEditorManager.getAllEditors(vFile);
              for (final FileEditor editor : editors) {
                if (isCurrentEditor(editor)) {
                  final EditorNotificationPanel panel =
                      new EditorNotificationPanel() {
                        {
                          myLabel.setIcon(AllIcons.General.ExclMark);
                          myLabel.setText(message);
                        }
                      };
                  panel.createActionLabel(
                      "Close", () -> fileEditorManager.removeTopComponent(editor, panel));
                  map.put(editor, panel);
                  fileEditorManager.addTopComponent(editor, panel);
                  break;
                }
              }
            });
  }
 @NotNull
 private static EditorNotificationPanel createPanel(
     @NotNull final Project project, @NotNull final Module module) {
   EditorNotificationPanel panel = new EditorNotificationPanel();
   panel.setText(
       "'"
           + module.getName()
           + "' is not a RESOLVE Module, "
           + "therefore some code insight might not work here");
   panel.createActionLabel(
       "Change module type to RESOLVE and reload project",
       new Runnable() {
         @Override
         public void run() {
           int message =
               Messages.showOkCancelDialog(
                   project,
                   "Updating module type requires project reload. " + "Proceed?",
                   "Update Module Type",
                   "Reload project",
                   "Cancel",
                   null);
           if (message == Messages.YES) {
             module.setOption(Module.ELEMENT_TYPE, RESOLVEModuleType.getInstance().getId());
             project.save();
             EditorNotifications.getInstance(project).updateAllNotifications();
             ProjectManager.getInstance().reloadProject(project);
           }
         }
       });
   panel.createActionLabel(
       "Don't show again for this module",
       new Runnable() {
         @Override
         public void run() {
           Set<String> ignoredModules = getIgnoredModules(project);
           ignoredModules.add(module.getName());
           PropertiesComponent.getInstance(project)
               .setValue(DONT_ASK_TO_CHANGE_MODULE_TYPE_KEY, StringUtil.join(ignoredModules, ","));
           EditorNotifications.getInstance(project).updateAllNotifications();
         }
       });
   return panel;
 }
  @Nullable
  private EditorNotificationPanel createPanel(
      final String extension, final Set<PluginsAdvertiser.Plugin> plugins) {
    final EditorNotificationPanel panel = new EditorNotificationPanel();

    panel.setText("Plugins supporting " + extension + " files found.");
    final IdeaPluginDescriptor disabledPlugin = PluginsAdvertiser.getDisabledPlugin(plugins);
    if (disabledPlugin != null) {
      panel.createActionLabel(
          "Enable " + disabledPlugin.getName() + " plugin",
          () -> {
            myEnabledExtensions.add(extension);
            myNotifications.updateAllNotifications();
            PluginsAdvertiser.enablePlugins(myProject, Collections.singletonList(disabledPlugin));
          });
    } else if (hasNonBundledPlugin(plugins)) {
      panel.createActionLabel(
          "Install plugins",
          () -> {
            Set<String> pluginIds = new HashSet<>();
            for (PluginsAdvertiser.Plugin plugin : plugins) {
              pluginIds.add(plugin.myPluginId);
            }
            PluginsAdvertiser.installAndEnablePlugins(
                pluginIds,
                () -> {
                  myEnabledExtensions.add(extension);
                  myNotifications.updateAllNotifications();
                });
          });
    } else if (PluginsAdvertiser.hasBundledPluginToInstall(plugins) != null) {
      if (PropertiesComponent.getInstance()
          .isTrueValue(PluginsAdvertiser.IGNORE_ULTIMATE_EDITION)) {
        return null;
      }
      panel.setText(
          extension + " files are supported by " + PluginsAdvertiser.IDEA_ULTIMATE_EDITION);

      panel.createActionLabel(
          PluginsAdvertiser.CHECK_ULTIMATE_EDITION_TITLE,
          () -> {
            myEnabledExtensions.add(extension);
            PluginsAdvertiser.openDownloadPage();
          });

      panel.createActionLabel(
          PluginsAdvertiser.ULTIMATE_EDITION_SUGGESTION,
          () -> {
            PropertiesComponent.getInstance()
                .setValue(PluginsAdvertiser.IGNORE_ULTIMATE_EDITION, "true");
            myNotifications.updateAllNotifications();
          });
    } else {
      return null;
    }
    panel.createActionLabel(
        "Ignore extension",
        () -> {
          UnknownFeaturesCollector.getInstance(myProject)
              .ignoreFeature(createExtensionFeature(extension));
          myNotifications.updateAllNotifications();
        });
    return panel;
  }