@Override
  public JComponent createComponentImpl() {
    myInheritCompilerOutput = new JRadioButton(JavaUiBundle.message("project.inherit.compile.output.path"));
    myPerModuleCompilerOutput = new JRadioButton(JavaUiBundle.message("project.module.compile.output.path"));
    ButtonGroup group = new ButtonGroup();
    group.add(myInheritCompilerOutput);
    group.add(myPerModuleCompilerOutput);

    myOutputPathPanel = createOutputPathPanel(JavaUiBundle.message("module.paths.output.title"), new CommitPathRunnable() {
      @Override
      public void saveUrl(String url) {
        if (myInheritCompilerOutput.isSelected()) return;  //do not override settings if any
        getCompilerExtension().setCompilerOutputPath(url);
        fireModuleConfigurationChanged();
      }
    });
    myTestsOutputPathPanel = createOutputPathPanel(JavaUiBundle.message("module.paths.test.output.title"), new CommitPathRunnable() {
      @Override
      public void saveUrl(String url) {
        if (myInheritCompilerOutput.isSelected()) return; //do not override settings if any
        getCompilerExtension().setCompilerOutputPathForTests(url);
        fireModuleConfigurationChanged();
      }
    });

    myCbExcludeOutput = new JCheckBox(JavaUiBundle.message("module.paths.exclude.output.checkbox"), getCompilerExtension().isExcludeOutput());
    myCbExcludeOutput.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(final ActionEvent e) {
        getCompilerExtension().setExcludeOutput(myCbExcludeOutput.isSelected());
        fireModuleConfigurationChanged();
      }
    });

    final JPanel outputPathsPanel = new JPanel(new GridBagLayout());


    outputPathsPanel.add(myInheritCompilerOutput, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 2, 1, 1.0, 0.0,
                                                                         GridBagConstraints.WEST, GridBagConstraints.NONE,
                                                                         JBUI.insets(6, 0, 0, 4), 0, 0));
    outputPathsPanel.add(myPerModuleCompilerOutput, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 2, 1, 1.0, 0.0,
                                                                           GridBagConstraints.WEST, GridBagConstraints.NONE,
                                                                           JBUI.insets(6, 0, 0, 4), 0, 0));

    myOutputLabel = new JLabel(JavaUiBundle.message("module.paths.output.label"));
    outputPathsPanel.add(myOutputLabel, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
                                                               GridBagConstraints.NONE, JBUI.insets(6, 12, 0, 4), 0, 0));
    myOutputLabel.setLabelFor(myOutputPathPanel.getTextField());
    outputPathsPanel.add(myOutputPathPanel, new GridBagConstraints(1, GridBagConstraints.RELATIVE, 2, 1, 1.0, 0.0, GridBagConstraints.WEST,
                                                                   GridBagConstraints.HORIZONTAL, JBUI.insets(6, 4, 0, 0), 0, 0));

    myTestOutputLabel = new JLabel(JavaUiBundle.message("module.paths.test.output.label"));
    outputPathsPanel.add(myTestOutputLabel, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.EAST,
                                                                   GridBagConstraints.NONE, JBUI.insets(6, 16, 0, 4), 0, 0));
    myTestOutputLabel.setLabelFor(myTestsOutputPathPanel.getTextField());
    outputPathsPanel.add(myTestsOutputPathPanel, new GridBagConstraints(1, GridBagConstraints.RELATIVE, 2, 1, 1.0, 0.0,
                                                                        GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
                                                                        JBUI.insets(6, 4, 0, 0), 0, 0));

    outputPathsPanel.add(myCbExcludeOutput, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 2, 1, 1.0, 0.0, GridBagConstraints.WEST,
                                                                   GridBagConstraints.NONE, JBUI.insets(6, 16, 0, 0), 0, 0));

    final boolean outputPathInherited = getCompilerExtension().isCompilerOutputPathInherited();
    myInheritCompilerOutput.setSelected(outputPathInherited);
    myPerModuleCompilerOutput.setSelected(!outputPathInherited);

    // fill with data
    updateOutputPathPresentation();

    //compiler settings
    enableCompilerSettings(!outputPathInherited);

    final ActionListener listener = new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        enableCompilerSettings(!myInheritCompilerOutput.isSelected());
      }
    };

    myInheritCompilerOutput.addActionListener(listener);
    myPerModuleCompilerOutput.addActionListener(listener);

    final JPanel panel = new JPanel(new BorderLayout());
    panel.setBorder(IdeBorderFactory.createTitledBorder(JavaUiBundle.message("project.roots.output.compiler.title")));
    panel.add(outputPathsPanel, BorderLayout.NORTH);
    return panel;
  }
@Override
  public JComponent createComponentImpl()