public FacetConfigurationEditor(
      ConfigurationData data,
      FacetEditorContext editorContext,
      FacetValidatorsManager validatorsManager) {
    myData = data;
    myEditorContext = editorContext;
    myValidatorsManager = validatorsManager;

    myDebuggingInfoLevel.setModel(new DefaultComboBoxModel(DebuggingInfoLevel.values()));
    myLibraryRenderer = new LibraryRenderer(myCompilerLibrary);
    myCompilerLibrary.setRenderer(myLibraryRenderer);

    myEnableWarnings.addChangeListener(
        new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            updateCheckboxesState();
          }
        });

    myFSCRadioButton.addChangeListener(
        new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            updateCompilerSection();
          }
        });

    CompilerPluginsTableModel model = new CompilerPluginsTableModel();
    model.setItems(myPlugins);
    tablePlugins.setModel(model);

    addButton.setAction(myAddPluginAction);
    removeButton.setAction(myRemovePluginAction);
    editButton.setAction(myEditPluginAction);
    moveUpButton.setAction(myMoveUpPluginAction);
    moveDownButton.setAction(myMoveDownPluginAction);

    myAddPluginAction.registerOn(panelPlugins);
    myRemovePluginAction.registerOn(tablePlugins);
    myEditPluginAction.registerOn(tablePlugins);
    myMoveUpPluginAction.registerOn(tablePlugins);
    myMoveDownPluginAction.registerOn(tablePlugins);

    ListSelectionModel selectionModel = tablePlugins.getSelectionModel();
    selectionModel.addListSelectionListener(myAddPluginAction);
    selectionModel.addListSelectionListener(myRemovePluginAction);
    selectionModel.addListSelectionListener(myEditPluginAction);
    selectionModel.addListSelectionListener(myMoveUpPluginAction);
    selectionModel.addListSelectionListener(myMoveDownPluginAction);

    tablePlugins.addMouseListener(
        new MouseAdapter() {
          @Override
          public void mouseClicked(MouseEvent e) {
            if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
              myEditPluginAction.perform();
            }
          }
        });

    myValidatorsManager.registerValidator(
        new FacetEditorValidator() {
          @Override
          public ValidationResult check() {
            ValidationResult libraryResult =
                myFSCRadioButton.isSelected()
                    ? ValidationResult.OK
                    : checkCompilerLibrary((LibraryDescriptor) myCompilerLibrary.getSelectedItem());

            ValidationResult continuationsResult =
                myEnableContinuations.isSelected()
                    ? checkContinuationsPlugin(getPluginsModel().getItems())
                    : ValidationResult.OK;

            return conjunctionOf(libraryResult, continuationsResult);
          }
        },
        myCompilerLibrary,
        myFSCRadioButton,
        myEnableContinuations,
        tablePlugins);

    myAddPluginAction.update();
    myRemovePluginAction.update();
    myEditPluginAction.update();
    myMoveUpPluginAction.update();
    myMoveDownPluginAction.update();

    myFscSettings.setListener(
        new LinkListener() {
          public void linkSelected(LinkLabel aSource, Object aLinkData) {
            ShowSettingsUtil.getInstance()
                .showSettingsDialog(myEditorContext.getProject(), "Scala Compiler");
          }
        },
        null);
  }
 private CompilerPluginsTableModel getPluginsModel() {
   return (CompilerPluginsTableModel) tablePlugins.getModel();
 }