@Nullable
  @Override
  protected JComponent createCenterPanel() {
    final JPanel content = new JPanel(new BorderLayout());

    final JPanel topLine = new JPanel(new BorderLayout());
    content.setBorder(
        IdeBorderFactory.createTitledBorder(
            "Thrift compiler " + myGenerator.getType().name(), false));
    myOutputFolderChooser.addBrowseFolderListener(
        new TextBrowseFolderListener(
            FileChooserDescriptorFactory.createSingleFolderDescriptor(), myProject) {
          @Nullable
          @Override
          protected VirtualFile getInitialFile() {
            if (myGenerator.getOutputDir() != null) {
              return LocalFileFinder.findFile(myGenerator.getOutputDir());
            } else {
              return null;
            }
          }

          @Override
          protected void onFileChosen(@NotNull VirtualFile chosenFile) {
            final String absolutePath = VfsUtil.virtualToIoFile(chosenFile).getAbsolutePath();
            myOutputFolderChooser.setText(absolutePath);
          }
        });

    topLine.add(new JBLabel("Output folder:"), BorderLayout.WEST);
    topLine.add(myOutputFolderChooser, BorderLayout.CENTER);

    content.add(topLine, BorderLayout.NORTH);

    final JPanel options = new JPanel(new BorderLayout());
    content.add(options, BorderLayout.CENTER);

    myPane = AOptionPane.get(myGenerator.getType());
    if (myPane != null) {
      options.setBorder(IdeBorderFactory.createTitledBorder("Additional options"));
      options.add(myPane.getPanel());
      myPane.setValues(myGenerator);
    } else {
      options.setBorder(null);
    }

    final String url = myGenerator.getOutputDir();
    final VirtualFile file =
        url == null ? null : VirtualFileManager.getInstance().findFileByUrl(url);
    myOutputFolderChooser.setText(file == null ? VfsUtil.urlToPath(url) : file.getPath());

    return content;
  }
 @NotNull
 @Override
 public ThriftCompilerOptions createCopy() {
   final ThriftCompilerOptions s = new ThriftCompilerOptions();
   final List<Generator> list = s.generators;
   list.clear();
   try {
     for (Generator g : generators) {
       list.add(g.clone());
     }
   } catch (CloneNotSupportedException e) {
     throw new RuntimeException("Failed to clone generator settings");
   }
   s.includes.clear();
   s.includes.addAll(includes);
   s.cleanOutput = cleanOutput;
   return s;
 }
  public Generator getModifiedObject() {
    if (isOK()) {
      if (myPane != null) {
        myPane.readValuesTo(myGenerator);
      }
      final String dir = StringUtils.trimToNull(myOutputFolderChooser.getText());
      assert dir != null;

      final String url = VfsUtil.pathToUrl(dir);
      final VirtualFile file = VirtualFileManager.getInstance().findFileByUrl(url);

      myGenerator.setOutputDir(file == null ? url : file.getUrl());
      return myGenerator;
    } else {
      return null;
    }
  }