public KotlinCompilerConfigurableTab(
      Project project,
      CommonCompilerArguments commonCompilerArguments,
      K2JSCompilerArguments k2jsCompilerArguments,
      CompilerSettings compilerSettings,
      @Nullable KotlinCompilerWorkspaceSettings compilerWorkspaceSettings) {
    this.project = project;
    this.commonCompilerArguments = commonCompilerArguments;
    this.k2jsCompilerArguments = k2jsCompilerArguments;
    this.compilerSettings = compilerSettings;
    this.compilerWorkspaceSettings = compilerWorkspaceSettings;

    additionalArgsOptionsField.attachLabel(additionalArgsLabel);

    setupFileChooser(
        labelForOutputPrefixFile,
        outputPrefixFile,
        KotlinBundle.message("kotlin.compiler.js.option.output.prefix.browse.title"));
    setupFileChooser(
        labelForOutputPostfixFile,
        outputPostfixFile,
        KotlinBundle.message("kotlin.compiler.js.option.output.postfix.browse.title"));

    labelForOutputDirectory.setLabelFor(outputDirectory);
    copyRuntimeFilesCheckBox.addChangeListener(
        new ChangeListener() {
          @Override
          public void stateChanged(@NotNull ChangeEvent e) {
            outputDirectory.setEnabled(copyRuntimeFilesCheckBox.isSelected());
            labelForOutputDirectory.setEnabled(copyRuntimeFilesCheckBox.isSelected());
          }
        });

    fillModuleKindList();

    if (compilerWorkspaceSettings == null) {
      keepAliveCheckBox.setVisible(false);
      k2jvmPanel.setVisible(false);
    }
  }