@Override
  public JComponent createComponent() {
    JBTabbedPane tabbedPane = new JBTabbedPane();
    myFileTypePanel = new FileTypePanel();
    myRecognizedFileType = new RecognizedFileTypesPanel();
    JBSplitter splitter = new JBSplitter(false, 0.3f);
    splitter.setFirstComponent(myRecognizedFileType);

    JPanel rightPanel = new JPanel(new BorderLayout());
    myPatterns = new PatternsPanel();
    myHashBangs = new HashBangPanel();
    rightPanel.add(myPatterns, BorderLayout.CENTER);
    rightPanel.add(myHashBangs, BorderLayout.SOUTH);
    splitter.setSecondComponent(rightPanel);

    myFileTypePanel.myUpperPanel.add(splitter, BorderLayout.CENTER);

    myRecognizedFileType.myFileTypesList.addListSelectionListener(__ -> updateExtensionList());
    myFileTypePanel.myAssociatePanel.setVisible(OSAssociateFileTypesUtil.isAvailable());
    myFileTypePanel.myAssociatePanel.setBorder(JBUI.Borders.emptyTop(16));
    myFileTypePanel.myAssociateButton.setText(
      FileTypesBundle.message("filetype.associate.button", ApplicationNamesInfo.getInstance().getFullProductName()));
    myFileTypePanel.myAssociateButton.addActionListener(__ -> OSAssociateFileTypesUtil.chooseAndAssociate(
      new OSAssociateFileTypesUtil.Callback() {
        @Override
        public void beforeStart() {
          ApplicationManager.getApplication().invokeLater(()-> {
            myFileTypePanel.myAssociateButton.setEnabled(false);
            updateAssociateMessageLabel(
              FileTypesBundle.message("filetype.associate.message.updating"), null);
          }, ModalityState.any());
        }

        @Override
        public void onSuccess(boolean isOsRestartRequired) {
          ApplicationManager.getApplication().invokeLater(()-> {
            myFileTypePanel.myAssociateButton.setEnabled(true);
            if (isOsRestartRequired) {
              updateAssociateMessageLabel(
                FileTypesBundle.message("filetype.associate.message.os.restart"), AllIcons.General.Warning);
            }
            else {
              updateAssociateMessageLabel("", null);
            }
            showAssociationBalloon(
              FileTypesBundle.message("filetype.associate.success.message", ApplicationInfo.getInstance().getFullApplicationName()),
              HintUtil.getInformationColor());
          }, ModalityState.any());
        }

        @Override
        public void onFailure(@NotNull @Nls String errorMessage) {
          ApplicationManager.getApplication().invokeLater(()-> {
            myFileTypePanel.myAssociateButton.setEnabled(true);
            updateAssociateMessageLabel("", null);
            showAssociationBalloon(errorMessage, HintUtil.getErrorColor());
          }, ModalityState.any());
        }
      }
    ));
    tabbedPane.add(FileTypesBundle.message("filetype.recognized.group"), myFileTypePanel.myWholePanel);

    myIgnoreFilesPanel = new IgnoredFilesAndFoldersPanel();
    tabbedPane.add(FileTypesBundle.message("filetype.ignore.group"), myIgnoreFilesPanel);
    return tabbedPane;
  }
@Override
  public JComponent createComponent()